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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.06.2009, 00:09   #1
Mikhail Bakurov
Форумчанин
 
Регистрация: 12.10.2008
Сообщений: 140
По умолчанию Поясните что с циклом for?

Код:
var
i,c:integer;
begin
c:=0;
for i:=0 to 10 do
    begin
       c:=c+8;
    end;
end;
ставим breakpoint в начале цикла и добавляем в watches list i и c и видим следующее:
шаг 1: i=11, c=8;
шаг 2: i=10, c=16
...
шаг 11: i=1, c=88

Вот хоть убейте понять не могу, зачем он i так считает. Вроде и результат устраивает, но зачем??? Всю голову сломал

Кстати, если с:array[0..10] of integer; например, ну и пусть элементы равны квадрату от i, то цикл проходит как надо, т.е. i:=0,1,2,3...10

Кто-либо может мне объяснить это?
Mikhail Bakurov вне форума Ответить с цитированием
Старый 19.06.2009, 00:26   #2
__STDC__
Участник клуба
 
Аватар для __STDC__
 
Регистрация: 16.03.2009
Сообщений: 1,013
По умолчанию

хм.. это где это у вас так? в FPC все нормально.. зачем, кстати, бряк ставить, не проще ли выводить i?
Uguu~
__STDC__ вне форума Ответить с цитированием
Старый 19.06.2009, 00:46   #3
Greblin
Меркантильный кю
Участник клуба
 
Аватар для Greblin
 
Регистрация: 02.02.2008
Сообщений: 1,001
По умолчанию

Действительно, где Вы такое нашли? Дельфи и BP с 0 начинают
По поводу вопроса есть такое предположение. В ассемблере есть команда loop, которая действует как паскалевский downto (упрощённо говоря). Возможно компилятор, который Вы используете, реализует for-цикл через неё
Росли вроде умными, выросли дурнями... (c)А.Васильев
Greblin вне форума Ответить с цитированием
Старый 19.06.2009, 01:12   #4
Mikhail Bakurov
Форумчанин
 
Регистрация: 12.10.2008
Сообщений: 140
По умолчанию

Компилятор CodeGear Rad Studio Delphi 2007
На самом деле код изначально был сложнее, это пример.
Этот код работает именно с таким непонятным багом (может фичей :-) )
Какого то неудобства нет, просто непонятно как так...

Я думаю, что кому-нибудь этот момент попадался, пусть пояснит кто знает
Mikhail Bakurov вне форума Ответить с цитированием
Старый 19.06.2009, 01:15   #5
__STDC__
Участник клуба
 
Аватар для __STDC__
 
Регистрация: 16.03.2009
Сообщений: 1,013
По умолчанию

вряд ли это возможно.. откуда это i=11 ?? Может сделаете скриншот? Посмотрим..
Uguu~
__STDC__ вне форума Ответить с цитированием
Старый 19.06.2009, 01:34   #6
Mikhail Bakurov
Форумчанин
 
Регистрация: 12.10.2008
Сообщений: 140
По умолчанию

Вот вид, там внизу watchlist, чтобы следить за изменением
Изображения
Тип файла: jpg 1.jpg (35.6 Кб, 163 просмотров)
Тип файла: jpg 2.jpg (35.9 Кб, 149 просмотров)
Тип файла: jpg 3.jpg (35.3 Кб, 149 просмотров)
Mikhail Bakurov вне форума Ответить с цитированием
Старый 19.06.2009, 01:38   #7
__STDC__
Участник клуба
 
Аватар для __STDC__
 
Регистрация: 16.03.2009
Сообщений: 1,013
По умолчанию

ну попробуйте одновременно выводить i.. что будет выводиться, правильное значение или нет? может отладчик глючит.. а может реализовано так...
Uguu~
__STDC__ вне форума Ответить с цитированием
Старый 19.06.2009, 01:49   #8
Mikhail Bakurov
Форумчанин
 
Регистрация: 12.10.2008
Сообщений: 140
По умолчанию

В случае, когда от счетчика цикла зависит хоть что-то например
c:=c+i;
Или выводим i, все как положено работает
Mikhail Bakurov вне форума Ответить с цитированием
Старый 19.06.2009, 01:52   #9
__STDC__
Участник клуба
 
Аватар для __STDC__
 
Регистрация: 16.03.2009
Сообщений: 1,013
По умолчанию

ну возможно какая-нибудь внутренняя оптимизация... как уже выше было сказано, в ассемблере loop уменьшает содержимое регистра cx на 1... можете попытать счастья и обратиться к разработчикам
Uguu~
__STDC__ вне форума Ответить с цитированием
Старый 19.06.2009, 01:58   #10
Mikhail Bakurov
Форумчанин
 
Регистрация: 12.10.2008
Сообщений: 140
По умолчанию

Насколько я понял Delphi 2007 действительно какой-то через чур оптимизирующий (иногда даже пугающе) возможно что с точки зрения машины выгоднее, если все равно, делать именно так т.е. отнимать 1

=) всем спасибо
Mikhail Bakurov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поясните задачу HECTOR.A. Паскаль, Turbo Pascal, PascalABC.NET 1 05.06.2009 23:33
Поясните задачку(Delphi) Ddr Помощь студентам 1 16.04.2009 21:45
Поясните ООП sodd Общие вопросы Delphi 1 23.02.2009 14:14
Поясните откуда ошибка? Hegel Помощь студентам 8 12.01.2009 07:39