Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование в Delphi (повторение).doc
Скачиваний:
7
Добавлен:
04.05.2019
Размер:
2.74 Mб
Скачать

5.5. Циклы

Алгоритмы решения многих задач являются циклическими, т. е. для дости­жения результата определенная последовательность операций (группа инструкций) должна быть выполнена несколько раз. Такая последовательность операций называется циклом. В программе цикл может быть реализован при помощи инструкций for, while и repeat.

5.5.1. Инструкция for

Пусть нужно написать программу, которая вычисляет значение функции

у = 5х2 - 7 в точках -1, -0.5, 0, 0.5 и 1.

Таблица должна быть выведена в поле метки формы приложения.

Вычисление значения функции, формирование строки таблицы и увеличение аргумента, выполняется 5 раз. Воспользовавшись инструкцией for, процедура вычисления может быть представлена процедурой обработки события Button1Click. Таблица формируется с помощью переменной st.

procedure TForm1.Button1Click(Sender: TObject);

var

y: real; // значение функции

x: real; // аргумент функции

dx:real; // приращение аргумента

st:string; // изображение таблицы

i : integer; // счетчик циклов

begin

st:= ' ';

x := -1;

dx := 0.5;

Label1.Caption := 'X = ' + 'Y = '+ chr(13)+#13;

for i:=1 to 5 do

begin

y:= 5*x*x-7;

st := st+ FloatToStr(x)+' '+FloatToStr(y)+chr(13);

x :=x + dx;

end;

Label1.Caption := Label1.Caption+st;

end;

Результат вычисления показан на рис. 5.10.

Рис. 5.10. Результат вычисления функции y

Если потребуется увеличить количество строк в выводимой таблице, например до десяти, достаточно в строке

for i:=1 to 5 do

число 5 заменить на 10.

Инструкция for используется в том случае, если некоторую последователь­ность действий (инструкций программы) надо выполнить несколько раз, причем число повторений заранее известно.

В общем виде инструкция for записывается следующим образом:

for счетчик := нач_знач to кон_знач do

begin

// здесь инструкции, которые надо выполнить несколько раз

end

где:

счетчик – переменная-счетчик числа повторений инструкций цикла;

нач_знач – выражение, определяющее начальное значение счетчика цикла;

кон__знач – выражение, определяющее конечное значение счетчика цикла.

Переменная счетчик, выражения нач_знач и кон_знач должны быть целого типа. Количество повторений инструкций цикла можно вычислить по формуле

(кон_знач - нач_знач + l).

Если между begin и end находится только одна инструкция, то слова begin и end можно не писать.

Алгоритм, соответствующий инструкции for, представлен на рис. 5.11.

Рис. 5.11. Алгоритм инструкции for

Если начальное значение счетчика больше конечного значения, то последовательность операторов между begin и end не будет выполнена ни разу.

После каждого выполнения инструкций тела цикла счетчик циклов увеличивается автоматически.

Переменную-счетчик можно использовать внутри цикла (но ни в коем слу­чае не изменять). Например, в результате выполнения следующих инструк­ций:

tabl: =' ' ;

for i:=l to 5 do

begin

tabl:=tabl+IntToStr(i)+' '+IntToStr(i*i)+chr(13);

end;

переменная tabl будет содержать изображения таблицы квадратов чисел.

Рассмотрим программу, которая вычисляет сумму первых 10 элементов ряда: 1 + 1/2 + 1/3 + ... (значение i-го элемента ряда связано с его номером формулой 1/i). Диалоговое окно программы должно содержать, по край­ней мере, два компонента: поле метки (Label1) и командную кнопку (Button1).

Вычисление суммы ряда и вывод результата выполняет процедура обра­ботки события Onclick, текст которой имеет вид:

procedure TForm1.Button1Click(Sender: TObject);

var

i:integer; // номер элемента ряда

elem:real; // значение элемента ряда

summ:real; // сумма элементов ряда

begin

summ:=0;

label1.caption:=''; // очистка содержимого строки вывода

// по метке

for i:=1 to 10 do

begin

elem:=1/i;

label1.caption:=label1.caption+

IntToStr(i)+' '+FloatToStr(elem)+#13;

summ:=summ+elem;

end;

label1.caption:=label1.caption+'Сумма ряда:'

+ FloatToStr(summ);

end;

Если в инструкции for вместо слова to записать downto, то после очередного выполнения инструкций тела цикла значение счетчика будет не увеличиваться, а уменьшаться.