При вычислении суммы n слагаемых действие сложение повторится n раз.
Предположим, что значение каждого числа задается случайным образом, но при этом для хранения каждого очередного числа используется только одна переменная a, т.е. каждое очередное значение присваивается этой переменной. Чтобы правильно решить задачу, следует помнить о том, что оператор S:=S+A; выполняется следующим образом: вычисляется правая часть, т.е. к значению переменной S добавляется значение переменной A и полученное значение присваивается переменной S. В некоторой переменной S накапливается значение суммы, т.к. суммировать предстоит n чисел.
Перечислим действия алгоритма:
1) переменной s присвоить значение 0.
2) организовать цикл, количество повторений которого совпадает с количеством слагаемых. В цикле получить значение очередного слагаемого и добавить его к сумме.
Используя этот алгоритм, решим частную задачу: вычислить сумму первых 10 чисел натурального ряда.
Переменную, в которой предстоит накапливать сумму 10 чисел, назовем S. Операция сложения будет выполняться 10 раз.
При первом прохождении тела цикла к переменной S добавляется a = 1. Получена первая промежуточная сумма S = 1.
При втором прохождении тела цикла к переменной S (равной 1) добавляется a=2, получаем следующую промежуточную сумму S=3, при третьем проходе тела цикла к переменной S=3 добавляется a=3 и вычисляется очередная промежуточная сумма S=6.
ОБРАТИТЕ ВНИМАНИЕ: сумма постепенно накапливается.
Рассуждения будут абсолютно верны только в том случае, если начальное значение переменной S равно 0. Только тогда при первом прохождении тела цикла будет получено значение переменной S равное первому слагаемому.
На рис. 4.2. представлен алгоритм нахождения суммы первых 10 членов натурального ряда.
Рис. 4.2. Схема алгоритма вычисления суммы первых 10 членов натурального ряда.
Запишем текст программы.
PROGRAM SUMMA;
USES CRT;
VAR
a, S: integer;
BEGIN
clrscr;
S:=0;
FOR a:=1 TO 10 DO
S := S + a;
writeln('сумма = ',S);
writeln('Нажмите любую клавишу для выхода...');
readln;
END.
Выполним трассировку алгоритма.
I прохождение цикла
II прохождение цикла
III прохождение цикла
a=1, S=0
S:=S+a
(1=0+1)
a=1+1 (шаг изменения)
a<=10? Да
a=2, S=1
S=S+a
(3=1+2)
a=2+1
a<=10? да
a=3, S=3
S=S+a
(6=3+3)
a=3+1
a<=10? да
(и т.д.)
X прохождение
Цикла
a=10, S=45
S=S+a
(55=45+10)
a=10+1
a<=10? Нет
выход из цикла
a=10, S=55
Пример 1. Вычислить сумму 12 целых чисел, введенных с клавиатуры. Алгоритм суммирования не изменяется. Изменился способ задания значений слагаемых. Для ввода чисел с клавиатуры используется процедура - оператор readln(a), который останавливает выполнение программы и ждет, пока пользователь введет с клавиатуры данные и нажмет Enter. Данные, введенные с клавиатуры, будут занесены в переменную a. Процедура - оператор Readln будет рассмотрен более подробно далее, а сейчас нужно лишь понимать для чего он служит.
PROGRAM SUMMA_2;
USES CRT;
VAR
a: integer; {введенное число}
i: integer; {счетчик цикла}
S: integer; {сумма}
BEGIN
clrscr;
S:=0;
FOR I:=1 TO 12 DO
BEGIN
write('задайте значение очередного слагаемого: ');
readln(a);
S:=S+a
END;
writeln('Сумма = ', S);
writeln('Нажмите любую клавишу для выхода...');
readln;
END.
Пример 2. Вычислить сумму натуральных чисел от 100 до 300.