Лабораторная работа №4
Организация повторяющихся вычислительных процессов
Вычислительный процесс, в котором некоторая последовательность действий должна выполняться многократно, называют повторяющим вычислительным процессом или циклом.
Основы теории циклов
Алгоритм повторяющегося процесса
На рис.4. приведена схема алгоритма тестирования программы на заданном количестве тестов.
Виды циклов
Регулярный цикл.
.Для данного повторяющегося процесса характерно то, что число повторений заранее известно или его можно рассчитать. Известны также: начальное и конечное значения переменной цикла и величина шага.
Цикл с условием.
Для данного цикла характерно то, что число повторений заранее не известно и ограничивается некоторым условием – условием продолжения или завершения цикла.
Рис. 4. Блок - схема повторяющегося процесса |
На данной блок – схеме: n – количество тестов i – переменная цикла и номер выполненного теста i0 – номер теста, выполняемого первым
|
Различают два вида циклов с условием: цикл с предусловиием (цикл «Пока») и цикл с постусловие (цикл «До тех пор пока»). Блок – схемы циклов представлены на рис. 5.
|
|
Рис.5. Виды циклов с условием
|
|
Цикл с предусловием используется в тех случаях, когда тело цикла может быть не выполнено ни разу. Цикл с постусловием используется в тех повторяющихся процессах, когда тело цикла должно быть выпонено один раз обязательно.
Структура цикла
На рис.6. представлена структурная схема цикла. Цикл состоит из трех частей:
Заголовок цикла – часть цикла, обеспечивающая инициализацию параметров цикла.
Тело цикла – последовательность операторов, которые должны многократно повторяться.
Завершение цикла – это часть цикла, обеспечивающая выход из цикла. Выход из цикла может быть естественным, т.е. по выполнению всех повторений, или принудительным, до завершения необходимого количества повторений.
Рис. 6. Структура цикла
Параметры цикла
1. Переменная цикла – переменная, значение которой влияет на число повторений. Для регулярных циклов, переменную цикла называют счетчиком. Значение счетчика указывет на число выполненных повторений.
Начальное значение переменной цикла – значение, при котором первый раз выполнится тело цикла.
Конечное значение переменной цикла, это значение при котором последний раз выполнится тело цикла.
Шаг цикла – значение, на которое изменяется значение счетчика цикла при каждом повторении.
Условие выхода из цикла – это отношение или логическое выражение, ограничивающее число повторений.
Операторы циклов
Оператор цикла For
Используется для реализации регулярных циклов с шагом равным +1 или -1.
Формат оператора
for |
Имя переменной цикла |
:= |
Выражение 1 |
to/downto |
Выражение 2 |
do |
оператор |
Где:
Имя переменной цикла. Здесь должно быть указано имя переменной простого порядкового типа.
Выражение 1. Значение выражения 1 определяет начальное значение переменной цикла.
Выражение 2. Значение выражения 2 определяет конечное значение переменной цикла.
Оба выражения должны иметь тип совместимый с типом переменной цикла или эквивалентны ему.
Ключевые слова to/downto определяют величину шага цикла.
Если в операторе for указано слово to, то шаг цикла устанавливается равным +1, т.е. при каждом повторении значение переменной увеличивается на единицу (см. схему цикла на рис.4). При этом, для коррекной работы оператора необходимо, чтобы выполнялось условие: Значение выражения 1 ≤Значение выражения 2
Если же в операторе указано слово downto, то при каждом повторении значение переменной уменьшается на единицу, т.е. шаг цикла равен -1. При этом, для коррекной работы оператора необходимо, чтобы выполнялось условие: Значение выражения 1 ≥ Значение выражения 2.
Оператор. Оператор составляет тело цикла. Если со гласно алгоритмаповторяющегося процесса должно быть выполнено более одного оператора, то эта группа операторов должна быть включена в оператор Begin …..End.
Примеры записи цикла For.
Вывод всех чисел натурального ряда чисел в диапазоне от 2 до 10.
program For_1;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
i:integer;
begin
for i:=2 to 10 do
write(i, ' ');
readln
end.
Вывод чисел натурального ряда в диапазоне от 10 до 1.
program For_2;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
i:integer;
begin
for i:=10 downto 1 do
write(i, ' ');
readln
end.
Дана последовательность из n целых чисел, определить количество нечетных чисел.
program For_3;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
i, n, count,a:integer;
begin
writeln(‘Введите количество элементов в последовательности’);
readln(n);
count:=0;
for i:=1 to n do
begin
read(a); //ввод элемента последовательности
if a mod 2 <> 0 tnen count:=count+1
end;
writeln(‘Кол-во нечетных чисел в последовательности=’, count)
readln
end.
Выполнение цикла один раз.
for i:=1 to 1 do
write(i, ' ');
Цикл не выполнится ни разу.
for i:=1 downto 10 do
write(i, ' ');
Оператор цикла While
Используется для реализации цикла с предусловием. Алгоритм выполнения оператора полностью соответствует схеме, представленной на рис.4.
Фотмат оператора
While условие продолжения цикла do
оператор
Где:
Условие продолжения цикла. Это отношение или логическое выражение, ограничивающее число повторений. Оператор цикла будет выполняться, если значение условие выполняется, т.е. его значение равно true.
Оператор. Этот оператор составляет тело цикла. Если тело цикла должно содержать более одного оператора, то необходимо эти операторв включить в оператор Begin …..End.
При использовании оператора while, необходимо:
Определить переменную/переменные цикла (исключение составляют циклы, условие в которых представлено константным выражением, например, while true do …….). Переменная цикла может быть любого простого типа.
Инициализировать переменные цикла до оператора while.
Включить переменные цикла в условие продолжения цикла.
В тело цикла включить оператор/операторы, изменяющие значение переменной цикла.
Примеры использования оператора while.
Дана последовательность целых чисел, заканчивающаяся нулем. Определить количество положительных чисел в последовательности.
program while_1;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
i, n, count,
a:integer; //а – переменная цикла и элемент посл-ти
begin
writeln(‘Введите последовательность целых чисел и нуль для ее завершения’);
read(a); //инициализация переменной
count:=0;
while a<>0 do //используется в условии
begin
if a>0 then count:=count+1;
read(a)
end;
writeln(‘Количество положительных чисел=’, count);
readln
end.
Вывод чисел натурального ряда в диапазоне от 10 до 1.
i:=10; //инициализация переменной
while i≥1 do //используется в условии
begin
write(i,’ ‘);
i:=i-1 //изменение значения переменной
end;
Цикл выполнится один раз.
i:=10; //инициализация переменной
while i≤10 do //используется в условии
begin
write(i,’ ‘);
i:=i+1 //изменение значения переменной
end;
Цикл не выполнится ни разу.
i:=11; //инициализация переменной
while i≤10 do //используется в условии
begin
write(i,’ ‘);
i:=i+1 //изменение значения переменной
end;
Зацикливание (цикл выполняется бесконечное число раз).
a) i:=1; //инициализация переменной
while i≤10 do //используется в условии
begin
write(i,’ ‘);
end;
b)
i:=1;
while true do
begin
write(i);
i:=i+1;
end;
Оператор цикла repeat
Используется для реализации цикла с постусловием.
Формат оператора repeat
Repeat
Оператор 1
Оператор 2
∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙
Оператор n
Until условие выхода из цикла;
Где:
Условие выхода из цикла – это отношение или логическое выражение. Выход из цикла осуществляется при выполнении условия, т.е. когда условие примет значение true.
Пример использования оператора repeat.
Дана последовательность целых чисел, заканчивающаяся нулем. Определить количество положительных чисел в последовательности.
program repeat_1;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
i, n, count,
a:integer; //а – переменная цикла и элемент посл-ти
begin
writeln(‘Введите последовательность целых чисел и нуль для ее завершения’);
count:=0;
repeat
read(a);
if a>0 then
count:=count+1;
until a=0;
writeln(‘Кол-во положительных чисел =’, count);
readln;
end;
writeln(‘Количество положительных чисел=’, count);
readln
end.
