
- •3.9. Ввод-вывод
- •Виды ввода-вывода данных
- •Управляемый списком ввод-вывод
- •Форматный ввод-вывод
- •3.10. Подпрограммы и функции
- •Структуры процедур
- •Вызов процедуры Вызов процедуры-подпрограммы осуществляется отдельным оператором следующего вида:
- •Упражнения
- •3.11. Массивы
- •Объявление динамических массивов
Форматный ввод-вывод
Чаще всего форматный способ преобразования данных используется при выводе данных на экран или в текстовый файл. Форматный вывод на экран программируется операторами следующего вида:
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,с
Общее правило использования формата при наличии в спецификации формата выделенных в скобки компонентов таково: если формат содержит заключенные в скобки ДД, то в случае, если он будет исчерпан, произойдет переход к новой записи файла и управление форматом вернется к левой скобке, соответствующей предпоследней правой скобке, или к соответствующему коэффициенту повторения, если он имеется. Это правило называется реверсией формата.
Переход к новой записи происходит также при выборе из списка ДП управляющего символа ‘/’ - слеш. Он может использоваться в списке ДП в качестве разделителя элементов вместо запятой.
Если определяемый с помощью ДД формат для выводимого числового значения оказывается «тесным» (в указанное количество позиций число не помещается), то в этих позициях выводятся звездочки.