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

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

<Вычисление pos, neg и ze>

! См. разд. 2.2.4

end subroutine vapeg

 

2.3.3. Использование модулей

Модули могут объединять в себе данные и процедуры, которые выполняют обработку объявленных в модуле данных. Программная единица, в которой присутствует оператор USE имя-модуля, получает доступ к не имеющим атрибута PRIVATE данным и процедурам модуля.

Рассмотрим пример использования модуля для записи фрагмента алгоритма. Вернемся для этого к задаче разд. 2.1. В ней можно выделить два фрагмента:

1°. Начало.

2°. Ввести и проверить введенные значения границ отрезка a, b и шага dx. 3°. Если введенные данные не содержат ошибок, то

Выполнить начиная с точки x = a до точки b с шагом dx вычисление y и вывод значений x и y.

конец если 3°. 4°. Конец.

Записи линейных схем фрагментов 2° и 3° легко выполнить по приведенному в разд. 2.1 алгоритму.

Фрагмент 2° хорошо вписывается в концепцию модуля: он содержит данные и некоторый код, выполняющий обработку данных, часть из которых затем будет использована во втором фрагменте. Реализацию третьего фрагмента, как и ранее, выполним в главной программе.

module ched

! Модуль ввода и обработки данных

real a, b, dx

! Объявление данных модуля

real, private :: dxmin = 1.0e-4

 

contains

! Далее следует модульная функция

function moched( )

! ввода и обработки данных

logical moched

! Тип модульной функции

print *, 'Ввод границ отрезка и шага вычислений'

print '(1x, a, $)', 'Левая граница: '

read *, a

 

print '(1x, a, $)', 'Правая граница: '

read *, b

 

print '(1x, a, $)', 'Шаг вычислений: '

read *, dx

! Результирующая переменная moched равна

moched = .false.

if(dx < dxmin) then

! .FALSE., если есть ошибки в данных

print *, 'Ошибка при задании шага' else if(a >= b) then

print *, 'Ошибка при задании границ отрезка'

else

 

moched = .true.

! Если нет ошибок в данных

41