Кое-что о логике написания
алгоритмов
Попробуем составить алгоритм решения
первой задачи.
Задача
1: написать программу, которая вводит и суммирует 10 чисел.
Разбираем условие задачи.
- Исходные данные – 10 чисел. Для
их хранения можно выделить память размером
10*
РАЗМЕР_ЯЧЕЙКИ_ПОД_1_ЧИСЛО. Это, видимо, может быть массив. Но не будем делать
поспешных выводов.
- Результат (сумма чисел) - 1
число. Соответственно, выделим память для хранения 1 числа.
- Сам алгоритм. Исполнитель вряд
ли сможет сложить все числа за одно действие. Следовательно, пусть
складывает по 2 числа. Тогда надо перебрать все числа. На горизонте
начинает маячить цикл – многократное выполнение одних и тех же действий (а
именно, сложение 2-х чисел). При этом во всех случаях, кроме первого
сложения, будет выполняться операция над результатом предыдущего сложения
и новым числом. Рассмотрим подробнее. 1) Складываем первое число со вторым.
S1=a1+a2. 2) Складываем S1
c третьим числом a3. А куда девать результат? Вводить
новую ячейку? Конечно же, нет! После выполнения операции 2 нам уже не
нужен результат предыдущей операции, находящейся в S1.
Вот туда и положим новый результат: S1=S1+a3.
И так далее. В результате получаем ОБЩУЮ ФОРМУЛУ действий для каждого из
чисел - берем предыдущий результат из некоторой переменной, складываем с очередным
числом и сумму кладем обратно: S=S+ai.
После перебора всех чисел в S и будет
находиться искомый результат.
- Теперь мы видим, что для
выполнения каждого шага нам нужны ТОЛЬКО результат предыдущей операции и
одно следующее число. Поэтому мы можем вернуться к вопросу, оставленному
без решения в п.1. Если у нас есть возможность брать очередное число из
внешнего хранилища (например, из головы заказчика) только тогда, когда оно нам
понадобится, мы НЕ БУДЕМ выделять память под все числа. Мы выделим ячейку a для одного числа, куда и будем по мере необходимости
подкладывать очередное яйцо (т.е. число, я хотел сказать). Вторую ячейку S выделим для результата
суммирования.
- Еще раз пробегаем по
последовательности действий:
- Читаем число ai
- S=S+ai
- Возвращаемся к п. а
- На первый взгляд, все выглядит
прекрасно. Но никогда не стоит доверять первому взгляду на прекрасное
(особенно, если прекрасное – женского пола). Либо Вы чего-то не заметили
(что чаще всего и бывает), либо Вы еще раз получите возможность вернуться
к началу этой фразы. Так и в нашем случае. Рассмотрим Самое первое
действие S=S+a1. a1 уже
прочитали в п.а, а вот значение в S остается загадкой. Если кто-нибудь ожидает, что туда
святой дух положил что-то, - то он либо неисправимый оптимист, либо… Ну а
если говорить по существу, перед первым сложением значения обеих ячеек
должны быть определены. Очевидно, что после первого сложения результат
должен быть равен 1-му числу. Это может быть только в одном случае – если значение
S равно 0.
- Теперь о том, сколько раз и как
повторять эту операцию. Так как мы при первом выполнении S=S+a1 задали значение S равно 0, повторять надо столько раз, сколько у нас
чисел, а именно 10. А вот как повторять – это уже может быть реализовано
разными способами и есть тема отдельного разговора.
.........
S=0
1: ЧТЕНИЕ очередного
значения a
S=S+a
ПОВТОРЯТЬ предыдущие 2 строки 10 раз
ПЕЧАТЬ
результата из S