Современные версии языка Фортран стандартов Фортран 90, Фортран 95, Фортран 2003 и 2008, как правило, используются для прикладных вычислительных и научных задач.

Структура программы в свободном формате:

Заголовок: program имя программы
Раздел описаний
Раздел операторов
contains
Внутренние подпрограммы
end program имя программы
Внешние подпрограммы

Заголовок

program <имя_программы>

Раздел описаний

переменные

<тип_переменных>, <атрибуты> :: <список_переменных>

типы переменных: integer, real, complex, logical, character

константы

<тип>, parameter :: <имя_константы1> = <значение1>,
<имя_константы2> = <значение2>, …

Здесь имя_1, имя_2, … ⎯ имена констант, а значение_i ⎯ значе-
ния этих констант.

массивы (пример)

real, dimension(100) :: c

Атрибуты переменных
allocatable — отмечает динамические массивы;
dimension(<список экстентов>) — отмечает массивы, требует указания параметров — экстентов массива (экстент массива определяет множество значений индекса);
external — отмечает внешние процедуры;
intent(<спецификация входа-выхода>) — указывает назначение формальных параметров и применяется только в подпрограммах, требует параметров — спецификации правил использования формального параметра;
intrinsic — отмечает встроенные процедуры;
optional — отмечает необязательные формальные параметры и применяется только в подпрограммах;
parameter — отмечает именованные константы, значение переменной с этим атрибутом не может быть изменено;
pointer — определяет переменную как указатель (ссылку);
private — спецификатор доступа для компонентов модуля, отмечает закрытые элементы модуля;
public — спецификатор доступа для компонентов модуля, отмечает доступные элементы модуля;
save — указывает на необходимость сохранения значения локальной переменной между вызовами подпрограммы, применяется только в подпрограммах, модулях и описаниях производных типов;
target — определяет переменную как потенциальный адресат указателя.

Операторы языка Фортран

Оператор присваивания:

<имя_переменной> = <выражение>

Условный оператор if…then…endif

if(<выражение>) then
<оператор 1>

<оператор n>
endif

Условный оператор if…then…else…endif:

if(<выражение>) then
<оператор 1>

else
<оператор 2>

endif

Оператор цикла со счетчиком do…end do:

do <параметр_цикла> = <выражение1>, <выражение2>, <выражение3>
<оператор_1>
<оператор_2>

end do

<выражение_3> задает шаг изменения параметра.

Конструкция do в неявной форме:

(<do_список>, <do_переменная> = <выражение1>,
<выражение2>[, <выражение3>])
например:
write(∗, ∗) ((a(i, j), i = 1, 7), j = 1, 5)

Цикл с условием:

do <метка> while (.not. <скалярное_логическое_выражение>)

<метка> continue

Операторы описания для встроенных типов

<оператор_описания>(KIND=<значение_параметра_разновидности>) <список_имен_переменных>

Названия операторов определения типа совпадают с названиями встроенных типов данных языка:
character, complex, integer, logical, real.

Чтобы обеспечить необходимые диапазоны и точности, в Фортране используются разновидности типов переменных (KIND). Операторы описания типов, разновидность которых не указана, описывают переменную стандартной разновидности указанного типа для данной аппаратно-программной платформы.

Оператор описания производного типа

type <имя_типа>
<оператор_описания_компонента>
[<оператор_описания_компонента>]

[<оператор_описания_компонента>]
end type [<имя_типа>]

Неявное определение типа

Объекты программного компонента, в имени которых на первом месте находятся буквы I, J, K,
L, M или N, относятся к целому типу стандартной разновидности. В любом другом случае считается, что объект относится к стандартной разновидности вещественного типа.

Оператор IMPLICIT
Правила неявного определения типа, устанавливаемые по умол-
чанию, можно изменить оператором implicit.

implicit <тип> (<диапазон_символов>)

пример:

implicit integer(a-b)

implicit none - позволяет отказаться от неявного описания вообще.

Операторы ввода-вывода

read(*, fmt [, advance]) [<список_ввода_вывода>]
read form [, <список_ввода_вывода>]
write(*, fmt [, advance] [, iostat] [, err]) [<список_ввода_вывода>]

где fmt задает формат преобразования данных:

- метка оператора format. Оператор format должен находиться в том же программном модуле, что и оператор ввода-вывода;
- символ "звездочка" (*), задающий форматирование, управляемое списком. В этом случае формат передаваемых данных определяется по типам переменных, содержащихся в списке;
- имя элемента массива, содержащего описание формата (в Фортране 90).

Форматирование ввода-вывода

Оператор format имеет следующий вид:
<метка> format(<список_дескрипторов>)

Арифметические выражения

1. ** ⎯ возведение в степень;
2. * / ⎯ умножение, деление;
3. + - ⎯ сложение, вычитание.

Логические выражения

.lt. < меньше
.le. <= меньше или равно
.gt. > больше
.ge. >= больше или равно
.eq. == равно
.ne. /= не равно

Логические операциия

.not. Логическое отрицание
.and. Логическое "И"
.or. Логическое "ИЛИ"
.eqv. .neqv. Логические: эквивалентность и неэквивалентность (логические равенство и неравенство)

Внутренние подпрограммы

subroutine имя подпрограммы
...
end subroutine имя подпрограммы

вызов call

 

Внешние подпрограммы

Подпрограммы-функции

program hypotenuso

с = funct(a, b) - вызов подпрограммы-функции по имени

real function funct(x, y) !определение подпрограммы-функции
...
end function funct

Подпрограмма, не обязательно возвращающая значения, описывается оператором subroutine и вызывается
оператором call.

Модули

module имя
...
end module имя

Модули подключаются к другим программным компонентам оператором use. Этот оператор должен следовать сразу после заголовка компонента.

Пример:

program имя программы
use имя модуля
операторы
call имя подпрограммы(x, y, alpha)
end program имя программы

комментарии (!)

! пример комментария