Fortran для персонального компьютера
..pdfЗАМЕЧАНИЯ
Оператор 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г