Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Глава 3_2.doc
Скачиваний:
26
Добавлен:
13.03.2016
Размер:
203.78 Кб
Скачать

Форматный ввод-вывод

Чаще всего форматный способ преобразования данных используется при выводе данных на экран или в текстовый файл. Форматный вывод на экран программируется операторами следующего вида:

WRITE(*,’спецификация формата’) список вывода

WRITE(*, метка оператора FORMAT) список вывода

PRINT ’спецификация формата’, список вывода

PRINT метка оператора FORMAT, список вывода

Спецификации формата содержат список дескрипторов преобразований (ДП), заключенный в круглые скобки.

Оператор FORMAT имеет вид:

метка FORMAT (список ДП)

Метка – это целое положительное десятичное число, стоящее в начале строки, содержащей оператор.

Пример:

write(*,’(F10.3, I5)’) a, k

Или аналогично с использование оператора format:

write(*,2) a, k

2 format (F10.3, I5)

Между элементами списка вывода и списка ДП устанавливается соответствие в порядке их последовательности в списках. В приведенном примере переменной a соответствует формат F10.3, переменной k соответствует формат I5.

Дескрипторы преобразования (ДП) подразделяются:

  • на дескрипторы данных (ДД);

  • дескрипторы управления.

В следующей таблице представлены некоторые наиболее часто употребляемые дескрипторы преобразования данных:

Дескриптор

Тип преобразуемой величины

Внешнее представление

Iw[.m]

Целый

Целое число

Fw.d

Вещественный

Вещественное число в F-форме

Ew.d[Ee]

Вещественный

Вещественное число в Е-форме

Dw.d

Вещественный

Вещественное число двойной

точности

Lw

Логический

Т и F, .Т и .F, .TRUE. и .FALSE.

А[w]

Символьный

Строка символов

В таблице использованы следующие обозначения:

w длина поля, отведенного под представление элемента В/В;

т – число ведущих нулей (т <= w);

d число цифр после десятичной точки (d < w).

Следующая таблица содержит наиболее часто употребляемые дескрипторы управления:

Форма

Имя

Назначение

Использование

Строка

Преобразование апострофа

Передает строку текста на устройство вывода

Вывод

Tn,

TLn

TRn

Преобразование позиции

Спецификация позиции в записи

В/В

nX

Преобразование позиции

Спецификация позиции в записи

В/В

/

Преобразование слеша

Переход к следующей записи и выставление символа конца записи

В/В

\

Преобразование обратного слеша

Продолжение текущей записи

Вывод

Пример 1.

character(20)::st='Строка вывода'

integer::k=98765

real::а=-123.456

write(*,'(1x, f8.3)') a ! -123.456

write(*,'(1x, i10)') k !^^^^^98765

write(*,'(1x, a25)') st !^^^^^^^^^^^Cтрока вывода

Замечание. Символ ^ использован для обозначения пробела.

В каждой из приведенных спецификаций формата содержится ДП 1X, который обозначает выставление одного пробела в начале выводимой записи. По умолчанию в Фортране при форматном выводе первая позиция строки вывода предна­значена для символа управления кареткой печатающего устройства. Поэтому первая позиция строки вывода на экране и печатающем устройстве не отображается. Возможные символы управления кареткойприведены в следующей таблице:

Символ

Действие

Пробел

Начать новую строку

+

Остаться на той же строке (перепечатать)

0

Пропустить одну строку

1

Перейти на начало следующей страницы

Согласование списка ввода-вывода и спецификации формата. Дескрипторы данных для числовых величин определяют:

- количество выводимых символов;

- обычная или экспоненциальная форма представления ;

- число цифр в дробной части (для вещественных чисел).

При форматном В/В каждый элемент списка В/В использует тот или иной ДД. Элементы списка В/В и ДД должны быть согласованы по типам. Нельзя, например, передавать вещественное число, применяя преобразование Iw.

Если в списке В/В присутствует несколько элементов, то каждому элементу ставится в соответствие один ДД из списка ДП. Правило выбора таково: j-й элемент списка В/В выбирает j-й ДД. При этом поля всех элементов списка В/В располагаются в одной записи. Это правило работа­ет, когда количество ДД не меньше числа элементов в списке ввода-вывода.

Пример 2.

integer k, n, m(9)

read(*,'(I8, 3I5)')k,n,m(2),m(4)! 3-коэффициент повторения I5

Переменной k соответствует дескриптор I8, остальным – I5.

Последовательность одинаковых ДД можно записать, использовав коэффициент повторения – задаваемую перед ДД целую буквальную константу без знака или задаваемое в угловых скобках целочисленное выражение.

Коэффициент повторения может быть применен и для группы ДП.

Например, вместо оператора

write(*,'(2x,F3.0,2х,F3.0,2х,F3.0)') а,b,с

можно писать, используя коэффициент повторения для группы ДП:

write(*,'(3(2х,F3.0))') а,b,с

Общее правило использования формата при наличии в спецификации формата выделенных в скобки компонентов таково: если формат содержит заключенные в скобки ДД, то в случае, если он будет исчерпан, произойдет переход к новой записи файла и управление форматом вернется к левой скобке, соответствующей предпоследней правой скобке, или к соответствующему коэффициенту повторения, если он имеется. Это правило называется реверсией формата.

Переход к новой записи происходит также при выборе из списка ДП управляющего символа ‘/’ - слеш. Он может использоваться в списке ДП в качестве разделителя элементов вместо запятой.

Если определяемый с помощью ДД формат для выводимого числового значения оказывается «тесным» (в указанное количество позиций число не помещается), то в этих позициях выводятся звездочки.