пятница, 1 ноября 2013 г.

Цикл For

   Цикл 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;

Комментариев нет:

Отправить комментарий

Примечание. Отправлять комментарии могут только участники этого блога.