Открыть Электронные книги
Категории
Открыть Аудиокниги
Категории
Открыть Журналы
Категории
Открыть Документы
Категории
Алгазин,
В. В. Кондратьев
Программирование
на
VISUAL FORTRAN
МОСКВА • • 2008
УДК
ББК
А45
А лгазин С. Д ., К ондратьев В. В.
А45 П рограм м ирование на V isual Fortran. - М.: Д иалог-М И Ф И , 2008. - 472 с.
ISBN 978-5-86404-224-3
В книге описы вается новая версия Intel Fortran, которая вклю чает в себя Fortran 90,
Fortran 95 и элем енты Fortran 2003.
Книга в первую очередь предназначена для научных сотрудников, занимающихся
м атематическим м оделированием задач на язы ке Fortran, но мож ет полезна студентам,
аспирантам и инж енерам в их повседневной работе.
Учебное пособие
А лгазин Сергей Д м итриевич,
К ондратьев Владимир Васильевич
П рограм м ирование на Visual Fortran
Редактор О. А. Голубев
Макет Н. В. Дмитриевой
Введение
Fortran 95 вклю чает Fortran 90 и больш инство возм ож ностей Fortran 77. Fortran 90 яв
ляется надмнож еством, которое вклю чает Fortran 77. Intel Fortran полностью поддерж и
вает Fortran 95, Fortran 90 и Fortran 77.
Ниже обсуждается соответствие стандартов Intel Fortran, язы ковая совм естим ость
и новый язык. О бсуждаю тся возм ож ности Fortran 2003, поддерж иваем ы е Intel Fortran.
ûm am m 3
4 С. Д A.ijaji/H, В В Кондратьев. Программирование на Visual FORTRAN
Intel Fortran обеспечиваех м нож ество расш ирений к стандарту Fortran 95.
Intel Fortran такж е вклю чает поддерж ку програм мам, которы е соответствую т преды
дущ им стандартам F ortran (A N SI Х3.9--1978 и A N SI Х З.0 -1 9 6 6 ), стандарту М еж дународ
ной организации по стандартизации ISO 1539-1980 (Е), Ф едеральному стандарту И нсти
тута обработки инф орм ации F1PS 69-1 и спецификации Стандарта Вооруженных
Сил 1753.
Языковая совместимость
Intel Fortran хорош о совм естим с Fortran Com paq и Fortran Com paq 77 на поддерж и
ваемых платф орм ах, и он сущ ественно совместим с P D P -1 1 и Fortran VAX 77.
1 IEEE The Institute o f Electrical and Electronics Engineers, Inc., (произносится ай-трипл-и) - Ин
ститут инженеров по электротехнике и радиоэлектронике, ИИЭР (США), крупнейшая в мире ор
ганизация (w ebsite: http://www.ieee.org/), объединяющая более 300 тыс. технических специалистов
из 147 стран, ведущая организация по стандартизации, отвечающая также за сетевые стандар
ты. Обраювана в 1963 г. в результате слияния американских обществ IAEE, основанного в 1884 г.,
и IRE, основанного в 1912 г. ИИЭР проводит и спонсирует технические конференции, симпозиумы
и семинары, ведет большую издательскую и образовательную деятельность.
Глава 1. Структура программы, знаки
и исходные формы
1.2. Утверждения
Утверждения программы группируются в 2 основных класса: выполнимый и невыполни
мый. Выполнимое утверждение определяет действие, которое будет выполнено. Невыполни
м ое утверж дение описывает атрибуты программы, такие как расположения и характеристи
ки данных, гак же как информацию преобразования данных и редактирования.
йтоттп 6
Глава 1. С т рукт ура програм м ы , т аки и исходны е ф орм ы 7
О братите внимание, что на этом рисунке утверж дения директивы IN C LU D E, утвер
ждения OPTIO NS и порядок утверж дений N A M E LIST - язы ковы е расш ирения.
Утверждения PUBLIC и PR IV A TE разреш аю тся только в м одулях обзора модулей.
В Fortran 95/90 утверждения N A M E LIST м огут появиться только среди описаний. О дн а
ко Intel Fortran позволяет им такж е появляться среди вы полним ы х утверж дений.
Линии комментариев, Ут
верждения INCLUDE Утверждение OPTIONS
и Директивы
Утверждение PROGRAM, FUNCTION, SUBROUTINE, MODULE или BLOCK DATA
Утверждения USE
Утверждения
NAMELIST,
Утверждение IMPLICIT NONE
FORMAT
и ENTRY
Утверждения PARAMETER Утверждения IMPLICIT
Определения производного типа,
Блоки интерфейса, Утверждения
Утверждения PARAMETER и DATA объявления Типа, Утверждения
функции,
Утверждения и Описания
Утверждения DATA Выполнимые Утверждения
Утверждение CONTAINS
Внутренние Подпрограммы или Подпрограммы Модуля
Утверждение END
Рис. 1.1. Обязательный порядок утверждений
Имена
Имена идентифицирую т объекты в пределах программной единицы Fortran (тип пе
ременных, результаты функции, им енованны е константы, процедуры, програм мны е м о
дули, группы списка имен и форм альны е параметры). В Fortran 77 имена назывались
"символическими именами".
Имя может содержать символы, цифры, символ подчеркивания (_) и знак доллара
( $ ) - специальный знак. П ервы й знак долж ен бы ть символом или знаком доллара.
В Fortran 95/90 имя может содерж ать до 31 знака. Fortran Intel разреш ает имена до
63 знаков.
Длина имени модуля (в утверж дениях M O D U LE и USE) может быть ограничена ва
шей файловой системой.
Примечание. Будьте внимательны, определяя имена, которые содержат долларовые признаки.
Знак доллара может быть символом для команды или замены символа в различных оболочках и
сервисных командах.
8 С .Д А ъчи ин, В В К ондрат ьев П рограм ирование на Visual FO RTRAN
И сходны й текст мож ет бы ть записан так, чтобы он был используемым для всех ис
ходны х форм (см. разд. 1.7).
Метки утверждения
Метка ут верж дения (или номер утверж дения) идентифицирует утверждение так,
чтобы другие утверж дения могли обратиться к нему, или получить информацию , или пе
редать управление. М етка м ож ет предш ествовать лю бом у утверж дению , которое не яв
ляется частью другого утверж дения.
М етка утверж дения долж на бы ть длины до пяти десятичны х цифр; пробелы и началь
ные нули игнорирую тся.
Все нулевы е метки утверж дения недействительны и пустой оператор не может быть
маркирован.
М аркированны й FO R M A T и м аркированны е вы полним ы е утверждения - единствен
ные утверж дения, которы е м огут бы ть упом януты другими утверждениями. Утвержде
ния F O R M A T упом януты только в специф икаторе ф ормата ввода/вывода или в утвер
ж дениях A SSIG N . Д ва утверж дения внутри модуля не могут иметь ту же самую метку.
Индикатор комментария
В свободной исходной форм е восклицательны й знак (!) указы вает ком м ентарий, если
он располож ен в пределах строки, или строку ком м ентария, если это первы й знак в ис
ходной строке.
Индикатор продолжения
В свободной исходной форме символ ам персанда (&) указы вает строку продолж ения
(если этот знак не появляется в холеритовой или сим вольной константе, или в пределах
комментария). Строка продолж ения - это первая строка неком м ентария после ам п ерсан
да. Хотя РогЧгап 95/90 разреш ает до 39 продолж ений строки в програм мах свободной
формы, РогЧгап 1п1е1 допускает до 511 строк продолж ения.
Следую щ ий прим ер показы вает продолж ение утверж дения:
ТС 08Н (У ) = ЕХР(У) + & ! Начальная строка утверждения
ЕХР(-У) ! строка продолжения
Если первый знак не знак пробела на следую щ ей строке неком м ентария - ам персанд,
утверж дение продолж ается в знаке после амперсанда. П реды дущ ий прим ер м ож ет бы ть
записан таким образом:
ТС 08Н (У ) = ЕХР(У) + &
& ЕХР(-У)
и _______ С. Д. Алгазин, В. В. К ондрат ьев Программирование на Visual FORTRAN
Если лексический сим вол долж ен быть продолж ен, первый не знак пробела на сле
дую щ ей строке неком ментария долж ен бы ть амперсанд, сопровож даемый немедленно
остальной частью символа. Н апример:
TCOSH(Y) = EXP(Y) + ЕХ&
&P(-Y)
Если вы продолж аете сим вольную константу, ам персанд долж ен быть первым знаком
строки (пробелы перед ам персандом игнорирую тся). У тверж дение продолж ается со сле
дую щ им знаком после ам персанда. Для примера:
ADVERTISER = "Davis, O’Brien, Chalmers & Peter&
&son"
ARCHITECT = "O’Connor, Emerson, and Davis&
& Associates"
Если ам персанд опущ ен на строке продолж ения, утверж дение продолж ается с первым
не знаком пробела в строке. Так, в преды дущ ем примере был бы поставлен пробел перед
"A ssociates".
А мперсанд не м ож ет быть единственны м не знаком пробела в строке, или единствен
ном не знаком пробела перед комм ентарием ; ам персанд в комментарии игнорируется.
Индикатор комментария
В ф иксированном и табулированном исходных форматах символ (!) восклицательного
знака указы вает комм ентарий, если он находится внутри исходной строки. (Он не долж ен
появляться в столбце 6 строки фиксированного формата; этот столбец зарезервирован
для индикатора продолж ения.)
Символ С (или с), звездочка (*) или восклицательный знак (!) указываю т строку ком
ментария, когда они появляю тся в столбце 1 исходной строки.
1 Файл программы на РоПгап в фиксированной форме должен иметь расширение ]ог, а в свобод
ном формате ?Э0.
Г иш а I С т рукт ура програм м ы , т аки и исходны е ф орм ы 13
Индикатор продолжения
В фиксированной и табулированной форме строка продолж ения обозначена одним из
следую щ их способов: '
■ Для фиксированной формы: лю бой знак (кроме нуля или пробела) в колонке 6 исход
ной строки.
■ Для табулированной формы: лю бая цифра (кроме 0) после табулятора.
Ком пилятор полагает, что знаки после индикатора продолж ения будут частью п реды
дущ ей строки. Х отя Fortran 95/90 разреш ает до 19 строк продолж ения в програм ме ф и к
сированного формата, Fortran Intel разреш ает до 511 строк продолж ения.
Если нуль или пробел использую тся как индикатор продолж ения, ком пилятор полага
ет, что строка будет начальной строкой утверж дения Fortran. О бласть метки утверж дения
строки продолж ения долж на бы ть пробелом (кроме случая отладки утверж дения).
Когда длинны е сим вольны е или холериговы е константы продолж ены поперек строк,
могу г возникнуть проблемы м обильности. И спользуйте оператор конкатенации (связи),
чтобы избеж ать таких проблем. Например:
PRINT *, ’ Это очень длинная символьная константа 'II
+ ’ которая безопасно продолжена поперек строк’
Используйте этот тог же самы й метод, инициализируя данны е с длинны м и си м воль
ными или холеритовыми константам и. Наггример:
CHARACTER^*) LONG.CONST
PARAMETER (LONG.CONST = This is a very long 7/
+ ’character constant which is safely continued 'II
+ ’across lines’)
CHARACTER* 100 LONG.VAL
DATA LONG_VAL /LONG .CONST/
Х олериговы е константы долж ны бы ть преобразованы к сим вольны м константам п е
ред использованием метода конкатенации продолж ения строки.
1 2 3 4 5 6 7 Ô 9 10 11 12 13 14 15 16 17 1$ 19 20
С \ШI RRST VALUE с F 1 R S Т V А L и Е
10 fTÂBl I = J + 5*K + 1 0 I J + 5 * К +
1 L*M 1 L * М
I V А 1 Г I ♦ 2
IVAL = I+2
Табулированный формат Фиксированный формат
Рис. 1.2. Пример форматирования строк
О бласть метки утверж дения предш ествует первому сим волу табуляции. Область ин
дикатора продолж ения и область утверждения следую т за первым символом табуляции.
И ндикатор продолж ения - лю бая цифра, отличная ог нуля. О бласть утверждения м о
ж ет содерж ать лю бое утверж дение Fortran. У тверж дение Fortran не может начаться с
цифры.
Если утверж дение продолж ено, индикатор продолж ения долж ен быть первым знаком
(после п ервою tab) в строке продолжения.
М ногие редакторы текста и терминалов продвигаю т каретку печати к предопределен
ной позиции печати, когда вы наж имаете клавиш у <ТаЬ>. О днако компилятор Fortran
Intel не интерпретирует знак tab таким образом. Он обрабаты вает знак tab в области ут
верждения тем же самым способом, что и знак пробела. В распечатке программы, кото
рую компилятор производит, tab вызывает знак, который следует напечатать в следую
щем табуляторе (обычно расположенный в колонках 9, 17, 25, 33 и т. д.).
['лава /. С т рукт ура програм м ы , знаки и исходны е формы 15
Примечание. Если вы используете область порядкового номера, не используйте tabs где-
нибудь в исходной строке, или компилятор может интерпретировать порядковые номера как
часть области утверждения в вашей программе.
Каждая константа, переменная, массив, вы раж ение или ссы лка функции в утверж де
нии Fortran имею т тип данных. Тип данны х этих пунктов м ож ет бы ть врожденным из
конструкции, подразум еваем ой в соответствии с соглаш ением , или явно объявленным.
Каждый тип данных имеет следую щ ие свойства:
Имя. И мена встроенны х типов данны х предопределены , в то время как имена произ
водных типов определены определениями производного типа. О бъекты данных (констан
ты, переменны е или части констант или переменны х) объявлены , используя имя типа
данных.
Ряд связанных значений. Каждый тип данны х имеет ряд допустим ы х значений. Типы
данны х Integer и real имею т диапазон действительны х значений. C om plex и производные
тины им ею т наборы значений, которые являю тся комбинациям и значений их индивиду
альных компонент.
Способ представления значений констант. Константа - объект данных с ф икси
рованным значением , которое не может бы ть изменено в течение выполнения програм
мы. Значение константы м ож ет бы ть числовым значением , логическим значением или
знаком строки.
Константа, которая не имеет имени, - литеральная константа. Литеральная констан
та долж на иметь встроенны й 1 ип, но она не м ож ет бы ть массивом.
Константа, которая имеет имя, - именованная константа. И менованная константа
м ож ет им еть лю бой тип, включая производны й тип, и она м ож ет быть массивом. И м ено
ванная константа имеет атрибут PA R A M ET ER и определена в утверж дении объявления
типа или утверж дении PA R A M ETER .
Ряд операций для манипулирования этими значениями и их интерпретирования.
Тип данны х переменной определяет операции, которые могут использоваться, чтобы
управлять им.
П омим о встроенны х операторов и операций вы м ож ете также определить операторы
и операции.
mmommw 16
l'ia e a 2 Типы данных, конст ант ы и перем енны е 17
- COM PLEX.
Есть 3 вида параметра для данных комплексного типа:
CO M PLEX ([K lN D =]4) или CO M PLEX *8
CO M PLEX([KIN D=]8) или CO M PLEX * 16
C 0M PLEX ([K 1ND =] 16) или CO M PLEX *32
- DOUBLE COM PLEX.
Параметры вида не разреш ается для данны х, объявленны х с типом D O UBLE
COM PLEX. Данные этого типа те же, что у C O M PLE X ([K IN D =] 8).
■ LOGICAL (см. разд. 2.2).
Есть 4 вида параметра для данных логического типа:
LOGICAL ([KIND =] 1) или LO GICA L *1
LOGICAL ([KIND =] 2) или LO GICA L *2
LOGICAL ([K IND =] 4) или LO G ICA L *4
LOGICAL ([KIND =] 8) или LO GICA L *8
- CH A RA CTER (см. разд. 2.3).
Есть один вид параметра для данных типа "символьный": C H A R A C TER ([K IN D =] 1).
■ BY TE - это 1-байтовое значение; гип данны х эквивалентен IN TEG ER ([K IN D =] 1).
KIND встроенной функции м ож ет использоваться, чтобы определить вид параметра
типа представления.
Для большего количества мобильны х программ, вы не долж ны использовать
INTEGER форм ([K IND =] п) или R E A L ([K IN D =] п). Вы долж ны вместо этого оп реде
лить константу, используя PA R A M ETER SELECTED IN T K1ND или соответствую щ ую
функцию SELECTED REA L KIND. Д ля примера: следую щ ие утверж дения определяю т
константу PARAM ETER для вида IN TEG ER, который имеет 9 цифр:
INTEGER, PARAMETER:: M Y JN T.K IN D = SELECTED_INT_KIND(9)
¡NTEGER(MY_INT_KIND):: J
Константы Integer
Целочисленная константа - целое число без десятичной точки. Константы Integer
приним аю ! следую щ ую форму:
№[«■■■][ J \
где s - знак минус, если число отрицательное, и плюс, если число положительное; п - д е
сятичная цифра 0 до 9 (лю бы е начальны е нули игнорирую тся).
к - дополнительны й параметр: 1 для INTEG ER (1), 2 для INTEGER (2), 4 для
IN T E G E R (4) или 8 для IN T EG ER (8). Этому знаку предш ествует символ подчеркивания
(_). К онстанта без знака, как предполагаю т, является неотрицательной. По умолчанию
целы е числа вы раж ены в десятичны х значениях (по основанию 10). Для определения не
десятичной константы используйте следую щ ий синтаксис:
[s][[base] #]nnn...
где s - дополнительны й знак плюс (+) или минус (-); base - лю бая константа от 2 до 36.
Если base опущ ен, но # определен, целое число интерпретируется в base 16. Если и base и
# опущ ены , целое число интерпретируется по основанию 10.
Для оснований 11-36 латинские буквы от А до Z представляю т числа, больше чем 9.
Н априм ер, для основания 36, А представляет 10, В представляет И , С представляет 12
и т. д. до Z, которая представляет 35. Случай символов несущ ественен.
С ледую щ ие прим еры показы ваю т верное и неверное написание десятичных констант:
Правильно
0
-127
+32123
47_2
Недопуст имо Объяснение
9999999999999999999 С лиш ком больш ое число.
3.14 Д есятичная точка не разреш ается; допустим ая константа REAL.
32,767 Запятая не разреш ается.
Гчава 2 Типы данных, конст ант ы и п ерем ен ны е 19
[s]n[/7 .]Q[s]nn...
где s - знак минус, если число отрицательное, и плюс, если число положительное; п - де
сятичная цифра 0 до 9; к - дополнительны й параметр вида: 4 для REAL (4), 8 для REAL
(8) или 16 для REA L (16). Этому значению долж ен предш ествовать символ подчеркива
ния (_).
Правила использования
Н ачальны е нули (нули слева от первой цифры, отличной от нуля) игнорируются в
подсчете значащ их цифр. Н апример, в постоянной 0.00001234567 все цифры, отличные
от нуля, и все нули являю тся сущ ественными.
Э кспонента представляет степень 10, на которую долж на быть умножена предш ест
вую щ ая константа real или целочисленная константа (например, 1.0Е6 представляет зна
чение 1.0 * 10 ** 6).
Константа real без экспоненциальной части и без параметра типа - по умолчанию
константа с одинарной точностью (REA L (4)). Вы можете изменить значение по умолча
нию , определяя опцию компилятора, которая управляет видом real по умолчанию.
Если константа real не имеет экспоненциальной части, десятичная точка должна при-
сутствовать в строке (где-нибудь перед дополнительны м параметром вида). Если есть
экспоненциальная часть, десятичная точка является дополнительной в строке, предш ест
вую щ ей экспоненциальной части; экспоненциальная часть не долж на содержать деся
тичную точку.
С им вол экспоненты Е обозначает real с одинарной точностью (REAL (4)) константа,
если дополнительны й параметр вида не определяет иначе. Например, -9 . Е2_8 - констан
та с двойной точностью (которая м ож ет быть записана как -9 . D2).
С им вол экспоненты D обозначает real с двойной точностью (REAL (8)) константа.
Сим вол экспоненты Q обозначает real учетверенной точности (REAL (16)) константа.
Знак минус долж ен присутствовать перед отрицательной константой real; знак плюс
является необязательным перед положительной константой. Точно так же знак минус
долж ен присутствовать между символом экспоненты (Е, D или Q) и отрицательной экс
понентой, тогда как знак плюс является необязательным между символом экспоненты и
полож ительной экспонентой.
Если константа real вклю чает символ экспоненты, область экспоненты не может быть
опущ ена, но она мож ет быть нулем.
М ож но определить константу real, использую щ ую и символ экспоненты, и параметр
вида, но тогда символ экспоненты долж ен быть Е и параметр вида должен следовать за
частью экспоненты.
Недопустимо Объяснение
1. Q 5000 Слиш ком больш ое число.
1. Q -5000 Слиш ком м аленькое число.
Правильно
(1.7039 -1 .7039Q 2)
(5 4 7 .3 Е 0 _ 1 6 -1 .4 4 )
(+12739Q 3,0.Q 0)
Недопустимо Объяснение
(1.23Q 0,) Н едостает второй константы.
(1D 1,2H 12) Константы Hollerith (холеритовы е) не применимы.
( 1.7 0 39,-1.7039D0) Ни одна из констант не REA L (16); допустим ая константа
с двойной точностью .
Логические константы
Логическая константа представляет только логические значения, истинные или лож
ные, и им еет одну из следую щ их форм:
.TRUE. [Je]
.FALS E. [Je]
где k - дополнительны й параметр вида: 1 для LO G ICA L (1), 2 для LO G ICA L (2), 4 для
LO G ICA L (4) или 8 для LO G ICA L (8). Этому параметру долж ен предш ествовать символ
подчеркивания (_).
Д иапазоны логического типа данны х соответствую т их сопоставимы м диапазонам це
лочисленны х типов данных. Н априм ер, диапазон L O G IC A L (2) - тот же диапазон, что у
IN TEG ER (2).
Символьные константы
Символьная константа - строка сим волов, заклю ченная в разделители (апострофы
или кавы чки). П ринимает одну из следую щ их форм:
[k j[c h .. ]' [С]
[к—]"[с/7...]" [С]
Глава 2 Типы данных, конст ант ы и перем енны е 25
где к - дополнительный параметр вида 1 (по ум олчанию ). Он долж ен сопровож даться
символом подчеркивания (_) и в символьных константах должен предш ествовать кон
станте.
ch - знак ASCII. С - спецификатор строки Си. Строка Си м ож ет использоваться, что
бы определить строки с не пригодными для печатания знаками (см. разд. 2.3).
Правила использования
Значение символьной константы - строка знаков между разделителям и. Это значение
не вклю чают разделители, но вклю чает все пробелы или знаки табуляции в пределах раз
делителей. Если символьная константа разграничена апострофами, используйте 2 после
довательных апострофа ("), чтобы поместить знак апостроф а в символьной константе.
Точно так же, если символьная константа разграничена кавы чками, используйте 2 после
довательных цитирования марки (""), чтобы поместить знак кавычки в сим вольную кон
станту.
Длина символьной константы - число сим волов между разделителям и, но 2 последо
вательных разделителя считаю тся как 1 знак. Д лина сим вольной константы долж на бы ть
в диапазоне от 0 до 2000. Каждый знак занимает байт памяти.
Если символьная константа появляется в числовом контексте (такой тип выражения в
правой стороне ариф метического оператора присваивания), она считается холеритовой
константой.
Символьная константа нулевой длины представлена двумя последовательны м и ап о
строфами или цитированием марки.
Следую щ ие примеры показы ваю т константы правильного и недопустимого вида:
Правильно
"W HAT KIND TY PE? "
T O D A V 'S DATE I S : '
"The average i s : "
Недопустимо Объяснение
'HEADINGS Нет второго апострофа.
’Map Number: " Н ачальный разделитель не соответствует второму разделителю .
Символьные подстроки
Символьная подст рока - непреры вная часть строки символов. П ринимает одну из
следую щ их форм:
v ( [ e 1Y[e 2])
a ( s [,s] . . . ) {[е 1]:[е2])
пате (имя) является именем производного типа. Это имя не долж но совпадать с име
нем лю бого встроенного типа, или именем производного типа, к которому можно полу
чить доступ из модуля.
component-definition (составляющее определение) является одним или нескольким ут
верждением объявления типа, определяю щ им компонент производного типа.
П ервому составляю щ ем у определению может предш ествовать дополнительное ут
верж дение PR IV A TE или SEQ U EN C E (только PRIV A TE или утверждение SEQUENCE
м огут появиться в определении данного производного типа).
PRIV A TE определяет, что компоненты доступны только в пределах определения мо
дуля, даж е если сам производны й тип общ едоступен.
SEQ U EN CE сохраняет компоненты производного типа в той же самой последова
тельности, в которой они перечислены в определении типов. Если SEQ U EN CE опреде
лен, все производны е типы , определенны е в компоненте определения, должны быть ти
пами последовательности.
Составляю щ ее определение принимает следую щ ую форму:
type [ [, attr] ::] component [(a-spec)] [ *char-len] [init-ex]
где type - спецификатор типа. Это может быть встроенный тип или предварительно оп
ределенны й производный тип. (Если атрибут PO IN TER следует за этим спецификатором,
тип мож ет такж е бы ть лю бы м доступным производным типом, включая определяемый
тип.)
attr является дополнительны м атрибутом PO IN TER для компонента указателя, или
дополнительного D IM EN SIO N , или атрибутом A LLO C A TA BLE для компонента массива.
Вы не можете определить A L LO C A TA B LE и атрибут POINTER. Если определен
D IM EN SIO N , то это определение м ож ет сопровож даться спецификацией массива. Каж
дый атрибут м ож ет появиться только однажды в данном составляющем определении
компонента.
com ponent - имя определяем ого компонента.
a-spec является необязательной спецификацией массива, заклю ченной в круглые
скобки. Если указаны PO IN TER или A LLO C A TA BLE, массив является массивом отло
женной формы (deferred shape); иначе он имеет явную форму. В спецификации явной
формы каждая граница долж на быть константным скалярным целочисленным выражени
ем. Для получения дополнительной информации о спецификациях массива см. разд. 4.2.
Если границы м ассива здесь не определены, они должны быть указанны после атри
бута D IM EN SIO N . Такж е является именем определяемого компонента.
char-len является дополнительной скалярной целочисленной литеральной константой;
этом у параметру долж на предш ествовать звездочка (*). Этот параметр может быть опре
делен, только если компонент им еет тип CH A RA CTER.
init-ex является вы раж ением инициализации или, для компонентов указателя, =>
N U LL (). Это - возм ож ность Fortran 95. Если init-ex определен, двойное двоеточие долж
но присутствовать в составляю щ ем определении. Символ равенства (=) может быть оп
ределен только для неуказательны х компонент. Выражение инициализации приведено
в модуле обзора определения типов.
П роизводны е типы в определенном смысле мож но считать аналогом записей в языке
П аскаль и структур в язы ке Си. И ногда удобно объединять под общим именем разнород
ные данные, имею щ ие разный тип. М ассивы объединяю т однот ипные данные и, следова
тельно, не позволяю т реш ить эту проблему.
Г лава 2 Типы данных, конст ант ы и перем енны е 29
Правила исполь ювапия
Если имя указано после утверж дения EN D TY PE, то это имя долж но быть тем же са
мым именем, которое приведено в утверж дении производного типа TYPE. П роизводный
тип может быть определен только однаж ды в блоке о б л асш действия. Если то же самое
имя производною типа появляется в определении производного типа другого блока об
ласти действия, оно обрабаты вается независимо. С оставляю щ ее имя имеет возм ож ности
определения только производного тина. П оэтом у то же самое имя может использоваться
в другом определении производного ти па того же са м о ю блока области действия.
Д ва информационных объекта им ею т гот же самый тип. если они оба объявлены , как
тот же производный тип (к определению производного типа м ожно получить доступ из
модуля или ведущ его блока области действия).
Если объекты находятся в различны х блоках области действия, они м огут такж е
иметь тот же самый производный тип, если они объявлены в отнош ении других оп реде
лений производного типа и если оба определения производного типа имею т следую щ ие
свойства:
■ то же самое имя;
■ утверждение SEQ U EN CE (они оба имеют тип последовательности);
■ компоненты, которые согласовы ваю тся с именем, порядком и атрибутам и; ком понен
ты не могут быть частными.
Инициализация по умолчанию
И нициализация по ум олчанию происходит, если инициализация появляется по оп ре
делению компонент производного типа. (Э то является возм ож ностью Fortran 95.) У ка
занная инициализация компонента прим еняется, даж е если определением будет
PRIVATE. И нициализация по ум олчанию обращ ается к форм альным параметрам
lN TENT(O UT). Не подразум евается, что компонент п рои звод н ою типа им еет атрибут
SAVE. Явная инициализация в утверж дении объявления типа отменяет инициализацию
по умолчанию.
Чтобы определить инициализацию по ум олчанию компонента массива, используйте
постоянное выражение, которое вклю чает следую щ ее:
■ конструктор массива;
■ единственны й скаляр, который становится значением каж дого элемента массива.
Указатели могут иметь статус ассоциации связанны х, разъединенны х или неоп реде
ленных. Если не определен по ум олчанию статус инициализации, статус указателя не о п
ределен. Чтобы определить разъединенны й статус для компонента указателя, используй
те => NULL ().
Вы не должны определять инициализацию для каж дого компонента производного ти
па. Например:
TYPE REPORT
CHARACTER (LEN=20) REPORT.NAME
INTEGER DAY
CHARACTER (LEN=3) MONTH
INTEGER:: YEAR = 1995 ! Только компонент по умолчанию
END TYPE REPORT ! инициализация
Рассмотри хе следую щ ее утверж дение:
TYPE (REPORT), PARAMETER :: N O V.REPO RT = REPORT ("Sales", 15, "NOV", 1996)
30 С Л А 1гаш и, В. В. К ондрат ьев П рограм ирование на Visual FORTRAN
В этом случае явная инициализация в утверж дении объявления типа отвергает YEAR
компонент N O V R E P O R T . Н ачальное значение по умолчанию компонента может также
бы ть отвергнуто по умолчанию определенной инициализацией в определении типов. На
пример:
TYPE MGR_REPORT
TYPE (R E PO R T):: STATUS = N 0V_R EP 0R T
INTEGER NUM
END TYPE MGR_REPORT
TYPE (MGR_REPORT) STARTUP
В этом случае компонент STA TU S STA R TU P получает начальное значение от
NOV REPO RT, отмена инициализации для компонента YEAR.
Компоненты структуры
Ссы лка на компонент структуры производного типа принимает следую щ ую форму:
parent [%component [(s-list)]]... %component [(s-//st)]
где p a ren t - имя скаляра или м ассива производного типа. Знак процента (%) называется
компонентом отборщ ика; component - имя преды дущ его pa ren t (родителя) или компо
нента.
s-list является списком одного или более ниж них индексов. Если список содержит
триплеты нижнего индекса или векторные ниж ние индексы, ссылка к секции массива.
Каждый нижний индекс долж ен бы ть скалярным целым числом (или другим число
вым выраж ением ) со значением, которое изменяется в пределах его границ.
Число нижних индексов в лю бом s -списке долж но равняться рангу предыдущ его ма
теринского элем ента или компонента.
Правила использования
Каждый материнский элем ент или компонент (кроме младш его разряда) должны
иметь производный тип.
М атеринский элемент или один из ком понентов м огут иметь ранг, отличный от нуля
(бы ть массивом). Любой компонент м атеринского элем ента или компонента ранга, от
личного от нуля, не должен иметь атрибут PO IN TER.
Ранг компонента структуры - ранг части (материнский элемент или компонент) с от
личны м от нуля рангом (лю бым); иначе ранг - нуль. Тип и параметры типа (любые) ком
понента структуры объявляю тся из части младш его разряда имени.
На компонент структуры нельзя сослаться или его определять перед объявлением ма
теринского элемента объекта.
Если родительский объект имеет атрибут IN TEN T, TA R G ET или PARAM ETER, ком
понент структуры такж е имеет атрибут’.
Следующий пример показывает определение производного типа с двумя компонентами:
TYPE EMPLOYEE
INTEGER ID
CHARACTER(LEN=40) NAME
END TYPE EMPLOYEE
С ледую щ ий пример показывает, как объявлять CO N TRA CT, чтобы иметь тип
EM PLO Y EE:
TYPE(EMPLOYEE) ;• CONTRACT
Г лава 2. Типы данных, конст ант ы и перем енны е 31
Обратите внимание, что оба примера начинаю тся с клю чевого слова ТУРЕ . П ервое
утверждение - определение производного типа называется утверждением производного
типа, в то время как утверждение, которое объявляет производный тип - объект назы ва
ется утверждением ТУРЕ.
Следующий пример показывает, как сослаться на составляю щ ую ID родительской
структуры CONTRACT:
CONTRACT%ID
Следующий пример показывает производный тип с компонентом, который является
предварительно определенным типом:
TYPE DOT
REAL X, Y
END TYPE DOT
TYPE SCREEN
TYPE(DOT) C, D
END TYPE SCREEN
Следующий пример объявляет переменную типа SCREEN:
TYPE(SCREEN) М
Переменный М имеет компоненты М % С и M % D (оба типа DOT); М % С имеет компо
ненты
М%С%Х и M%C%Y типа R EA L.
Следующий пример показы вает производны й тип с компонентом, который является
массивом:
TYPE CARJNFO
INTEGER YEAR
CHARACTER(LEN=15), DIM ENSION(IO):: MAKER
CHARACTER(LEN=10) MODEL, B0DY_TYPE*8
REAL PRICE
END TYPE
TYPE(CARJNFO) MY.CAR
О братите внимание, что M O D EL им еет сим вольную длину 10, но ВООУ Т У РЕ имеет
символьную длину 8. Вы можете назначить значение на компонент структуры; например:
MY_CAR%YEAR = 1985
Следующий пример показывает компонент структуры массива:
MYJ3AR%MAKER
В предыдущем примере, если список нижнего индекса (или подстрока) был приложен
к ссылке M AKER, не к компоненту структуры м ассива, но к элементу массива или сек
ции.
Рассмотрите следующий пример:
MY_CAR%MAKER(2) (4:10)
В этом случае компонент - подстрока 4 -1 0 из второго элем ента м ассива MAKJER.
Рассмотрите следующ ий пример:
TYPE CHARGE
INTEGER PARTS(40)
32 С Д Л ¡гашн, В В Кондрат ьев. П р о гр а и и р о ва н и с на Visual FORTRAN
REAL LABOR
REAL MILEAGE
END TYPE CHARGE
TYPE(CHARGE) MONTH
TYPE(CHARGE) YEAR(12)
Н екоторы е допустим ы е ссылки для м ассива этого типа следую т:
MONTH%PARTS(l) »Элемент массива
MONTH%PARTS(l:K) ! Секция массива
YEAR(I)%PARTS ! Компонент структуры массива (целый массив)
YEAR(J)%PARTS(I) 1 Элемент массива
YEAR(J)%PARTS(I K) »Секция массива
YEAR(J:K)%PARTS(I) ! Секция массива
YEAR%PARTS(I) ! Секция массива
С ледую щ ий пример показы вает производны й тип с компонентом указателя, который
им еет определенны й тип:
TYPE NUMBER
INTEGER NUM
TYPE(NUMBER), POINTER :: START NUM => NULL()
TYPE(NUMBER), POINTER ;• NEXT.NUM => NULL()
END TYPE
Этот тип мож ет использоваться, чтобы создать связанны е списки объектов типа
N U M B ER . О братите внимание, что указателям даю т статус инициализации разъединен
ных по умолчанию .
Следую щ ий пример показы вает частный тип:
TYPE, P R IVA TE :: SYMBOL
LOGICAL TEST
CHARACTER(LEN=50) EXPLANATION
END TYPE SYMBOL
Этот тип является частным к модулю . М одуль м ож ет использоваться другим модулем
обзора, но тип SY M B O L не доступен.
Конструкторы структуры
К онструктор структуры позволяет вам определять скалярны е значения производного
типа. Он имеет следую щ ую форму:
d-name (expr-list)
где d-nam e - имя производного типа, expr-list является списком выражений, определяю
щ их составляю щ ие значения. Значения долж ны бы ть согласованы в числе и порядке с
компонентам и производного типа. При необходим ости значения преобразовываю тся (со
гласно правилам назначения), чтобы бы ть согласованны ми с их соответствую щ ими ком
понентам и в типе и виде параметров.
Правила исполь юваиия
К онсгрукгор структуры не долж ен появит ься преж де, чем определен его производный
тип. Если компонент производного типа - массив, форм а в списке выраж ения долж на со-
ответсгвоват ь ф орм е составляю щ его массива. Если компонент производного типа - ука
затель, значение в списке выражения долж но указы вать на объект, который был бы д о
пустимой целью в операторе присваивания указателя. (К онстанта - недопустимая цель в
операторе присваивания указателя.) Если все значения в конструкторе структуры - по
стоянны е выраж ения, конструктор - вы раж ение константы производного типа.
Глава 2 Типы данных, константы и перем енны е 33
Рассмотрите следую щ ее определение производного типа:
TYPE EMPLOYEE
INTEGER ID
CHARACTER(LEN=40) NAME
END TYPE EMPLOYEE
Этот пример может использоваться, чтобы произвести следую щ ий конструктор
структуры:
EMPLOYEE(3472, "John Doe")
Следующ ий пример показывает тип с компонентом производного типа:
TYPE ITEM
REAL COST
CHARACTER(LEN=30) SUPPLIER
CHARACTER(LEN=20) ITEM_NAME
END TYPE ITEM
TYPE PRODUCE
REAL MARKUP
TYPE(ITEM) FRUIT
END TYPE PRODUCE
В этом случае, вы долж ны использовать внедренный конструктор структуры, чтобы
определить значения этого компонента; например:
PRODUCE(.70, ITEM (.25, "Daniels", "apple"))
Двоичные константы
Двоичная константа - альтернативный способ представить числовую константу.
Двоичная константа имеет одну из следую щ их форм:
B'cf[cL]'
B"c/[cL]"
где d - набор из двух цифр (основание 2): 0 или 1.
Вы можете определить до 256 двоичных знаков в двоичной константе. Н ачальные ну
ли игнорируются.
Следующие примеры показываю т допустим ы е и недопустимы е двоичны е константы:
Допустимо
В'ОЮНЮ'
ВТ
34 с д л 1га j u h , В В К он драт ьев П рограм ирование на Visual FORTRAN
Недопустил ю Объяснен не
В '0112' С им вол 2 недопустим.
В 1001 Г Нет апостроф а после В.
"1000001й Н ет В перед первой кавычкой.
Восьмеричные константы
Восьмеричная константа - альтернативны й способ представить числовые константы.
В осьм еричная константа имеет одну из следую щ их форм:
0 'd [d ...]'
0 "d[d..]"
d является восьм еричны м числом (основание 8) цифры (от 0 до 7). Вы можете опреде
лить до 256 битов (86 восьм еричны х цифр) в восьм еричных константах. Н ачальные нули
игнорирую тся.
С ледую щ ие примеры показы ваю т допустим ы е и недопустимые восьмеричные кон
станты:
Допустимо
0*07737'
О иI й
Недопуст имо Объяснение
07782' Ц иф ра 8 недопустима.
07772' Н ет апостроф а после О.
"0737" Н ет О перед первым кавычкой.
Шестнадцатеричные константы
Ш естнадцатеричная константа - альтернативны й способ представить числовые
константы. Ш естнадцатеричная константа приним ает одну из следую щ их форм:
Z'd[d..]'
Z "d[d...]"
где d - ш естнадцатеричное число (основание 16), цифра (от 0 до 9), прописная или
строчная буква в диапазоне от А до F.
Вы мож ете определить до 256 битов (64 ш естнадцатеричны х цифры) в ш естнадцате
ричны х константах. Н ачальны е нули игнорирую тся.
С ледую щ ие примеры показы ваю т допустим ы е и недопустимы е ш естнадцатеричные
константы:
Допуст имо
Z 'A F9730'
Z"FFA B C "
Z'84'
Недопустимо Объяснение
Z '9 9 9 ' Д есяти чное число недопустимо.
"ZF9" К авы чка перед Z недопустима.
Холеритовые константы
Холеритовая константа - строка пригодны х для печатания сим волов ASCII, кото
рым предш ествует сим вол Н. П еред Н долж на бы ть целочисленная константа по умолча-
_____________________ ['лава 2 Типы данных, конст ант ы и перем енны е 35
нию, отличная от нуля, без знака, указы ваю щ ая число сим волов в строке (вклю чая про
белы и признаки табулирования). Х олеритовы е константы - строки 1-2000 сим волов.
Они сохранены как строки байтов, 1 символ в байте.
Следующие примеры показывают допустимые и недопустимые холеритовые константы:
Допустимо
16HTODAY'S D A TE IS:
1НВ
4H ABC
Недопустимо Объяснение
3H A BCD Н еправильное число символов.
ОН Х олери говая константа долж на содерж ать по крайней м ере 1 символ.
Иначе используется наим еньш ий целочисленны й вид, достаточно больш ой, чтобы со
хранить значение.
■ Для холеритовых констант не принят никакой тип данных.
Н апример:
Утверждение Тип данных константы Длина константы, байт
CALL АРАС (Z'34BC2‘) 1МТЕСЕР(4) 4
CALLАРАС
Нет 9
(9HABCDEFGHI)
Когда двоичная, восьм еричная или ш естнадцатеричная константа используется в л ю
бом другом контексте, принят тип целочисленны х данных по умолчанию (целое число по
ум олчанию мож ет быть определено опциями компилятора). В следую щ их примерах це
лое число по ум олчанию - 1МТЕСЕЫ(4):
Утверждение Тип данных константы Длина константы, байт
IF (Z'AF77') 1,2,3 INTEGERS) 4
IF (2НАВ) 1,2,3 INTEGERS) 4
I = 0 7 7 77' - Z'A 39'2 INTEGERS) 4
I = 1 H C - 1HA INTEGERS) 4
J = .NOT. 073777' INTEGERS) 4
J = .NOT. 1HB INTEGERS) 4
Если 2 константы без типа использую тся в операции, они обе имею т тип ум алчивае
мого целочисленного.
Если недесятичны е константы другой длины , чем длина, подразумеваемая типом дан
ных, происходит следую щ ее:
■ Д воичны е, восьмеричные и ш естнадцатеричны е константы. Эти константы могут оп
ределить до 16 байт данных. Когда длина константы меньше, чем длина, подразуме
ваемая типом данных, крайние левы е цифры имею т значение нуля. Когда длина кон
станты больш е, чем длина, подразум еваем ая типом данных, константа обрезается
слева. Это вы зы вает ош ибку, если обрезаны какие-нибудь цифры, отличные от нуля.
Табл. 2.1 содерж ит список числа байтов, которых требует каждый тип данных.
■ Х олеритовы е константы. К огда длина константы меньше, чем длина, подразумевае
мая типом данных, пробелы дописы ваю тся к константе справа. Когда длина констан
ты больш е, чем длина, подразум еваем ая типом данных, константа обрезается справа.
Если какие-нибудь символы, кроме знаков пробела, обрезаны, происходит ошибка.
Каждый холеритовый сим вол занимает 1 байт памяти.
Переменные
Переменная - объект данны х, значение которого может быть изменено в лю бой точке
программы . П еременная м ож ет иметь следую щ ий вид:
Скаляр - единственны й объект, который имеет единственное значение; он может
иметь лю бой тип - встроенны й или производный (определенный пользователем).
Массив - собрание скалярны х элем ентов лю бого встроенного или производного типа.
Все элементы долж ны иметь тот ж е самый тип и вид параметров.
Указатель подобъекта. П одобъект является частью объекта. Следую щ ие выраже
ния - подобьекты :
Элемент массива компонент структуры.
Секция м ассива сим вольная подстрока.
Глава 2. Типы данных, конст ант ы и перем енны е 37
Например, В (3) является подобъекгом (элемент м ассива) указателя на массив В. По-
добъект не может быть переменной, если ее родительский объект - константа.
Имя переменной связано с единственны м местополож ением памяти. П еременны е
классифицированы типом данны х как константы. Тип данных переменной указы вает тип
данных, которые она содерж ит, вклю чая его точность, и подразумевает требования п ам я
ти. Когда данные лю бого типа присваиваю тся переменной, они преобразовы ваю тся в тип
данных переменной (в случае необходим ости). П еременная определена, когда вы задаете
ей значение. П еременная м ож ет бы ть определена во время компиляции до вы полнения
программы утверждением D A TA или утверж дением объявления типа. В течение вы п ол
нения программы, переменны е м огут быть определены или переопределены в операторах
присваивания и утверж дениях ввода, или быть неопределенной (наприм ер, если п рои с
ходит ошибка ввода/вывода). Когда переменная неопределенна, ее значение непредска
зуемо. Когда переменная становится неопределенной, все переменны е, связанны е по п а
мяти (storage association)1, такж е становятся неопределенными.
Массивы
Массив - это ряд скалярных элементов, которые имею т тот же самый тип и вид пара
метров. Лю бой объект, который объявлен со спецификацией массива, - массив. Массивы
могут быть объявлены при использовании утверждения объявления типа или при исполь
зовании утверж дения DIM ENSION, CO M M O N , A LLO C A TA BLE, POIN TER или
TA RG ET.
На массив м ожно сослаться элементом (используя нижние индексы), секцией (ис
пользуя список нижних индексов секции) или в целом. Список нижнего индекса (припи
санный к имени массива) указывает ссылку на элемент или на секцию массива.
Список нижнего индекса секции состоит из нижних индексов, триплетов нижнего ин
декса или векторных нижних индексов. Минимум один нижний индекс в списке должен
бы ть триплетом нижнего индекса или векторным нижним индексом.
Когда имя массива без любых нижних индексов появляется во встроенной операции (на
пример, сложение), операция обращается к целому массиву (всем элементам в массиве).
М ассив обладает такими свойствами:
Тип данных. М ассив м ожег иметь любой встроенны й или производный тип. Тип дан
ных массива (как лю бой другой переменной) определен в утверждении объявления типа
или подразум евается первым символом его имени. Все элементы массива имею т тот же
самый тип и вид параметров. Если значение, назначенное на индивидуальный элемент
массива, не то же самое, что тип массива, оно преобразовывается в тип массива.
Ранг. Ранг массива - число измерений в массиве. М ассив может иметь до семи изме
рений. Ранг одном ерного массива представляет колонку данных (вектор), ранг двумерно
го м ассива представляет таблицу данных, упорядоченных ио столбцам, ранг трехмерного
массива представляет таблицу данных относительно многократных страниц (или плоско
стей) и т. д.
Границы. Массивы имеют нижнее и верхнее значение индексов в каждом измерении. Эти
границы определяют диапазон из значений, которые могут использоваться как нижние ин
дексы для измерения. Значение любой границы индексов можег быть положительным, отри
цательным или нулем. Границы измерения определены в спецификации массива.
Глава 2 Типы данных, коиипйнпш и переменные 39
Размер. Размер массива - общ ее количество элем ентов в массиве (произведение сте
пеней массивов). Степень - общ ее количество элементов в специфическом измерении.
Степень определяется так: верхняя г раница - нижняя граница + 1. Если значение лю бой
из степеней массива - нуль, массив имеет размер нуля.
Форма. Ф орма массива определена его рангом и степенями и может быть представле
на как одномерный массив (вектор), где каждый элемент - степень соответствую щ его
измерения. Два массива с той же самой формой, как говорят, являю тся соответствую
щими. Скаляр является соответствую щ им массиву лю бой формы.
Имя и ранг массива долж ны бы ть определены при объявлении массива. Степень каж
дого измерения может быть постоянной или переменной. Степени м огут измениться во
время выполнения программы , если массив - массив с формальными параметрами, авто
матический массив, указатель м ассива или размещ аемый массив. На массив ссылаю тся
по имени массива. На индивидуальны е элементы в названном массиве ссылаю тся ска
лярным нижним индексом или списком скалярных нижних индексов (если в массиве
больше, чем одно измерение). А на секцию названного массива ссылаю тся нижним ин
дексом секции.
Следую щ ие примеры - допустим ы е объявления массива:
DIMENSION А(10, 2, 3) ! утверждение DIMENSION
ALLOCATABLE В (:,:) ! утверждение ALLOCATABLE
POINTER С(:, \ :) ! утверждение POINTER
REAL, DIMENSION (2, 5):: D ! Тип объявления с атрибутом DIMENSION
Рассмотрите следую щ ее объявление массива:
INTEGER L(2:11,3)
У массива L следую щ ие свойства:
Тип данных: INTEG ER
Ранг: 2 (два измерения)
Границы: П ервое измерение: от 2 до 11
Второе измерение: от 1 до 3
Размер: 30 (произведение степеней: 1 0 x 3 )
Форма: (/10,3/) (или 10 к 3); вектор степеней 10 и 3
Следующ ий пример показывает другие допустим ы е способы объявить этот массив:
DIMENSION L(2:11,3)
INTEGER, DIMENSI0N(2:11,3):: L
COMMON L(2:11,3)
Следующ ий пример показывает ссылки на элементы, секции массива и целый массив:
REAL В (10) ! Объявляет ранг одномерного массива с 10 элементами
INTEGER С (5,8) »Объявляет ранг двумерного массива с 5 элементами
! в первом измерении и 8 элементами во втором измерении
Массив целиком
М ассив целиком (w hole array) - именованный массив; он является или именованной
константой, или переменной. Ссылки на него - но имени массива (без нижних индексов).
Если целый массив появляется в невыполнимом утверж дении, утверж дение обращается
ко всему массиву. Например:
INTEGER, DIMENSION (2:11,3):: L ! Определяет тип и измерения массива L
Если м ассив появляется в вы полним ом утверж дении, утверж дение применяется ко
всем элементам массива. Например:
L = 10 ! Значение 10 назначено на все элементы в массиве L
WRITE *, L ! Печать всех элементов в массиве L
Элементы массива
Элемент массива - один из скалярны х элем ентов данны х, которые составляю т мас
сив. С писок нижнего индекса (прилож енны й к компоненту массива или массиву) опреде
ляет, ссылку на элемент. С сы лка на элем ент м ассива приним ает следую щ ую форму:
массив (список нижнего индекса)
где массив - имя массива; список нижнего индекса - список одного или более нижних индек
сов, отделенных запят ыми. Число нижних индексов должно равняться рангу массива.
Каждый нижний индекс долж ен бы ть скалярным целым числом (или другим число
вым вы раж ением ) со значением , которое изменяется в пределах границ его измерения.
Правила использования
Каждый элем ент м ассива наследует тип, вид параметра типа и определенны е атрибу
ты (IN TEN T, P A R A M ET E R и TA R G E T) родительского массива. Элемент массива не мо
ж ет унаследовать атрибут POIN TER.
Если элем ент м ассива имеет тип character (символ), он м ож ет сопровождаться ди ап а
зоном подстроки в круглых скобках; для примера:
ARRAY_D (1,2) (1:3)1 Элементы - подстроки длины 3
О днако в соответствии с соглаш ением такой объект является подстрокой, а не эле
ментом массива.
Н екоторы е допустим ы е ссылки на элем ент м ассива для массива, объявленного как
R EA L В (10,20): В (1,3), В (10,10) и В (5,8).
Д ля информации о формах для спецификаций м ассива см. разд. 4.2.
JL
Трехмерный массив BOS (3,3,3)
Рис. 2.3 Память массива (стрелками показаны позиции памяти)
Например, в двумерном массиве BAN элем ент BAN (1,2) им еет значение порядка
нижнего индекса 4; в трехмерном массиве BOS элем ент BO S (1,1 И) им еет значение по
рядка нижнего индекса 1.
В секции массива порядок нижнего индекса элем ентов - их порядок непосредственно
в пределах секции. Для примера: если массив объявлен как В (20), секция В (4:19:4), со
стоит из элементов В (4), В (8), В (12) и В (16). Значение порядка ниж него индекса В (4) в
секции массива - 1; порядок нижнего индекса значения В (12) в секции - 3.
Секция массива
С екц и я м а с с и в а - часть массива, которая непосредственно является массивом. Это -
подобъект массива. Список нижних индексов секции (прилож енны й к компоненту м ас
сива или массиву) определяет, какая часть является ссылкой. С сы лка на секцию массива
принимает следующую форму:
array(sect-subscript-list) - массив (список нижнего индекса-секции)
где аггау -м асс и в - имя массива; с п и с о к н и ж н е г о и н д е к с а -с е к ц и и - список одного или бо
лее нижних индексов секции (нижние индексы, триплеты ниж него индекса, или вектор
ные нижние индексы), указание ряда элементов по специф ическом у измерению .
Минимум один из пунктов в списке нижнег о индекса секции долж ен бы ть триплетом
нижнего индекса или векторным нижним индексом.
Триплет нижнего индекса определяет элементы м ассива в увеличении или ум еньш е
нии порядка в данном большом шаге. А векторный нижний индекс определяет элементы
в любом порядке.
Каждый нижний индекс и триплет нижнего индекса долж ны бы ть скалярным целым
числом или другим числовым выражением. Каждый векторны й нижний индекс долж ен
быть одноранговым целочисленным выражением.
42 С Д Ai<4uuu, В В К о н д р а т ьев П роклам ирование на Visual FORTRAN
Правила использования
Если не определен никакой список нижнего индекса секции, ранг и форма секции
м ассива - ге же, что и у роди гельского массива.
В противном случае ранг секции массива - число векторных нижних индексов и тр и
плетов ниж него индекса, которы е появляю тся в списке. Его форма - ранг одномерного
массив, где каждый элем ент - значение целого числа в последовательности, обозначен
ной соответс твующим триплетом ниж него индекса или векторным нижним индексом.
Если лю бая из этих последовательностей пуста, секция массива имеет размер нуль.
П орядок нижнег о индекса элем ента секции м ассива - элем ент объекта массива, которую
представляет секция массива.
К аж дая секция м ассива наследует тип, вид параметра типа и определенные атрибуты
(IN TEN T, PA R A M ET E R и TA R G E T) родительского массива. Секция массива не может
унаследовать атрибут PO IN TER .
Если массив (или компонент массива) имеет тип character (символ), он может сопровож
даться диапазоном подстроки в круглых скобках. Рассмотрите следующее объявление:
CHARACTER (LEN=15) С (10,10)
В этом случае секция м ассива, на которую ссылаю тся как С (: :), (1:3) - массив формы
(10,10), чьи элем енты являю тся подстрокам и длины 3 из соответствую щ их элементов С.
С ледую щ ие прим еры показы ваю т допустим ы е ссылки построения секции. О братите
вним ание, что синтаксис (/.../) обозначает конструктор массива:
REAL, DIMENSION (20):* В
В = (/1,21)
С(В) = А(В)
44 С Д Алгазин, В В К ондрат ьев П рограм ирование на Visual FORTRAN
С = А((/1,2/))
Секция массива с векторны м нижним индексом не долж на быть:
■ внутренним файлом;
■ фактическим параметром , связанны м с формальным массивом, который определен
или переопределен (если атрибут IN TEN T определен, это должен быть INTENT (В));
■ целью в операторе присваивания указателя.
Если последовательность, определенная векторным нижним индексом, пуста, секция
м ассива имеет размер нуль.
Конструкторы массива
Конструктор массива может использоваться, чтобы создать и назначать значения масси
ва ранга 1 (и массива констант). Конструктор массива принимает следующую форму:
(/ac-value-Ust/)
где ac-value-list - список одного или более выражений или неявных D O -циклов. Каждое
ac-vaíue долж но иметь одинаковы й тип и параметры вида и отделено запятыми.
Неявный D O -цикл в конструкторе массива принимает такую форму:
(ac-value-Hst, do-variable = exprl, expr2 [, ехргЗ])
где do-variable - имя скалярной целой переменной. Его возможности - возможности не
явного D O -цикла.
ехрг является скалярны м целочисленны м выражением; exprl и ехрг2 определяю т ди а
пазон значений для цикла; ехргЗ определяет больш ой шаг; ехргЗ должен быть значением,
отличным от нуля; если это вы раж ение опущ ено, оно предполагаются равным I .
Правила использования
Созданный массив им еет тот же самый тип, что и выражение ac-value-list. Если по
следовательность значений, определенны х конструктором массива, пуста (пустое вы ра
ж ение массива или неявный D O -цикл не производит никаких значений), массив ранга 1
имеет размер нуля.
ac-value интерпретируется следую щ им образом:
Формат ac-value Результат
Скалярное выражение Его значение - элемент нового массива.
Значения элементов в выражении (в порядке элемента массива) - соответствую
Массив
щая последовательность элементов в новом массиве
Он расширяется, чтобы сформировать список элементов массива под управлени
Неявный DO-цикл
ем переменной 0 0 (как конструкция 0 0 )
Следую щ ие вы раж ения показы ваю т 3 формы ас-значения:
С1 = (/4,87,6/) ! Скалярное выражение
С2 = (/В (1,1:5), В (l:J, 7:9)/) ! Выражение массива
СЗ = (/(1,1=1,4)/) ! Неявный DO-цикл
Вы можете такж е см еш ать эти формы, например:
С4 = (/4, А(1:5), (1,1=1,4), 71)
Если каж дое вы раж ение в конструкторе массива - постоянное выражение, конструк
тор массива - постоянное выраж ение.
Если выражения им ею т тип character (символ), Fortran 95/90 требует, чтобы каждое
выражение имело ту ж е самую сим вольную длину.
Глава 2 Типы данных, конст ант ы и перем енны е 45
Однако Fortran Intel позволяет символьным выражениям цметь различны е сим воль
ные длины. Д лина результирую щ его сим вольного массива - максимум длин индивиду
альных символьных выражений. Н апример:
print *,len ( (/’a'/ab'/abc'/dV))
print ^ ,++V/(/,a,),ab,),abc,),d,/)//'--'
Ниже показан результат вы полнения этих операторов:
3
++а --++аЬ --++abc--++d --
Если неявный D O -цикл содерж ится в пределах другого неявного D O -цикла (влож ен
ного), то они не могут иметь ту же самую переменную DO (do-variable).
Чтобы определять массивы больш е чем одного измерения, используйте встроенную
функцию RESHAPE.
А льтернативные формы для конструкторов массива:
■ квадратные скобки (вместо круглых скобок и слеш ей), чтобы вклю чить конструкторы
массива; для примера: следую щ ие 2 конструктора м ассива эквивалентны :
INTEGER С(4)
С = (/4,87,6/)
С = [4,8,7,6]
■ отделенный двоеточием триплет (вместо неявного D O -цикла), чтобы определить д и а
пазон значений и больш ой шаг; например, следую щ ие 2 конструктора массива экви
валентны:
INTEGER D(3)
D = (/1:5:2/) 1Формат триплета
D = (/(1,1=1,5,2)1) ! Формат неявного DO-цикла
Следующий пример показывает конструктор массива, используя неявный D O -цикл:
INTEGER ARRAY_C(10)
ARRAY_C = (/(I, l=30,48, 2)1)
Значения ARRAY C - четные числа 30-48.
Следующий пример показы вает конструктор м ассива производного типа, который
использует конструктор структуры:
TYPE EMPLOYEE
INTEGER ID
CHARACTER(LEN=30) NAME
END TYPE EMPLOYEE
TYPE(EMPLOYEE) CC 4T(4)
CC_4T = (/EMPLOYEE(2732,"JONES"), EMPLOYEE(0217,"LEE"), &
EMPLOYEE(1889,"RYAN"), EMPLOYEE(4339,"EMERSON")/)
Следующий пример показывает, как м ож ет использоваться встроенная функция
RESHAPE для создания многом ерного массива:
Е = (/2.3,4.7, 6.6/)
D = RESHAPE(SOURCE = (/3.5, (/2.0,1.0/), Е/), SHAPE = (/2,3/))
D -массив ранга 2 формы (2,3), содерж ащ ий следую щ ие элементы:
3 .5 1 0 4 .7
2.0 2.3 6 6
Глава 3. Выражения и операторы присваивания
3.1. Выражения
В ыражение представляет либо ссылку на данные либо результат вычисления и сфор
мировано из операторов, операндов и круглых скобок. Результат выражения является или
скалярным значением, или массивом скалярных значений. Если значение выражения
им еет встроенный тип, оно имеет вид параметра типа. (Если значение имеет встроенный
тип CH A RA CTER , оно такж е имеет параметр длины .) Если значение выражения имеет
производный тип, оно не имеет никакого вида параметра типа.
Операнд - скаляр или массив. О ператор может бы ть или встроен, или определен.
Встроенный оператор известен компилятору и всегда доступен для лю бой программной
единицы программы. О пределенны й оператор, описанный явно пользователем, в подпро
грамме функции и доступен для каждой программной единицы, которая использует под-
п роф ам м у.
Самая простая форма выражения (первичного) м ож ет бы ть лю бым следующ им выра
жением:
■ константа; например 4.2;
■ подобъект константы; например ’LM N O P’ (2:4);
■ переменная; например V A R I;
■ конструктор структуры; например EM PLO Y EE (3472, "JOHN D O E”);
■ конструктор массива; например (/12.0,16.0/);
■ ссылка функции; например COS(X);
■ другое выражение в круглых скобках; например (1+5).
Лю бая переменная или ссылка функции, используем ы е как операнд в выражении,
долж ны бы ть определены до выполнения. Если операнд - указатель, он должен быть свя
зан с целевым объектом (целью). Ц елочисленный операнд долж ен быть определен с це
лочисленным значением, а не меткой утверждения значения. Все символы в символьной
ссы лке объекта данных долж ны бы ть определены. Когда сделана ссылка на массив или
секцию массива, все отобранные элементы долж ны быть определены. Когда ссылаются
на структуру, все компоненты структуры долж ны бы ть определены. В выражении, кото
рое имеет встроенны е операторы с операндом массива, операция выполняется для каж
дого элемента массива. В выражениях с больш е чем одним операндом массива, массивы
долж ны быть соответствую щ ими (они должны иметь ту же самую форму). К операции
обращ аю тся соответствую щ ие элементы массивов, и результат - массив той же формы
(то ю же самого ранга и степени), что и у операндов. В вы ражении, которое имеет встро
енны е операторы с операндом в виде указателя, операция выполняется на значении цели,
связанной с указателем.
Для определенных пользователем операторов операции на массивах и указателях оп
ределены определением процедуры операции.
Скаляр является соответствую щ им с лю бым массивом. Если один операнд выраже
ния - массив и другой операнд - скаляр, выражение выполняется так, как будто значение
скаляра было скопировано, чтобы сформировать массив того же самого вида, как у опе
ранда массива. Результат - массив той же самой формы, что у операнда массива.
м м от пт 46
Г пава 3 В ыраж ения и операт оры присваивания 47
Следующие секции описы ваю т числовые, символьные, относительны е и логические
выражения; определенные пользователем операции; резю ме приоритета операторов;
инициализацию и выражения спецификации.
Числовые выражения
Числовые выражения отраж аю т вычисления с числами и сформированы с числовыми
операндами и числовыми операторами. Результат числовой операции приводит к единст
венному числовому значению.
Числовой - это термин, вклю чаю щ ий в себя и логические данные, так как они обраба
тываются как целочисленны е данные, если использую тся в числовом контексте. По
умолчанию для .TRUE. =1; .FALSE. = 0. Значение по ум олчанию может измениться, если
используется определенная опция компилятора.
Числовые операторы определяю т вычисления, которые будут выполнены на значени
ях числовых операндов. Результат - скалярное числовое значение или массив, элементы
которого -- скалярные числовые значения.
Следующие операторы - числовые операторы:
| Оператор Функция
i **
I Возведение в степень
I*
Умножение
/ Деление
+ Сложение или унарный плюс (тождество)
- Вычитание или унарный минус (отрицание)
Унарные операторы работаю т на единственном операнде. Бинарные операторы р а
ботают на паре операндов. О ператоры плюс и минус м огут быть унарны ми или бинар
ными. Когда эти операторы унарны е, они предш ествую т единственном у операнду и о бо
значают соответственно положительное или отрицательное значение. Возведение в сте
пень, умножение и операторы деления - бинарные операторы. Д опустимы е числовые
операции должны иметь результаты, которые определены ариф метикой, используемой
процессором. Н апример, возведение в вещ ественную степень с отрицательным основа
нием недопустимо.
Порядок выполнения операторов в числовом выражении определяется таким образом:
Оператор Старшинство
** Наивысшее
*и I -
Унарный + и - -
бинарный + и - Самое низкое
Операторы с равным приоритетом выполняю тся слева направо. О днако возведение
в степень выполняется справа налево. Н апример, А **В**С выполняется как А **(В**С).
В **С выполняется сначала, затем А возводится в полученную степень. О бычно
2 оператора не могут появляться вместе. О днако Рот1тап 1Ще1 позволяет 2 последователь
ных оператора, если второй оператор - плюс или минус.
В следующем примере вначале выполняется оператор возведения в степень, а затем,
в соответствии со старш инством операций, оператор умножения:
А** В*С выполняется как (А** В) *С
В следующем примере оператор возведения в степень долж ен был бы быть выполнен
сначала. Однако, потому что 1Ще1 Ройтап позволяет комбинацию возведения в степень
48 С' ; l 4 i г а пт, В В К ондрат ьев П ро гр а и и р о ва н и с на Visual FO RTRAN
2 1 4 3
(4 + 3) * 2 - 6/2 = 11
А А А А
1 2 4 3
(4 + 3 * 2 - 6)/2 = 2
А А А А
2 1 3 4
( (4 + 3) * 2 - б ) /2 = 4
А А А А
1 2 3 4
Вы раж ения в пределах круглых скобок выполняю тся согласно нормальному порядку
приоритета. В выраж ении, содерж ащ ем влож енные круглые скобки, выполняется сначала
вы раж ение во внутренних круглых скобах.
Н есущ ественны е круглые скобки не затрагиваю т порядок вы полнения выражения, как
показано в следую щ ем примере:
4+ (3*2)-(6/2)
О днако использование круглых скобок для определения порядка выполнения важно
для высокой точности вычисления. В таких вычислениях порядки выполнения, которые
являю тся алгебраически эквивалентны м и, возм ож но не эквивалентны в вычислительном
отнош ении, из-за способа округления промеж уточных результатов.
Г чава 3 В ы раж ении и операт оры присваивания 49
Круглые скобки могут использоваться в списках параметров, чтобы вынудить данный
параметр быть обработанным как выражение, вместо адреса пункта памяти.
1DOUBLE PRECISION.
2 DOUBLE COMPLEX
50 С Д. А лгаш н, В В Кондрат ьев. Программирование на Visual FO RTRAN
Символьные выражения
С им вольное вы раж ение состоит из сим вольного оператора (//), который связывает
2 операнда сим вольного типа. Результат сим вольного выражения приводит к единствен
ному значению т о ю же типа. Р езультат сим вольного выраж ения - строка символов, зна
чение которой - значение левого сим вольного операнда, связанного со значением право
го операнда. Д лина сим вольного выражения - сум м а длин значений операндов. Н апри
мер, значение сим вольного выраж ения 'АВ' //’C D E ’ - ’A B C D E ’, которое имеет длину 5.
К руглы е скобки не затрагиваю т вы числение сим вольного выражения; например, сле
дую щ ие сим вольны е вы раж ения эквивалентны:
(’АВС’ II ’DE’) II ’F’
’АВС’ II (’DE’ II ’F’)
’АВС’ II ’DE’ II ’F’
К аж дое из этих вы раж ений им еет значение 'ABCD EF'. Если сим вольны й операнд в
сим вольном вы раж ении содерж ит пробелы, пробелы вклю чены в значение символьного
вы раж ения. Н априм ер:
'ABC' II ’D Е’ II 'F' имеет значение ’ABC D EF
Выражения отношения
Выраж ение отношения состоит из двух или больш е выраж ений, значения которых
сравниваю тся, чтобы определить, удовлетворены ли отнош ения, заявленны е оператором
отнош ения. С ледую щ ие вы раж ения операторы отнош ения:
Операт ор Отношения
.LT. или < М еньш е чем
.LE. или < = М еньш е чем или равно
.EQ. или - ^Равно
.NE. или /= Не равно
.GT. или > Больш е чем
Глава 3 В ыраж ении и операт оры присваивания 51
.GE. или > = Больш е чем или равно
Результат выражения отнош ения .TRUE., если отнош ение, оп ределенное оператором ,
удовлетворено, результат .FA LSE., если отнош ение, определенное оп ератором , не у дов
летворено. О ператоры отнош ения им ею т равный приоритет. Ч исловы е операторы и си м
вольный оператор // имею т более высокий приоритет, чем операторы отнош ения.
В числовом выражении отнош ения, операнды - числовы е вы раж ения. Рассм отрите сл е
дую щ ий пример:
APPLE+PEACH > PEAR+ORANGE
Смысл этого вы ражения, что сумма A PPL E и PEA C H больш е, чем сум м а PE A R и
ORA N GE. Если эти отнош ения правильны, значение вы раж ения .TR U E.; в противном
случае значение .FALSE.
О перанды комплексного типа м огут только быть сравнены , используя оператор р а
венства (= = или .EQ.) или оператор неравенства (/= или .NE.). О бъекты типа C om plex
равны, если равны их действительны е и мнимые части.
В символьном относительном выражении операнды - си м вольны е вы раж ения. В вы
раж ении сим вольного отнош ения меньш е, чем (< или .LT.) означает, что сим вольное
значение предш ествует в сопоставлении последовательности A SC II, и больш е, чем (>
или .GT.) означает, что сим вольное значение следует в сопоставлении последовательн о
сти ASCII. Н апример:
'A B '/rZZZ' ! Т . 'ССССС
Этот оператор выражает, что 'A B ZZZ' - м еньш е, чем 'ССС С С '. В этом случае отн ош е
ние, определенное оператором удовлетворено, таким образом р езультат .TRU E.
С им вольны е операнды сравниваю тся посим вольно (один сим вол одноврем енно), на
чиная с первого сим вола из каждого операнда. Если операнды разной длины , более ко
роткий дополняется справа пробелами, пока длины не станут равны м и; например:
'ABC' .EQ. 'ABC'
'АВ' ! Т . 'С'
П ервое относительное выражение имеет значение .TRU E, даж е при том , что длины
выражений не равны, а второе имеет значение .TRU E, даж е при том , что 'АВ' более д л и
нен, чем 'С'.
О тносительное вы раж ение м ож ет сравнить 2 числовых вы раж ения различны х типов
данных. В этом случае перед сравнением значение вы раж ения с м ладш им по званию ти
пом данны х преобразовано к более высокому упорядочиванию типа данны х.
Логические выражения
Л огическое вы раж ение состоит из одного или более логических оп ераторов и операн
дов: логических, числовых или операции отнош ения. С ледую щ ие вы раж ения - л оги че
ские операторы:
Оператор Пример Смысл
.AND. A .AND. В Логическая конъюнкция: выражение истинно, если и А и В истинны
.OR. A .OR. В Логическая дизъюнкция (включающее 0R ): выражение истинно, если А или
В или оба являются истинными
.NEQV. A .NEQV. В Логическая неэквивалентность (исключающее 0R ): выражение истинно, ес
ли или А или В истинно, но ложь, если оба истинны
XOR. A XOR. В То же самое, что и Ж С )\/
52 С Д А чгазин, В В К ондрат ьев П р о гр а и и р о ва н и е на Visual FORTRAN
Выражения инициализации
В ы раж ение инициализации долж но быть выполнено во времени компиляции с задан
ными константами. Оно используется, чтобы определить значение для объекта.
В выражении инициализации каж дая операция встроена и каждый операнд - одно из
следую щ их выражений:
■ К онстанта или подобъект константы.
■ Конструктор массива, где каждый элем ент и границы и результаты каждого неявного
D O -цикла, выражения, первичны е выборы которых - выражения инициализации.
■ Конструктор структуры, компоненты которого - выражения инициализации.
■ Элементная ссылка встроенной функции типа "целое" или символьного типа, пара
метры которого - выраж ения инициализации типа "целое" или символьного типа.
■ Ссылка на одну из следую щ их функций запроса: B 1T S1Z E, M1NEXPONENT, DIGITS,
PRECISIO N , EPSILO N , RA D IX, H U GE, RA N G E, 1LEN, SHAPE, KIND, SIZE,
LBO U N D , TINY, LEN, U BO U ND , M A X EX PO N EN T.
Каждый параметр функции долж ен быть одним из следую щ их выражений:
■ Вы раж ением инициализации.
■ П еременной, чей параметр вида - типа, границы которого не определены или опреде
лены утверж дением A L LO C A TE, назначением указателя или выражением, которое не
является выражением инициализации.
■ Ссылкой на одну из следую щ их функций преобразования (каждый параметр должен
быть выраж ением инициализации): REPEA T, SELECTED _REA L_ KIND, RESHAPE,
TRA N SFER, SELECT E D I N T_ K IND, TRIM .
■ Ссылкой на функцию преобразования NULL.
■ Н еявной D O -переменной в пределах конструктора массива, где границы и результаты
неявного D O -цикла - выражения инициализации.
■ Д ругим выражением инициализации, заклю ченным в круглые скобки. Каждый ниж
ний индекс, нижний индекс секции и точка начала и конца подстроки должны быть
выражением инициализации. В выраж ении инициализации оператор возведения в
степень (**) долж ен быть типа "целое". Если выражение инициализации вызывает
функцию запроса для парам етра типа или связанного массива некоторого объекта,
параметр типа или связанны й м ассив долж ен быть определен в предшествующем
описании (или в левой части функции запроса в том же самом утверждении).
С ледую щ ие примеры показы ваю т допустим ую и недопустимую инициализацию вы
раж ения:
Допустимо
-1 + 3
SIZE(B) IВ - именованная константа
7_2
INT(J, 4) ! J - именованная константа
SELECTEDJNT.KIND (2)
Недопустимо Объяснение
SUM (A ) Н еразреш енная функция.
Глава 3 Вы раж ения и операт оры присваивания 55
А/4.1 - К** 1.2 П оказатель степени не целое число. (А- и К -им енованны е константы.)
H UGE(4.0) Параметр не целое число.
Выражения спецификации
Выражение спецификации - выраж ение ограниченного применения, которое имеет
тип "целое" и имеет скалярное значение.
Этот тип выражения появляется только в объявлении границ м ассива и символьных
длин.
В ограниченном выражении каждая операция встроена и каждый операнд - одно из
следующих выражений:
■ Константа или подобъект константы.
■ Переменная, которая является одним из следую щ их выражений:
• формальный параметр, который не имеет атрибута O PTIO N A L или INTENT (OU T)
(или подобъект такой переменной);
• в общем блоке (или подобъект такой переменной);
• доступно использованием или хостом (или подобъектом такой переменной).
■ Конструктор структуры, компоненты которого - ограниченны е выражения.
■ Неявная - DO-переменная в пределах конструктора м ассива, где границы и результа
ты неявного D O -цикла - ограниченны е выражения.
■ Ссылка на одну из следую щ их функций запроса: B IT S 1 Z E , M 1NEXPONENT, DIGITS,
PRECISION, EPSILO N , RA D IX, H U G E, RA N G E, 1LEN, SHA PE,K IN D , SIZE,
LBOUND, SIZEOF, LEN, TINY, M A X EX PO N EN T, UBO U ND .
Каждый параметр функции долж ен быть одним из следую щ их выражений:
■ О граниченное выражение.
■ Переменная, свойства которой не зависят от последнего измерения массива перени
мающ его размера (assum ed-size array), не определены выраж ением, которое не явля
ется ограниченным выражением, или неопределимым и назначениями указателя или
утверждением A LLO CATE.
■ Ссылка на лю бую другую встроенную функцию , где каж дый параметр - ограничен
ное выражение.
■ Ссылка на спецификацию функции, где каждый параметр - ограниченное выражение.
■ Конструктор массива, где каждый элемент, границы и результаты каж дого неявного
DO-цикла, первичные выборы которых - ограниченны е выражения.
■ Д ругое ограниченное выражение, заклю ченное в круглые скобки.
Каждый нижний индекс, нижний индекс секции и точка начала и конца подстроки
должны быть ограниченным выражением.
Функции спецификации могут использоваться в выраж ениях спецификации, чтобы
указать атрибуты данных объекта. Ф ункция спецификации - функция без побочного эф
фекта. Она не может иметь формального параметра процедуры или бы ть любым сле
дующим выражением:
■ встроенная функция;
■ внутренняя функция;
■ функция утверждения;
■ определенным как RECURSIVE.
Переменная в выражении спецификации долж на иметь его параметры типа и типа
(любого), определенного одним из следую щ их способов:
56 С Л А лгант , В В К ондрат ьев Программирование на Visual FO RTRAN
Встроенные назначения
В строенное назначение используется для задания значения неуказательной перемен
ной. В случае указателей встроенное назначение используется, чтобы задать значение
цели, связанной с переменной указателя.
Значение переменной (или цели) определено в правой части от знака равенства.
Встроенный оператор присваивания принимает следую щ ую форму:
variable = expression (переменная = выражение)
где variable - имя скаляра или массива встроенного или производного типа (без опреде
ленного назначения). М ассив не может быть массивом перенимаю щ его размера. Ни ска
ляр, ни массив не могут быть объявлены с атрибутам и PA R A M ET E R или INTENT (В).
expression имеет встроенны й тип или тот ж е самый производны й тип, как и перемен
ная. Его форма долж на соответствовать переменной. Если необходим о, это выражение
преобразовы вается к том у же самом у типу и виду, как и переменная.
Правила использования
П реж де чем значение назначено на переменную , часть выраж ения оператора при
сваивания и лю бого выраж ения в пределах переменной долж ны быть выполнены. Н ика
кое определение вы раж ений в перем енной не мож ет затронуть выполнимой части вы ра
жения оператора присваивания.
Примечание. Когда систем а поддерж ки вы полнения н азначает скалярное целое число или сим
вольную перем енную и перем енную , которая короче, чем зн ачени е, оно м ож ет быть обрезано и
сущ ественн ы е биты (или сим волы ) потеряны . Это обрезание м ож ет произойти без предупреж
дения и м ож ет вы звать неправильную инф орм ацию в програм м е.
Гчава 3 Выраж ения и операт оры присваивания 57
Если переменная - указатель, он должен быть связан с определенной целью. Ф орма
цели и выражение, а такж е их тип и параметры вида долж ны соответствовать.
Не допустимо Объяснение
3.14 = А - В О бъект слева долж на бы ть переменной.
IC O U N T = А //В (3:7) Н еявно заданные типы данны х не соответствую т.
SC A LA R I = A R R A Y _A (:) Ф орм ы не соответствую т.
TYPE(DATE) APP.DATE
END TYPE
TYPE(APPOINTMENT) MEETING
DO I = 1,7
CALL GET_DATE(TODAY)
THIS_WEEK(I) = TODAY
END DO
MEETING%APP_DATE = TODAY
Определенные назначения
О пределенное назначение определяет операцию назначения. О но определяется п од
программой, содерж ащ ей блок родового интерф ейса со специф икатором A SS IG N
M E N T ^ ). П одпрограмма определена утверж дением SU B R O U TIN E или утверж дением
ENTRY, которое имеет 2 обязательны х форм альны х параметра.
О пределенное элементное назначение обозначается E L E M E N T A L в утверж дении
SUBRO U TIN E.
60 С Д Алгазин, В В К ондрат ьев П рограм ирование на Visual FORTRAN
Назначение указателя
О бъекты, которые указы ваю т на другие объекты, называю тся ссылками или указат е
лями. Более строгое определение: указателем называется переменная, диапазон значений
которой состоит из адресов ячеек памяти. Для описания ссылки используется атрибут
pointer. С сы лка м ож ет указы вать как на сущ ествую щ ий объект, так и на специально от
веденную область памяти. У казатели м ожно использовать для программирования дина
мических структур данны х, таких как списки, очереди, стеки и деревья, а такж е в других
случаях.
У казатель назначения связан с целью и несет в себе определение цели. Если цель не
определена или разъединена, указатель приобретает тот же статус, что и цель. Оператор
присваивания указателя имеет такую форму:
pointer-object => target
где poin ter-object - имя переменной или компонент структуры, объявленной с атрибутом
PO IN TER .
target (цель) является переменной или выражением. Его тип и параметры вида и ранг'
долж ны бы ть теми же самы ми, как и цель указателя. Это выражение не может быть сек
цией м ассива с векторны м нижним индексом.
Правила использования
Если цель - переменная, она долж на иметь атрибут PO IN TER или атрибут TARGET
или бы ть подобъектом , чей родительский объект имеет атрибут TARGET.
Если цель - выраж ение, результатом долж ен быть указатель.
Если цель не указател