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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.04.2010, 18:13   #1
Neptunium
Новичок
Джуниор
 
Аватар для Neptunium
 
Регистрация: 04.04.2010
Сообщений: 2
Восклицание Не правильная работа for .. to

Не правильно работает for i:=0 to N do
Почему в делфи 6 счётчик работает задом наперёд, типа как
for i:=N downto 0 do
Это какой-та баг компилятора или что может надо какуюта команду компилятора вставлять что бы отключить оптимизацию кода. Я так понял компилятор думает что в цикле счётчик i не используется и компилет более оптимальный но не верный код.
Типа
Нц N раз
...
Кц
Это на алгоритмическом языке.
Короче как сделать что бы делфи нормальный код компилел.
Neptunium вне форума Ответить с цитированием
Старый 04.04.2010, 18:36   #2
Marsel737
Форумчанин
 
Аватар для Marsel737
 
Регистрация: 09.11.2009
Сообщений: 669
По умолчанию

Neptunium, может это у вас в коде ошибка, а вы на делфи грешите? Попробуйте простейший пример скомпилировать в новом проекте
Я не всегда знаю, о чем говорю, но знаю, что прав. © Мухаммед Али.
К чёрту обстоятельства. Я создаю возможности. © Брюс Ли
Marsel737 вне форума Ответить с цитированием
Старый 04.04.2010, 18:40   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

программирую на Делфи 6 уже более 3 лет, все работает отменно.
так что показывайте код.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 04.04.2010, 19:03   #4
Neptunium
Новичок
Джуниор
 
Аватар для Neptunium
 
Регистрация: 04.04.2010
Сообщений: 2
По умолчанию

Код:
procedure TForm1.Button3Click(Sender: TObject); // reset
var x,y,x1,y1 : integer;
begin
  Kol:=StrToInt(Edit1.Text);
  if (Kol<1) or (Kol>MaxKol) then begin Kol:=MaxKol; Edit1.Text:=IntToStr(MaxKol); end;
  Stx:=(Rzx-20) div (Kol+1);
  Sty:=(Rzy-20) div (Kol+1);
  x1:=Bort;y1:=Bort;
  for y:=0 to 8+1 do
   begin
    for x:=0 to 8+1 do
     begin
       Kx[x,y]:={x1;//}Stx*x+Bort;
       Ky[x,y]:={y1;//}Sty*y+Bort;
       Vx[x,y]:=0;
       Vy[x,y]:=0;
       inc(x1,Stx);
     end;
    inc(y1,Sty);x1:=Bort;
   end;
  Kx1:=Kx;
  Ky1:=Ky;
  Vx1:=Vx;
  Vy1:=Vy;
  Otrisovka(Form1);
end;
Значит так, for i:=0 to константа do
и в цикле не используется i не считая индексов массивов то цикл работает НЕПРАВИЛЬНО.
Во остальных случаях код компилятся нормально, так что это баг самого компилятора, не правильно оценивает код. Короче прогеры намудрили с оптимизации.
Borland DELPHI 6 Enterprise
Version 6.0 (Build 6.163)
Так что это полюбому ошибка компилятора, и думаю надо искать заплатку, а то задалбывает потом разбирать чо ни работает как надо ПРАВИЛЬНЫЙ алгоритм.
Neptunium вне форума Ответить с цитированием
Старый 04.04.2010, 20:33   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

стоп, стоп, стоп.
Цитата:
Значит так, for i:=0 to константа do
и в цикле не используется i не считая индексов массивов то цикл работает НЕПРАВИЛЬНО.
это все нормально, и все работать будет верно, ибо i вы не используете.
знали бы ассемблер поняли бы почему так идет, и это и есть оптимизация.
странно что в статичных цикла(да и с переменной длиной тоже можно)
не используется команда ассемблера loop. вот этого я не понимаю.
хех, как показала практика, оптимизатор не идеален. всетаки чистый ассемблер быстрее был бы.

а в таких циклах как ваш все должно работать отменно.

если не трудно, скиньте код проектом, прикрепив во вложение.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 04.04.2010 в 20:47.
Пепел Феникса вне форума Ответить с цитированием
Старый 04.04.2010, 23:58   #6
пауэрлифтинг
Заблокирован
 
Регистрация: 11.12.2009
Сообщений: 133
По умолчанию

я тоже замечал в delphi 7 2005 что цикл for работает не правильно
это видно когда пошагово выполняеш программу и видно что счетчик цикла не правильно изменяется..

Последний раз редактировалось пауэрлифтинг; 05.04.2010 в 00:00.
пауэрлифтинг вне форума Ответить с цитированием
Старый 05.04.2010, 00:15   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

в Делфи в принципе раскладывает некоторые конструкции так а не иначе.
например
Код:
var j:integer=1;
const A:array[0..4] of integer=(1,2,3,4,5);

procedure TForm1.FormCreate(Sender: TObject);
var i:integer;
begin
for i:=0 to 4 do j:=j*2+A[i];
end;
явный пример, счет идет не с нуля, но он работает верно(я проверял на уровне ассемблера), там просто используются св-ва указателей для доступа к нужным ячейкам массива.(конкретно на каждой итерации цикла указатель смещается вперед, что в итоге он указывает на след элемент массива(первая итерация использует нулевой элемент и смещает указатель на первый)
на высоком уровне кодинга, не все так как на низком
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 05.04.2010, 00:32   #8
пауэрлифтинг
Заблокирован
 
Регистрация: 11.12.2009
Сообщений: 133
По умолчанию

наверно не правильно он только выводит сщетчик когда пошагово смотриш (клавишей F7 или F8). а работает правильно

Последний раз редактировалось пауэрлифтинг; 05.04.2010 в 00:35.
пауэрлифтинг вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Правильная установка FPC. Alex Cones Софт 18 28.02.2010 23:26
правильная ли контекстная диаграмма классов? matios Помощь студентам 0 14.12.2009 22:21
правильная ли процедура? aiktz Помощь студентам 2 11.11.2009 14:12
Правильная работа из под Win с прерываниями в МАСМ Stilet Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 10 10.06.2008 15:19
Правильная программа? Надюха Помощь студентам 10 28.09.2007 14:40