Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Большие траблы с циклом FOR...хотя скорее с головой  (Прочитано 6769 раз)
0 Пользователей и 1 Гость смотрят эту тему.
newmen
Интересующийся

ru
Offline Offline

« : 15-04-2005 10:42 » 

Помогите друзья, может кто сталкивался (delphi 5):
Код:
function split64(k:b8;tab:arr56):dw2;
var
  k2:b8;
  k22:b4;
  i,j,ii,jj,bit1,bit2 :byte;
begin
  for i:=0 to 7 do begin     
    bit1:=1; bit2:=1;
    for j:=0 to 6 do begin
      bit1:=bit1 shl j;
      ii:=tab[i,j] div 8; jj:=tab[i,j] mod 8;
      bit2:=bit2 shl jj;
      if k[ii] and bit2>0 then k2[i]:=k2[i] or bit1;
    end;
  end;
  for i:=0 to 3 do k22[i]:=k2[i];
  result[0]:=pack28(k22);
  for i:=0 to 3 do k22[i]:=k2[i+4];
  result[1]:=pack28(k22);
end;

К примеру, в этой процедуре стоит цикл for i:=0... и т.д., в отладчике на первом же шаге i:=8. Хотя во втором цикле с j вроде бы нет проблем. Может это из-за asm-вставок, где-то что-то криво?

И так и сяк пробовал. Заменяю цикл for - на while - работает... но там у меня много подобных функций...

Если не лень, посмотрите, пожалуйста!!!
Вот сюда я скинул проек
Записан
newmen
Интересующийся

ru
Offline Offline

« Ответ #1 : 27-04-2005 12:07 » 

Проверил... добрая половина циклов работает неверно... Почему-то, к примеру, в цикле
for i:=0 to 7 do
он считает от 8 до 1
Может хоть какие-то догадки есть??  Пожалуйста, очень нужно..
Записан
Oldy
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 27-04-2005 12:28 » 

Отключите оптимизацию (Project options, Compiler), может помочь.
« Последнее редактирование: 27-04-2005 13:10 от Oldy » Записан

С уважением, Oldy.
Серж
Гость
« Ответ #3 : 27-04-2005 14:23 » 

Совершенно верно, в Delphi надо очень осторожно писать циклы, в которых результат зависит от того, в каком порядке выполняется цикл, борландовский компилятор любит все оптимизировать, особенно циклы и передачу параметров в процедуры (стек заменять на регистры). Оптимизацию можно отключить и локально, вставив директивы {O-} и {O+} прямо в текст программы.
Записан
newmen
Интересующийся

ru
Offline Offline

« Ответ #4 : 28-04-2005 03:17 » new

Спасибо огромное, ребята!!!!!!!!
Вот уж не думал, что дело в этом. Вы мне так помогли!!
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines