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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.03.2015, 15:06   #1
mosq
Пользователь
 
Регистрация: 28.08.2009
Сообщений: 90
По умолчанию Цикл for...to... глюк переменной

Приветствую, all

После одного цикла заряжаю следующий с той же переменной, но она начинает не с нуля, а с конца предыдущего цикла.
Скриншот прилагаю.
Кто подскажет, что это за глюк?
Изображения
Тип файла: gif 1.GIF (7.4 Кб, 50 просмотров)
mosq вне форума Ответить с цитированием
Старый 03.03.2015, 15:08   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Ни чего не глюк, это оптимизатор так поступает иногда, код оптимальней для цикла с конца
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 03.03.2015, 15:13   #3
mosq
Пользователь
 
Регистрация: 28.08.2009
Сообщений: 90
По умолчанию

как сделать, чтобы считал именно с 0 до 4600, а не обратно?
mosq вне форума Ответить с цитированием
Старый 03.03.2015, 15:14   #4
lomastr_
Форумчанин
 
Регистрация: 16.01.2015
Сообщений: 672
По умолчанию

зачем ?
lomastr_ вне форума Ответить с цитированием
Старый 03.03.2015, 15:16   #5
mosq
Пользователь
 
Регистрация: 28.08.2009
Сообщений: 90
По умолчанию

Мне так удобнее проводить расчеты и управлять элементами массива.
mosq вне форума Ответить с цитированием
Старый 03.03.2015, 15:21   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Ваши расчеты зависят от порядка расчета элементов? Управлять - это просто присваивать? Тогда я удивлюсь, если там вообще не выродится в релизе в цепочную команду.
p51x вне форума Ответить с цитированием
Старый 03.03.2015, 15:24   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Если расчеты будут зависеть от порядка, то компилятор так не поступит
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 03.03.2015, 15:25   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Мне так удобнее проводить расчеты и управлять элементами массива.
либо выключайте оптимизацию в нужных местах ( {$O-} если не ошибаюсь,потом не забудьте включить снова {$O+}

либо цикл запишите по другому:
Код:
i:=0;
while i<=4600 do begin
  client[i] := .....
  inc(i);
end;
либо (лучше всего) меняйте своё отношение к проблеме, которой нет!!
Для Вас есть разница, в каком порядке заполняется массив? Он заполняется неверно? Сможете это подтвердить?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 03.03.2015, 15:27   #9
mosq
Пользователь
 
Регистрация: 28.08.2009
Сообщений: 90
По умолчанию

p51x,
Цитата:
помочь != "решите за меня"!

Мой вопрос в том, как заставить считать с начала цикла, а не с конца. Большего мне не надо

ps: Пример на скриншоте для простоты понимания, что за проблема. В коде значения последующих элементов зависят от значений предыдущих, поэтому мне необходимо начинать с начала массива.


Цитата:
Если расчеты будут зависеть от порядка, то компилятор так не поступит
Цитата:
либо выключайте оптимизацию в нужных местах ( {$O-} если не ошибаюсь,потом не забудьте включить снова {$O+}
Теперь понял.
Аватар, Serge_Bliznykov - благодарю за оперативную подсказку.

Последний раз редактировалось mosq; 03.03.2015 в 15:30.
mosq вне форума Ответить с цитированием
Старый 03.03.2015, 16:02   #10
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Цитата:
как сделать, чтобы считал именно с 0 до 4600, а не обратно?
НИКАК. Нуль входит в счет. Потому 0 12 3 4 5 6 7 8 9 10 - это 11 а не 10.

Чтоб считал с нуля, инициализируйте переменную нулем перед циклом. Хотя цикл сам это делает.

Ну и ещё использовать переменную i второй раз во вложенном цикле может привести к порче стэка и непонятным лулзам из этого.
Человек_Борща вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
передача значения переменной одной формы в описание переменной другой diekster Общие вопросы Delphi 14 18.05.2014 02:42
Для public переменной класса присвоить адрес ячеек из внешней переменной _KUL Qt и кроссплатформенное программирование С/С++ 2 28.05.2012 12:04
Цикл с предусловием. ( цикл while) Цикл с постусловием. (цикл repeat ... until) Mr.User Помощь студентам 9 23.11.2007 01:34
Работа с файлами (создание, удаление, открытие, связываение с переменной, очищение памяти переменной) Arkuz Общие вопросы Delphi 12 25.09.2007 20:47