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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.07.2015, 22:13   #1
ДралсяСошибками
Форумчанин
 
Аватар для ДралсяСошибками
 
Регистрация: 31.05.2011
Сообщений: 301
Злость Цикл for обезумел и восстал!

Всем привет))

Вполне обычный цикл, начинает не с 0, а с предела, знаю, что это какая-то оптимизация, но мне нужно именно с 0.

Как отключить сие недоразумение?
ДралсяСошибками вне форума Ответить с цитированием
Старый 21.07.2015, 22:20   #2
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Покажите свой цикл
Shouldercannon вне форума Ответить с цитированием
Старый 21.07.2015, 22:33   #3
ДралсяСошибками
Форумчанин
 
Аватар для ДралсяСошибками
 
Регистрация: 31.05.2011
Сообщений: 301
По умолчанию

Код:
type
  ImagesX = packed record
    Code: String;
    Image: String;
  end;

const
  Images: Array[0..99] of ImagesX = ((Code: '0'; Image: '0.gif'),....

procedure TForm1.Button3Click(Sender: TObject);
var
  i: Integer;
begin
  for i := Low(Images) to High(Images) do
    begin
      Memo1.Text := StringReplace(Memo1.Text, Images[i].Code, Images[i].Image, [rfReplaceAll, rfIgnoreCase]);
    end;
end;
ну как-то так))
ДралсяСошибками вне форума Ответить с цитированием
Старый 22.07.2015, 06:56   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Попробуй {$o-} приписать перед циклом. и {$o+} после.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.07.2015, 14:17   #5
ДралсяСошибками
Форумчанин
 
Аватар для ДралсяСошибками
 
Регистрация: 31.05.2011
Сообщений: 301
По умолчанию

Пробовал, без изменений, но странность в том, что цикл работает как надо)))
ДралсяСошибками вне форума Ответить с цитированием
Старый 22.07.2015, 14:28   #6
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Цикл for обезумел и восстал!
Тапком его!
Тогда явно получай длину массива и ручками в цикле от 0 до count.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 22.07.2015, 14:33   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

это оптимизация, в результате переменные вы видите криво, но внутри все компенсируется.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 22.07.2015, 14:40   #8
ResourceSpace
Форумчанин
 
Аватар для ResourceSpace
 
Регистрация: 30.06.2015
Сообщений: 353
По умолчанию

Любопытно. Но не могу повторить. Какая IDE? Вы уверены что у вас перепутано? Как проверяли?
Код:
Procedure TForm1.Button3Click(Sender: TObject);
Var i: Integer; S: String;
Begin
S:='';
For i:=Low(Images) To High(Images) Do
      Begin
      S:=S+'|'+IntToStr(i);
      Memo1.Text := StringReplace(Memo1.Text, Images[i].Code, Images[i].Image, [rfReplaceAll, rfIgnoreCase]);
      End;
S:=S+'|';
ShowMessage(S);
End;
ResourceSpace вне форума Ответить с цитированием
Старый 22.07.2015, 15:17   #9
Toxa
Форумчанин Подтвердите свой е-майл
 
Аватар для Toxa
 
Регистрация: 01.12.2006
Сообщений: 514
По умолчанию

попробуй такой костыль
Код:
procedure TForm1.Button3Click(Sender: TObject);
var
  i,jKostyl: Integer;
begin
  for i := Low(Images) to High(Images) do
    begin
      jKostyl := i;
      Memo1.Text := StringReplace(Memo1.Text, Images[i].Code, Images[i].Image, [rfReplaceAll, rfIgnoreCase]);
    end;
end;
ResourceSpace
мешает эта строка
Код:
S:=S+'|'+IntToStr(i);
если смотреть в дебаге значение переменной i то она ведет отсчет с 100 к нулю, а если добавить использование переменной i, то отсчет нормалиизуется


для массива Array[6..9]
выдает значения i от 4 к 1
Пишу на Delphi за еду

Последний раз редактировалось Toxa; 22.07.2015 в 15:53.
Toxa вне форума Ответить с цитированием
Старый 22.07.2015, 16:07   #10
ДралсяСошибками
Форумчанин
 
Аватар для ДралсяСошибками
 
Регистрация: 31.05.2011
Сообщений: 301
По умолчанию

Суть сей пляски заменить коды смайлов цифрами, есть список:
Код:
:) 1
0:) 2
Пусть текст:
Код:
:),0:)
При замене, получится:
Код:
1,01
Если список отсортировать по убыванию, то получится 1,2
Мой список отсортирован по убыванию, но когда я смотрю значения переменных в цикле, то он начинает с наименьших, но при этом отрабатывает правильно, видимо, как написали выше, это какая-то иллюзия)))

Delphi7
ДралсяСошибками вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как составить цикл (for) чтобы цикл работал пока RegExp.Match не будет пустым? FleXik Общие вопросы Delphi 11 05.03.2014 14:49
написать процедуры для “Цикл For ... Next ” и «Цикл Do ... Loop» по ниже приведенному условию Кристина_Патачиц Microsoft Office Excel 3 17.04.2013 17:01
Цикл по времени - Как сделать так чтобы цикл выполнялся к примеру 10 секунд ? Anarki Общие вопросы C/C++ 3 13.11.2009 19:23
Цикл с предусловием. ( цикл while) Цикл с постусловием. (цикл repeat ... until) Mr.User Помощь студентам 9 23.11.2007 01:34