|
Внимание! Теперь для входа на форум необходимо вводить единый пароль регистрации сервисов sibnet.ru!
Здравствуйте, гость ( Вход | Регистрация )
 Сейчас обсуждают
 
| |
|
  |
Задачка по C#, Нужна маленькая помощь |
|
|
vano11 |
23.11.2014, 23:14
|

I AM CORNHOLIO!!!
Группа: Sibnet-club
Сообщений: 500
Регистрация: 6.6.2008
Из: Барнаул
Пользователь №: 35 870
Репутация: 7

|
Задали задачку в ВУЗе по C#. Программу я сделал, но она работает не совсем правильно. Укажите если можно где косякнулся. Когда "х" вводится действительное, а "а" целое, то прога почему-то выдаёт ошибку. А если ввести оба числа целые, то все работает. Задача: Ввести целое число N > 0 и вещественное a > 0. Последовательность вещественных чисел определяется следующим образом xn+1=(xn+a/xn)/2. Считая x0=a вывести первые N членов последовательности. Такой способ применяли еще в древнем Вавилоне для вычисления квадратного корня числа a. После выдачи последовательности распечатать значение квадратного корня из a, вычисленное стандартной функцией. Код:Код using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;
namespace ConsoleApplication7 { class Program { static void Main(string[] args) { double x, a, y; int n; Console.WriteLine("Введите n"); n = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Введите a"); a = Convert.ToDouble(Console.ReadLine()); if (n > 0) { x = a; for (a = 1; a <= n; a++) { x = (x + a / x) / 2; Console.WriteLine("x={0}", x); } y = Math.Sqrt(n); Console.WriteLine("Корень:{0}", y); } else Console.WriteLine("n<0!!!"); Console.ReadKey();
} } } Сообщение отредактировал vano11 - 24.11.2014, 11:01
|
|
|
|
shouhei |
24.11.2014, 10:10
|

Himmelsstürmer
Группа: Events and facts club
Сообщений: 33 866
Регистрация: 2.4.2008
Из: Caught somewhere in time
Пользователь №: 27 739
Репутация: 1422

|
Цитата(vano11 @ 23.11.2014, 23:14)  Задали задачку в ВУЗе по C#. Программу я сделал, но она работает не совсем правильно. Укажите если можно где косякнулся. Когда "х" вводится действительное, а "а" целое, то прога почему-то выдаёт ошибку. А если ввести оба числа целые, то все работает.
Какое такое x? Если у тебя вводится n и a, а x - вычисляется, по условиям задачи. И освой тег форума [ code ]. Очень помогает. Ещё, говорят, помогает правильное наименование переменных. У тебя тот код, что ты привёл работать правильно не будет в любом случае. Из-за чего? Из-за строки Код for (a = 1; a <= n; a++) , например.
|
|
|
|
vano11 |
24.11.2014, 11:04
|

I AM CORNHOLIO!!!
Группа: Sibnet-club
Сообщений: 500
Регистрация: 6.6.2008
Из: Барнаул
Пользователь №: 35 870
Репутация: 7

|
Отредактировал пост. Да, я ошибся, там n вводится. Я так полагаю что-то с шагом напутал в указанной строчке. Ладно вечером проверю. Спасибо за подсказку. Ах да, сразу на вскидку будет наверное строчка такая ещё: Код y = Math.Sqrt(a); вместо Код y = Math.Sqrt(n); Сообщение отредактировал vano11 - 24.11.2014, 11:08
|
|
|
|
shouhei |
24.11.2014, 11:11
|

Himmelsstürmer
Группа: Events and facts club
Сообщений: 33 866
Регистрация: 2.4.2008
Из: Caught somewhere in time
Пользователь №: 27 739
Репутация: 1422

|
Цитата(vano11 @ 24.11.2014, 11:04)  Отредактировал пост. Да, я ошибся, там n вводится. Я так полагаю что-то с шагом напутал в указанной строчке. Ладно вечером проверю. Спасибо за подсказку.
Прямым текстом: у тебя a участвует в вычислении выражения. А n - нет. Поэтому a - нельзя использовать в качестве счётчика цикла. Чем не устроило классическое i?
» Спасибо сказали: «
|
|
|
|
vano11 |
25.11.2014, 0:48
|

I AM CORNHOLIO!!!
Группа: Sibnet-club
Сообщений: 500
Регистрация: 6.6.2008
Из: Барнаул
Пользователь №: 35 870
Репутация: 7

|
Код for (int i = 1; i <= n; i++) так? Что-то мало что поменялось.
|
|
|
|
shouhei |
25.11.2014, 14:05
|

Himmelsstürmer
Группа: Events and facts club
Сообщений: 33 866
Регистрация: 2.4.2008
Из: Caught somewhere in time
Пользователь №: 27 739
Репутация: 1422

|
Код x = a; for (i = 1; i <= n; i++) { x = (x + a / x) / 2; Console.WriteLine("x={0}", x); } y = Math.Sqrt(a); Console.WriteLine("Корень:{0}", y); А что ты хочешь, чтобы поменялось? Вот попробуй теперь ввести а=2 и n=100. У тебя должно быть 100 строчек различных x и последняя строка с х приблизительно равна строке с надписью "Корень:"
|
|
|
|
vano11 |
25.11.2014, 22:51
|

I AM CORNHOLIO!!!
Группа: Sibnet-club
Сообщений: 500
Регистрация: 6.6.2008
Из: Барнаул
Пользователь №: 35 870
Репутация: 7

|
Цитата(shouhei @ 25.11.2014, 13:05)  Код x = a; for (i = 1; i <= n; i++) { x = (x + a / x) / 2; Console.WriteLine("x={0}", x); } y = Math.Sqrt(a); Console.WriteLine("Корень:{0}", y); А что ты хочешь, чтобы поменялось? Вот попробуй теперь ввести а=2 и n=100. У тебя должно быть 100 строчек различных x и последняя строка с х приблизительно равна строке с надписью "Корень:" Да, так и выводит. 100 строчек "х" и строка "Корень": с этим же значением. Но смысл в том, что вводимое число "а" должно быть действительного типа, а не целого, в отличии от "n". Просто когда я ввожу "a" действительно типа число, то у меня VisualStudio выводит сообщение: "Необработанное исключение типа "System.FormatException" в mscorlib.dll Дополнительные сведения: Входная строка имела неверный формат." Цитата(novokuz10 @ 25.11.2014, 16:16)  А кто нибудь может подсказать - есть калькулятор HP 12c - вроде как бы программируемый, можно на нем эту задачу решить и сколько это займет времени? Например на прадедушке мк 52 это было просто реализовать, но ждать бы пришлось долго - для а=2 и n=100 потребовалось бы ~1000 секунд.
У меня нет ответа на этот вопрос. Возможно кто-нибудь откликнется. Сообщение отредактировал vano11 - 25.11.2014, 22:54
» Спасибо сказали: «
|
|
|
|
shouhei |
27.11.2014, 15:01
|

Himmelsstürmer
Группа: Events and facts club
Сообщений: 33 866
Регистрация: 2.4.2008
Из: Caught somewhere in time
Пользователь №: 27 739
Репутация: 1422

|
Цитата(novokuz10 @ 25.11.2014, 17:16)  А кто нибудь может подсказать - есть калькулятор HP 12c - вроде как бы программируемый, можно на нем эту задачу решить и сколько это займет времени?
Можно, разрешаю. Я даже больше чем уверен, что там вообще нет никаких сложностей с решением. Цитата(vano11 @ 25.11.2014, 22:51)  Да, так и выводит. 100 строчек "х" и строка "Корень": с этим же значением. Но смысл в том, что вводимое число "а" должно быть действительного типа, а не целого, в отличии от "n". Просто когда я ввожу "a" действительно типа число, то у меня VisualStudio выводит сообщение:
А региональные настройки кто будет проверять? То есть, если у тебя стоит в региональных настройках винды, что разделитель целой и дробной части - запятая, значит тебе нужно вводить действительное число с разделителем целой и дробной части - запятой. Если нет - то точкой или тем символом, что ты поставил. Или воспользоваться методом Convert.ToDouble Method (String, IFormatProvider), который тебе позволит задать как именно ты будешь отделять целую часть числа от дробной, когда у тебя число в виде строки.
» Спасибо сказали: «
|
|
|
|
novokuz10 |
27.11.2014, 23:08
|
Любит поговорить
Группа: Пользователи
Сообщений: 458
Регистрация: 8.10.2014
Пользователь №: 520 641
Репутация: 3

|
Цитата(shouhei @ 27.11.2014, 15:01)  Можно, разрешаю. Я даже больше чем уверен, что там вообще нет никаких сложностей с решением.
Может кому - нибудь будет интересно: » Спойлер (нажмите, чтобы прочесть) « 2 заносим в регистр 0: 2 STO 0 100 заносим в регистр 1: 100 STO 1 сама программа: 01 RCL 0 02 STO 2 03 1 04 STO 3 05 RCL 0 06 RCL 2 07 / 08 RCL 2 09 + 10 2 11 / 12 STO 2 13 RCL 3 14 1 15 + 16 STO 3 17 RCL 1 18 X><Y 19 G X<=Y 20 G GTO 05 21 RCL 2 Сообщение отредактировал novokuz10 - 28.11.2014, 8:02
» Спасибо сказали: «
|
|
|
|
|
  |
1 чел. просматривают этот форум (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|