
- •Структура программы
- •Главная программа
- •Внешние процедуры
- •Процедуры-функции
- •Пример функции
- •Процедуры-подпрограммы
- •Пример подпрограммы
- •Параметры процедур
- •Implicit none
- •Интерфейсы
- •Interface
- •Interface
- •Внутренние процедуры
- •Implicit none
- •Встроенные функции
- •Пример присоединения объектов модуля.
- •Implicit none
- •Implicit none
- •Implicit none
Пример присоединения объектов модуля.
В модульной подпрограммеввести одномерный вещественный массив из файлаin.txt; разделить элементы массива на максимальный элемент этого массива и вывести максимальный элемент и преобразованный массив.
В главной программе: ввести длину массива из файлаin.txtи обратиться к подпрограмме.
В этом проекте две самостоятельные программные единицы – модуль Moи главная программаForModule, которые:
могут быть отдельными текстами и компилироваться порознь, но модуль должен компилироваться раньше главной программы;
могут быть единым текстом, но модуль должен располагаться перед главной программой.
Модуль Mo содержит модульную процедуру ProArray, которая размещена внутри модуля. ПроцедураProArray–без параметров. Интерфейс модульной процедуры считается явным и его описывать не надо.
Все объекты размещены в модуле.
Главной программе ForModule, использующей модуль, доступен объект dARR (public). Локальная (private) переменная модуляMaxim доступна в модульной процедуреProArrayи недоступна в программеforModule
Динамический массив ARR локализован в процедуреProArray. Его длина (переменнаяdARR) определена до входа в подпрограмму. Командыallocate и deallocateне нужны – динамический массив размещается автоматически при входе в подпрограмму и освобождается при выходе.
Module Mo
Implicit none
Integer, public :: dARR ! длина массива
Integer, public :: num_ar ! порядковый номер массива
Real, private :: Maxim ! максимальный элемент, локальный
Contains ! модульная подпрограмма
Subroutine ProArray
Implicit none
Real,dimension(1:dARR)::ARR ! динамический автоматический массив
Read(1,*) ARR
Write(2,2) num_ar, ARR ! ввод и вывод массива ARR
Maxim = MaxVal(ARR)
Write(2,3) Maxim
ARR = ARR / Maxim
Write(2,4) ’ Преобразованный массив ’, ARR
2 format(/’ Массив №’, i5/ ( 6F8.1) )
3 format(’ max элемент ’,F8.1)
4 format(A / ( 6F8.1) )
End Subroutine proArray
end Module Mo
Program forModule
use Mo ! использует модуль Mo, доступны: dARR , num_ar, процедура proArray
Implicit none
Open(1,File='In.txt') ! файл исходных данных
Open(2,File='Out.txt') ! результирующий файл
num_ar = 0
do ! бесконечный цикл
num_ar = num_ar + 1
Read(1,*, end=10) dArr
Call ProArray
enddo
10 write(2,*) ‘все данные прочитаны’
End Program forModule