В ФОРТРАНе различают данные шести типов: целые, вещественные, двойной точности, комплексные, логические и текстовые. Каждый тип предназначен для вполне определенных целей и может иметь свое особое внутреннее представление. Поэтому интерпретация операций над данными существенно зависит от типов этих данных. Тип функции определяет тип того значения, которое доставляется в качестве результата в выражение, содержащее указатель этой функции.
Связь данного с его тином. С именем, используемым для идентификации данного или функции, связывается вполне определенный тип данных. Последовательность символов, образующих константу, определяет как значение, так и тип этой константы.
В каждом программном модуле с символическим именем, представляющим функцию, переменную или массив, связывается только один тип данных. Установленная однажды, эта связь в рамках данного программного модуля должна быть сохранена для любого другого использования этого символического имени, требующего учета типа данных.
Для символического имени тип данных может быть установлен указанием его в объявлении типа (п. 7.2.1.6) для любого типа данных, кроме текстового. Такое явное объявление аннулирует неявную связь, устанавливаемую для целого и вещественного типов (п. 5.3).
Не существует способа установления связи символического имени с текстовым типом данных, поэтому данные этого типа, за исключением констант, идентифицируются с помощью имени одного из остальных типов (см., например, п. 8.4.2.).
(Измененная редакция, Изм. № I).
Свойства данных разных типов. В следующих разделах определяются математические свойства и свойства представлений каждого из шести типов данных. Значение нуль не считается ни положительным, ни отрицательным для данных типов целый, вещественный и двойной точности.
Тип целый. Целое данное — это всегда точное представление целого значения. Оно может принимать только целые (положительные, отрицательные и нулевое) значения.
Тип вещественный. Вещественное данное — это процессорное приближение вещественного значения. Оно может принимать положительные, отрицательные и нулевое значения.
Тип двойной точности. Данное двойной точности — это процессорное приближение вещественного значения. Оно может принимать положительные, отрицательные и нулевое значения. Точность приближения, не определяемая здесь, должна быть больше, чем для типа вещественный.
Тип комплексный. Комплексное данное — это процессорное приближение комплексного значения. Это приближение представлено в виде упорядоченной пары вещественных данных. Первый элемент пары представляет действительную, а второй — мнимую часть комплексного числа. Соответственно, каждый элемент имеет ту же точность приближения, что и вещественное данное.
Тип логический. Логическое данное может принимать одно из двух логических значений: «истина» или «ложь».
Тип текстовый. Текстовое данное — это последовательность символов. Эта последовательность может состоять из любых символов, допускающих представление в процессоре. В текстовом данном символ пробела является допустимым и значащим.
(Измененная редакция, Изм. № 1).
ИДЕНТИФИКАЦИЯ ДАННЫХ И ПРОЦЕДУР
Имена используются как для ссылок на данные и процедуры, так и для любой другой их идентификации.
Термин «ссылка» используется при такой идентификации данного, когда подразумевается, что текущее значение этого данного становится доступным при выполнении предложения (оператора), содержащего эту ссылку. Если данное идентифицируется, но его значение не обязательно становится доступным, то говорят, что данное именуется. Один случай, когда данное именуется, представляет особый интерес — это когда данному присваивается значение и тем самым производится определение или переопределение (значения) данного, т. е. данное либо впервые получает некоторое конкретное значение, либо ему присваивается новое значение. В случае процедуры термин «ссылка» означает, что действия, определяемые этой процедурой, станут доступными при выполнении предложения (оператора), содержащего эту ссылку.
Полное и строгое объяснение понятий «ссылка» и «определение» (включая и «переопределение») содержится в разд. 10.
Имена данных и процедур. С помощью имен данных идентифицируются константы, переменные, массивы или элементы массивов, а также блоки (п. 7.2.1.3). С помощью имен процедур идентифицируются функции и подпрограммы.
Константы. Константа является данным, которое всегда определено в процессе выполнения программы и не может быть переопределено (т. е. изменено). Для каждого типа данных имеются свои правила записи констант.
Среди числовых констант (чисел) типа целый, вещественный и двойной точности различаются число без знака и число со знаком. Последнее представляет собой число без знака, непосредственно перед которым расположен знак плюс или минус. Термином «число» обозначается как число со знаком, так и число без знака.
Целое число без знака. Целое число без знака записывается как непустая последовательность цифр. Значение константы этого вида в точности равно числу, изображаемому в десятичной системе счисления этой константой.
Вещественное число без знака. Основной формой записи вещественного числа без знака является смешанная дробь, под которой понимается запись вида
P.Q
(где Р — целая часть, a Q — дробная часть). Как целая, так и дробная часть есть целое без знака. Одна из этих частей (либо целая, либо дробная) может отсутствовать, т. е. представляться пустой последовательностью цифр. Значение константы этого вида есть процессорное приближение того числа, которое в десятичной системе счисления записывается в виде указанной смешанной дроби.
Десятичная экспонента изображается буквой Е, за которой следует целое число (без знака или со знаком). Десятичная экспонента является множителем (применяемым к числу, записанному непосредственно перед десятичной экспонентой), равным приближению результата возведения числа десять в степень, указанную целым числом, записанным после буквы Е.
Вещественное число без знака — это либо смешанная дробь, либо смешанная дробь, за которой следует десятичная экспонента, либо целое число без знака, за которым следует десятичная экспонента.
Число двойной точности без знака. Экспонента двойной точности записывается и трактуется аналогично десятичной экспоненте, за исключением того, что вместо буквы Е используется буква D.
Число двойной точности без знака записывается как смешанная дробь, за которой следует экспонента двойной точности, либо как целое число без знака, за которым следует экспонента двойной точности.
Комплексное число. Комплексное число задается в виде упорядоченной пары вещественных чисел (каждое из которых может быть либо вещественным без знака, либо вещественным со знаком), разделенных запятой и заключенных в скобки. Значением такой константы является приближение комплексного числа, представленного указанной парой чисел, первое из которых представляет действительную, а второе — мнимую часть комплексного числа.
Логическая константа. Логические константы «истина» и «ложь» записываются как .TRUE, и .FALSE, соответственно.
Текстовая константа. Запись текстовой константы имеет вид
nHhlh2...hn
(п—целое без знака (п>0); каждое — некоторый символ). Последовательность из п символов, которая следует за буквой Н, и образует собственно текстовое данное — константу. После буквы Н могут быть записаны любые п символов, представление которых допустимо в процессоре. В этой последовательности символов, изображающей текстовое данное, символ пробела является значащим. Константа этого типа может встречаться только в списке фактических параметров оператора вызова подпрограммы и в объявлении начальных данных.
(Измененная редакция, Изм. № 1).
Переменная. Переменная есть данное, идентифицируемое символическим именем (п. 3.5). На это данное можно ссылаться и его можно определять (т. е. присваивать ему значение).
Массив. Массив есть упорядоченный набор данных, имеющий одно, два или три измерения. Массив идентифицируется символическим именем. Идентификация этого упорядоченного набора данных как единого целого достигается посредством использования имени массива.
Элемент массива. Элементом массива является одна из компонент набора данных, образующего массив. Элемент массива идентифицируется указанием имени массива, непосредственно за которым следует дополнительная конструкция, называемая индексом. Индекс указывает на конкретный элемент массива.
На элемент массива можно ссылаться и его можно определять.
Индекс. Индекс представляет собой заключенный в скобки список индексных выражений. Если индексных выражений несколько, то они отделяются друг от друга запятой. Число индексных выражений должно соответствовать объявленной размерности массива (п. 7.2.1.1), за исключением вхождения имени элемента массива в объявление эквивалентности (п. 7.2.1.4). Идентифицируемый элемент массива определяется при помощи функции линеаризации (п. 7.2.1.1.1), используя вычисленные значения всех индексных выражений.
Индексные выражения. Индексное выражение записывается в виде одной из следующих конструкций:
С* V+K
С* V—К
С* V
V + K
V—К
V
к
где С и К — целые без знака, V — ссылка на переменную типа целый (см. разд. 6 относительно правил вычисления выражений; пп. 10.2.8 и 10.3 относительно требований на использование переменной в индексе).
Процедуры. Процедура (разд. 8) идентифицируется символическим именем. Процедурой является либо внутренняя функция, либо встроенная функция, либо основная внешняя функция, либо внешняя функция, либо внешняя подпрограмма. Внутренние функции, встроенные функции, основные внешние функции и внешние функции называются общим термином функции (или процедуры-функции), а внешние подпрограммы — термином подпрограммы (или процедуры-подпрограммы).
Функция доставляет результат, который называется значением функции и используется в точке ссылки на эту функцию; подпрограмма этого не делает. Способы ссылки на функции и подпрограммы отличаются друг от друга.
Ссылка на функцию. Ссылка на функцию производится при помощи указателя функции, состоящего из имени функции, за которым следует список фактических параметров, заключенный в скобки. Если список содержит более одного параметра, то они отделяются друг от друга запятой. Допустимые виды фактических параметров функций приведены в разд. 8 (см. п. 10.2.1 относительно требований к ссылкам на функции).
Правила типов для идентификаторов данных и процедур. Тип константы определяется ее изображением. С символическим именем, идентифицирующим блок данных или подпрограмму, не связывается никакой тип.
Тип, который связывается с символическим именем, идентифицирующим переменную, массив или внутреннюю функцию, может быть указан при помощи объявления типа. При отсутствии явного объявления типа с символическим именем связывается тип целый, если первая буква этого имени есть I, J, К, L, М, N; в противном случае связывается тип вещественный.
Если символическое имя встроенной функции или основной внешней функции используется в таком контексте, где оно идентифицирует именно одну из этих функций, то с ним связывается тип соответствующей функции, определенный в табл. 3 и 4.
Если в программном модуле содержатся ссылки на внешнюю функцию, то тип этой функции определяется так же, как и для переменной или массива. Для функции, определенной при помощи модуля-функции, тип определяется либо неявно, по имени функции, либо указывается явно в заголовке функции.
С каждым элементом массива связывается тот же тип, который связан с именем этого массива.
Формальные параметры. Формальный параметр внешней процедуры представляет переменную, массив, подпрограмму или внешнюю функцию.
Если формальный параметр используется в качестве имени внешней функции, то в качестве фактического параметра ему может соответствовать только имя внешней функции (разд. 8).Если формальный параметр используется в качестве имени внешней подпрограммы, то в качестве фактического параметра ему может соответствовать только имя внешней подпрограммы.
Если формальный параметр используется для ссылки на переменную или на элемент массива, то при задании фактического параметра с этим формальным параметром должно связываться значение того же типа, которое определено для формального параметра по правилам, приведенным в п. 5.3.
Если не оговорено противное, то использование формального параметра в качестве имени переменной, массива или элемента массива допустимо при условии установления надлежащей связи с соответствующим фактическим параметром.
Процесс установления связи фактических параметров с формальными параметрами изложен в разд. 8 и 10.
ВЫРАЖЕНИЯ
Настоящий раздел определяет форму представления и правила вычисления арифметических и логических выражений, а также отношений. Отношение употребляется только как компонента логических выражений. Выражение формируется из операндов и знаков операций (см. п. 10.3 об ограничениях на использование операндов в выражениях).