Рассмотрим следующую
задачу. Пусть нужно написать программу, которая вычисляет значение функции у
= 5х2 - 7 в точках —1, -0.5, 0, 0.5 и 1
(таблица должна быть
выведена в поле метки формы приложения). Процедура, обеспечивающая решение поставленной
задачи, может выглядеть так:
procedure
TForm1.ButtonlClick(Sender:
TObject); var
у:
real; // значение функции
x:
real; // аргумент функции
dx:
real; // приращение аргумента
st: string; // изображение таблицы
begin
st:='';
x
:= -1; dx := 0.5;
у
:= 5*х*х -7;
st
:= st+ FloatToStr(x)+' '+ FloatToStr(y)+chr(13);
x
:=x + dx;
у
:= 5*х*х -7;
st
:= st+ FloatToStr(x)+* '+ FloatToStr(y)+chr(13);
x
:=x + dx;
у
:= 5*х*х -7;
st
:= st+ FloatToStr(x)+* '+ FloatToStr(y)+chr(13);
x
:=x + dx;
у
:= 5*х*х -7;
st
:= st+ FloatToStr(x)+' ' + FloatToStr(y)+chr(13);
x
:=x + dx;
у
:= 5*х*х -7;
st
:= st+ FloatToStr(x)+' '+ FloatToStr(y)+chr(13);
x
:=x + dx;
Label1.Caption := st;
end;
Из
текста процедуры видно, что группа инструкций
у
:= 5*х*х -7;
st
:= st+ FloatToStr(x)+' '+ FloatToStr(y)+chr(13);
x
:=x + dx;
обеспечивающая вычисление
значения функции, формирование строки таблицы и увеличение аргумента, выполняется
5 раз.
Воспользовавшись инструкцией
for, приведенную процедуру можно переписать следующим образом:
procedure TForm1.ButtonlClick(Sender: TObject);
var
у:
real; // значение функции
x:
real; // аргумент функции
dx:
real; // приращение аргумента
st:
string; // изображение таблицы
i
: integer; // счетчик циклов
begin
st:=''; x := -1; dx := 0.5;
for i:=l to 5 do begin
у
:= 5*x*x -7;
st
:= st+ FloatToStr(x)+' '+ FloatToStr(y)+chr(13); x :=x + dx; end;
Label1.Caption := st;
end;
Второй вариант процедуры,
во-первых, требует меньше усилий при наборе, во-вторых, процедура более гибкая:
для того чтобы увеличить количество строк в выводимой таблице, например до десяти,
достаточно в строке for i:=1 to 5 do число 5 заменить на 10.
Инструкция for используется
в том случае, если некоторую последовательность действий (инструкций программы)
надо выполнить несколько раз, причем число повторений заранее известно.
В общем виде инструкция
for записывается следующим образом: for счетчик := нач_знач to кон_знач do begin
//
здесь инструкции, которые надо выполнить несколько раз end
где:
- счетчик — переменная-счетчик
числа повторений инструкций цикла;
- нач_знач-- выражение, определяющее
начальное значение счетчика циклов;
- кон_знач — выражение, определяющее
конечное значение счетчика циклов.
Переменная счетчик,
выражения нач_знач и кон_знач должны быть целого типа.
Количество повторений
инструкций цикла можно вычислить по формуле
(кон_знач — нач_знач
+ l).
Примеры:
for
i:=l to 10 do begin
label1.caption:=label1.caption
+ '*'; end;
for
i: =1 to n do s := s+i;
Примечание

Рис. 2.13. Алгоритм
инструкции for
Алгоритм, соответствующий
инструкции for, представлен на рис. 2.13. Обратите внимание, что если начальное
значение счетчика больше конечного значения, то последовательность операторов
между begin и end не будет выполнена ни разу.
Кроме того, после каждого
выполнения инструкций тела цикла счетчик циклов увеличивается автоматически.
Переменную-счетчик
можно использовать внутри цикла (но ни в коем случае не изменять). Например,
в результате выполнения следующих инструкций:
tab1: = '' ;
for i:=l to 5 do
begin
tab1:=tabl+IntToStr(i)+' '+IntToStr(i*i)+chr(13);
end;
переменная tabl будет
содержать изображения таблицы квадратов чисел.
Рассмотрим программу,
которая вычисляет сумму первых 10 элементов ряда: 1 + + 1/3 + ... (значение
i-го элемента ряда связано с его номером формулой 1//). Диалоговое окно программы
должно содержать, по крайней мере, два компонента: поле метки (Label1) и командную
кнопку (Buttonl).
Вычисление суммы ряда
и вывод результата выполняет процедура обработки события Onclick, текст которой
приведен ниже. После вычисления очередного элемента ряда процедура выводит в
поле Labell номер элемента и его значение в поле метки формы, предназначенное
для вывода результата.
procedure TForm1.ButtonlClick(Sender: TObject);
var
i:integer; { номер элемента ряда }
elem:real;
{ значение элемента ряда }
summ:real;
{
сумма элементов ряда )
begin
summ:=0;
label Leapt ion: = ' ' ;
for
i:=l to 10 do begin
elem:=l/i;
label1.caption:=labell.caption+
IntToStr(i)+' '+FloatToStr(elem)+#13; sunrn: =summ+elem;
end;
label1.caption:=label1.caption+
'Сумма ряда:'+FloatToStr(summ);
end;
Если в инструкции for вместо слова to записать downto, то после очередного выполнения инструкций тела цикла значение счетчика будет не увеличиваться, а уменьшаться.