Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.03.26;
Скачать: [xml.tar.bz2];

Вниз

изменение диапазона цикла FOR внутри цикла   Найти похожие ветки 

 
хочу все знать   (2006-03-11 17:02) [0]

всем привет
народ подскажите как обойти проблему
я использую цикл
for n:=0 to listbox1.count-1 do
begin
........
if .... then здесь происходит добавление колличества записей в     листбоксе
........
end

в результате чего цикл отрабатывает не все записи а только стока скока их было до добавления в листбокс

как  етого избежать и пройти по всем записям


 
Zeqfreed ©   (2006-03-11 17:09) [1]

Лучше так не делать. Но если приспичит, то можно использовать циклы repeat и while.


 
API ©   (2006-03-11 17:09) [2]

i := 0;
while (i < ListBox.Count) do
begin

 inc(i)
end;


 
grisme ©   (2006-03-11 17:16) [3]

однозначно while, т.к. конечное и начальное выражение for рассчитываются один раз, а в while, каждый цикл..:)


 
grisme ©   (2006-03-11 17:22) [4]

класс..только что проверил:
конструкция
for i:=1 to 15 do
 if i=6 then i:=i+1;
отказалась работать, но согласилась работать
вот эта:
for i:=1 to 15 do
begin
  if i=6 then
  begin
       asm
         inc i
       end;
  end;
end;
Причем i дошло не до 15, а до 16!!!8))


 
grisme ©   (2006-03-11 17:27) [5]

Еще эксперимнт. Как мы знаем,цикл for - в асме аналог loop(где кон.значение-ecx).Так вот, я просто поменял значение ecx - все работает.
В твоем случае, пихай в ecx(при добавлении элементов) новое значение listbox1.count.


 
AlexeyT ©   (2006-03-11 17:31) [6]


> Еще эксперимнт. Как мы знаем,цикл for - в асме аналог loop


Дурацкие эксперименты IMHO. Никто не гарантирует, что это будет работать с разными версиями дельфей и с/без оптимизации. Правильно сказали, надо использовать while.


 
grisme ©   (2006-03-11 17:35) [7]

К стати, это и не работает...сорри...:)


 
grisme ©   (2006-03-11 17:36) [8]

пересчет в for все-таки не удасться.:( Но изменение параметра цикла работает.:)


 
API ©   (2006-03-11 17:40) [9]

[4] grisme ©   (11.03.06 17:22)

Два варианта:

1. Оптимизатор отловит вставку на ассемблере, и будет использовать неоптимальный код для цикла. Для работы с ListBox"ом - заметной разницы не будет. Но в других случаях эта неоптимальность может привести к значительным потерям производительности.

2. Оптимизатор не отловит вставку на ассемблере. Нервотрепка автору ветки и флейм в самой ветке - обеспечены. Опять же - потеря времени.

Ни первый, ни второй вариант проверять не собираюсь по причине изначально "кулхацкерского" подхода к решению задачи, предложенного в [4].


 
grisme ©   (2006-03-11 17:41) [10]

можешь посмотреть в окне CPU. можно будет делать пересчет если мы в досе(править сегмент кода):)


 
API ©   (2006-03-11 17:42) [11]

[7], [8] - чего и следовало ожидать. Причина - вариант 2.


 
jack128 ©   (2006-03-11 21:43) [12]

grisme ©   (11.03.06 17:22) [4]
изменить значение счетчика можно и без асма, но тя на каждом шагу будут поджидать неприятные сюрпризы

var
 I: Integer;
begin
 for I := 0 to 10 do
 begin
   PInteger(@I)^ := I + 1;
   ShowMessage(IntToStr(I));
 end;
end;


Сколько итераций будет в этом коде??


 
хочу все знать   (2006-03-11 23:49) [13]

да предложений масса но я полностью согласен что через
while (i < ListBox.Count) do
будет безопасние



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.03.26;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.047 c
2-1141986269
KALqYAN
2006-03-10 13:24
2006.03.26
FIND TEXT RESOURCES


2-1142246826
Handle
2006-03-13 13:47
2006.03.26
Цвет пикселя под курсором


2-1141805249
Nox321
2006-03-08 11:07
2006.03.26
Написал скачивалку страниц. Но при ошибке 404 - смерть


6-1134547980
BANick
2005-12-14 11:13
2006.03.26
Помогите разобратся со скачкой файлов через прокси(TclientSocket)


15-1141295917
ALEXD31
2006-03-02 13:38
2006.03.26
Магнитооптический диск с файловой системой HTFS





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский