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

Fortran для персонального компьютера

..pdf
Скачиваний:
22
Добавлен:
15.11.2022
Размер:
12.5 Mб
Скачать

ЗАМЕЧАНИЯ

Оператор STRUCTURE определяет новый тип перемен­ ной, называемый "структура"; это не является собственно объ­ явлением специфической переменной программы. Структура образуется из элементов. Простейшим элементом является

простой тип переменной языка ФОРТРАН с фиктивным име­ нем, например:

STRUCTURE /full name/ CHARACTER*lSTfirst name CHARACTER*20 last “name

END STRUCTURE

Элемент может быть оператором RECORD, в котором есть ссылка на ранее описанный тип:

STRUCTURE /full_address/ RECORD/full name/ personsname RECORD /address/ ship to INTEGERS age

INTEGER*4 phone END STRUCTURE

Элемент также может быть объединением нескольких отображений переменных.

Имена переменных являются локальными для структу­ ры, вкоторой они указаны. Конфликта не возникает, если одно и то же имя элемента появляется в нескольких структурах. Встроенные структуры могут иметь элементы с одинаковыми именами. Конкретный элемент специфицируется путем пере­ числения последовательности элементов, требуемых для "до­ стижения" заданного элемента; последовательность разделя­ ется точками.

Элемент не отличается от любой другой переменной того же типа. При указании элемента структуры в выражении ее тип есть тип элемента. При передаче в качестве фактичес­ кого аргумента он должен совпадать с типом формального па­ раметра, последовательностью и размерностью.

Длина структуры не может превышать 65.536 байт. Сю­ да включаются все данные, плюс любые дополнительные бай­

ты.

Способы, которыми структура сохраняется в памяти, контролируются при помощи метакоманды $РАСК и опцией /Zp командной строки.

СМ. ТАКЖЕ

Операторы МАР. .END MAP, RECORD, UNION...END UNION, $РАСК.

4.2.Б.2 Описание переменных типа произвольных записей. Оператор RECORD.

ДЕЙСТВИЕ Специфицирует тип структуры, определяемый пользо­

вателем, для имен, определяемых пользователем.

отображений в следующем объединении содержит три пере­ менных типа K'bAL*©.

UNION

MAP

REAL*8 meg, jo, amy END MAP

MAP

REAL*8 manny, moc, jack END MAP

END UNION

CM. ТАКЖЕ

UNWN^E?|lD'y>NIOSN R l,C T l,R E ' ' ' EN D STRl,CTU feE-

4.2.6.2 Отображение нескольких переменных в одной области памяти. Оператор UNION..END UNION

ДЕЙСТВИЕ

Предписывает двум или более отображениям занимать одну и ту же область памяти.

СИНТАКСИС UNION

<Tnap-statement>

< map-statement> [<map-statement>]

END UNION

где <map-statement> - объявление отображения.

ЗАМЕЧАНИЯ

Блок UNION может указываться только внутри блока

STRUCTURE.

Каждый блок UNION должен завершаться собственным оператором END UNION; единственный оператор END UNION не может использоваться для завершения нескольких блоков UNION.

Оператор UNION совпадает с оператором EQUIVALENCE: оба выполняют операцию размещения одной итой же области памяти для нескольких переменных. Однако, отображения могут содержать группу последовательных пере­ менных, что предоставляет пользователю возможность боль­ шей гибкости при присваивании значений переменным в од­ ной и той же области памяти.

СМ. ТАКЖЕ

Операторы MAP...END MAP, STRUCTURE...END STRUCTURE, $РАСК.

4.2.7Изменение правил умолчания.

Оператор IMPLICIT

ДЕЙСТВИЕ Задает для объявленного пользователем имени тип,

принимаемый по умолчанию.

встроенную функцию в качестве параметра. Каждое опреде-

^ ° ? х ^ ьзователем имя должно указываться в операторе только один раз. Имя, указанное в операторе

INTRINSIC, не может быть указано в операторе EXTERNAL. Все имена, используемые в операторе INTRINSIC, должны быть именами встроенных функции, ’’известных системе” Список этих функций приведен в главе 5.

ПРИМЕР

INTRINSIC SIN, COS rezult = Calc2 (SIN, COS)

4.2.9Описание именованных констант.

Оператор PARAMETER.

ДЕЙСТВИЕ

Задаст константе символическое имя.

СИНТАКСИС

PARAMETER (<name>=<expression> [ ,<name>=<expression> ]...) где <name> — Символическое имя.

<cxpression> — Выражение. Выражение <cxpression> мо­ жет включать только символические имена, если они ранее определены в операторе PARAMETER в том же программном модуле. Если выражение есть символьная константа, она мо­ жет содержать не более 1957 байт.

ЗАМЕЧАНИЯ

Если тип выражения <expression> отличается от типа имени <лаше>, то любые операции преобразования типов вы­ полняются автоматически.

В отличие от оператора DATA (объявляет начальное значение для переменной) оператор PARAMETER устанав­ ливает фиксированные значения для символических кон­ стант. Любая попытка изменить символическую константу при помощи оператора присваивания или оператора READ приведет к ошибке этапа компиляции. Символическое имя не может иметь структурный тип и может не указываться в спе­ цификации формата.

ПРИМЕР

PARAMETER (nblocks= 10)

REAL mass

PARAMETER (mass = 47.3, pi = 3.14159)

4.2.10Описание автоматических переменных.

Оператор AUTOMATIC.

ДЕЙСТВИЕ

Объявление специфицируемых переменных как нахо дящихся в стеке, а не как размещенных в статической ооласти памяти.

СИНТАКСИС

AUTOMATIC [<names>]

где <names> — Список переменных или имен массивов, кото­ рые определены как "автоматические”. Если указано более одной переменной, то они разделяются запятыми.

ЗАМЕЧАНИЯ

В языке ФОРТРАН фирмы Microsoft все переменные определены по умолчанию как статические.

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

Если оператор AUTOMATIC не содержит ни одного име­ ни переменной, то все переменные внутри этого программного модуля (головной программы или отдельной подпрограммы), которые могут быть автоматическими, будут автоматически­ ми неявно.

В операторе AUTOMATIC не разрешено использовать имена блоков общего пользования и имена общих переменных.

Переменная не может указываться одновременно в опе­ раторах SAVE и AUTOMATIC.

Переменные с атрибутами ALLOCATABLE, EXTERNAL, FAR или HUGE не могут быть автоматическими.

Переменная, которая была явно описана как автома­ тическая, не может появляться в операторе DATA. Перемен­ ные. являющиеся автоматическими явно и появляющиеся в операторе DATA, будут инициализироваться и помещаться в статическую память.

Формальные параметры и имена процедур не могут ука­ зываться в операторе AUTOMATIC.

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

ПРИМЕР В данном примере все переменные внутри программного

модуля являются автоматическими, за исключением "dark" и "lois". Они явно объявлены в операторе SAVE и поэтому разме­ щаются в статической памяти:

INTEGER FUNCTION Fibonacci (dark, lois) AUTOMATIC

SAVE dark, lois

CM. ТАКЖЕ Оператор SAVE.

4.2.11Описание сохраняемых переменных.

Оператор SAVE.

ДЕЙСТВИЕ

Обуславливает возможность сохранений переменными своих значений в промежутках времени между активизаци­ ями процедуры, в которой эти переменные определены.

СИНТАКСИС

SAVE [<names>]

где <names> — одно или более имен общих блоков (заключены в слэши), переменных или массивов. Если указывается не­ сколько имен, то они должны быть разделены запятыми. После сохранения поименованные переменные и все переменные в поименованном общем блоке имеют заданные значения, если текущая процедура активизируется повторно.

По умолчанию в качестве значений <names> принима­ ются имена всех элементов, используемых в текущем прог­ раммном модуле.

ЗАМЕЧАНИЯ

Оператор SAVE не позволяет многократно указывать: —элементы; —имена формальных параметров; —имена процедур;

—имена объектов в общем блоке,

—имена, указываемые в операторе AUTOMATIC.

Общий блок, сохраняемый в одной процедуре (функ^ ции) исполняемой программы, должен сохраняться в каждой процедуре (функции), ’’содержащей" данный общий блок в исполняемой программе.

ПРИМЕЧАНИЕ

В языке ФОРТРАН все переменные сохраняются по умолчанию. Оператор SAVE обеспечивает возможность сде­ лать программу переносимой.

СМ. ТАКЖ Е

Оператор AUTOMATIC.

4.3 Вставка содержимого заданного файла. Оператор INCLUDE.

ДЕЙСТВИЕ

Выполняется вставка содержимого специфицированно­ го текстового файла в позиции оператора INCLUDE.

СИНТАКСИС

ЛЛПТП LJ

INCLUDE ’<filename>’

где <filcname> — Имя текстового файла на языке ФОРТРАН, включаемого в программу (заключается в апострофы).

а.? Д ^ ? 4 ^ ^ ы9чМассивы не могут появляться в операто­ рах AUTOMATIC, COMMON, DATA или EQUIVALENCE.

Попытка переразметить ранее размещенный массив приводит к ошибке этапа исполнении. Любая неудача при вы­ полнении операции размещения приводит к ошибке этапа ис­ полнения, если, однако, нс задана опция STAT=. Переменная <ierr> возвращает значение ноль, если операция размещения

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

4.4.2Освобождение использованной памяти.

Оператор DEALLOCATE.

ДЕЙСТВИЕ

Освобождение области памяти, ранее зарезервирован­ ной при помощи оператора ALLOCATE.

СИНТАКСИС

DEALLOCATE(<arravlist> [,STAT = <icrr> ])

где <arraylist> — Список имен размещаемых массивов; если указано несколько имен, то они разделяются запятыми.

<ierr> — Целочисленная переменная, возвращающая ста­ тус попытки переразмещения.

ЗАМЕЧАНИЯ Попытка переразмсстить массив, который не был ранее

размещен, приводит к возникновению ошибки этапа испол­ нения. Любая ошибка при переразмещении вызывает ошибку этапа исполнения, если, однако, не указан параметр STAT=. Переменная <ierr> возвращает значение 0, если операция пе­ реразмещения была выполнена успешно; в противном случае возвращается номер ошибки этапа исполнения.

Если на. размещаемый массив задается ссылка в тот мо­ мент, когда он нс является размещенным, результаты могут оказаться непредсказуемыми.

ПРИМЕР

INTEGER dataset!ALLOCATABLE ] INTEGER reactor, level, points, error DATA reactor, level, points /10, 50, 10/

ALLOCATE (datasct( 1rreactor, 1ilevcf, 1:points), STAT = error)

DEALLOCATE (dataset, STAT = error)

4.5Операторы управления.

4.5.1Структурный условный оператор.. Оператор IF THEN ELSE (блочный оператор IF/.

ДЕЙСТВИЕ Начинает выполнение операторов в блоке Тг, если вы-

ражение.<схргс58юп> вычисляется Со значснием '’истина'’- пе­ редает управление в следующий ELSE', ELSE IF или END 1г