- •Алгоритм накопления суммы:
- •Вычисление целочисленных степеней (алгоритм накопления произведения)
- •Алгоритм вычисления количества элементов (счетчик)
- •Программирование алгоритмов со структурой вложенных циклов
- •Операторы форматного ввода/вывода
- •Оператор Формат
- •Спецификация I
- •Спецификация f
- •Спецификация e
- •20 Format(1x,a/) ! пропустить первый символ и напечатать текст строки
- •Группы спецификаций (использование повторителя)
- •Запись повторяющихся спецификаций и групп спецификаций
Лекция 6. Примеры программ с циклическим алгоритмом.
Вывод по формату.
Решение практических задач сводится к использованию некоторого набора типовых приемов, облегчающих процесс программирования. Рассмотрим наиболее часто встречающиеся задачи с использованием циклического алгоритма.
Табулирование функции
Первый пример – табулирование функции – был подробно рассмотрен в предыдущей лекции и здесь на нем не будем останавливаться, см. Лекцию 5 данного курса.
Вычисление суммы конечного числа слагаемых (алгоритм накопления суммы)
Рассмотрим сумму конечного числа слагаемых:
(1)
Здесь an – слагаемое или общий член суммы с номером n. n меняется в данной сумме от значения p до значения q с шагом 1. В математике принята следующая сокращенная запись такой суммы:
Здесь an - слагаемое или общий член суммы с номером (индексом суммирования) n. n – номер слагаемого в сумме, p - номер первого слагаемого в сумме, q – номер последнего слагаемого в сумме. Вычислять данную сумму будем последовательно, добавляя очередное слагаемое к ранее вычисленному значению суммы.
Алгоритм накопления суммы:
(3)
Пусть вычислено значение суммы Sn-1 первых слагаемых от p-того до (n-1)-го слагаемого включительно, тогда следующее значение суммы с добавлением следующего слагаемого an будет равно Sn = Sn-1 + an.
Это так называемый алгоритм накопления суммы, аналогичный алгоритму накопления определенной суммы денег на счете банковской карты: каждое последующее перечисление денег увеличивает сумму на величину перечисленных денег.
Так как при вычислении на компьютере не обязательно сохранять каждое вычисленное значение суммы в отдельных ячейках памяти, то для хранения значения суммы выделим одну ячейку памяти S, и в расчетных формулах опустим индексы (номера),
S=S+a – рекуррентная формула накопления суммы: каждое последующее значение суммы вычисляется через предыдущее. Как правило, начальное значение S=0 (Sn-1=0, при n=1).
Рассмотрим подробнее на конкретном примере.
Пример 1. Вычислить значение суммы .
Блок-схема задачи:
Запишем программу:
program SUM1
S = 0
do n=1, 20
S = S + n**2
enddo
print *,’ S=’,S
end
При решении используем принцип накопления, при котором вычисленное слагаемое в цикле прибавляется к сумме всех предыдущих, т.е. . Здесь Sn и Sn-1 надо представить в виде простых переменных, поэтому оператор присваивания, накапливающий сумму, должен иметь вид (an = n2). Параметр цикла n одновременно является и индексом суммирования. Перед первым выполнением оператора цикла, начальное значение S должно быть равно нулю. Следовательно, перед циклом должен стоять оператор присваивания S = 0, а оператор внутри тела цикла – накапливает сумму.
Рассмотрим данную программу «по шагам». В этом примере находим сумму , т.е. Sn = S1 + S2 + S3 + … + S20 = 12 + 22 + 32 + 42 + … + 202 = 1 + 4 + 9 + 16 + … + 400. Таким образом,
Шаг 1. S присваивается значение, равное 0 (S = 0).
Шаг 2. Счетчику цикла n присваивается начальное значение n = 1 при первом проходе цикла.
Шаг 3. Рассчитывается новое значение переменной S = 0 + 12 = 1 (добавлено первое слагаемое).
Шаг 4. На 2-ом проходе цикла n становится равным 2 (n = 2) и в цикле происходит добавление следующего слагаемого в переменную S: S = 1 + 22 = 5 (сумма двух слагаемых).
Шаг 5. На 3-ем проходе цикла n = 3, S становится равной S = 5 + 32 = 14 (сумма трех слагаемых).
и т.д. до последнего прохода цикла. Последний раз в переменную S добавится последнее слагаемое 202 = 400 (n = 20) и сумма полностью посчитается. Цикл завершится.
Последний шаг. Вывод значения суммы S.
Заметим, что начальное значение переменной суммы до цикла задается равным нулю для того, чтобы при первом проходе цикла в переменную S не добавилось ничего лишнего к результирующей сумме. По правилам оператора присваивания, сначала вычисляется выражение, находящееся справа от знака равенства, т.е. S + a, а потом вычисленный результат присваивается переменной, стоящей слева от знака равенства, т.е. переменной S присваивается новое значение, увеличенное на слагаемое a. Т.е. если сначала S ≠ 0, то это число добавится в сумму и окончательный результат будет неверным.