Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка по Информатике.doc
Скачиваний:
4
Добавлен:
26.09.2019
Размер:
3.12 Mб
Скачать

3. Подпрограммы

Результатом выполнения как внутренней, так и внешней функции, представляемым с помощью указателя функции, является единственное значение. В случаях, когда требуется, чтобы результатом выполнения процедуры было несколько значений (например, массив), целесообразно использовать другую категорию процедур - подпрограммы. Результаты подпрограммы представлены формальными параметрами в ее определении (модуле-подпрограмме) и фактическими параметрами в обращении к ней. Обращение имеет вид оператора вызова подпрограммы, содержащего после ключевого слова CALL имя подпрограммы. За именем в скобках следует список фактических параметров (если подпрограмма имеет параметры). Действие данного оператора состоит в том, что подрограмма исполняется для заданных в нем фактических параметров; в результате этого параметры-результаты получают значения.

Методика построения подпрограммы отличается от методики построения внешней функции лишь в деталях. Если вновь обратиться к примеру 2, то можно построить программу решения с использованием взамен внешней функции подпрограммы CA нахождения среднего арифметического SA ненулевых элементов заданного массива (или его части):

Модуль-подпрограмма

SUBROUTINE CA (T, N, SA)

DIMENSION T(N)

SUM=0.

M=0

DO K = 1, N

IF ( T(K).NE.0 ) THEN

SUM = SUM+T(K)

M = M+1

END IF

END DO

SA=SUM/M

RETURN

END

Головной модуль

DIMENSION X(50), P(80)

OPEN (3, FILE = ‘XP.DAT’)

READ(3,*) X, P

CALL CA(X, 50, SAX)

CALL CA(P, 80, SAP)

C=SAX/SAP

PRINT*,’ C=’, C

CLOSE(3)

STOP

END

Именами SAX, SAP обозначены средние арифметические элементы массивов X и P соответственно.

Необходимо сравнить новый вариант программы с прежним и зафиксировать различия. В отличие от внешней функции в модуле-подрограмме не может быть оператора присваивания, в котором слева от литеры << = >> было бы указано имя подпрограммы, ибо это имя не обозначает какого-либо результата, а служит лишь для обращения к ней.

4. Рекомендации по программированию процедур фортраНа

Необходимо выявить вычисления, общезначимые для нескольких программных модулей, нескольких задач или хотя бы многократно используемые в одном модуле. Если последние могут быть сведены к одному оператору присваивания, то оперделить их в форме внутренней функции. С этой целью:

а) сгруппировать объекты данных (операнды выражений или образуемые ими части выражений), относящиеся к разным случаям вычислений, но играющие в схеме вычислений одну и ту же роль;

б) для каждой выделенной группы объктов с целью обобщенного представления любого из них выбрать имя - формальный параметр;

в) выбрать имя функции и порядок записи параметров;

г) в начале модуля объявить тип функции, тип ее формальных параметров, если только тип не задан неявно по первой букве имени;

д) до первого оператора, но после объявлений спецификаций, если таковые имеются в модуле, записать объявление внутренней функции.

Если общезначимые вычисления используются неколькими модулями (несколькими задачами), когда для их реализации необходима группа операторов, а результатом вычислений является единственное значение, то целесообразно определить их в форме модуля-функции (FUNCTION).

С этой целью необходимо:

а) разделить используемые в данных вычислениях объекты на локальные, т.е. участвующие только в этих вычислениях, и глобальные, т.е. используемые также и вне этих вычислениий;

б) выбрать для обозначения глобальных объектов (или построенных из их выражений) имена - формальные параметры* (обобщающие обозначения);

в) выбрать имя функции и последователность записи параметров, предварительно записав заголовок функции (предложение FUNCTION);

г) записать после него объявления спецификаций формальных параметров и локальных объектов, исключая те из них, которые являются простыми переменными с неявно заданным типом;

д) дать обобщенную запись вычислений, составляющих существо процедуры, завершив эту запись заключительной строкой END; в этой записи обязательно должен быть оператор присваивания, левой частью которого является имя определяемой процедуры-функции и оператор RETURN.

Если результатом вычислений является не одно, а несколько значений, целесообразно определить эти вычисления в форме подпрограммы. С этой целью:

а) аналогично предыдущему случаю выделить локальные и глобальные объекты, используемые в вычислениях; для глобальных объектов выбрать имена - формальные параметры;

б) среди формальных параметров предусмотреть требуемое количество параметров - результатов, которым будут присваиваться (или задаваться иным способом) значения, являющиеся результатом вычислений;

в) выбрать имя подпрограммы и последовательность записи параметров; записать заголовок подпрограммы (предложение SUBROUTINE);

г) аналогично предыдущему случаю после заголовка процедуры поместить объявления спецификаций локальных объектов и формальных параметров (но среди них указать и параметры-результаты) и обобщенную запись вычислений, составляющих существо процедуры; отличие от предыдущего случая в том, что в этой записи должны быть предусмотрены операторы присваивания значений параметрам-результатам (но не имени подпрограммы!).

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

5. Задание на выполнение лабораторной работы

1. В указанной преподавателем формуле из перечня заданий выявить вычисления, подобные по схеме, т.е. различающиеся лишь объектами обработки. Во всех предлагаемых формулах имеются 2-3 части такого рода (выделять наибольшие по размеру сходные части). В некоторых случаях сходство частей не вполне очевидно и для сведения к минимуму различий частей требуется преобразование записи формулы: вынесение знака за скобки, перегруппировка членов и т.д.

2. Проанализировав различия в объектах обработки, используемых в разных частях, установить формальные параметры и выбрать имена для обозначения последних с учетом типа параметров.

3. Записать объявление внутренней функции,

представляющей вышеуказанные вычисления в общем виде.

4. Заданную формулу представить в виде оператора присваивания, содержащего ссылки на объявленную внутреннюю функцию. Составить модуль, содержащий данный оператор, объявление внутренней функции, ввод и вывод данных.

5. Составить 2-й вариант программы, в котором взамен внутренней функции используется внешняя.

6*. Составить 3-й вариант программы, в котором взамен функции используется подпрограмма.

6. Перчень вариантов заданий

1)

2)

3)

4)

5)

6)

7)

8)

9)

10)

11)

12)

13)

14)

15)

16)

17) )

18)

19)

20)

21)

22)

23) )

24)

25)

26)

27)

28)

29)

30)