Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.06.2012, 22:54   #1
RIOs
Пользователь
 
Регистрация: 28.12.2011
Сообщений: 49
По умолчанию Проблема в выводе ответа (C#)

В примере (который высчитывает z). Нужно считать ik до тех пор, пока значение под знаком логарифма не будет 0. (т.е как я понял пока z не будет равен 0).

Код:
class Program
    {
        static void Main(string[] args)
        {
            double x, h, z, ik;
             h = -0.2; ik = 0;
             z = -1; x = 2;
            while (z>0)
            {
                x = x + h;
                z = 1 / Math.Log(Math.Pow(x, 2) - 0.5 * x);
                ik++;
                if (z <= 0) Console.WriteLine("икс на этом шаге{0}, кол-во{1}, z={2}",x, ik, z);
            }
        }
    }
В итоге writeline жалуется на перегруженный метод или как-то так. Какие-то преобразование типов делает и т.д
RIOs вне форума Ответить с цитированием
Старый 09.06.2012, 23:11   #2
MooNDeaR
В стагнации
Участник клуба
 
Аватар для MooNDeaR
 
Регистрация: 29.07.2011
Сообщений: 1,303
По умолчанию

Код:
. . .
z = -1; x = 2;
while (z>0)
. . .
Во-первых, цикл даже начаться не должен.

Цитата:
пока значение под знаком логарифма не будет 0.
Код:
z = 1 / Math.Log(Math.Pow(x, 2) - 0.5 * x);
Не проще ли проверять значение Math.Pow(x, 2) - 0.5 * x на равенство единице? (Ведь только в этом случае логарифм обращается в ноль, да и вообще так корректней, т.к. не придется заставлять программу делить на ноль). Интересней всего, что если этого никогда не случится, тогда получится бесконечный цикл.

Еще хотелось бы отметить, что ik у вас типа double, что вообще не особо-то не есть гуд, хоть и работает.

Цитата:
В итоге writeline жалуется на перегруженный метод или как-то так. Какие-то преобразование типов делает и т.д
Мой компиль ни слова не сказал, правда, как я и сказал, цикл даже не начался. Попытаюсь угадать, делали явно не вы.
E-mail: pashaworking@gmail.com | ICQ: 479914426 | Skype: moondearr
Понять, чего от тебя требует заказчик – это уже половина всей работы, а иногда и полностью выполненное задание.

Последний раз редактировалось MooNDeaR; 09.06.2012 в 23:14.
MooNDeaR вне форума Ответить с цитированием
Старый 09.06.2012, 23:39   #3
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
т.к. не придется заставлять программу делить на ноль
Он там не должен получаться, поскольку по замыслу х всегда отрицательная величина. Но все равно делить не обязательно
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 10.06.2012, 01:29   #4
RIOs
Пользователь
 
Регистрация: 28.12.2011
Сообщений: 49
По умолчанию

Всё. У меня теперь тоже компиль не ругается.
Делал-то я. А что тогда в while прописать? Может тогда лучше юзать цикл for и действительно проверять знаменатель на единицу?

тогда в цикле for второй параметр (до какого момента делать) что указать? и как выйти из цикла когда знаменатель будет равен 1?

Последний раз редактировалось Stilet; 10.06.2012 в 09:49.
RIOs вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с кодом при выводе сообщения Windlogon PHP 5 16.04.2012 10:17
Крестики-нолики.Проблема при выводе поля. kofeinshik Помощь студентам 2 23.12.2011 15:36
[Ajax]XMLHttpRequest проблема с получением ответа Geniy00 JavaScript, Ajax 1 27.05.2011 23:53
Проблема с деструктором при выводе массива WebbMan Общие вопросы C/C++ 6 28.03.2011 22:23
проблема при выводе с бинарного файла... xVxSeRGxVx Общие вопросы C/C++ 1 13.01.2010 19:08