Такой цикл повторяется до тех пор, пока условие истинно. Выполнение цикла заканчивается, если операторы цепочки изменяют значения переменных, входящих в условие, и оно становится ложным.
В любом случае этот цикл выполняется хотя бы один раз. Цикл с постусловием превращается в бесконечный, если условие подобрано так, что оно всегда истинно.
Таким образом, условие в данном цикле является условием его продолжения, как и в цикле с предусловием.
В PHP цикл с постусловием реализован оператором цикла do:
{
}
где do – служебное слово выполнять,
while – служебное слово пока.
Внимание! После слова do точка с запятой не ставится!
Перед закрывающей фигурной скобкой }поставить точку с запятой!
Действия оператора do:
1. выполняется оператор (цепочка),
2. проверяется выполнение условия, стоящего после слова while,
3. если оно истинно, то цикл повторяется,
4. если условие становится ложным, то цикл заканчивает работу.
Примеры:
1. вычислить сумму ста первых натуральных чисел:
Пусть s – искомая сумма,
i – очередное число (изменяется от 1 до 100).
Тогда алгоритм решения задачи можно описать следующим образом:
a. обнуляем сумму s = 0 ,
b. берем первое число: i = 1,
c. добавляем в сумму очередное число s = s + i,
d. как только очередное число станет больше ста, цикл заканчивает работу.
Представим этот алгоритм так:
s = 0;
s = s + i;
i = i + 1;
ПОКА (i <= 100);
Программа:
$i=1;
$s=0;
{
$s += $i;
$i++;
}
while ($i <= 100);
echo “<BR>s = $s i = $i”;
Результат решения задачи:
s = 5050 i = 101
Второй вариант решения задачи:
$s += $i++;
while ($i <= 100);
2. вычислить сумму s всех цифр заданного натурального числа n
Пусть s – искомая сумма,
i – очередная цифра числа.
Тогда алгоритм решения задачи можно описать следующим образом:
1. обнуляем сумму s = 0 ,
2. берем последнюю цифру числа, для чего определяем остаток от деления исходного числа на 10: i = n % 10,
3. добавляем в сумму найденную цифру: s = s + i,
4. уменьшаем число в 10 раз: n = n / 10,
5. повторяем цикл до тех пор, пока n != 0 .
Схема алгоритма:
Программа:
$s = 0;
echo “<BR>Введите целое положительное число:”;
// ввод $n
{
$i = $n % 10;
$s += $i;
$n /= 10;
}
while ($n != 0);
echo “<BR>s = $s”;
3. ввести с клавиатуры по одному последовательность целых чисел (конец последовательности – число 0). Определить их сумму, максимальное и минимальное число, количество введенных чисел и их среднее арифметическое.
Пусть s – искомая сумма,
min, max – минимальное и максимальное из введенных чисел,
count – количество введенных чисел,
sred – среднее арифметическое,
n – очередное число.
Тогда алгоритм решения задачи можно описать следующим образом:
1. обнуляем сумму s = 0,
2. вводим первое число n,
3. если оно не равно нулю, то
4. принимаем его значение за min и max
5. количество введенных чисел count = 1
6. увеличиваем сумму на введенное число s = s + n
7. входим в цикл ввода:
8. вводим очередное число n,
9. если оно не равно нулю, то
10. количество введенных чисел увеличиваем на 1: count = count+1
11. увеличиваем сумму на введенное число s = s + n
12. если оно меньше min, то min = n,
13. если оно больше max, то max = n,
14. повторяем цикл до тех пор, пока n # 0 – это и будет условием продолжения цикла.
Создадим интерфейс этой задачи – взаимодействие программы с пользователем, то есть что должно выводиться на экран:
Каждый последующий член ряда можно определить через предыдущий, используя рекуррентную формулу:
yk+1 = yk·x / k
Текущая погрешность вычислений ε определяется последним просуммированным членом ряда:
ε =|yn|
Эту погрешность необходимо сравнить с заданной погрешностью ε0для реализации условия окончания суммирования:
- если ε > ε0 , то заданная точность еще не достигнута, и суммирование ряда необходимо продолжить, прибавив к имеющейся сумме еще один член,
- если ε <= ε0 , то заданная точность достигнута, и суммирование необходимо прекратить.
Пусть s – искомая сумма,
y – очередной член ряда,
k - номер члена ряда,
eps_0 – заданная точность вычислений,
x – вводимый аргумент.
Схема алгоритма:
Программа:
$eps_0 = 0.001;
$k = 0;
echo “<BR>x =”;
// ввод $x
$y = 1.0;
$s = $y;
{
$k++;
$y *= $x / $k;
$s += $y;
}
while (abs($y) > $eps_0);
echo “<BR>Сумма = $s”;
Циклы с постусловием обычно используются в фильтрах входных данных – исходные данные вводятся до тех пор, пока они не будут корректными, а некорректные исходные данные отвергаются.
Пример: по введенному месяцу года определить количество дней в нем.
Программа: Схема фильтра (month – номер месяца)
{
echo “<BR>Введите номер месяца: ”;
// ввод $month);
}
while (($month < 1)||($month > 12));
switch ($month)
{
case 1: case 3: case 5:
case 7: case 8: case 10:
case 12: echo “<BR>31 день”;
case 4: case 6: case 9:
case 11: echo “<BR>30 дней”;
case 2: echo “<BR>28 дней”;
default: echo “<BR>Такого месяца нет<BR>”;
}
Циклы с пред- и постусловиями используются тогда, когда заранее неизвестно количество их повторений (итераций). Если количество итераций известно заранее, то используются циклы с параметром.
Управление работой циклов с параметром осуществляется не только условием, но и значением специальной переменной – параметра цикла (счетчика).
Циклы этого типа получили наиболее широкое распространение в алгоритмических языках.
Схему цикла с параметром можно представить в следующем виде:
где x – параметр цикла – любая переменная,
x_нач – его начальное значение,
x_кон – его конечное значение,
x_шаг – шаг его изменения (не только целое число).
В PHP циклы с параметром реализуются оператором цикла: