• Tidak ada hasil yang ditemukan

Расширение возможностей ввода — вывода. Единицей вво

на первом месте, если отсутствует Ғ М Т = , то метка ф орм ата долж на бы ть на втором месте списка. Например,

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. Три типа программ. Все используемые на ЭВМ програм м ы

Dokumen terkait