Главная страница
    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.045 c
2-1142171482
VitV
2006-03-12 16:51
2006.03.26
Связи в таблицах


2-1142161827
Sollo
2006-03-12 14:10
2006.03.26
DBX SimpleDataSet кажется проблемы с кэшированием


2-1141906952
Barsky
2006-03-09 15:22
2006.03.26
Форма поверх всех окон.


15-1141152916
ArtemESC
2006-02-28 21:55
2006.03.26
Модифицировать ячейку таблицы в HTML...


8-1129624851
Chaser
2005-10-18 12:40
2006.03.26
Как правильно открыть, сжать и сохранить JPEG?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский