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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.09.2015, 19:08   #1
alex234
 
Регистрация: 26.09.2015
Сообщений: 5
По умолчанию Простейший цикл

Вопрос по циклу, спрошу здесь, дабы не плодить темы.

Код:
var X: real;

Begin

X:=1;
Repeat
   X:=X+0.2;
   WriteLn(X);
until X=3;

End.
Выхода из цикла не будет. Программа проскочит условие X=3 и продолжит прибавлять по 0.2. Чтобы условие сработало, нужно записать
Код:
until X>=3
НО, если прибавлять по целому числу, например:
Код:
Repeat
   X:=X+1;
   WriteLn(X);
until X=3;
всё сработает нормально, прога досчитает до трёх и выйдет из цикла без всяких >=

В чём причина? Может, кто знает?
alex234 вне форума Ответить с цитированием
Старый 27.09.2015, 22:09   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

проблема в машинном представленни вещественных (дробных) чисел.

Например, вещественные числа (числа с десятичной запятой - например, тип real) НЕЛЬЗЯ сравнивать друг с другом просто так.
Почему так - подробнее по ссылкам в этом сообщении
Serge_Bliznykov вне форума Ответить с цитированием
Старый 28.09.2015, 11:09   #3
alexcoder
Форумчанин
 
Регистрация: 31.05.2009
Сообщений: 786
По умолчанию

Я бы так категорично, что нельзя не сказал. Можно, но очень осторожно. К примеру, если прибавлять по 0.25, то условие х=3 будет успешно достигнуто. Если дробное число может быть записано точно, без округления, то их можно сравнивать для "равно".
Помощь с программами:
vk.com/alexcoder1
e-mail: informatik101@mail.ru
alexcoder вне форума Ответить с цитированием
Старый 28.09.2015, 12:12   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

если какие-то числа можно сравнивать, а какие-то нельзя, то, значит, В ОБЩЕМ СЛУЧАЕ, сравнивать нельзя...

Если Вы вдруг не читали статью Антона Григорьева. "Неочевидные особенности вещественных чисел" (есть по ссылке), то очень-очень рекомендую.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 02.10.2015, 12:19   #5
GreenWizard
мальчик-помогай =)
Форумчанин
 
Регистрация: 16.09.2010
Сообщений: 522
По умолчанию

http://habrahabr.ru/post/112953/
весьма подробно об этой проблеме
GreenWizard вне форума Ответить с цитированием
Старый 02.10.2015, 23:07   #6
alex234
 
Регистрация: 26.09.2015
Сообщений: 5
По умолчанию

Да, разобрался уж (в некоторой степени). Хотел даже блеснуть перед преподом на лабораторной, и хорошо, что не получилось...

Спасибо всем, кто ответил.
alex234 вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Простейший цикл Black_Shark_ Паскаль, Turbo Pascal, PascalABC.NET 3 25.09.2015 11:09
написать процедуры для “Цикл For ... Next ” и «Цикл Do ... Loop» по ниже приведенному условию Кристина_Патачиц Microsoft Office Excel 3 17.04.2013 17:01
Простейший цикл _PROGRAMM_ Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 9 28.12.2011 10:58
Цикл с предусловием. ( цикл while) Цикл с постусловием. (цикл repeat ... until) Mr.User Помощь студентам 9 23.11.2007 01:34