Проблема с циклом repeat

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
Dr.Grizzly
Сообщения: 50
Зарегистрирован: 09 мар 2005, 13:57
Контактная информация:

Всем привет, вот есть пища для размышления, меня уже заклинило. Есть такой вот цыкл

Код: Выделить всё

 
repeat
   ls:=ls+1;
until (CheckListBox1.Items.Count=ls) or (CheckListBox1.Checked[ls]=true);
Мне надо чтоб цыкл завершил считать по одному из этих условий, в зависимости что первое произойдет. Смотрю, по отдельности каждое условие срабатывает, а вместе не хотят, компилятор продолжает крутить цыкл. Что делать?
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

количество элементов в коллекции Count-1... Не угадал? ;)
Изображение
Dr.Grizzly
Сообщения: 50
Зарегистрирован: 09 мар 2005, 13:57
Контактная информация:

Я тоже так подумал :) но не угадал :) фишка та в том что по отдельности условия работают, т.е. без "or" а вместе сволочи не хотят :) теоритически должно, а на практике-облом
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

не понял: кладу на форму чеклистбокс и кнопку, создаю три пункта, добавляю обработчик:

Код: Выделить всё

procedure TForm1.Button1Click(Sender: TObject);
var
  ls: integer;
begin
  ls := -1;
  repeat
    ls:=ls+1;
  until (CheckListBox1.Items.Count=ls) or (CheckListBox1.Checked[ls]=true);
end;
всё работает... после выхода из цикла LS равна номеру первого помеченного элемента
YurikGL
Сообщения: 142
Зарегистрирован: 16 фев 2005, 21:54
Откуда: Уфа
Контактная информация:

repeat
ls:=ls+1;
until (CheckListBox1.Items.Count=ls) or (CheckListBox1.Checked[ls]=true);
пробуем переделать

f1,f2:boolean

repeat
ls:=ls+1;
f1:=CheckListBox1.Items.Count=ls;
f2:=CheckListBox1.Checked[ls];
until (f1) or (f2);

смотрим в watch значения f1,f2 и (f1 or f2)
Делаем выводы.
Dr.Grizzly
Сообщения: 50
Зарегистрирован: 09 мар 2005, 13:57
Контактная информация:

не понял: кладу на форму чеклистбокс и кнопку, создаю три пункта, добавляю обработчик:
:D Самое интересное, я тоже попробовал создать отдельную прогу с одним обработчиком :) дак тоже зарабтало,а вот в самой проге не хочет... :? предложение от Mr.YurikGL мне понравилось :) получилось именно как он предложил :) спасибо!
Ответить