Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
31
Добавлен:
02.05.2014
Размер:
527.87 Кб
Скачать

27. Передача данных посредством оператора common

Оператор COMMONопределяет общий блок памяти для головной программы и подпрограммы. Его лучше использовать для передачи в подпрограмму массивов. Кроме того, черезCOMMONодин большой массив головной программы в подпрограмме можно представить как несколько массивов меньшей длины, или несколько массивов головной программы в подпрограмме можно объединить в один массив.

Пример:

Головная программа:Подпрограмма:

DIMENSION A(10),B(20),C(30),Y(10) SUBROUTINE SUB2(Y,N)

COMMON A,B,C DIMENSION Y(N),C(10)

… COMMON A(10),D(10),C,E(10,3)

CALL SUB2(Y,10)

В примере массив А передаётся в подпрограмму один к одному, а массив Dподпрограммы будет занимать одно и тоже место в оперативной памяти ЭВМ, что и первых 10 элементов массива В в головной программе.

Массив С в подпрограмме из 10 элементов (никакого отношения к С(10) головной программы не имеет) будет занимать память с В(11) по В(20) головной программы. В головной программе массив В содержит 20 элементов и в блоке COMMONголовной программы он будет занимать 20 ячеек памяти. В подпрограмме этому массиву будут соответствовать массивыD(10) и С(10).

Одномерный массив С(30) головной программы мы представляем в подпрограмме как двухмерный массив Е(10,3). В данном примере первый столбец Е будет содержать первые 10 элементов массива С(30).

Оператор COMMONдолжен быть как в головной программе, так и в подпрограмме. Различают общий блокCOMMONи помеченный блокCOMMON. В одной программной единице может быть один общий и несколько помеченных блоковCOMMON. В общем виде записывается:

COMMON список

COMMON /метка/ список

Пример:

COMMON /МЕТ1/ А,Х,В(20)

В COMMONможет стоять размерность массива, но если массивописан в COMMON, то егоне нужно описывать в DIMENSION.

Правило:

Список оператора COMMON головной программы должен соответствовать списку подпрограммы по следующим критериям:

  • по очерёдности следования

  • по типу данных.

Задача:

Получить двухмерный массив в головной программе Ci,j=Ai*Bjи отсортировать его по возрастанию, расположив элементы по столбцам. Сортировку произвести в подпрограмме. Передачу данных осуществлять при помощи оператораCOMMON.

С Головная программа

DIMENSION A(5),B(6),C(5,6)

COMMON C

В COMMON помещён массив С, который в памяти ЭВМ расположен по столбцам.

READ (5,*) A,B

DO 1 I=1,5

DO 1 J=1,6

1 C(I,J)=A(I)*B(J)

CALL SUB4

Управление передаётся подпрограмме. Список параметров отсутствует. Передача данных осуществляется посредством оператора COMMON.

После выполнения подпрограммы по оператору RETURN управление будет передано обратно в головную программу и далее будет выполняться оператор, следующий после CALL

С Вывод отсортированного массива

DO 3 I=1,5

3 WRITE (6,*) (C(I,J),J=1,6)

PAUSE

STOP

END

С Подпрограмма

SUBROUTINE SUB4

COMMON X(30)

Массив Х(30) в подпрограмме будет соответствовать массиву С(5,6) головной программы и элементы этого массива будут располагаться по столбцам массива С.

С Сортировка одномерного массива

DO 2 I=1,29

… (см. сортировку)

  1. CONTINUE

RETURN

END

Массив Х(30) занимает ту же память, что и С(5,6). Первые 5 элементов Х(30) – это первый столбец в С(5,6).

Если проведём сортировку одномерного массива, то после выхода из подпрограммы по RETURNмассив С(5,6) будет содержать те же численные данные, что и Х(30), отсортированные по столбцам.

Соседние файлы в папке Программирование на Фортране