Здравствуйте! С вашего позволения попрошу у вас совета в решении такой проблемы: Моя программа (в Делфи), вычисляет корни квадратного уравнения. Я затрудняюсь с добавлением этой проверки: if d=0 then... Подскажите, как правильно это вписать? И если можно, помогите с кнопочкой "Очистка", не представляю как её запрограммировать.
-TarasBer-
26.12.2010 1:17
Я просмотрел код unit1.pas в блокноте, ничего не понял. Что за Button1, Edit1? Почему нельзя давать компонентам человеческие имена? Проверка на то, что дискриминант нулевой, выглядит так: if abs(d) < eps then ... В качестве eps напиши что-то типа 1E-10 Это всё (вместо простого сравнения с нулём) из-за того, что погрешности вычислений могут привести к некоторому отклонению. Короче, прямо сравнивать вещественные числа нельзя. Очистка что должна делать? Если очищать поля ввода, то просто пиши labelResult.Caption := '';
Искатель
26.12.2010 15:28
Спасибо! Я в корне переделал код программы (это требование преподавателя!). Она сделана на трёх формах и вроде бы работает. Не пойму только, почему вычисляет результаты неправильно. Подскажите, пожалуйста, есть в ней ошибка?
Гость
26.12.2010 16:24
Ну блин.
((-b)+Sqrt(D))/2*a
Вот везде скобок наставил, кроме там, где нужно.
(-b+Sqrt(D))/(2*a)
И назови компоненты нормально (поле Name).
-TarasBer-
26.12.2010 16:27
Да у тебя вообще в обработчике кнопки логика неверная. Если дискриминант меньше нуля, то зачем показывать вторую форму? И зачем показывать форму до изменения её содержимого?
Поменяй тот кусок на
if D<0 then form3.show else begin form2.panel1.caption:=FloatTostr(((-b)+Sqrt(D))/(2*a)); if abs(D) < 1E-9 then form2.panel2.caption:= '' else form2.panel2.caption:=FloatTostr(((-b)-Sqrt(D))/(2*a)); form2.show; end;
Искатель
26.12.2010 17:39
Черт побери! До чего же приятно иметь дело с профессионалами!!! Супер! Работает как надо!
Уважаемые профи! Ну не понимаю я смысл этой строки, хоть убей: if abs(D) < 1E-9 then form2.panel2.caption:= ''. Если преподаватель будет спрашивать что означает сие, мне останется только блеять или мычать. Объясните, пожалуйста
volvo
26.12.2010 17:52
Цитата
мне останется только блеять или мычать
Не надо ни мычать, не блеять... Из-за погрешности представления вещественных чисел (Гугл знает об этом, если что), нельзя два вещественных числа сравнивать напрямую (оператором "="). Нужно проверить, не превышает ли модуль их разности некоего маленького значения. Вот ты и проверяешь модуль дискриминанта: если он меньше одной миллиардной (10-9), то можно в данном случае его считать нулем.
Искатель
26.12.2010 18:01
Спасибо! Если что, так и объясню. Представляю какие глаза будут у препода! Думаю он про это не знает!
Искатель
23.05.2011 12:26
Класс
TarasBer
23.05.2011 13:24
Так вставило, что до сих пор не отпустило?
Искатель
23.05.2011 21:11
Да нет, извините. Не в этом дело. Просто в одной из своих тем, хотел удалить кое-какой документ, являющийся коммерческой тайной, но видимо это невозможно. А тут просто хотел проверить, а оно вон как вышло.
TarasBer
24.05.2011 9:44
Потому что тут много придурков, которые сначала создаёт тему, отвечают в ней и так далее, а потом вдруг удаляют содержимое всех сообщений.
Искатель
24.05.2011 15:40
Грубо
Lapp
24.05.2011 23:30
Цитата(Искатель @ 24.05.2011 16:40)
Грубо
Искатель, ты зря принял это на свой счет. TarasBer просто сказал тебе причину, по которой время редактирования собственных мессаджей было сокращено до 8 часов (с начального в несколько дней), он не имел в виду тебя. И, кстати, он не совсем точно выразился - таких "придурков" не много, но они все же есть (прецеденты были).
Главный момент такой: написанный тобой мессадж принадлежит не тебе, а форуму. Редактирование - только для исправления опечаток и т.п. Всегда рекомендуется подумать, прежде чем отправить пост. И уж конечно, не следует помещать в него важную информацию для ограниченного круга лиц. В случае, если такое все же произошло (по недомыслию), советую обратиться к Администрации форума.
TarasBer
25.05.2011 9:25
> прециденты
Lapp
25.05.2011 10:42
Цитата(TarasBer @ 25.05.2011 10:25)
> прециденты
спасибо, исправил, +1
Не ошибается тот, кто ничего не делает )) Не подумай, что это про тебя, Тарас - у тебя алиби: > .. которые сначала создаёт тему, ..
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.