Одиночные и двойные специальные символы

Символ Назначение Символ Назначение
= Оператор присваивания . Десятичная точка
+ Операция сложения (/ /) Ограничители в конструкторах массивов
­— Операция вычитания ‘ “ Ограничители в строковых константах
* Операция умножения : Разделитель при указании диапазона значений индекса массива.
/ Операция деления. Ограничитель для имени COMMON-блока ! Начало комментария
( ) Ограничители списка параметров подпрограммы, индексов массива :: Разделитель в предложениях описания
, Разделитель элементов списка   Пробел
& Признак переноса оператора на следующую строку == Отношение равенства
; Разделитель операторов в строке текста программы => Присваивание указателя
// Объединение строк ** Возведение в степень
> Отношение «больше! /= Отношение неравенства
< Отношение «меньше» >= Отношение «больше или равно»
% Селектор компонента структуры <= Отношение «меньше или равно»

Ключевые слова. Ключевые слова относятся к лексемам языка. Все специальные слова Фортрана являются ключевыми. Они могут использоваться в составе предложений и операторов языка в строго определенном для них смысле. Однако допускается и произвольное их применение, что, впрочем, следует считать нежелательным и плохим стилем программирования.

Со списком ключевых слов вы постепенно познакомитесь в процессе изучения языка программирования. Полный список включает около 80 ключевых слов. Вот некоторые из них:

CALL DIMENTION END IMPLISIT REAL IF USE

READ TYPE DO PROGRAM DATA CASE

и др. В дальнейшем в текстах программ ключевые слова будут выделяться полужирным шрифтом.

Комментарии.Комментарий – это любая последовательность символов от восклицательного знака «!» до конца строки. Комментарии используются для пояснения фрагментов программы, для лучшего ее понимания. Комментарии игнорируются компилятором и не влияют на исполнение программы.

Данные. Типы данных

Программа выполняет обработку данных. Отдельные объекты данных различаются именами, типами и другими свойствами.

Имя (идентификатор)

Имя – это последовательность латинских букв, цифр, знака доллара и символа подчеркивания. Причем первым символом должна быть буква или знак $. Строчные и прописные буквы в именах не различаются. Примеры идентификаторов:

X, a5, mass_12, $key_A.

Имена используются для обозначения объектов программы: переменных, констант, массивов, записей, процедур, модулей, встроенных функций. Длина имени ограничивается 31 символом. Следует использовать имена, отражающие смысл применяемых пере­менных, констант и других объектов программы.

Типы данных

Типы данных разделяются на встроенные и производные, определяемые программистом. Первоначально мы будем рассматривать объекты только встроенных типов.

С типом величины связаны три её свойства: форма внутреннего представления, множество допустимых значений и множество допустимых над ними операций. Следующие шесть типов являются встроенными (доступны программисту без каких-либо дополнительных мер):

целый — integer,

вещественный — real,

вещественный с двойной точностью — double precision,

комплексный — complex,

текстовый — сharacter,

логический — logical.

Разновидности числовых типов данных

Когда стандартные типы данных либо избыточны, либо не обеспечивают нужной точности, можно задать объект числового типа данных другой разновидности. Указание на разновидность может присутствовать в операторе объявления типа, имеющем следующий формат:

имя_типа ([kind =] значение-разновидности) список объектов данных,

здесь kind – параметр разновидности типа.

Пример.

integer(kind = 2) P

real(8) S

Если в операторе объявления типа отсутствует указание на разновидность, то она принимается равной четырем – стандартной разновидности. Следующие объявления целой переменной N являются эквивалентными:

integer(4) N и integer N

Тип REAL(8) называется вещественным типом двойной точности. Использование меньшей разновидности экономит занимаемую величиной память, но сокращает диапазон ее возможных значений и уменьшает точность представления.

Далее в таблице приведены числовые типы данных. После имени типа в скобках указывается значение параметра разновидности типа. В графе "Число байт" показан размер поля памяти, занимаемого скалярной величиной соответствующего типа.

Разновидности числовых типов данных

Тип и разновидность Диапазон изменения Число байт
Целый
INTEGER(1) От-128 до+127
INTEGER(2) От –32 768 _до +32 7б7_
INTEGER(4) от –2 147 483 648 до +2 147 483 647
Вещественный
REAL(4) Отрицательные числа: от -3.4028235E+38 до -1.1754944E-38 Число 0 Положительные числа: от +1.1754944E-38 до +3.4028235E+38 Дробная часть может содержать до 6 десятичных знаков
REAL(8) Отрицательные числа: от -1.797693134862316D+308 до -2.225073858507201D-308 Число 0. Положительные числа: от +2.225073858507201D-308 до + 1.797693134862316D+308 Дробная часть может содержать до 15 десятичных знаков
Комплексный
COMPLEX(4) То же, что и COMPLEX. Состоит из пары вещественных чисел REAL(4), задающих действительную и мнимую часть комплексного числа
COMPLEX(8) Состоит из пары вещественных чисел двойной точности REAL(8)

Логический тип данных

Величина логического типа принимает два значения: .TRUE. – ис­тина и .FALSE. – ложь. Переменные величины стандартного логического типа объявляются оператором LOGICAL или LOGICAL(4), например:

logical flag

logical(4) flag

Для логической величины 4 байта – сильно избыточный объем памяти. Используя указание на разновидность, можно сократить этот объем до 2-х или до 1-го байта:

logical(2) flag или logical(kind = 1) flag

Буквальные константы

Константы бывают буквальными (неименованными) и именованными.

Примеры буквальных целых констант: 1 0 666 -44811 +36.

Формат записи целых констант:

[знак] [[основание] #] константа [_разновидность типа]

Целые константы могут быть заданы с указанием разновидности типа, которая отделяется от значения константы нижней чертой, например:

Константа Тип (разновидность)

12_1 INTEGER(1)

12_2 INTEGER(2)

12_4 INTEGER(4)

Целые константы можно задавать в различных системах счисления (2, 8, 10, 16). Если константа десятичная, то основание обычно не указывается. Если используется символ # и не указано основание, это означает, что константа шестнадцатеричная.

Пример. Запишем представление десятичного числа 50 в форме целой константы стандартной разновидности в других системах счисления:

двоичная система: 2#110010

восьмеричная система: 8#62

шестнадцатеричная система: #32 или 16#32

Вещественные буквальные константы состоят из целой части числа со знаком или без знака, десятичной точки, дробной части и степенной ча­сти. Например: 1.0 0.01 1е-6 6.76е3.

Вещественные константы одинарной и двойной точности могут быть представлены в F- форме, E- форме, D- форме.

В F-форме: [знак] [целая часть].[дробная часть][_разновидность типа]

Например: +3.71 1.3_4 13.0_8 167. –0.3 –.01

В E- и D- форме: [мантисса]E [знак]порядок[_разновидность типа]

В записи константы двойной точности разделитель E заменяется на D и разновидность типа не указывается. Например, pi=3.141592653589793D+00.

Комплексная константа записывается в виде пары буквальных констант целого или вещественного типа, разделенных запятой и заключенных в скобки. Например: (2.5, 0.75).

Текстовые литералы состоят из строки произвольных символов, заключенных в кавычки либо апострофы (пример: 'Рога и копыта'). Кавычка или апостроф, являющиеся частью строки, должны быть удвоены: '0''Henry'. Заметим, что длина последней строки считается равной семи.

Логических констант две: . true. и . false. (" истина" и "ложь" соответственно).

Описания

Величины разных типов (прежде всего целые и вещественные) принципиально по-разному представляются на машинном уровне (внутреннее представление данных), и однотипные действия над ними (например сложение) программируются с помощью различных команд. Для выполнения компиляции необходимо задать свойства операндов, т.е. указать их типы. Эти указания даются в операторах описания, которые влияют только на процесс компиляции и потому не считаются выполняемыми операторами.

Описания могут группироваться различными способами: по свойствам (для каждого свойства перечисляется список имеющих его величин) и по величинам (для каждой величины задается набор свойств). Для структурированных величин (массивов) рекомендуется второй подход. Часто используются и комбинированные варианты.

Оператор описания в любом случае начинается с указания свойства или списка свойств. Далее (при нескольких атрибутах – обязательно после сдвоенного двоеточия) перечисляются имена обладающих этими атрибутами величин. Одна величина может упоминаться в нескольких описаниях, но ей не могут присваиваться повторяющиеся или противоречащие друг другу свойства. Оператор описания в общем случае имеет вид

имя_типа [,атрибуты ::] список_переменных

Примеры описания переменных встроенных типов:

integer k

real:: x,y

double precision :: z complex :: voltage

character(len=20):: heading logical test

dimension :: x(30), y(0:4,0:5)

Переменная heading имеет дополнительным атрибутом описателя длину строки. Опера­тор dimension дополнительно к ранее назначенным типам значений х и у указывает структуру упомянутых объектов: это массивы с определяемой граничными парами нумерацией компонент (х – вектор, у – матрица).

Комплексные константы записываются парой чисел, заключенных в круглые скобки. Вещественная и мнимая части комплексной переменной, объявленной как complex, получают атрибут real. При указании double complex они будут представлены с двойной точностью.

Инициализация переменной. Инициализация – это определение начального значения переменной, совмещенное с описанием ее типа. Например:

real:: delta=1.0e-10

integer (4)::index=1, g=100

Употребление двойного двоеточия здесь обязательно. Инициализированное значение переменной присваивается на стадии компиляции. Затем в процессе исполнения программы это значение может быть изменено.

Правила умолчания типа. Фортран 90 не принадлежит к языкам со строгой типизацией. Если тип некоторого объекта не задан, он определяется по умолчанию: объекты с именами, начинаю­щимися на i, j, k, l, m, n, относятся к стандартному целому типу, остальные – к вещественному.

Правила умолчания, применяемые в данной программной единице, можно изменить и/или дополнить оператором implicit вида

implicit real (k,n,m), complex (p-t)

После этого все переменные, имена которых начинаются с букв k, n, m, будут иметь вещественный тип, а имена, начинающиеся с букв p, r, s, t, будут относиться к величинам комплексного типа.

Случайная описка в имени порождает подменяющую нужный объект новую переменную, что приводит к трудно диагностируемым ошибкам периода выпол­нения программы. Полезную возможность полной отмены умолчаний предоставляет оператор implicit none. При его использовании любая ссылка на неописанную переменную будет воспри­ниматься как синтаксическая ошибка.

Бывает трудно составить исчерпывающий список объектов программы до то­го, как записаны ее операторы. Обычно программирование начинают с минимума описаний и, составляя программу, дополняют этот список по мере необходимости. Завершив программу, окончательно оформляют описания – объединяют по типам, упорядочивают имена по алфавиту, комментируют описания отдельных объектов или их групп, задают начальные значения.

Именованные константы. Часто употребляемые константы для защиты от случайных изменений удобно именовать, указывая тип константы, атрибут parameterи значение константы. Например:

real, parameter :: с=299792.458 ! скорость света в км/с

Далее ссылка на константу будет происходить по имени. Любая попытка изменить значение именованной константы будет блокирована. В одном операторе можно указать через запятую несколько констант, причем последующие могут определяться выражениями через предыдущие.

Метки. Перед любым оператором, не являющимся частью составного оператора, можно поставить (через пробел) метку. Метка задается целым числом не более чем из 5 цифр, начальные нули незначимы. Ссылаться по меткам можно только на выполняемые операторы и операторы format. Примеры использования меток:

10 readx,y

255 format(f10.4)

Упражнения

1. Определить значения, типы, разновидности констант:

12, -24_1, 10111, 2#10111, 374, 8#374, #2F4A,

57.12, .24, .24_2, .24_8,

1/56e-7, 1.56e-7_8, 1.56d-7, 74e10,

(35.1, 27.4), (0.63e-4_8, 3.52e5_8).

2. В чем различие между следующими объектами в программе:

.true. и ‘true’ .false. и ‘false’ ?

3. В программе имеются лишь следующие операторы описания переменных :

real x, m, y, n

integer(2) ab, r5

Какой тип в этой программе имеют переменные

z, y, r1, r5, ab, ac, j, n, k ?

4. В чем различие двух вариантов описания величин Number и delta:

integer Number=50 integer,parameter::Number=50

real::delta=2.0e-10 real(8)::delta ?

Наши рекомендации