![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 30.06.2012
Сообщений: 145
|
![]()
Всем доброго времени суток. Пишу программу по математическим расчетам. В процессе ее создания столкнулся с проблемой. В коде одной из процедур есть цикл, внутрь которого я попадаю только первый раз, а затем никогда не вхожу в него, хотя подобных условий или любых других для входа в него нет. Отслеживал значения в if then - там проверяются и выполняются условия, но внутрь все равно попадает лишь первый раз. Подскажите с чем это может быть связано. Работаю в Delphi 7 lite.
Код: Код:
Заранее спасибо всем, кто откликнется. Реально впервые с таким столкнулся ( |
![]() |
![]() |
![]() |
#2 |
personality
Старожил
Регистрация: 28.04.2009
Сообщений: 2,899
|
![]()
Тут есть 2 варианта.
Либо Вы некорректно определяете, что проверка выполняется. Либо Вы впервые в жизни столкнулись с Особенностями вещественных чисел (раздел Примеры «неправильного» поведения вещественных типов) и настало время принять за правило использовать Math.CompareValue для сравнения вещественных чисел. Но это актуально для случая когда Вы полагаетесь в проверке на выполнение в виде визуального сравнения чисел (стандартным дельфёвым эвалюатором), а не проверкой результата сравнения (тоже им же, но когда он пишет всё_выражение = True/False). В общем, без проекта (плюс идентичных с Вашими тестовыми данными) и детального дебага - сказать что-то однозначно сложно. |
![]() |
![]() |
![]() |
#3 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]()
По-моему все правильно. Оптимизатор посчитал ненужным сам цикл.
Проверь - обрами эту часть в директивы {$o-}...{$o+} и пройдись отладкой. Но мне к примеру тоже было бы неясно зачем нужны присвоения xc:=i; и yc:=j; в данном случае в последнем цикле.
I'm learning to live...
|
![]() |
![]() |
![]() |
#4 |
personality
Старожил
Регистрация: 28.04.2009
Сообщений: 2,899
|
![]()
Хм, переменные локальные, не проверил сперва, по идее оптимизатор тогда должен выкинуть всё, а по утверждению автора, один раз всё таки заходит.
Автор, а зачем действительно присвоение в локальные переменные, если больше они нигде не используются ? Возможно, Вы от нас "в целях сокращения" скрыли часть кода ? |
![]() |
![]() |
![]() |
#5 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]() Цитата:
I'm learning to live...
|
|
![]() |
![]() |
![]() |
#6 |
Форумчанин
Регистрация: 30.06.2012
Сообщений: 145
|
![]()
Да часть кода скрыл, в конце процедуры. Сейчас покажу весь проект. И первый раз я таки попадаю в цикле туда, а потом не хочет.
Вот мои глобальные переменные: Код:
http://rghost.ru/60470344 Последний раз редактировалось Armageddets; 21.01.2015 в 14:25. |
![]() |
![]() |
![]() |
#7 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]()
Ну отключи оптимизатор - посмотришь что будет.
I'm learning to live...
|
![]() |
![]() |
![]() |
#8 |
Форумчанин
Регистрация: 30.06.2012
Сообщений: 145
|
![]()
Отключил оптимизатор и все равно заходит только первый раз (два раза за один проход цикла while). Загружаю для проверки документ с именем "пример1". Для проверки, ставлю точки прерывания и использую add watch.
Последний раз редактировалось Armageddets; 21.01.2015 в 13:17. |
![]() |
![]() |
![]() |
#9 |
personality
Старожил
Регистрация: 28.04.2009
Сообщений: 2,899
|
![]()
Я погонял прогу, правда кажется на примере пример.хлс а не пример1.хлс , но не факт, что это имеет большую разницу (потом ещё погоняю на пример1).
Я не заметил ничего подозрительного, циклы все время работали (ещё бы ![]() Упд. как и говорил - есть тонкость во флоатах. Загнал пример пример1.хлс , и прогнал первый шаг вайла - всё норм, на втором шаге увидел "глюк", по вочесам значения равны, а выдаёт при сравнении фолс. Последние два вочеса на картинке - обычно добавлены, а первые два спецом в свойствах вочеса настроены на флоатинг-поинт отображение, как говорится, найди 10 отличий. Можно последовать совету, что я давал выше. Последний раз редактировалось phomm; 21.01.2015 в 21:59. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Защита от попадания дубликатов в TThreadlist | Stertor | Общие вопросы Delphi | 17 | 13.11.2020 13:26 |
Исследования попадания точки в заданную область | uHkBu3uTop | Помощь студентам | 2 | 19.01.2012 12:35 |
Алгоритм попадания точки в прямоугольный треугольник | t2skler | Помощь студентам | 3 | 22.10.2011 01:57 |
Цикл с предусловием. ( цикл while) Цикл с постусловием. (цикл repeat ... until) | Mr.User | Помощь студентам | 9 | 23.11.2007 01:34 |