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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.04.2007, 19:44   #1
Moonka
 
Аватар для Moonka
 
Регистрация: 22.04.2007
Сообщений: 3
По умолчанию Проверка деления на ноль (Как проверить?)

Подскажите пожалуйста как при решении формул с дробями предупредить ошибку деления на ноль?
Я сначала написала через

if((выражение в знаменателе)<>0)
then
\\вычисление дроби
else
MessageDlg('Ошибка! Деление на ноль!',mtError,[mbOK],0);

Но мне сказали что это неправильно.

Подскажите плиз!
Я - живая легенда, а не виртуальный миф...
Moonka вне форума Ответить с цитированием
Старый 22.04.2007, 20:12   #2
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию

Естественно неправильно. Мало когда дробное число, особенно типа real будет равно 0. Погрешность присутствует. Нужно так:

if (abs(value)>=0.00001) then
деление на value
else
MessageDlg('Ошибка! Деление на ноль!',mtError,[mbOK],0);
Carbon вне форума Ответить с цитированием
Старый 22.04.2007, 20:21   #3
Moonka
 
Аватар для Moonka
 
Регистрация: 22.04.2007
Сообщений: 3
По умолчанию

Спасибо огроменное!!!
Значит, если я правильно, поняла то все значения, которые меньше 0.00001 он автоматически округляет до 0 ?
Я - живая легенда, а не виртуальный миф...
Moonka вне форума Ответить с цитированием
Старый 22.04.2007, 20:46   #4
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию

Нет. Просто нужно выбрать, какой интервал считать 0. Он вообще ничего не округляет. Результат будет настолько большим, что будет переполнение. Можно выбрать 0.0001 или 0.000001. Это по вкусу. Нужно, чтобы этот интервал был не слишком малым.
Carbon вне форума Ответить с цитированием
Старый 22.04.2007, 22:01   #5
Сильванович Михаил
Студент
Форумчанин
 
Регистрация: 10.11.2006
Сообщений: 196
По умолчанию

Даешь тип Extended или Comp - тогда можно <>0.
Visita Interiorem Terrae Rectificando Operae Lapidem...
Сильванович Михаил вне форума Ответить с цитированием
Старый 22.04.2007, 23:37   #6
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию

Не факт. У нас в универе в одной программе переменная, равная 8 выдала в условии меньше 8 true.
Carbon вне форума Ответить с цитированием
Старый 23.04.2007, 07:03   #7
Plague
Забанен
Форумчанин Подтвердите свой е-майл
 
Аватар для Plague
 
Регистрация: 01.11.2006
Сообщений: 420
По умолчанию

А вас в не учили обрабатывать исключения (класс Exception)?
там типа
try ... except ... else ... end;
или
try ... finally ... end;
Если ничто другое не помогает, прочтите, наконец, инструкцию! Аксиома Кана
Plague вне форума Ответить с цитированием
Старый 23.04.2007, 07:21   #8
Moonka
 
Аватар для Moonka
 
Регистрация: 22.04.2007
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Plague Посмотреть сообщение
А вас в не учили обрабатывать исключения (класс Exception)?
там типа
try ... except ... else ... end;
или
try ... finally ... end;
У нас вообще преподавательница в универе лекции не читает, только задачи каждый раз дает новые, а вы сами разбирайтесь что и как там в них делать... Вот и приходиться самой сидеть с учебниками разбираться... А до таких исключений я еще не дошла...
Я - живая легенда, а не виртуальный миф...
Moonka вне форума Ответить с цитированием
Старый 23.04.2007, 16:22   #9
Сильванович Михаил
Студент
Форумчанин
 
Регистрация: 10.11.2006
Сообщений: 196
По умолчанию

Цитата:
Сообщение от Carbon Посмотреть сообщение
Не факт. У нас в универе в одной программе переменная, равная 8 выдала в условии меньше 8 true.
Теоретически невозможно, если переменная была равна действительно
8.0, а не 7,(9). Такое может быть, если, чтобы увидеть значение
переменной, вы ее преобразовывали в строку.

Код:
var
 c: Extended;

begin
 c:=8.0;
 if c<8 then Write('GON!') else Write('OK!');
 Readln;
end.
Хоть в цикл воткни - ничего не произойдет - будет исправно писать "OK!".
Visita Interiorem Terrae Rectificando Operae Lapidem...
Сильванович Михаил вне форума Ответить с цитированием
Старый 23.04.2007, 18:08   #10
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию

Скорее всё-таки 7,(9), поскольку оно отображается как 8.
Carbon вне форума Ответить с цитированием
Ответ


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

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задача в паскале, помогите пожалуйста я полный ноль Arsenal777 Помощь студентам 8 03.06.2008 22:22
Дюди добрые помогите по ПАСКАЛЮ. Я полный ноль в нем )) Jey_RO Помощь студентам 4 24.05.2008 13:06
Машина Тьюринга (дробная часть от деления) o1ps Свободное общение 0 03.12.2007 14:02
Вычисление корня уравнения методом деления отрезка пополам Absent Помощь студентам 12 25.11.2007 17:54
Я-ноль: нужны проги для начала. Где? kypto8 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 31.03.2007 09:29