Здравствуйте! С вашего позволения попрошу у вас совета в решении такой проблемы: Моя программа (в Делфи), вычисляет корни квадратного уравнения. Я затрудняюсь с добавлением этой проверки: if d=0 then... Подскажите, как правильно это вписать? И если можно, помогите с кнопочкой "Очистка", не представляю как её запрограммировать.
-TarasBer-
26.12.2010 5:17
Я просмотрел код unit1.pas в блокноте, ничего не понял. Что за Button1, Edit1? Почему нельзя давать компонентам человеческие имена? Проверка на то, что дискриминант нулевой, выглядит так: if abs(d) < eps then ... В качестве eps напиши что-то типа 1E-10 Это всё (вместо простого сравнения с нулём) из-за того, что погрешности вычислений могут привести к некоторому отклонению. Короче, прямо сравнивать вещественные числа нельзя. Очистка что должна делать? Если очищать поля ввода, то просто пиши labelResult.Caption := '';
Искатель
26.12.2010 19:28
Спасибо! Я в корне переделал код программы (это требование преподавателя!). Она сделана на трёх формах и вроде бы работает. Не пойму только, почему вычисляет результаты неправильно. Подскажите, пожалуйста, есть в ней ошибка?
Гость
26.12.2010 20:24
Ну блин.
((-b)+Sqrt(D))/2*a
Вот везде скобок наставил, кроме там, где нужно.
(-b+Sqrt(D))/(2*a)
И назови компоненты нормально (поле Name).
-TarasBer-
26.12.2010 20: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 21:39
Черт побери! До чего же приятно иметь дело с профессионалами!!! Супер! Работает как надо!
Уважаемые профи! Ну не понимаю я смысл этой строки, хоть убей: if abs(D) < 1E-9 then form2.panel2.caption:= ''. Если преподаватель будет спрашивать что означает сие, мне останется только блеять или мычать. Объясните, пожалуйста
volvo
26.12.2010 21:52
Цитата
мне останется только блеять или мычать
Не надо ни мычать, не блеять... Из-за погрешности представления вещественных чисел (Гугл знает об этом, если что), нельзя два вещественных числа сравнивать напрямую (оператором "="). Нужно проверить, не превышает ли модуль их разности некоего маленького значения. Вот ты и проверяешь модуль дискриминанта: если он меньше одной миллиардной (10-9), то можно в данном случае его считать нулем.
Искатель
26.12.2010 22:01
Спасибо! Если что, так и объясню. Представляю какие глаза будут у препода! Думаю он про это не знает!
Искатель
23.05.2011 16:26
Класс
TarasBer
23.05.2011 17:24
Так вставило, что до сих пор не отпустило?
Искатель
24.05.2011 1:11
Да нет, извините. Не в этом дело. Просто в одной из своих тем, хотел удалить кое-какой документ, являющийся коммерческой тайной, но видимо это невозможно. А тут просто хотел проверить, а оно вон как вышло.
TarasBer
24.05.2011 13:44
Потому что тут много придурков, которые сначала создаёт тему, отвечают в ней и так далее, а потом вдруг удаляют содержимое всех сообщений.
Искатель
24.05.2011 19:40
Грубо
Lapp
25.05.2011 3:30
Цитата(Искатель @ 24.05.2011 16:40)
Грубо
Искатель, ты зря принял это на свой счет. TarasBer просто сказал тебе причину, по которой время редактирования собственных мессаджей было сокращено до 8 часов (с начального в несколько дней), он не имел в виду тебя. И, кстати, он не совсем точно выразился - таких "придурков" не много, но они все же есть (прецеденты были).
Главный момент такой: написанный тобой мессадж принадлежит не тебе, а форуму. Редактирование - только для исправления опечаток и т.п. Всегда рекомендуется подумать, прежде чем отправить пост. И уж конечно, не следует помещать в него важную информацию для ограниченного круга лиц. В случае, если такое все же произошло (по недомыслию), советую обратиться к Администрации форума.
TarasBer
25.05.2011 13:25
> прециденты
Lapp
25.05.2011 14:42
Цитата(TarasBer @ 25.05.2011 10:25)
> прециденты
спасибо, исправил, +1
Не ошибается тот, кто ничего не делает )) Не подумай, что это про тебя, Тарас - у тебя алиби: > .. которые сначала создаёт тему, ..
buy cialis online canadian pharm
6.09.2021 9:43
the buy cialis
lasix pay online american expres
25.09.2021 4:54
buy apcalis oral jelly next day delivery
nishaknapp
16.01.2023 6:52
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
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.