Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
современный фортран , Бортеньев.pdf
Скачиваний:
242
Добавлен:
26.03.2015
Размер:
2.34 Mб
Скачать

О. В. Бартеньев. Современный ФОРТРАН

Таблица 2.1. Некоторые логические операции и операции отношения

Операции

 

Запись на Фортране

 

Типы операций

 

 

 

 

 

=, , >, <, ,

.EQ.,

.NE., .GT., .LT., .GE.,

.LE.

Отношения

 

==,

/=, >,

<,

>=,

<=

 

НЕ (отрицание)

.NOT.

 

 

 

 

Логическая

И

.AND.

 

 

 

 

"

 

 

 

 

 

 

 

ИЛИ

.OR.

 

 

 

 

"

 

 

 

 

 

 

 

Пример ветвления "если - то". Определить, какое из трех заданных чисел ma, mb и mc является наименьшим.

Алгоритм:

1°. Начало.

2°. Найти наименьшее из трех чисел и присвоить результат переменной m3. 3°. Если ma равно m3, то вывести сообщение "Число ma".

4°. Если mb равно m3, то вывести сообщение "Число mb". 5°. Если mc равно m3, то вывести сообщение "Число mc". 6°. Конец.

Данный алгоритм позволяет найти и вывести все числа, значения которых равны минимальному.

program fimin

real :: ma = 5.3, mb = 7.6, mc = 5.3, m3

m3 = min(ma, mb, mc) ! Вычисление минимума if(ma == m3) write(*, *) 'Число ma'

if(mb == m3) write(*, *) 'Число mb' if(ma == m3) write(*, *) 'Число mc' write(*, *) 'Минимум равен ', m3 end program fimin

Результат:

Число ma Число mc

Минимум равен 5.300000

2.2.3. Цикл

Цикл - повторное выполнение БОК, завершаемое при выполнении некоторых условий. Однократное выполнение БОК цикла называется итерацией. Операторы и конструкции БОК цикла также называются телом цикла.

Различают 3 вида циклов:

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

цикл "пока";

цикл "до".

32

2. Элементы программирования

2.2.3.1. Цикл "с параметром"

В цикле "с параметром р" задаются начальное значение параметра ps, конечное значение параметра pe и шаг s - отличная от нуля величина, на которую изменяется значение параметра р после выполнения очередной итерации. Параметр р также называют переменной цикла, которая имеет целый тип. Параметры ps, pe и шаг s являются выражениями целого типа.

Графически цикл "с параметром" иллюстрирует рис. 2.2.

Повтор

p = ps, pe, s

Выход

 

 

БОК

Рис. 2.2. Цикл с параметром

Цикл "с параметром" работает так (случай s > 0):

1°. Присвоить: p = ps.

2°. Если p pe, то перейти к п. 3°, иначе завершить цикл. 3°. Выполнить БОК.

4°. Присвоить: p = p + s и перейти к п. 2° (повтор).

Когда s < 0, п. 2° выглядит так:

2°. Если p pe , то переход к п. 3°, иначе завершить цикл.

Замечания:

1.В цикле "с параметром" приведенные в пп. 1° и 4° операторы в тексте программы не присутствуют, но будут автоматически встроены компилятором в объектный код при компиляции программы.

2.В цикле "с параметром" запрещается в теле цикла менять значения

переменной цикла p. Изменение параметров ps, pe и шага s в теле цикла не отразится на выполнении цикла: цикл будет выполняться с теми значениями параметров, какие ониимели до начала первой итерации цикла.

Запись цикла "с параметром" в линейной схеме алгоритма:

Х°. С параметром p = ps, pe, s [выполнить:] БОК

конец цикла [с параметром p] | [Х°].

Наиболее часто цикл "с параметром" записывается так:

DO p = ps, pe [, s]

БОК

END DO

33

О. В. Бартеньев. Современный ФОРТРАН

При отсутствии шага s его значение устанавливается равным единице.

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

Пример. Вычислить длину состоящей из n отрезков ломаной линии. Длины отрезков линии составляют последовательность a, 4a, ..., n2a.

Пусть L - искомая длина ломаной линии. Очевидно, если первоначально положить L = 0, то, выполнив n раз оператор

L = L + i2 * a (i = 1, 2, ..., n),

(*)

где i - номер отрезка ломаной линии, мы получим искомый результат. Для n-кратного выполнения оператора (*) следует использовать цикл. Наиболее подходит для данной задачи цикл "с параметром", в котором в качестве параметра используется номер отрезка ломаной линии.

Алгоритм:

1°. Начало.

 

2°. Ввести значения n и a.

 

3°. Принять L = 0.0.

! L - длина ломаной линии

4°. C параметром i = 1, n, 1 выполнить:

! i - номер отрезка

L = L + i**2 * a

 

конец цикла 4°.

 

5°. Вывод L.

 

6°. Конец.

 

program polen

! Программная реализация алгоритма

integer i, n

 

real a, L

! L - длина ломаной линии

write(*, *) 'Введите a и n:'

 

read(*, *) a, n

 

L = 0.0

 

do i = 1, n

 

L = L + i**2 * a

 

end do

 

write(*, *) ' L = ', L

 

end program polen

 

Замечание. Скорость выполнения программы можно увеличить, если:

вынести из цикла операцию умножения на переменную a, значение которой в цикле не изменяется;

заменить операцию возведения в квадрат i**2 на более быструю операцию умножения i * i.

34

2. Элементы программирования

Тогда фрагмент модифицированной программы будет таким:

L = 0.0 do i = 1, n

L = L + i * i end do

write(*, *) ' L = ', L * a

2.2.3.2. Циклы "пока" и "до"

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

БОК

ЛВ Л

И

И

ЛВ

 

БОК

Л

аб

Рис. 2.3. Циклы "пока" и "до": а - цикл "пока"; б - цикл "до"

Замечание. При работе с циклами "пока" и "до" надо следить, чтобы ЛВ обязательно рано или поздно приняло значение ложь. Иначе произойдет зацикливание - "бесконечное" выполнение операторов цикла.

Запись циклов "пока" и "до" в линейной схеме алгоритма и на Фортране:

Цикл "пока":

Цикл "до":

Х°. Пока истинно ЛВ [, выполнять:]

Х°. Выполнять:

БОК

БОК

конец цикла Х°.

если ложно ЛВ, то выход из цикла

 

конец цикла Х°.

DO WHILE(ЛВ)

DO

БОК

БОК

END DO

IF(.NOT. ЛВ) EXIT

 

END DO

35