Кое-что о логике написания алгоритмов

 

Попробуем составить алгоритм решения первой задачи.

Задача 1: написать программу, которая вводит и суммирует 10 чисел.

 

Разбираем условие задачи.

  1. Исходные данные – 10 чисел. Для их хранения можно выделить память размером

10* РАЗМЕР_ЯЧЕЙКИ_ПОД_1_ЧИСЛО. Это, видимо, может быть массив. Но не будем делать поспешных выводов.

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

.........

      S=0

1:        ЧТЕНИЕ очередного значения  a

S=S+a

      ПОВТОРЯТЬ предыдущие 2 строки 10 раз         

      ПЕЧАТЬ  результата из S

 

НА ГЛАВНУЮ ДАЛЕЕ
Яндекс.Метрика
Hosted by uCoz