Такой цикл называется циклом с предусловием (циклом ПОКА) и изображается следующей схемой:
Условие – это логическое выражение, зависящее от переменных, входящих в цепочку. Цикл повторяется до тех пор, пока условие истинно. Значит, данное условие является условием продолжения цикла. Выполнение цикла заканчивается, если операторы цепочки изменяют значения переменных, входящих в условие, и оно становится ложным.
Цикл не выполняется ни разу, если условие было ложным с самого начала.
Цикл ПОКА превращается в бесконечный, если условие подобрано так, что оно всегда истинно.
В Паскале цикл с предусловием реализуется оператором цикла While:
или
…
Операторы, находящиеся между Begin и End, называются телом цикла.
Внимание! После слова Do точка с запятой не ставится!
Если поставить точку с запятой после слова Do, то этот цикл, как правило, превращается в бесконечный, потому что в этом случае условие изменяться не будет.
Операторные скобки Begin … End используются в том случае, если после слова Do должна следовать цепочка операторов.
Действия оператора While:
1. проверяется выполнение условия,
2. если оно истинно, то выполняется оператор (цепочка), стоящий после Do,
3. после его выполнения снова проверяется условие, и если оно снова истинно, то цикл повторяется,
4. если условие становится ложным, то цикл заканчивает работу.
Примеры:
1. вычислить сумму ста первых натуральных чисел:
Пусть s – искомая сумма,
i – очередное число (изменяется от 1 до 100).
Тогда алгоритм решения задачи можно описать следующим образом:
a. обнуляем сумму s – в ней ничего нет,
b. берем первое число: i = 1,
c. добавляем в сумму очередное число, пока оно не достигнет 100.
Представим этот алгоритм так:
ПОКА (i ≤ 100) ВЫПОЛНЯТЬ
s = s + i;
i = i + 1;
Программа:
Var i, s : Word;
While (i <= 100) Do
s := s + i;
i := i + 1;
WriteLn(‘s = ‘, s);
2. вычислить сумму s всех цифр заданного натурального числа n
Пусть s – искомая сумма,
i – очередная цифра числа.
Тогда алгоритм решения задачи можно описать следующим образом:
a. обнуляем сумму s,
b. берем последнюю цифру числа, для чего определяем остаток от деления исходного числа на 10: i = n Mod 10,
c. добавляем в сумму найденную цифру: s = s + i,
d. уменьшаем число в 10 раз: n = n Div 10,
e. повторяем цикл до тех пор, пока n > 0 – это и будет условием продолжения цикла.
Схема алгоритма: Программа:
Uses CRT;
Var i, s, n : Word;
Write(‘n=‘);
While (n > 0) Do
s := s + i;
WriteLn(‘s = ‘, s);
3. ввести с клавиатуры по одному последовательность целых чисел (конец последовательности – число 0). Определить их сумму, максимальное и минимальное число, количество введенных чисел и их среднее арифметическое.
Пусть s – искомая сумма,
min, max – минимальное и максимальное из введенных чисел,
count – количество введенных чисел,
sred – среднее арифметическое,
n – очередное число.
Тогда алгоритм решения задачи можно описать следующим образом:
a. обнуляем сумму s ,
b. вводим первое число n,
c. если оно не равно нулю, то
· принимаем его значение за min и max
· количество введенных чисел count = 1
· увеличиваем сумму на введенное число s = s + n
· входим в цикл ввода:
d. вводим очередное число n,
если оно не равно нулю, то
· количество введенных чисел увеличиваем на 1: count = count+1
· увеличиваем сумму на введенное число s = s + n
· если оно меньше min, то min = n,
· если оно больше max, то max = n,
e. повторяем цикл до тех пор, пока n # 0 – это и будет условием продолжения цикла.
Создадим интерфейс этой задачи – взаимодействие программы с пользователем, то есть что должно выводиться на экран: