Помощь - Поиск - Пользователи - Календарь
Полная версия: Решение квадратного уравнения
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Делфи
Искатель
Здравствуйте!
С вашего позволения попрошу у вас совета в решении такой проблемы:
Моя программа (в Делфи), вычисляет корни квадратного уравнения.
Я затрудняюсь с добавлением этой проверки: if d=0 then...
Подскажите, как правильно это вписать?
И если можно, помогите с кнопочкой "Очистка", не представляю как её запрограммировать.
-TarasBer-
Я просмотрел код unit1.pas в блокноте, ничего не понял.
Что за Button1, Edit1?
Почему нельзя давать компонентам человеческие имена?
Проверка на то, что дискриминант нулевой, выглядит так: if abs(d) < eps then ...
В качестве eps напиши что-то типа 1E-10
Это всё (вместо простого сравнения с нулём) из-за того, что погрешности вычислений могут привести к некоторому отклонению. Короче, прямо сравнивать вещественные числа нельзя.
Очистка что должна делать? Если очищать поля ввода, то просто пиши labelResult.Caption := '';
Искатель
Спасибо!
Я в корне переделал код программы (это требование преподавателя!).
Она сделана на трёх формах и вроде бы работает. Не пойму только, почему вычисляет результаты неправильно.
Подскажите, пожалуйста, есть в ней ошибка?
Гость
Ну блин.

((-b)+Sqrt(D))/2*a

Вот везде скобок наставил, кроме там, где нужно.

(-b+Sqrt(D))/(2*a)

И назови компоненты нормально (поле Name).
-TarasBer-
Да у тебя вообще в обработчике кнопки логика неверная.
Если дискриминант меньше нуля, то зачем показывать вторую форму?
И зачем показывать форму до изменения её содержимого?

Поменяй тот кусок на



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;


Искатель
Черт побери! До чего же приятно иметь дело с профессионалами!!! Супер! Работает как надо!

Уважаемые профи! Ну не понимаю я смысл этой строки, хоть убей: if abs(D) < 1E-9 then form2.panel2.caption:= ''.
Если преподаватель будет спрашивать что означает сие, мне останется только блеять или мычать.
Объясните, пожалуйста
volvo
Цитата
мне останется только блеять или мычать
Не надо ни мычать, не блеять... Из-за погрешности представления вещественных чисел (Гугл знает об этом, если что), нельзя два вещественных числа сравнивать напрямую (оператором "="). Нужно проверить, не превышает ли модуль их разности некоего маленького значения. Вот ты и проверяешь модуль дискриминанта: если он меньше одной миллиардной (10-9), то можно в данном случае его считать нулем.
Искатель
Спасибо! Если что, так и объясню. Представляю какие глаза будут у препода! Думаю он про это не знает!
Искатель
Класс
TarasBer
Так вставило, что до сих пор не отпустило?
Искатель
Да нет, извините. Не в этом дело. Просто в одной из своих тем, хотел удалить кое-какой документ, являющийся коммерческой тайной, но видимо это невозможно. А тут просто хотел проверить, а оно вон как вышло.
TarasBer
Потому что тут много придурков, которые сначала создаёт тему, отвечают в ней и так далее, а потом вдруг удаляют содержимое всех сообщений.
Искатель
Грубо
Lapp
Цитата(Искатель @ 24.05.2011 16:40) *
Грубо

Искатель, ты зря принял это на свой счет. TarasBer просто сказал тебе причину, по которой время редактирования собственных мессаджей было сокращено до 8 часов (с начального в несколько дней), он не имел в виду тебя. И, кстати, он не совсем точно выразился - таких "придурков" не много, но они все же есть (прецеденты были).

Главный момент такой: написанный тобой мессадж принадлежит не тебе, а форуму. Редактирование - только для исправления опечаток и т.п. Всегда рекомендуется подумать, прежде чем отправить пост. И уж конечно, не следует помещать в него важную информацию для ограниченного круга лиц. В случае, если такое все же произошло (по недомыслию), советую обратиться к Администрации форума.
TarasBer
> прециденты
Lapp
Цитата(TarasBer @ 25.05.2011 10:25) *
> прециденты

спасибо, исправил, +1

Не ошибается тот, кто ничего не делает ))
Не подумай, что это про тебя, Тарас - у тебя алиби:
> .. которые сначала создаёт тему, ..
smile.gif
buy cialis online canadian pharm
the buy cialis
lasix pay online american expres
buy apcalis oral jelly next day delivery
nishaknapp
Why not settling on games that is fun and at the same time your earning. Well it'll make suspense because the game is well but dude just try it and it gave me hope while pandemic is real rn. How to Spot a Fraudulent and Rogue Online Casino
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.