Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.07.2008, 07:40   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию Обработка исключительной ситуации

Код:
procedure TForm1.Button1Click(Sender: ToObject);
var
  a1:real;
  b1:real;
  c1:real;
  d1:real;
  k1:real;
  f1:real;
begin
  a1:=StrToFloat(Edit1.Text);
  b1:=StrToFloat(Edit2.Text);
  c1:=StrToFloat(Edit3.Text);
  d1:=StrToFloat(Edit4.Text);
  k1:=(a1+b1+c1+d1);
    f1:=(2*a1+3*b1+4*c1+5*d1)/k1;
      label1.Caption:=' '+FloatToStr(Round(f1)) ;

Этот коод работает хорошо, но возможны случаи, когда a1,b1,c1,d1 одновременно равны нулю, т.е. k1=0. Как мне написать применительно к этому коду прроцедуру обработки исключительной ситуации, т.е. деления на ноль? Потому что k1 может быть равным нулю. Мне надо, чтобы если k1=0, то остальные формулы в процедуре этой кнопки работали и считали, а та формула код которой приведен выше и в которой k1=0, ничего не выводила в ответ и не выводила ошибки о том, что деление на ноль. Подскажите пожалуйста, а то я сто раз пробовал написать обработку через try...except...end, но у меня не получалось((
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.

Последний раз редактировалось Stilet; 28.07.2008 в 09:47.
artemavd вне форума Ответить с цитированием
Старый 28.07.2008, 07:50   #2
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,547
По умолчанию

Тут не нужно использовать исключения. Пиши так:
Код:
procedure TForm1.Button1Click(Sender: ToObject);
var
a1:real;
b1:real;
c1:real;
d1:real;
k1:real;
f1:real;
begin
a1:=StrToFloat(Edit1.Text);
b1:=StrToFloat(Edit2.Text);
c1:=StrToFloat(Edit3.Text);
d1:=StrToFloat(Edit4.Text);
k1:=(a1+b1+c1+d1);
if k1 <> 0 then f1:=(2*a1+3*b1+4*c1+5*d1)/k1
else ShowMessage ('Деление на ноль!');
label1.Caption:=' '+FloatToStr(Round(f1)) ;
Arigato вне форума Ответить с цитированием
Старый 28.07.2008, 07:56   #3
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Спасибо конечно, Arigato за совет, но у меня одна кнопка должна производить расчет по четырем формулам! Причем последние три (кроме первой) имеет делитель в знаменателе, а значит он может быть равен нулю, если вводных данных нет. Как тогда быть?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 28.07.2008, 08:01   #4
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,547
По умолчанию

Проверять делить на равенство нулю.
Arigato вне форума Ответить с цитированием
Старый 28.07.2008, 08:07   #5
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: ToObject);
var
a1:real;
b1:real;
c1:real;
d1:real;
k1:real;
f1:real;
begin
try
a1:=StrToFloat(Edit1.Text);
b1:=StrToFloat(Edit2.Text);
c1:=StrToFloat(Edit3.Text);
d1:=StrToFloat(Edit4.Text);
k1:=(a1+b1+c1+d1);
f1:=(2*a1+3*b1+4*c1+5*d1)/k1;
label1.Caption:=' '+FloatToStr(Round(f1)) ;
except
  on EZeroDivide do showmessage('Попытка деления на ноль')
end;
SERG1980 вне форума Ответить с цитированием
Старый 28.07.2008, 08:08   #6
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Всем спасибо!) Попробую!)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 28.07.2008, 08:11   #7
beegl
instagram
Участник клуба
 
Аватар для beegl
 
Регистрация: 24.05.2008
Сообщений: 1,451
По умолчанию

и вот нашол не плохую статью по исключениям:
http://pblog.ru/?p=89
beegl вне форума Ответить с цитированием
Старый 28.07.2008, 09:48   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

хм. Всетки я бы заменил функу StrToFloat на TryStrToFloat или StrToFloatDef дабы предусмотреть еще и обработку случая нецифрового или неверного формата ввода в Эдиты.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.07.2008, 12:18   #9
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

А как вообще можно отключить проверку деления на ноль? Кажется какую то директиву надо поменять. Чтобы было так: ноль в знаменателе? ну и не надо ответ ничего выводить.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 28.07.2008, 12:52   #10
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

Ну например в обработке
Код:
Except
ля ля ля
end;
ничего не пишете т.е
Код:
Except
end;
SERG1980 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Исключительные ситуации FIIR БД в Delphi 5 19.06.2008 16:30
Исключительные ситуации FIIR Помощь студентам 1 19.06.2008 13:50
Обработка исключительной ситуации (сокеты) GHOST_Kasper Работа с сетью в Delphi 6 12.02.2008 06:57
обработка ситуации неверного ввода данных Sweta Помощь студентам 0 22.11.2007 17:13
Исключительные ситуации Mickle Общие вопросы Delphi 6 07.10.2007 21:03