Цикл Repeat в Delphi — осуществляет выполнение цикла, из практически любого числа операторов, с заранее не известным количеством итераций (повторений). Зарезервированные слова для его осуществления это Repeat и Until.
Repeat — означает — повторить, повторять;
Until — означает — до, до тех пор;
То есть вначале у нас начинается цикл и только потом проверяется условие для его выхода. Рассмотрим пример, аналогичный тому, как в статье об операторе While, а именно — заполнение массива числами от 0 до 15, при помощи цикла:
Вот как решается эта задача, при помощи цикла Repeat:
1) Разместим на форме один компонент Button, и один компонент Memo. Свойство Lines компонента Memo — очищаем;
2) Создадим обработчик событий OnClick на кнопке и запишем следующий код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
const max=15; var a: array[0..max] of integer; b: Integer; begin b:=0; repeat //Начало тела цикла; a[b]:=b; Memo1.Lines.Add(IntToStr(a[b])); b:=b+1; //Конец тела цикла; until //Пока b>max; end; |
В цикле Repeat, вне зависимости от того, какое значение имеет выражение, тело цикла выполняется не менее одного раза. Так, у нас вначале переменной счетчика — b присваивается нуль — (b:=0); , затем он нумерует элемент массива и загружается в него — (a[b]:=b); , далее он отображается в Memo — ( Memo1.Lines.Add(IntToStr(a[b])); ), затем переменная b — увеличивается, на единицу — (b:=b+1); . После, выполняется проверка условия — (b>max) и если оно содержит логическое False, цикл продолжается до тех пор пока не наступит True.
3) Запускаем проект, нажимаем на кнопку и любуемся результатом.
Цикл Repeat очень похож на цикл While. Только у While — проверка выражения осуществляется перед выполнением тела цикла, а у цикла Repeat — после его выполнения.
Есть также еще одно отличие рассматриваемого нами цикла Repeat от цикла While.
Тело в цикле While, выполняется когда условие верно, а в цикле Repeat — наоборот, когда не верно, и прекращается когда становится верным.
Теперь обратим внимание на синтаксис. После слова Repeat до самого Until в нашем примере, у нас выполняется несколько действий. Причем выполняется не смотря на то, что они не заключены в конструкцию begin — end. Так происходит потому, что Repeat — Until, сами по себе действуют как объединение нескольких действий и применение в них конструкции begin — end, не является обязательным.
Рассмотрим еще один пример, как мы рассматривали с циклом While.
Создадим программу, в которой мы будем задавать максимальное значение условия вводя его в Edit, а по нажатию Button, — Memo покажет нам весь прогресс изменения значений переменной a от нуля, до введенной нами цифры в Edit:
- Разместим на форме один компонент Button, один компонент Memo и один компонент Edit;
- В cвойство Text компонента Memo, прописываем — 0, а свойство Lines компонента Memo — просто очищаем;
- Создадим обработчик событий OnClick на кнопке и запишем следующий код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
var a: Integer; c: Integer; begin a:=0; repeat //Начало тела цикла; c:=1+StrToInt(Edit1.Text); a:=a; Memo1.Lines.Add(IntToStr(a)); a:=a+1; //Конец тела цикла; until a>c-1 end; |
Комментарий к происходящему, аналогичен комментарию примера выше, только здесь у нас добавился Edit, в теле цикла мы загружаем из него значения в переменную с.
Запускаем программу, вводим в Edit любое целое положительное число, нажимаем на кнопку и любуемся результатом.