ВВЕДЕНИЕ В ФОРТРАН
Как пользоваться этим руководством.
Концепция данных Фортрана.
Типы и буквальные константы.
Имена (идентификаторы).
Переменные и константы.
Скаляры и массивы.
Именование данных.
Печать текста и чисел на экран.
Hello World!
Печать целых чисел.
Печать вещественных чисел.
Печать текста.
Когда format предпочтительней.
Арифметические и текстовые выражения.
Арифметические операторы и правила.
Вещественная арифметика.
Целая арифметика.
Смешанная арифметика.
Текстовые выражения.
Инициализация переменных и констант.
Оператор присваивания.
Инициализация скалярных констант.
Инициализация массивов констант.
Ввод данных с клавиатуры.
DATA-инициализация скалярных переменных.
DATA-инициализация массивов переменных.
Условные опреаторы.
Логические выражения.
Оператор IF.
Конструкция IF.
Конструкция CASE.
Циклы.
Цикл с фиксированным числом повторений.
Цикл с выходом по условию.
Пресловутый GOTO.
Неявные циклы.
Процедуры и функции.
Подпрограммы-процедуры.
Подпрограммы-функции.
Комплексный пример: сортировка массива.
Встроенные функции Фортрана.
Работа с внешними файлами.
Файловый ввод/вывод.
Открытие/закрытие файла.
Позиционирование файла.
ОТКРЫТИЕ/ЗАКРЫТИЕ ФАЙЛА.
Открытие файла для ввода или вывода данных осуществляется при помощи оператора OPEN, а закрытие опреатором CLOSE.
В операторе OPEN перечисляется довольно значительный перечень спецификаторов. Приведем наиболее часто применяемые:
- Номер устройства: спецификатор UNIT;
- Имя файла: спецификатор FILE;
- Статус файла: спецификатор STATUS;
- Способ доступа к данным: спецификатор ACCESS;
- Длина записи: спецификатор RECL;
- Представление данных: спецификатор FORM;
- Статус ввода/вывода: спецификатор IOSTAT.
Программа FOPCLOS записывает одни и те же данные, считанные из предварительно запоненного целыми числами "в столбик" фала INFMT.TXT (последовательного доступа, форматного), в бесформатный файл последовательного доступа OUTFMT.DAT и в форматный файл прямого доступа OUTFMT.TXT.
program FOPCLOS parameter(LENREC = 2) open(unit = 1, file='infmt.txt') open(2, file='unfmt.dat', form = 'unformatted' ) open(3, file='outfmt.txt', access = 'direct', 1 form = 'formatted', recl = LENREC) NREC = 0 do read(1, *, iostat = IOS) INDAT if(IOS .ne. 0) exit write(2) INDAT NREC = NREC + 1 write(3, '(i2)', rec = NREC) INDAT enddo close(1); close(2); close(3) end
Номер устройства (спецификатор UNIT) располагается в операторе OPEN на первом месте, чаще всего без ключевого слова UNIT. В качестве номера устройства может быть использовано любое целое скалярное выражение. Все остальные спецификаторы, в общем случае необязательные, могут располагаться в произвольном порядке, через запятую.
Спецификатор FILE уточняет, с каким файлом файловой системы связан номер устройства. Имя файла это скалярное текстовое выражение, значение которого отвечает правилам именования файлов для данной операционной системы, в приведенных примерах предполагается, что все файлы располагаются в текущей директории. Если имя файла не указано, то независимо от программиста будет создан SCRATCH-файл (см. следующий абзац).
Статус файла (спецификатор STATUS) задается скалярным текстовым выражением, значение которого может принимать одно из пяти значений:
- 'OLD'. Файл заведомо существует.
- 'NEW'. Файл заведомо не существует.
- 'REPLACE'. Если файл не существует, то он будет создан, если же существует, то он будет удален и создан новый с тем же именем.
- 'SCRATCH'. То же, что и NEW но после закрытия файл удаляется. Для SCRATCH-файла спецификатор FILE не указывается (см. предыдущий абзац).
- 'UNKNOWN'. Если файл существует, то он считается OLD, если не существует, то считается NEW. Если спецификатор STATUS явно не задан, как, например, в программе FOPCLOS, то считается, что определен статус 'UNKNOWN'. Когда статус файла явно не задан, то при компиляции программы обычно выдается соответствующее предупреждение (warning), которое неопытные программисты часто принимают за ошибку.
Способ доступа к данным (спецификатор ACCESS) может быть скалярным текстовым выражением, принимающим значения значения: 'SEQUENTIAL' (последовательный доступ) и 'DIRECT' (прямой доступ).
- Прямой доступ дает возможность обратиться к произвольной записи файла по ее номеру (спецификатор REC в операторах READ или WRITE, см. программу FOPCLOS ). Однако, все записи файла прямого доступа должны быть одинаковой длины (обычно в байтах), для ее указания служит спецификатор RECL оператора OPEN.
- Последовательный доступ позволяет от текущей записи файла перейти только к следующей или предыдущей (принцип магнитофона). Это ограничение компенсируется тем, что записи файла могут быть различной длины. Если способ доступа к данным явно не указан, то он считается SEQUENTIAL.
Форма представления данных (спецификатор FORM) определяется скалярным текстовым выражением со значением 'FORMATTED' (форматное представление данных) или 'UNFORMATTED' (бесформатное представление данных).Если форма представления не указана, то файл последовательного доступа считается форматным, а файл прямого доступа бесформатным.
- Форматный (по сути текстовый) файл содержит данные в удобочитаемом для человека виде. Эти данные могут считываться и записываться с использованием спецификаций формата.
- .Бесформатный файл не предполагает визуального прочтения и хранит данные во внутреннем машинном представлении.
Статус ввода/вывода (спецификатор IOSTAT) позволяет отслеживать и обрабатывать ошибки открытия файла без аварийного прерывания работы программы (см. аналогичный спецификатор для опрераторов файлового ввода/вывода в предыдущем пункте). Для исчерпывающей диагностики состояния файла используется операторINQUIRE, не рассматриваемый в данном руководстве.
Когда с данными файла выполнены все необходимые действия, то файл закрывается оператором CLOSE, которому в качестве параметра, в круглых скобках, указывается номер устройства, связанного с файлом.