Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция 5.doc
Скачиваний:
7
Добавлен:
20.03.2016
Размер:
217.6 Кб
Скачать

Пример присоединения объектов модуля.

В модульной подпрограммеввести одномерный вещественный массив из файлаin.txt; разделить элементы массива на максимальный элемент этого массива и вывести максимальный элемент и преобразованный массив.

В главной программе: ввести длину массива из файлаin.txtи обратиться к подпрограмме.

В этом проекте две самостоятельные программные единицы – модуль Moи главная программаForModule, которые:

  1. могут быть отдельными текстами и компилироваться порознь, но модуль должен компилироваться раньше главной программы;

  2. могут быть единым текстом, но модуль должен располагаться перед главной программой.

Модуль 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