|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Помогите устронить ошибку
Совсем недавно начал работать с delphi, так что ошибка явно покажется вам элементарной)
Вот задание: U = min(max(a, b), c), где a:=sin(x+sqr(y))+exp(x+1); b:=ln(abs(x-y))+abs(x-y); c:=(sqr(x)+3*exp(3*ln(y)+2))/(y-1.5); при x-y>0, y-1.5<>0 Нужно найти U. Вот моя программа Код:
var Form1: TForm1; x,y,a,b,c,t,u:real; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin x:=strtofloat(edit1.Text); y:=strtofloat(edit2.Text); If (x>y) and ((y) <> (1.5)) then edit3.text:=Format('%10.3f',[u]) else begin edit3.Text:='Нет решения'; end; a:=sin(x+sqr(y))+exp(x+1); b:=ln(abs(x-y))+abs(x-y); c:=(sqr(x)+3*exp(3*ln(y)+2))/(y-1.5); If a>b then t:=a else t:=b; If t<c then u:=t else u:=c; end; end. Проблема в том, что если y=1.5, то выскакивает ошибка синего цвета (знаменатель равен нулю) и лишь затем U принимает значение 'Нет решения'. В первом же условии я написал, что х не должен быть равен 1,5. Почему выскакивает ошибка и как её устронить?? |
#2
|
||||
|
||||
Цитата:
Предполагаю, что y <> 1.5 не срабатывает потому, что он и не равен 1.5. Для float-значений лучше использовать сравнение с погрешностью: Код:
const eps = 0.00001; ... if (y > 1.5 - eps) and (y < 1.5 + eps) then jmp $ ; Happy End! The Cake Is A Lie. |
Этот пользователь сказал Спасибо Bargest за это полезное сообщение: | ||
Luckduck (29.10.2013)
|
#3
|
|||
|
|||
Цитата:
Спасибо за отклик. Ну в седьмой версии если ошибка типо скобку забыл - то она красная, а я если типо логарифм отрицательного числа - то синяя) y<>1.5 это лишь пример. Не работает и логарифм нуль (x=y) и всё прочее, что противоречит законам математики) Программа выполняется, но при нажатии 'Выполнить' вылетает ошибка, возвращающая к коду |
#4
|
||||
|
||||
Кстати, в коде выполняется вся арифметика вне зависимости от того, каковы результаты проверок.
jmp $ ; Happy End! The Cake Is A Lie. |
Этот пользователь сказал Спасибо Bargest за это полезное сообщение: | ||
Luckduck (29.10.2013)
|
#5
|
||||
|
||||
После
Код:
edit3.Text:='Нет решения'; Код:
exit; Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
Этот пользователь сказал Спасибо PhoeniX за это полезное сообщение: | ||
Luckduck (29.10.2013)
|
#6
|
|||
|
|||
Цитата:
|