1.16. ФОРМАТНЫЙ ВВОД/ВЫВОД

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

<метка формата (m)> FORMAT(<список спецификаций формата S>)

Управление переводом данных из внутреннего представления в текстовое задается дескрипторами преобразований (ДП).

ДП подразделяются на:

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

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

• строки символов.

Дескрипторы данных, например F8.2 или I4, определяют размер и форму полей ввода/вывода(В/В), в которых размещаются текстовые представления данных. При форматном В/В каждый элемент списка В/В использует тот или иной ДД. Элементы списка В/В и ДД должны быть согласованы по типам. Так, нельзя передать вещественное число, применяя преобразование Iw.m. При вводе также должны быть согласованы внешние представления данных и ДД. Так, если поле ввода содержит символы и выполняется ввод с этого поля целого числа, то возникнет ошибка ввода.

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

Пример:

INTEGER L, M, MARK(3)

READ(*,'(I6,I4,I3,I3,I3)') L, M, MARK

в этом случае для ввода переменной L будет использован дескриптор I6, а для M- I4, а для ввода трёх элементов массива MARK – дескриптор I3. Для того, чтобы задать значения L=243, M=2, MARK(1)=800, MARK(2)=21, MARK(3)=4, на клавиатуре необходимо набрать строку( здесь символ • - использован для обозначения пробела)

   243•••280021••4