Цикл For - осуществляет выполнение операций, строго заданное количество раз.
Зарезервированные слова для реализации цикла: For, to, downto, do. Чтобы понять как работает цикл, рассмотрим простенький пример заполнения массива состоящего из пяти элементов, числами от 1 до 5. Для этого: 1) Помещаем на форму, компоненты: 1- Button, и 1-Memo; 2) Создаем обработчик событий на кнопке и записываем следующий код: 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 до 5 выполнять //действия ниже - прописанные между begin и end; begin
a[c]:=c; {Номер элемента массива а определяет переменная с и она же присваивается этому элементу (в данном случае это 1)}
Memo1.Lines.Add(IntToStr(a[c])) {В нулевую строку (а строки компонента Memo, нумеруются с нуля) компонента Memo заносится единица .}
end; Далее, переменная с увеличивается еще на единицу, определяет номер второго элемента массива и присваивается ему в качестве значения (уже 2). Затем записывается в первую строку Memo. Потом, переменная с увеличивается еще на единицу, определяет уже номер третьего элемента массива, присваивается ему в качестве значения (теперь 3). Затем записывается во вторую строку компонента Memo. Снова, переменная с увеличивается на единицу, определяет номер четвертого элемента массива и присваивается ему, в качестве значения (уже 4). Затем записывается в третью строку компонента Memo.
И наконец, переменная с снова увеличивается на единицу, определяет номер пятого элемента массива, присваивается ему в качестве значения (уже 5), записывается в четвертую строку компонента Memo и цикл прекращается.
Ну как, понятно в общих чертах? Теперь по подробнее. 1) В начале вычисляются и запоминаются начальное и конечное значения
c:=1 и
5
. 2) Циклу присваивается начальное значение
c:=1, после чего это значение сравнивается с конечным -
5.
3) Если начальное значение меньше или равно
5, выполняются итерации цикла, где происходит увеличение начального параметра цикла (переменной с) на единицу.
Затем выполняются команды прописанные после слова do, а именно:
begin
a[c]:=c;
Memo1.Lines.Add(IntToStr(a[c]))
end; Изменение параметра цикла происходит автоматом, после каждой итерации. 4) Как только параметр цикла с превышает конечное значение 5, цикл прекращает свою работу. Цикл For может оперировать данными не только в порядке возрастания, но и в порядке убывания. Для этого мы вместо слова to, должны воспользоваться словом downto. И если в нашем первом примере начальное значение, не должно было превышать конечное, то в случае с обратным порядком, должно быть все наоборот. Попробуем модернизировать наш код из первого примера, и сделаем теперь так, чтобы массив заполнялся с 5 до 1.
Для этого: 1) Помещаем на форму, компоненты: 1- Button, и 1-Memo; 2) Создаем обработчик событий на кнопке и записываем следующий код: 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 присутствуют две стандартные процедуры: 1) break - позволяет прервать работу цикла на любом его этапе. 2) continue - позволяет возобновить остановившийся цикл. Например, для того чтобы досрочно прервать наш цикл из первого примера, в момент когда значение переменной c будет равно 3, достаточно добавить в него следующий код.
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;
|