Авторизируйтесь,
чтобы продолжить
Некоторые функции доступны только зарегистрированным пользователям
Неправильный логин или пароль

Внимание! Теперь для входа на форум необходимо вводить единый пароль регистрации сервисов sibnet.ru!

Здравствуйте, гость ( Вход | Регистрация )



 
Ответить в эту темуОткрыть новую тему
> Задачка по C#, Нужна маленькая помощь
vano11
сообщение 23.11.2014, 23:14
Сообщение #1


I AM CORNHOLIO!!!
Group Icon


Группа: 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
Сообщение #2


Himmelsstürmer
Group Icon


Группа: Супермодераторы
Сообщений: 33 359
Регистрация: 2.4.2008
Из: Caught somewhere in time
Пользователь №: 27 739



Репутация:   1415  


Цитата(vano11 @ 23.11.2014, 23:14) *

Задали задачку в ВУЗе по C#. Программу я сделал, но она работает не совсем правильно. Укажите если можно где косякнулся. Когда "х" вводится действительное, а "а" целое, то прога почему-то выдаёт ошибку. А если ввести оба числа целые, то все работает.


Какое такое x?

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


I AM CORNHOLIO!!!
Group Icon


Группа: 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
Сообщение #4


Himmelsstürmer
Group Icon


Группа: Супермодераторы
Сообщений: 33 359
Регистрация: 2.4.2008
Из: Caught somewhere in time
Пользователь №: 27 739



Репутация:   1415  


Цитата(vano11 @ 24.11.2014, 11:04) *

Отредактировал пост. Да, я ошибся, там n вводится. Я так полагаю что-то с шагом напутал в указанной строчке. Ладно вечером проверю. Спасибо за подсказку.


Прямым текстом: у тебя a участвует в вычислении выражения. А n - нет. Поэтому a - нельзя использовать в качестве счётчика цикла. Чем не устроило классическое i?


» Спасибо сказали: «
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
vano11
сообщение 25.11.2014, 0:48
Сообщение #5


I AM CORNHOLIO!!!
Group Icon


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



Репутация:   7  


Код
for (int i = 1; i <= n; i++)
так?
Что-то мало что поменялось.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
shouhei
сообщение 25.11.2014, 14:05
Сообщение #6


Himmelsstürmer
Group Icon


Группа: Супермодераторы
Сообщений: 33 359
Регистрация: 2.4.2008
Из: Caught somewhere in time
Пользователь №: 27 739



Репутация:   1415  


Код
                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 и последняя строка с х приблизительно равна строке с надписью "Корень:"
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
novokuz10
сообщение 25.11.2014, 17:16
Сообщение #7


Любит поговорить
Group Icon


Группа: Пользователи
Сообщений: 458
Регистрация: 8.10.2014
Пользователь №: 520 641



Репутация:   3  


А кто нибудь может подсказать - есть калькулятор HP 12c - вроде как бы программируемый, можно на нем эту задачу решить и сколько это займет времени? Например на прадедушке мк 52 это было просто реализовать, но ждать бы пришлось долго - для а=2 и n=100 потребовалось бы ~1000 секунд.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
vano11
сообщение 25.11.2014, 22:51
Сообщение #8


I AM CORNHOLIO!!!
Group Icon


Группа: 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
Сообщение #9


Himmelsstürmer
Group Icon


Группа: Супермодераторы
Сообщений: 33 359
Регистрация: 2.4.2008
Из: Caught somewhere in time
Пользователь №: 27 739



Репутация:   1415  


Цитата(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
Сообщение #10


Любит поговорить
Group Icon


Группа: Пользователи
Сообщений: 458
Регистрация: 8.10.2014
Пользователь №: 520 641



Репутация:   3  


Цитата(shouhei @ 27.11.2014, 15:01) *

Можно, разрешаю. Я даже больше чем уверен, что там вообще нет никаких сложностей с решением.

Может кому - нибудь будет интересно:
» Спойлер (нажмите, чтобы прочесть) «


Сообщение отредактировал novokuz10 - 28.11.2014, 8:02


» Спасибо сказали: «
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
vano11
сообщение 28.11.2014, 0:56
Сообщение #11


I AM CORNHOLIO!!!
Group Icon


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



Репутация:   7  


Да действительно... По привычке у себя на компе ввод через точку дробной части вводил, а в политехе на компе настройки на запятую были...
Проверил, теперь всё работает нормально!
Огромное спасибо за совет и помощь!
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
1 чел. просматривают этот форум (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

Текстовая версия Сейчас: 21.7.2019, 3:04
Редакция: (383) 347-86-84

Техподдержка: (383) 347-22-44
help.sibnet.ru
Размещение рекламы:
тел: (383) 347-06-78, 347-10-50

Правила использования материалов