Программирование циклов

Цикл – многократное выполнение последовательности операторов (тела цикла) при соблюдении некоторого условия. В Фортране, как и в большинстве других процедурных языков программирования, различают три способа программирования циклов:

· цикл "с предусловием" или «цикл-пока»;

· цикл "с постусловием" или «цикл-до»

· цикл "с параметром".

Цикл "с предусловием" реализуется конструкцией DO WHILE ENDDO:

[имя:]DO WHILE (логическое _выражение)

БОК

END DO [имя]

Цикл "с предусловием" выполняется, пока истинно логическое выражение, определяющее условие повторения цикла. БОК образует тело цикла. Проверка истинности логического выражения происходит каждый раз перед выполнением тела цикла.

Оператор END DO можно писать как с пробелом, так слитно: ENDDO.

Пример 1. Табулирование функции y=sin(x) + x2 с использованием цикла с предусловием.

program Tabfunct1

reala,b,h,x,y

integer n

print *,'INPUT a,b,n: '

read *, a,b,n ! n шагов по Х на отрезке от a до b

write(*,'(6x,"x",16x,"y")')! Вывод шапки таблицы

x=a; h=(b-a)/n

do while (x<=b+1.0e-7) ! Цикл с предусловием

y=sin(x)+x*x

print *,x,' ',y

x=x+h ! Изменение аргумента функции

End do

End program

Цикл "с постусловием" отличается от цикла "с предусловием" тем, что проверка истинности логического выражения происходит после очередного выполнения тела цикла. Логическое выражение является условием окончания выполнения цикла. В Фортране не существует специальной конструкции цикла "с постусловием", но его можно реализовать, используя бесконечный цикл конструкции DO ... END DO следующим образом:

[имя:]DO

БОК

IF( логическое_выражение) EXIT

END DO [имя]

Здесь для прерывания работы цикла и передачи управления на следующий за циклом выполняемый оператор применяется оператор выхода из цикла EXIT. Если нужно про­пустить часть операторов цикла и перейти к началу тела цикла, то используется оператор возврата к началу цикла CYCLE. При этом управление передается операторам DO или DO WHILE. Операторы EXIT и CYCLE отдельно не применяются, а встраиваются в конструкции DO.

Пример 2. Табулирование функции y=sin(x) + x2 с использованием цикла с постусловием.

program Tabfunct2

reala,b,h,x,y

integer n

print *,'INPUT a,b,n: '

read *, a,b,n

write(*,'(6x,"x",16x,"y")')! Вывод шапки таблицы

x=a; h=(b-a)/n

do! Начало цикла

y=sin(x)+x*x

print *,x,' ',y

x=x+h

if(x>b+1.0e-7) exit!Условие выхода из цикла

End do

End program

Цикл "с параметром"в Фортране реализуется следующей конструкцией:

[имя:]DOр = рs, ре [, h]

БОК

END DO [имя]

Параметр р также называют переменной цикла, которая может иметь целый тип, стандартный вещественный или вещественный тип двойной точности. Здесь ps –начальное значение параметра цикла, pe – конечное значение параметра цикла, h – шаг изменения параметра цикла. Параметры рs, рe и шаг h могут быть арифметическими выражениями, которые приводятся к типу параметра цикла р. При отсутствии шага h его значение устанавливается равным единице.

Исполнение цикла с параметром происходит следующим образом:

1) вычисляются значения ps, ре и h;

2) параметру p присваивается значение ps;

3) если при h > 0 истинно отношение р <= ре (при h<pe истинно отношение р >= ре), то выполняется тело цикла (БОК) иначе происходит выход из цикла;

4) значение параметра цикла изменяется на величину шага, происходит возврат на выполнение п.3.

При использовании цикла с параметром необходимо учитывать следующие обстоятельства:

- значения ps, ре и h вычисляются только один раз при входе в цикл и внутри цикла меняться не могут;

- в теле цикла нельзя изменять значение параметра p;

- не следует входить внутрь цикла, минуя его заголовок (оператор DO).

Пример 3. Табулирование функции y=sin(x) + x2 с использованием цикла с параметром.

program Tabfunc

real a,b,x,y

integer n

print *,'INPUT a,b,n:

read *, a,b,n write(*,'(6x,"x",16x,"y")')

do x=a,b,(b-a)/n

y=sin(x)+x*x

print *,x,' ',y

End do

End program

Упражнения

1. Используя циклы с предусловием, с постусловием, с параметром составить три варианта программы вычисления N!.

2. Составить программу, по которой будет вводиться последовательность целых чисел до тех пор, пока не встретится число 9999. Подсчитать количество введенных значений и их сумму.

3. Вычислить сумму квадратов всех целых чисел, попадающих в интервал (ln x, ex), x > 1.

4. Вычислить количество точек с целочисленными координатами, попадающих в круг радиуса R (R > 0) с центром в начале координат.

5. Напечатать в возрастающем порядке все трехзначные числа, в десятичной записи которых нет одинаковых цифр.

6. Дано целое n > 2. Напечатать все простые числа из диапазона [2, n].

7. Рекуррентная последовательность определена следующим образом:

Программирование циклов - student2.ru

Для данного натурального n получить значение an.

8. Дана последовательность:

Программирование циклов - student2.ru

Вычислить произведение элементов с 1-го по 20-й.

9. Используя рекуррентный подход, вычислить сумму многочлена 10-й степени по формуле Горнера, где x –– данное вещественное число.

10x10 + 9x9 + 8x8 + ... + 2x2 + x = (((((((((10x + 9)x + 8)x + ... + 2)x + 1)x.

10. Для данного вещественного x и натурального N вычислить цепную дробь: x / (1 + x / (2 + x / (3 + x / ( ... / (N + x))...).

5. Вычислить и вывести все члены числового ряда

Программирование циклов - student2.ru

превышающие значение 10–5.

11. Функцию Программирование циклов - student2.ru можно вычислить как предельное значение последовательности, определяемой рекуррентной формулой

Программирование циклов - student2.ru

Начальное значение y0 задается произвольно (желательно ближе к Программирование циклов - student2.ru ). За приближенное с точностью e значение корня берется первое yk, для которого выполняется условие: |yk – yk-1| < e. Составить программу.

Наши рекомендации