Цикл For в Delphi — осуществляет выполнение операций, строго заданное количество раз.
Зарезервированные слова для реализации цикла: For, to, downto, do.
Чтобы понять как работает цикл, рассмотрим простенький пример заполнения массива состоящего из пяти элементов, числами от 1 до 5.
Для этого:
1) Помещаем на форму, компоненты: 1- Button, и 1-Memo;
2) Создаем обработчик событий на кнопке и записываем следующий код:
1 2 3 4 5 6 7 8 9 10 |
var a: array[1..5] of Integer; c: Integer; begin For c:=1 to 5 do begin a[c]:=c; Memo1.Lines.Add(IntToStr(a[c])); end; end; |
3) Запускаем проект и наблюдаем в компоненте Memo, заполненный нами масссив;
Теперь давайте разбираться, что к чему. Предлагаю перевести рассматриваемую конструкцию «For c:=1 to 5 do» на русский язык:
- For — означает — от, для, в направлении;
- to — означает — к, на, до;
- do — означает — выполнять, делать,
Запись c:=1 — переменная счетчик с присвоенным начальным значением 1. А цифра 5 после слова to — конечное значение.
В случае с нашим примером, получаем буквально следующее:
1 2 3 4 5 6 7 8 |
//От 1 до 5 выполнять - действия ниже - прописанные между begin и end; begin //Номер элемента массива а определяет переменная с //и она же присваивается этому элементу (в данном случае это 1) a[c]:=c; //В нулевую строку (строки компонента Memo, нумеруются с нуля) компонента Memo заносится единица Memo1.Lines.Add(IntToStr(a[c])); end; |
Далее, переменная с увеличивается еще на единицу, определяет номер второго элемента массива и присваивается ему в качестве значения (уже 2).
Затем записывается в первую строку Memo. Потом, переменная с увеличивается еще на единицу, определяет уже номер третьего элемента массива, присваивается ему в качестве значения (теперь 3). Затем записывается во вторую строку компонента Memo.
Снова, переменная с увеличивается на единицу, определяет номер четвертого элемента массива и присваивается ему, в качестве значения (уже 4). Затем записывается в третью строку компонента Memo.
И наконец, переменная с снова увеличивается на единицу, определяет номер пятого элемента массива, присваивается ему в качестве значения (уже 5), записывается в четвертую строку компонента Memo и цикл прекращается.
Теперь подробнее.
- В начале вычисляются и запоминаются начальное и конечное значения c:=1 и 5 .
- Циклу присваивается начальное значение c:=1, после чего это значение сравнивается с конечным — 5.
- Если начальное значение меньше или равно 5, выполняются итерации цикла, где происходит увеличение начального параметра цикла (переменной с) на единицу. Затем выполняются команды прописанные после слова do, а именно:
1 2 3 4 |
begin a[c]:=c; Memo1.Lines.Add(IntToStr(a[c])); end; |
Изменение параметра цикла происходит автоматом, после каждой итерации.
4) Как только параметр цикла с превышает конечное значение 5, цикл прекращает свою работу.
Цикл For может оперировать данными не только в порядке возрастания, но и в порядке убывания. Для этого мы вместо слова to, должны воспользоваться словом downto.
И если в нашем первом примере начальное значение, не должно было превышать конечное, то в случае с обратным порядком, должно быть все наоборот. Попробуем модернизировать наш код из первого примера, и сделаем теперь так, чтобы массив заполнялся с 5 до 1.
Для этого:
1) Помещаем на форму, компоненты: 1- Button, и 1-Memo;
2) Создаем обработчик событий на кнопке и записываем следующий код:
1 2 3 4 5 6 7 8 9 10 |
var a: array[1..5] of Integer; c: Integer; begin For c:=5 downto 1 do begin a[c]:=c; Memo1.Lines.Add(IntToStr(a[c])); end; end; |
3) Запускаем проект и видим, что наш массив, заполнился в обратном порядке;
Иногда случается, что цикл необходимо завершить досрочно, или наоборот продлить его работу. Для этого в Delphi присутствуют две стандартные процедуры:
- break — позволяет прервать работу цикла на любом его этапе.
- continue — позволяет возобновить остановившийся цикл.
Например, для того чтобы досрочно прервать наш цикл из первого примера, в момент когда значение переменной c будет равно 3, достаточно добавить в него следующий код.
1 2 3 4 5 6 7 8 9 10 11 |
var a: array[1..5] of Integer; c: Integer; begin For c:=1 to 5 do begin a[c]:=c; Memo1.Lines.Add(IntToStr(a[c])); if c=3 then break; end; end; |