Задача. Подсчитать количество отрицательных чисел, введенных с клавиатуры (количество чисел равно 10).
Необходимые действия:
Ввести переменную (счётчик), задать начальное значение счётчика равным нулю.
Организовать цикл, количество повторений которого равно количеству введённых чисел.
Каждое введенное число проверять на знак, в том случае, если число отрицательное, увеличивать счётчик на единицу.
Выйдя из цикла проверить значение счётчика. Если счётчик равен нулю, следовательно отрицательные числа в вводимой последовательности отсутствовали, иначе выводим на экран значение счётчика.
На рисунке 4.3 представлен алгоритм решения задачи.
Пример. С клавиатуры последовательно вводятся целые числа. Вычислить сумму чисел, кратных трём.
Текст программы.
PROGRAM NN;
USES CRT;
VAR
a, K, S, i: integer;
BEGIN
clrscr;
K:=0;
S:=0;
FOR i:=1 TO 10 DO
BEGIN
write('задайте значение переменной a: ');
readln(a);
IF a mod 3 = 0 THEN
BEGIN
K:=K+1;
S:=S+a
END;
END;
IF K=0 THEN
writeln('чисел кратных 3 нет.')
ELSE
writeln('сумма чисел кратных 3 = ', S);
writeln('Нажмите любую клавишу для выхода...');
readln;
END.
Обратите внимание: кроме переменной S вводится переменная К, которая служит счётчиком для подсчёта чисел кратных трём. Если счётчик остался равным нулю, это означает, что в последовательности не было чисел, кратных трём.
Алгоритм вычисления n!.
Напомним, что .
Принято считать: что 0!=1.
Алгоритм вычисления практически не отличается от алгоритма вычисления суммы, действие сложения заменяется действием умножения, а начальное значение переменной, в которой будет накапливаться произведение, естественно, равно 1.
Текст программы.
PROGRAM FACT;
USES CRT;
VAR
F, i: integer;
BEGIN
clrscr;
F:=1;
FOR i:=1 TO 5 DO
F := F * i;
writeln('Факториал 5 (5!) = ', F);
writeln('Нажмите любую клавишу для выхода...');
readln;
END.
Алгоритм вычисления an.
Алгоритм вычисления , где n — натуральное число. , т.е. это произведение n одинаковых сомножителей.
Следовательно, используем предыдущий алгоритм, внеся необходимые коррективы.
PROGRAM DEGREE;
USES CRT;
VAR
a: integer; {основание}
n: integer; {показатель степени}
W: integer; {результат }
i: byte; {счетчик цикла}
BEGIN
clrscr;
write('ведите число: ');
readln(a);
write('введите степень: ');
readln(n);
W:=1;
FOR i:=1 TO n DO
W := W * a;
writeln(a,' в степени ', n, ' равно ', W);
writeln('Нажмите любую клавишу для выхода...');
readln;
END.
Примеры.
Вычислить:
...
S:=0; { переменная для накопления суммы }
F:=1; { переменная для накопления }
FOR I:=1 TO 5 DO
BEGIN
F:=F*I; {используем два базовых алгоритма}
S:=S+F {вычисления n! и вычисления суммы}
END;
Вычислить: a(a-1)(a-2)...(a-(n-1)), где a - действительное число.
...
readln(a);
p:=1;
for i:=1 to n do
p:=p*(a*(i-1));
Итак, достаточно подробно рассмотрена конструкция цикла со счетчиком, а также примеры использования этой конструкции. При использовании конструкции цикла со счетчиком необходимо помнить о том, что число повторений цикла известно к началу его выполнения. Однако часто число повторений тела цикла неизвестно заранее и определится в процессе реализации циклического алгоритма.
4.3. Циклы с предварительной и последующей проверкой условия
Рассмотрим такую задачу.
Определить количество натуральных чисел, сумма которых превысит 100, если суммирование началось с единицы и каждое слагаемое на единицу больше предыдущего.
Чем отличается задание от предыдущих?
Алгоритм суммирования тот же самый, но в данном случае неизвестно количество слагаемых. Конструкция цикла со счетчиком для заданий такого типа не годится.
Для решения такого рода задач в языке Турбо Паскаль имеются две конструкции: конструкция цикла с предварительной проверкой условия и конструкция цикла с последующей проверкой условия.