- •Министерство образования Российской Федерации Южно-Уральский Государственный Университет Кафедра промышленной теплоэнергетики
- •Построение алгоритмов с простейшей структурой
- •1. Исходные понятия
- •Контрольные задания
- •2. Циклы в алгоритмах
- •3.Контрольные задания
- •4. Домашнее задание по лабораторной работе № 1
- •5. Указания к выполнению домашнего задания.
- •Перечень пунктов
- •Построение алгоритмов с разветвляющейся структурой.
- •1. Сущность разветвлений.
- •Элементы разветвлений
- •Построение разветвлённых циклов, управляемых параметром.
- •Контрольные задания
- •4. Программирование разветвленных алгоритмов
- •Print*, ' введите значение X '
- •Print*, ' введите значение X '
- •Домашнее задание по лабораторной работе №2
- •Лабораторная работа № 3 построение алгоритмов с итерационными циклами
- •Итерационные циклы
- •Контрольное задание по лабораторной работе
- •Контрольное задание
- •Домашнее задание по лабораторной работе № 3.
- •Перечень задач.
- •Лабораторная работа № 4 программирование процедур фортрана
- •1. Внутренние функции
- •7 Print*,’ Требуемое условие не выполняется’
- •7 Print*,’ Требуемое условие не выполняется’
- •2. Внешние функции
- •3. Подпрограммы
- •4. Рекомендации по программированию процедур фортраНа
- •Список литературы
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)