на первом месте, если отсутствует Ғ М Т = , то метка ф орм ата долж на бы ть на втором месте списка. Например,
R EA D (5, 1, R E C = 15, !OSTAT = I, E R R = 1 0 , E N D = 20) X означает ввод на устройстве 5 по ф орм ату с меткой 1 записи 15, в случае ош ибки переменной I будет присвоено полож ительное значение, равное индексу ош ибки ввода, или отрицательное, если обнаружен конец файла, при безош ибочном вводе или если не найден конец ф айла переменная I будет равна нулю.
М еткой 10 помечен оператор, на которы й передается управление в случае ошибки, меткой 20 — оператор, котором у передается управление, если обнаружен конец файла.
Если ввод осуществляется из бесф орматного файла, то простей
ш ая ф орм а оператора R E A D (без контроля ош ибок ввода и конца файла) мож ет бы ть такой:
REA D (5) А
Здесь 5 — логический номер устройства, с которого будет считана очередная запись для элемента А.
П ри бесф орм атном вводе — выводе экономится время выполне
ния этих операций за счет отказа от преобразования данных, обеспечивается больш ая точность в выведении данных и, как правило, экономится место, требующееся для хранения файла.
Бесформатный в в о д — вывод обычно используется, когда вывод данных из некоторой програм м ы впоследствии долж ен быть вводом в эту или другую программу.
3.5.4. Операторы OPEN, CLOSE. Прежде чем файл окажется доступным для операторов ввода — вывода (R E A D , W R ITE) на логическом устройстве, файл должен бы ть создан и связан с этим устройством. Обычно это м ож но сделать вне ф ортран-программ , в рамках операционной системы: устройство 5 связывается с вво
дом — вы водом на дисплее, 6 — с А Ц П У . П оэтом у операторы REA D , W R IT E будут передавать данные по этим кан алам (5, 6) без каких-либо усилий со стороны пользователя.
О днако если требуется несколько каналов ввода — вывода в програм м е, то необходимо уметь управлять связью ф айлов из самой програм м ы . Э то, например, делаю т, чтобы сохранить промежуточные результаты програм м ы в файле данных для дальнейш его продолжения вычислений.
О ператор OPEN (откры ть) создает новый файл и связы вает его с устройством либо связывает с устройством уже существующий файл. В лю бой м ом ент один файл долж ен бы ть связан только с одним каналом .
К концу выполнения програм м ы все откры ты е файлы п рограм м а долж на сам а закры ть (хотя закры ть м ож ет и операционная система, но это плохой стиль програм м ирования).
О ператор OPEN имеет следующий вид:
O PEN ((список о т к р ы т и я ))
5 Ю. П. Боглаев 129
Список откры тия может состоять из элементов
U N IT = , FIL E = , STATUS = , F O R M = , BLA N K = , E R R = , IOSTAT;
здесь в правой части равенств помещ аю тся элементы согласно прилож ению 2, определяющие список открытия. Н апример,
U N IT = 8 — номер устройства,
FIL E = 'IN T E G R A L ' — имя файла, который долж ен быть связан с устройством 8; если файла не существует, то он создается;
— файл существует; если не су
щ ествует— указать «NEW »;
если создается временный с удалением после закры тия
— указать «SCRATCH»;
— файл последовательного д о ступа; если прям ого — ука
зать «DIRECT»;
— доступ с ф орм атны м вво
д о м — выводом; если с бес
ф о р м а т н ы м — у к а з а т ь
«U N FO R M A T T E D »;
STA TU S = 'O L D '
ACCESS = 'SEQ U E N T IA L '
FO R M = F O R M A T T E D '
R E C L = 80
B LA N K = Z E R O '
E R R = 10, IOSTAT = I
- длина записи в символах для файлов прям ого досту
па, для последовательного доступа описатель опустить;
все пробелы в числовых по
лях будут интерпретиро
ваться нулями; если нужно, чтобы пробелы игнорирова
лись, указать «N U LL»
имею т тот же смысл, что в п. 3.5.3.
Э тот файл мож ет быть прочитан с пом ощ ью форматны х операто
ров ввода — вывода, например таких:
REA D (8. 1) (A, (J), .1 = 1. 16) 1 F O R M A T (F5.3)
Файл отсоединяется от устройства с помощ ью оператора CLOSE. О ператор имеет следующий вид:
CLOSE ((список зак р ы ти я ))
Список закрытия мож ет содерж ать следующие элементы:
U N IT = , IOSTAT = , E R R = , STATUS =
Все элементы, кроме последнего, уже были определены.
STATUS = K E E P' — файл сохраняется после закрытия;
«D ELETE», если файл должен быть удален; если этот элемент опущен, то будет использован «КЕЕР».
Н апример, закры тие ф айла (без контроля ош ибок) с сохране
нием на устройстве 8 м ож но выполнить оператором CLOSE (8)
3.5.5. Вычисления с двойной точностью. Д ля оценки вычислитель
ной погреш ности бы вает необходимо преобразовать программу, выполняю щ ую вычисления с одинарной точностью , в программу, вычисляющую с двойной точностью . Д ля этого следует:
1) преобразовать все вещественные константы в константы с двойной точностью , например
1.Е —6-» 1.D —6
2) Описать все вещественные переменные, массивы как перемен
ные двойной точности, например
REAL А, Х(8)-> D O U B LE PR E C ISIO N А, Х(8)
3) преобразовать спецификации ф орм атов ввода — вывода к двойной точности; данные двойной точности вводятся и вы водят
ся с пом ощ ью спецификации ф орм ата D т.п
где т — общее число позиций, п— число цифр после десятичной точки. Э та спецификация аналогична ф орм ату Ет.п с учетом того, что теперь увеличивается возможное количество знаков после десятичной точки до 17; например, возмож но зад ать такой ф орм ат
D20.13
4) И спользовать во всей програм м е функции двойной точности, для этого библиотечные функции необходимо заменить на стан дарт
ные функции двойной точности, такие, как D SQ R T, D EX P, DCOS
а ф у н к ц и и -п о д п р о г р а м м ы у п о т р е б л я т ь с о п и с а н и е м т и п а , н а п р и м е р D O U B LE PR E C ISIO N SM ALL (А, В)
3.5.6. Обобщение описания размерности. В фортране 77 размерность м ож но описывать задавая верхню ю и нижнюю границы. Н апример, д ля одном ерного массива А мож но описать разм ерность в ф орме
D IM E N S IO N A ( n t : п 2)
где п у, п 2 м огут бы ть целыми арифметическими выражениями.
Если « j опускается, то, как и в ф ортране 66, нижней границей считается 1.
Так как п х, п 2 — выражения, то они м огут принимать отрица
тельные, нулевые и полож ительные значения: долж но бы ть только П 2> П \ -
131
Н апример, оператор D IM E N SIO N А ( - 2 :2 )
описывает массив из пяти элементов А ( — 2), А ( —1), А(0), А(1), А (2), а оператор
D IM E N SIO N A ( 0 :2 * N + l)
при N = 2 описывает массив из шести элементов А(0), А(1), А (2), А(3), А (4), А (5)
Последний пример указывает, что такое расширение описания удобно в алгоритмах вычислительной м атематики, где часто нумерацию элементов массива начинаю т с нуля.
Ф ортран 77 допускает употребление семимерных массивов в отличие от трехмерных ф ортрана 66.
3.5.7. Оператор цикла. Запись оператора цикла DO следующая:
DO п, i = m l , т 2, т 3
здесь п— м етка последнего оператора цикла, i— переменная целого, вещественного типа или двойной точности; т и т 2, т 3 — ариф м ети
ческие выражения над величинами целыми, вещественными или двойной точности. Н апример, возможен такой оператор цикла
DO 2, Х = Х0, X I, - Н
Еще одним важ ны м отличием оператора цикла ф ортрана 77 является то, что цикл может ни разу не выполняться. В ф ортране 66 цикл по крайней мере выполняется один раз, так как проверка значения переменной i цикла производится в конце цикла (не превыш ает ли i значение т 2), поэтому в фортране 66 цикл
DO 2 1 = 1 , О
один раз выполняется. В ф ортране 77 такая проверка осущ ествляе
тся перед выполнением цикла, а выход из цикла происходит, если i> m 2.
К ром е того, переменная i сохраняет свое значение после выхода из цикла и может использоваться в следующих операторах.
Таким образом, операторы DO 2 1 = 1 , 100 2 C O N T IN U E
M = I
приведут к тому, что переменной М будет присвоено значение М = 101.
Запятая в операторе после метки п не является обязательной, но она оберегает пользователя от некоторых возможных ошибок, которые не просто обнаружить.
Г л а в а 4
СИСТЕМНЫЕ И ИНСТРУМЕНТАЛЬНЫЕ ПРОГРАММЫ
# 4.1. Введение
4.1.1. Три типа программ. Все используемые на ЭВМ програм м ы