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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.09.2010, 13:33   #1
Aleksey1989
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 127
По умолчанию Непонятки в делфи

Здравствуйте. Помогите, пожалуйста со следующим казусом:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var x,y:real;
begin
 try
  x:=0;
  y:=2;
  x:=y/0;
  label1.Caption:='Ошибки нет!!!';
  { label1.Caption:=FloatToStr(x);}Если убрать скобки, то ошибка деления на ноль будет, иначе - нет. Почему???
 except
 label2.caption:='Есть ошибка!!!';
 end;
end;
Aleksey1989 вне форума Ответить с цитированием
Старый 17.09.2010, 13:39   #2
DIgorevich
Погулять вышел
Участник клуба
 
Аватар для DIgorevich
 
Регистрация: 17.05.2010
Сообщений: 1,573
По умолчанию

потому, что деление на ноль невозможно и соответственно значение x при x:=y/0; явно будет не float.
Никогда не знаешь, где тебе повезет... (Фрай)
DIgorevich вне форума Ответить с цитированием
Старый 17.09.2010, 13:48   #3
Aleksey1989
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 127
По умолчанию

Цитата:
Сообщение от DIgorevich Посмотреть сообщение
потому, что деление на ноль невозможно и соответственно значение x при x:=y/0; явно будет не float.
Я не об этом. Совершенно понятно, что на ноль делить нельзя. но почему эта ошибка возникает тогда, когда я пытаюсь вывести результат в Лэйбл, а не на самомделении?
Aleksey1989 вне форума Ответить с цитированием
Старый 17.09.2010, 13:49   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

DIgorevich Не точно сказал )))

Не просто потому что деление на 0 нельзя, а потому что во время компиляции эта операция допускается - и ошибка может всплыть только во время выполнения.
Но поскольку ты закоментировал вывод икса - компилятор посчитал что и x:=y/0; в программе - бесполезная строка (Value assigned to 'x' never used), и не стал это деление компилировать - соответственно ошибка не всплыла.

А вот если ты комменты уберешь, компилятор поймет что X где-то еще будет использоваться, а значит нужно и деление скомпилировать - и скомпилирует.
И при работе программы получишь ошибку, как полагается
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.09.2010, 13:54   #5
Aleksey1989
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 127
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
DIgorevich Не точно сказал )))

Не просто потому что деление на 0 нельзя, а потому что во время компиляции эта операция допускается - и ошибка может всплыть только во время выполнения.
Но поскольку ты закоментировал вывод икса - компилятор посчитал что и x:=y/0; в программе - бесполезная строка (Value assigned to 'x' never used), и не стал это деление компилировать - соответственно ошибка не всплыла.

А вот если ты комменты уберешь, компилятор поймет что X где-то еще будет использоваться, а значит нужно и деление скомпилировать - и скомпилирует.
И при работе программы получишь ошибку, как полагается
Т.е. если я допустим после деления на ноль выполню y:=x; то ошибка должна возникнуть (х же используется), однако на практике она не возникает.
Aleksey1989 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Непонятки с GetKeyState Terrance! Помощь студентам 1 12.05.2010 14:36
Непонятки с DBImage в делфи Електроник Помощь студентам 3 07.04.2010 08:57
Адреса и непонятки... iGlass Win Api 3 16.02.2010 22:54
Непонятки с DateTimePicker artemavd Общие вопросы Delphi 14 13.08.2009 13:32
непонятки с данными KiSH333 БД в Delphi 5 01.09.2008 08:36