Если оформляемый в виде подпрограммы фрагмент алгоритма возвращает более одного объекта данных, то такой фрагмент удобно оформить в виде процедуры. Передача данных и возвращение данных из процедуры выполняется через аппарат формальных и фактических параметров. Описание процедуры имеет вид:
![]() |
Процедура (подпрограмма) – это именованная программная единица, в заголовке которой присутствует оператор SUBROUTINE. |
Аналогично выглядит и структура подпрограммы-функции.
Обращение к процедуре представляет собой оператор
CALL < имя > (<список фактических параметров S>)
После оператора CONTAINS во внешней процедуре могут быть заданы внутренние процедуры и функции, вызов которых осуществляется только из подпрограммы, в которой они описаны.
ПРИМЕР:
Пусть заданы матрица размерности
и вектор
размерности
, вычислить
. Оформить в виде процедуры
произведение матрицы и вектора.
! Процедура умножения матрицы на вектор
SUBROUTINE PROD(N,A,B,C)
REAL(8) A(N,N), B(N), C(N)
INTEGER :: N, I, J
C=0
DO I=1, N
DO J=1, N
C(I)=C(I)+A(I,J)*B(J)
END DO
END DO
RETURN
END
! Вызывающая программа
PROGRAM PROD_A_B
! Описание переменных
INTEGER, PARAMETER :: N=3
REAL(8) A(N,N), X(N), X1(N)
CHARACTER (LEN=1)ST
ST='N'
PRINT *,' MATRIX PROD'
! Присоединение внешнего файла DAT.TXT
! к устройству В/В с номером 45
OPEN(45,FILE='DAT.TXT')
! Ввод данных из файла
READ(45,*) ((A(I,J),J=1,N),X(I),I=1,N)
! Вызов подпрограммы умножения матрицы на вектор
CALL PROD(N,A,X,X1)
! Вывод результата в файл DAT.TXT
PRINT *, 'RESULTS'
WRITE(45,'(<N+2>F6.2)') ((A(I,J),J=1,N),X(I),X1(I),I=1,N)
!Вывод результата на экран
WRITE(*,'(<N+2>F6.2)') ((A(I,J),J=1,N),X(I),X1(I),I=1,N)
1 CONTINUE
PRINT * ,'PRESS Y TO PROGRAM TERMINATE'
READ *, ST
IF (ST/='Y') THEN
GOTO 1
END IF
STOP
END
После выполнения этой программы в текстовом файле DAT.TXT(см. рисунок 1.9а) и на экране монитора(см. рисунок 1.9б) будут записаны исходные данные и результаты работы программы.
На рисунке показано содержимое файла DAT.TXT: исходные данные записаны выше черты, а результаты работы программы – ниже.
ЗАДАНИЕ:
1) Применить
программу для вычисления произведения матрицы размерности 44 и вектора размерности
4 :
,
.
2) Модифицировать программу, так чтобы при выводе в файл и на экран матрица А, данный вектор x и результирующий вектор были подписаны (вывод в файл см. рисунок 1.8в и вывод на экран см. рисунок 1.9г).