2.6. Ввод-вывод

Язык FORTRAN предоставляет средства для бесформатного и форматного ввода-вывода данных. Вывод на экран осуществляется оператором

PRINT формат , список вывода формат - это или строка формата, или метка формата, или символ *, что означа­ет вывод без форматирования;  список вывода - это любое количество произ­вольных выражений, разделенных запятыми. Логические данные при выводе изображаются буквами T и F. Для ввода с клавиатуры служит оператор READ формат , список ввода

В списке ввода могут быть только имена переменных. Вводимые с клавиату­ры данные могут разделяться пробелами и (или) запятыми. Вводимые логиче­ские значения обозначаются буквами T и F (любой последовательностью симво­лов, начинающейся с T или F).

Метка формата - это метка специального оператора FORMAT :

метка   FORMAT( список форматов ) Этот оператор является невыполняемым и может стоять в любом месте програм­мы. Список форматов есть последовательность элементов формата (называемыхтакже для краткости форматами), разделенных запятыми. Список форматов очень похож по своей структуре на строку формата функции рптТ в языке С. Он может содержать форматы данных и управляющие элементы формата. Сущест­ву_

Формат

Тип данных

Синтаксис

I

целые

In / In.c

F

вещественные

Fn.d

E

вещественные

En.d / En.d.e

D

REAL*8

Dn.d

G

вещественные

Gn.d / Gd.e

A

символьные

A / An

L

логические

Ln

Z

любые данные

Z / Zn

Здесь п - размер поля вывода, т.е. количество позиций, отведенных для вы­вода значения, с - количество выводимых цифр числа, а - количество дробных цифр, е - количество цифр порядка. Если в формате I задано количество цифр и оно больше, чем количество цифр в выводимом значении, то число дополняется слева нулями, если оно меньше, чем необходимо, то данный параметр игнориру­ется. Если при выводе по форматам 1,Е,Е,Б,С задан слишком маленький размер поля, то выводятся только символы *. Вещественные числа с плавающей точкой представляются при выводе в виде: знак. мантисса Е знак порядка порядок . По формату Z все данные выводятся в их внутреннем представлении и изображают­ся 16-ричным числом.

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

Любой формат данных может иметь повторитель - целую константу, которая записывается непосредственно перед форматом, например, 5Е12.7. Можно запи­сывать повторители для групп форматов, тогда форматы, входящие в группу, за­ключаются в круглые скобки, такие скобочные конструкции могут быть вложен­ными, например, 3(2Е10.2,Е12.3Е1,4(16.5))

Существуют следующие управляющие форматы :

'строка''

- "строка" - вывод строки,

nHсuмволы

- "литерал" - вывод п символов,

/

- переход на следующую строку,

nX

- вывод п пробелов,

Tn

- переход на п-ю позицию,

TLn

- смещение влево на п позиций,

TRn

- смещение вправо на п позиций,

SP

- включение режима вывода знака + для чисел,

SS

- выключение режима вывода знака + для чисел.

Символ / сам служит разделителем, поэтому в списке форматов его можно не отделять запятыми. Кроме того, первый символ выводимой строки всегда счита­ется управляющим и не изображается на экране. Значение управляющего симво­ла таково:

О - пропуск строки, + - вывод на ту же строку, остальные - переход на новую строку. Каждый новый оператор PRINT всегда начинает вывод с начала новой строки.

Форматный ввод с клавиатуры не очень удобен и используется редко (за ис­ключением формата A), главным образом форматный ввод применяется при чте­нии файлов. При вводе запрещены управляющие форматы "строка" и "литерал", управляющие форматы SP и SS игнорируются. Форматы Tn, TLn, TRn, / дейст­вуют точно так же, как и при выводе, формат nX пропускает n позиций во вход­ном потоке. При вводе чисел можно использовать управляющие форматы:

BN - игнорирование пробелов внутри числа (действует по умолчанию),

BZ - интерпретация пробелов внутри числа как нулей,

kP - умножение введенного значения на 10-k. Формат kP также используется при выводе чисел по формату F, в этом случае он означает умножение выводимого значения на 10k. Действие форматов данных при вводе таково:

- формат In (второй параметр игнорируется) - целое число вводится из оче­редных n позиций;

- форматы Fn.d , En.d , Dn.d , Gn.d (все форматы при вводе идентичны, пара­метр e игнорируется) - вещественное число вводится из очередных n позиций, если в константе нет десятичной точки, то последние d цифр интерпретируются как дробные;

- формат A - значение символьной переменной (без апострофов) считывается до конца строки, при необходимости усекается справа;

- формат An - значение символьной переменной (без апострофов) считывает-ся из очередных n позиций, при необходимости усекается слева;

- формат Ln - логическое значение считывается из очередных n позиций, оно может представляться любой последовательностью символов, начинающейся буквой T(t) или F(f), перед этой буквой может быть символ "." и любое количе­ство пробелов.

- форматы Z , Zn - Іб-ричное значение вводится до конца строки или из очередных n позиций и передается в память, занимаемую переменной; так же, как для формата A, если n не задано, то вводимое значение усекается справа, ес­ли задано, то слева. Если, напротив, вводимое значение слишком короткое, то оно дополняется слева нулями.

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

Формат можно задать и непосредственно в операторах PRINT и READ, для этого вместо метки формата записывается строка '(список форматов)', список форматов - точно такой же, как в операторе FORMAT, круглые скобки и апост­рофы обязательны.