Циклические алгоритмы
Циклический алгоритм – это алгоритм, содержащий один или несколько циклов.
Цикл – это последовательность операторов, которая может выполняться более одного раза.
В языке Паскаль существуют три конструкции для реализации циклов:
- цикл с предусловием;
- цикл с постусловием;
- цикл со параметром.
Цикл с предусловием
Применяется, когда неизвестно количество повторений одного и того же действия.
Выполнение
· Проверка условия происходит перед очередным исполнением тела цикла
· Пока условие выполняется, повторяется исполнение тела цикла. Как только условие перестало выполнятся – прекращается выполнение цикла (выход из цикла по лжи)
Если условие не выполняется ни разу, то тело цикла может не быть исполнено ни разу.
while <условие\логическое выражение (занчения True False> do <тело цикла>
begin
группа операторов
end;
Пример: Рассмотрим следующую задачу: для проверки физического развития проверяют рост школьников. Составьте программу, запрашивающую рост очередного школьника и вычисляющую после завершения медосмотра средний рост прошедших осмотр. Количество школьников, подлежащих медосмотру заранее не известно.
Решение. Чтобы получить средний рост С, надо знать количество школьников К и их суммарный рост S. Для вычисления величин K и S воспользуемся циклом WHILE. Однако, здесь возникает проблема, какое условие следует выбрать для завершения цикла. Проще всего договориться – в конце рабочего дня в ответ на запрос о росте школьника ввести какое-либо фиктивное значение, например, 0.
var k, s, r: integer; c: real;
begin s:= 0; k:= 0;
write (‘введите рост школьника’);
readln (r);
while r <> 0 do begin
k:= k + 1;
s:= s + r;
write (‘введите рост школьника’);
readln (r);
end; c:= s/k;
writeln (‘средний рост школьников’,c)
readln;
end.
Цикл с постусловием
Оператор Repeat (повторять) – Until (до тех пор, пока) содержит логическое выражение, которое управляет повторением выполнения последовательным операторов, записанных между Repeat и Until. Повторения продолжается до тех пор, пока логическое выражение не примет значения True
Последовательность циклов выполняется не менее одного раза
repeat {повторяй}
{оператор 1}
until <логическое выражение>; {до тех пор, пока условие не будет истинным}
При использование данного оператора необходимо учитывать
· Перед первым выполнением оператора логическое выражение его окончания должно быть определено
· Последовательность операторов должна содержать хотя бы один оператор, влияющий на значение логического выражения, иначе оператор работает бесконечно долго, происходит зацикливание
· Логическое выражение в конечном итоге должно принять значение – True
Пример
Составить программу планирования закупки товара в магазине на сумму, не превышающую заданную величину.
Решение
Обозначим через x, k - соответствующую цену и количество товара, через p - заданную предельную сумму, через s - общую стоимость покупки. Начальное значение общей стоимости покупки (S) равно нулю. Значение предельной суммы считывается с клавиатуры. необходимо повторять запрос цены и количества выбранного товара, вычислять его стоимость, суммировать ее с общей стоимостью и выводить результат на экран до тех пор, пока она не превысит предельную сумму р. В этом случае на экран нужно вывести сообщение о превышении.
Program Example_10;
Var x, k, p, s: Integer;
Begin
WriteLn('Введите цену товара и его количество');
ReadLn(x,k);
s:=s+x*k;
WriteLn('Стоимость покупки равна ',s);
Until s>p;
WriteLn('Суммарная стоимость покупки превысила предельную сумму');
End.
Цикл с параметром
Оператор цикла с параметром применяют тогда, когда известно число повторений одного и того же действия. Выход по лжи
FOR переменная-счётчик:= начальное_значение [TO / DOWNTO] конечное_значение DO{Действия}
Начальное и конечное значение параметра могут быть представлены
· Константами
· Переменными
· Арифметическими выражениями
Выполнение цикла с параметром
1. Вычисления значения выражения А и В
2. Если А<=B, то параметр последовательно принимает значения А, А+1. А+2…В-1, В, и для каждого из этих значений выполняется тело цикла
3. Если А>B, то тело цикла не будет выполнено ни разу и выполнение цикла с параметром сразу же закончится. Выполнение цикло For-DownTo происходит аналогично, но с шагом равным -1.
!!!! Изменение параметра в теле цикла For может привести к ошибкам, что считается неправильным в программировании !!!!
Если тело цикла состоит из нескольких операторов, то операторы заключаются в операторные скобки Begin End
Пример: