- •Алгоритм накопления суммы:
- •Вычисление целочисленных степеней (алгоритм накопления произведения)
- •Алгоритм вычисления количества элементов (счетчик)
- •Программирование алгоритмов со структурой вложенных циклов
- •Операторы форматного ввода/вывода
- •Оператор Формат
- •Спецификация I
- •Спецификация f
- •Спецификация e
- •20 Format(1x,a/) ! пропустить первый символ и напечатать текст строки
- •Группы спецификаций (использование повторителя)
- •Запись повторяющихся спецификаций и групп спецификаций
Алгоритм вычисления количества элементов (счетчик)
По сути это частный случай алгоритма накопления суммы, где в качестве слагаемого принимается единица. Также как и для нахождения суммы, до цикла задается начальное значение равное нулю для переменной, заданной для подсчета количество элементов. Известно, что количество элементов – это всегда целочисленное значение. Например, вы подсчитываете число студентов в вашей группе, присутствующих на занятии – целое число, подсчет машин определенной марки на автостоянке – целое число и т.д. Таким образом, до цикла задаем начальное значение переменной k=0, а в цикле при выполнении условия подсчета, увеличиваем значение переменной на единицу: k=k+1. Рассмотрим алгоритм нахождения количества элементов на примере.
Пример 4. Вычислить отрицательные значения функции y = cosx, если значение переменной x меняется в промежутке x с шагом изменения равным .
Код программы:
program COUNT ! название программы
pi = 3.14159 ! задание значения константы π
k = 0 ! начальное значение счетчика
h=pi/4. ! шаг изменения x
do x= -2*pi, 2*pi+h/10., h ! do начало арифметического цикла do
y = cos(x) ! вычисление переменной y
if (y <= 0) k = k + 1 ! увеличение счетчика на 1, если y отрицательно
print *, ‘x=’,x,’ y=’,y ! контрольный вывод значений x и y
enddo ! do конец цикла do
print *,’ k=’,k ! вывод результата
end ! конец программы
Программирование алгоритмов со структурой вложенных циклов
Определение. Вложенный цикл – это цикл, внутри которого имеется один или несколько других циклов, которые называются внутренними и внешними.
Правильной структурой построения программ с вложенными циклами является такая, при которой область действия каждого внутреннего цикла полностью находится в области действия внешнего по отношению к данному внутреннему. Допустимы следующие структуры записи программ:
а) правильная структура (скобками показано начало и конец циклов)
1. DO 1 … ………. DO 2 … ……… DO 3 … ……….
3 ENDDO ……….. 2 ENDDO …………. 1 ENDDO |
2. DO 1 … ………. DO 2 … ……… 2 ENDDO ……….
DO 3 … ……….
3 ENDDO ……….. 1 ENDDO |
3. DO 1 … ………. DO 1 … ……… DO 1 … ……….
1 CONTINUE
|
б) недопустимая структура
4. DO 1 … ………. DO 2 … ……… 1 ENDDO ………. 2 ENDDO |
При организации программ с вложенными циклами необходимо обращать внимание на правильность выбора внешнего и внутреннего циклов. В некоторых задачах их можно менять местами, при этом алгоритм решения останется верным и результат в обоих случаях будет одинаковым. В большинстве случаев такая замена приводит к изменению алгоритма решения задачи и получению неверного результата.
Пример 5. Составить программу табулирования следующей суммы:
на интервале изменения x с шагом изменения равным .
Заметим, что в этой задаче внешним циклом является цикл с параметром x, изменяющимся от 0,1 до 3 и шагом 0,3, а внутренним циклом – накопление суммы.
Код программы (вариант 1):
program PRIMER5_1
do X = 0.1, 3., 0.3 ! начало внешнего цикла по X
S = 0 ! начальное значение суммы S
P = X ! расчет степени X в каждом сомножителе как в примере 2а)
do j = 2, 13 ! начало внутреннего цикла по j
P = P * X ! накопление степени X
S = S + P / j ! расчет суммы S
enddo ! конец внутреннего цикла
print *, ‘x=’,x,’ S=’,S ! вывод результата
enddo ! конец внешнего цикла по X
end
Код программы (вариант 2, без использования цикла для подсчета степени X):
program PRIMER5_2
do X = 0.1, 3., 0.3 ! начало внешнего цикла по X
S = 0 ! начальное значение суммы S
do j = 2, 13 ! начало внутреннего цикла по j
S = S + X**j / j ! расчет суммы S
enddo ! конец внутреннего цикла
print *, ‘x=’,x,’ S=’,S ! вывод результата
enddo ! конец внешнего цикла по X
end
Подумайте, какой из вариантов программы будет работать быстрее и почему.