Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
4
Добавлен:
26.04.2015
Размер:
99.33 Кб
Скачать

Циклы

Алгоритмы решения многих задач являются циклическими, т. е. для достижения результата определенная последовательность действий должна

Алгоритм, в котором есть последовательность операций (группа инструкций), которая должна быть выполнена несколько раз, называется циклическим, а сама последовательность операций именуется циклом.

В Delphi можно использовать 3 типа циклов: for, while и repeat.

 Инструкция for

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

Алгоритм, соответствующий инструкции for, представлен на рис. 1.Если начальное значение счетчика больше конечного значения, то последовательность операторов между begin и end не будет выполнена ни разу. После каждого выполнения инструкций тела цикла счетчик циклов увеличивается автоматически.

Рис1

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

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

begin

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

end

где:

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

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

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

Переменная счетчик, выражения нач_знач и кон_знач должны быть целого типа. Количество повторений инструкций цикла можно вычислить по формуле (кон_знач — нач_знач + l). Если повторяется один оператор. то слова begin и end можно не писать.

Пример

for i:=l to 10 do

begin

Label1.Caption:=Label1.Caption + '*'; // выводится 10 символов ‘*’

end;

..

//суммируются числа от 1 до N

S:=0;

for i: =1 to N do S := S+i

…..

// ввод строкового массива S из 100 элементов из StringGrid

for i:=1 to 100 do

S[i] := (StringGrid.Cells[ i-1,0];

….

// вывод целочисленного массива N из 10 элементов в ListBox

for i:=1 to 10 do

ListBox1.Items.Append(IntToStr(N[i]));

Цикл for допускает модификацию, когда счетчик меняется от большего значения к меньшему с шагом -1

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

Пример

S1:=’’;

for i:=Length(s) downto 1 do

S1:=S1+Copy(S, i, 1); // S1 состоит из символов S в обратном порядке.

В теле цикла допускается использования другого цикла ( вложенный цикл). Такой алгоритм называется цикл в цикле.

Пример

// ввод двумерного массива Mass2, который представлен таблицей 6 x 3

for i:=0 to 3 do

for j:=0 to 5 do

Mass2[i,j] := StrToInt (StringGrid.Cells[ i,j];

Пример

// вывод строкового двумерного массива N2 (5X10) в StringGrid

for i:=1 to 5 do

for j:=1 to 10 do

StringGrid.Cells[ j-1, i-1] :=IntToStr(N2[ i, j]);

Для принудительного выхода из цикла, прерывания используют процедуру

Break.

Пример

for i:=1 to 5 do

begin

ListBox1.Items.Append(IntToStr(N[i]));

if N[i]=5 then Break; // выход из цикла - прерывание

end;

 Инструкция while

While (цикл с предусловием) используется в том случае, если некоторую последовательность действий (инструкций программы) надо выполнить несколько раз. При этом число повторений во время разработки программы может быть неизвестно и определяется только во время работы программы.

Типичными примерами использования цикла while являются вычисления с заданной точностью, поиск в массиве или в файле.

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

while условие do

begin

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

end

где, условие — выражение логического типа, определяющее условие выполнения инструкций цикла.

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

Рис 2

Для того чтобы инструкции цикла while, которые находятся между begin и end, были выполнены хотя бы один раз, необходимо, чтобы перед выполнением инструкции while значение выражения условие было истинно. Для того чтобы цикл завершился, нужно, чтобы последовательность инструкций между begin и end влияла на значение выражения условие (изменяла значения переменных, входящих в выражение условие).

Цикл wile можно построить на заданное число повторений.

Пример

// аналог цикла for

i:=1;

while I < =10 do

begin

ListBox1.Items.Append(IntToStr(N[i]));

i:=i+1

end;

Рассмотрим программу, которая вычисляет значение числа ПИ с точностью, задаваемой пользователем во время работы программы. В основе алгоритма вычисления лежит тот факт, что сумма ряда 1 - 1/3 + 1/5 -1/7 + 1/9 + ... приближается к значению л/4 при достаточно большом количестве членов ряда. Вычисление заканчивается тогда, когда значение очередного члена ряда становится меньше, чем заданная точность вычисления.

Пример

// Вычисление числа ПИ

var

pi:real; // вычисляемое значение ПИ

t:real; // точность вычисления

n:integer; // номер члена ряда

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

begin

pi := 0; n := 1;

t := StrToFloat(editl.text) ;

elem := 1; // чтобы начать цикл

while elem >= t do

begin

elem := 1 / (2*n - 1) ;

if n MOD 2=0

then pi := pi — elem else pi := pi + elem;

n := n + 1;

end;

pi: = pi * 4; Labell.Caption:= 'ПИ равно '+ FloatToStr(pi);

end;

end.

Инструкция repeat

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

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

repeat

// инструкции

unti1 условие

где условие — выражение логического типа, определяющее условие завершения цикла.

Таким образом, инструкции цикла, находящиеся между repeat и unti1, выполняются до тех пор, пока условие ложно (значение выражения условие равно False).

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

Рис 3

Инструкции цикла, находящиеся между repeat и until, выполняются как минимум один раз. Для того чтобы цикл завершился, необходимо, чтобы инструкции цикла, располагающиеся между repeat и until, изменяли значения переменных, входящих в выражение условие.

В качестве примера использования инструкции repeat рассмотрим программу, которая проверяет, является ли введенное пользователем число простым (как известно, число называется простым, если оно делится только на единицу и само на себя).

Проверить, является ли число N простым, можно делением числа N на два, на три и т. д. до N и проверкой остатка после каждого деления. Если после очередного деления остаток равен нулю, то это означает, что найдено число, на которое N делится без остатка. Сравнив N и число, на которое N разделилось без остатка, можно определить, является ли N простым

Пример

// Простое число

var

N: Integer; // проверяемое число

d: Integer; // делитель

r: Integer; // остаток от деления N на d

begin

N:=StrToInt(Editl.text);

d := 2; // сначала будем делить на два

repeat

r := n mod d;

if r <> 0 //N не разделилось нацело на d

then d := d + 1;

until r = 0; // найдено число, на которое п разделилось без остатка

if d = n

then Label1.Caption:=’простое число.'

else Label1.Caption:= 'составное число.';

end;

Соседние файлы в папке Методический материал