Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 29.10.2013, 20:15
Luckduck Luckduck вне форума
Прохожий
 
Регистрация: 29.10.2013
Сообщения: 5
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Помогите устронить ошибку

Совсем недавно начал работать с 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  
Старый 29.10.2013, 20:47
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Цитата:
ошибка синего цвета
Эпик. Цветовая дифференциация ошибок - это что-то новенькое...

Предполагаю, что 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  
Старый 29.10.2013, 21:03
Luckduck Luckduck вне форума
Прохожий
 
Регистрация: 29.10.2013
Сообщения: 5
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от Bargest
Эпик. Цветовая дифференциация ошибок - это что-то новенькое...

Предполагаю, что y <> 1.5 не срабатывает потому, что он и не равен 1.5. Для float-значений лучше использовать сравнение с погрешностью:
Код:
const eps = 0.00001;
...
if (y > 1.5 - eps) and (y < 1.5 + eps) then

Спасибо за отклик. Ну в седьмой версии если ошибка типо скобку забыл - то она красная, а я если типо логарифм отрицательного числа - то синяя)

y<>1.5 это лишь пример. Не работает и логарифм нуль (x=y) и всё прочее, что противоречит законам математики) Программа выполняется, но при нажатии 'Выполнить' вылетает ошибка, возвращающая к коду
Ответить с цитированием
  #4  
Старый 29.10.2013, 21:07
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Кстати, в коде выполняется вся арифметика вне зависимости от того, каковы результаты проверок.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
Этот пользователь сказал Спасибо Bargest за это полезное сообщение:
Luckduck (29.10.2013)
  #5  
Старый 29.10.2013, 22:03
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

После
Код:
edit3.Text:='Нет решения';
напишите
Код:
exit;
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
Этот пользователь сказал Спасибо PhoeniX за это полезное сообщение:
Luckduck (29.10.2013)
  #6  
Старый 29.10.2013, 22:39
Luckduck Luckduck вне форума
Прохожий
 
Регистрация: 29.10.2013
Сообщения: 5
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от PhoeniX
После
Код:
edit3.Text:='Нет решения';
напишите
Код:
exit;
Спасибо огромное! Помогло))
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 20:08.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter