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

Оператор write – вывод данных

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

Каждый оператор write начинает вывод данных с новой строки.

Вывод под управлением списка не всегда удобен по ряду причин. Далеко не всегда формат вывода, определенный компилятором, оптимален для оформления результатов. Вследствие своей простоты такой вывод удобен при отладке программ, но для создания привлекательного программного продукта лучше пользоваться форматным выводом.

Оператор format

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

Общая форма оператора format имеет вид:

метка format (список спецификаций)

Метка является обязательной частью оператора format. На нее ссылается хотя бы один оператор ввода или вывода в программе.

Список спецификаций (дескрипторов) состоит из ряда спецификаций (дескрипторов) формата, заключенных в скобки. Разделителями между ними служат запятые или символ «/» – признак перехода к новой строке при выводе.

Пример:

real radius = 1

open (2, file=’Out.txt’)

write(2,55) 2*3.14*radius

55 format ('длина окружности'/2x,'с=',F5.2)

Здесь оператор write, используя оператор format с меткой 55, выводит в файл Out.txt две строки (символ «_» означает пробел):

длина окружности

__c=_6.28

Спецификации, использованные в операторе format:

  • 'длина окружности' и 'с=' – символьные константы, используемые как пояснительный текст;

  • 2x – два пробела;

  • F5.2 – формат для вывода вещественного числа; число занимает в строке вывода пять позиций, из которых две отводятся под дробную часть.

На один оператор format могут ссылаться несколько операторов вывода. Если список спецификаций используется однократно, то он может быть записан в виде символьного выражения в операторе write. Это выражение заключается в кавычки; кавычки в списке спецификаций должны отличаться от кавычек, обрамляющих выражение (простые и двойные или наоборот).

Пример:

write (2, "(1x,'c=',F5.2)") c

Внимание! Синтаксис символьного выражения в операторе вывода не контролируется компилятором, и ошибки в его написании будут выявлены только на этапе выполнения, в отличие от оператора format с меткой. Поэтому в операторе вывода write не рекомендуется писать длинные списки спецификаций.

Спецификации числовых данных

Спецификации числовых данных: rIw, rFw.d, rEw.d, rDw.d, rGw.d

Во всех спецификациях задается ширина поля вывода w – целое число без знака, задающее количество символьных позиций для вывода числа. Число «прижимается» к правому краю поля вывода и при необходимости дополняется слева пробелами. Если ширина поля вывода недостаточна для размещения числа, то выводятся символы «*», их количество равно ширине поля.

Для положительных чисел знак «+» обычно не выводится.

Целое число без знака r называется повторителем спецификации; оно указывает, сколько раз должна быть повторена спецификация. Если повторитель отсутствует, то по умолчанию спецификация повторяется один раз.

Необходимо строго согласовывать спецификации для выводимых данных с их типом. Например, попытка вывести значение вещественной переменной по I-спецификации для целых чисел приведет к ошибке вывода, которая будет зафиксирована на экране монитора (ошибка выполнения): Run-time error F6102: WRITE(out.txt) – E, F, D or G edit descriptor expected for REAL (Перевод: Ошибка выполнения в операторе WRITE(out.txt) – для вещественных значений ожидаются спецификации (дескрипторы) E, F, D или G)

I -спецификация формата.

Целые числа выводятся по I-спецификации формата. Общая форма этой спецификации имеет вид:

rIw

где r – повторитель, w – ширина поля вывода.

Пример. Вывод четырех чисел по формату I4

integer:: a=7812, b=12, c=-32, d=-7812

12 format (I4, I4, I4, I4)

write (*, 12) a, b, c, d

Формат вывода чисел можно преобразовать, используя повторитель:

integer:: a=7812, b=12, c=-32, d=-7812

12 format (4I4)

write (*, 12) a, b, c, d

В результате выполнения оператора write в обоих случаях выведется строка (символ «_» соответствует пробелу).

7812__12_-32****

Звездочки означают, что последнее число не поместилось в четыре позиции. Рассчитывая ширину поля вывода чисел, не забывайте о позиции для знака, если выводимое число может быть отрицательным. Кроме того, предпочтительно, чтобы выведенные числа разделялись между собой хотя бы одним пробелом, который можно включить в поле вывода.

Возможная форма записи I-спецификации

rIw.d

где r – повторитель, w –ширина поля вывода, а d определяет общее количество выводимых цифр числа (не только значащих). При необходимости каждое число дополняется слева нулями. В том же примере выведем числа, используя спецификацию I8.4:

integer:: a=7812, b=12, c=-32, d=-7812

12 format (4I8.4)

write (*, 12) a, b, c, d

Результирующая строка:

____7812____0012___-0032___-7812

F -спецификация формата

Вещественные числа можно выводить с использованием F-спецификации формата. Общая форма этой спецификации имеет вид:

rFw.d

где r – повторитель, w определяет ширину поля вывода, а d задает количество цифр после десятичной точки. Выводимое значение при необходимости округляется по обычным правилам. Если число меньше единицы, то ноль перед десятичной точкой опускается, знак «+» у положительных чисел также не выводится.

Пример. Вывод пяти чисел по формату F6.2

real:: a=483.76, b=122.11, c=12.9, d=-0.076, e=-126.3

13 format (F6.2, F6.2, F6.2, F6.2, F6.2)

write (*, 13) a, b, c, d, e

Преобразуем формат, используя повторитель:

real:: a=483.76, b=122.11, c=12.9, d=-0.076, e=-126.3

13 format (5F6.22)

write (*, 13) a, b, c, d, e

Результирующая строка в обоих случаях («_» соответствует пробелу):

483.76122.11_12.90__-.08******

Первое и второе числа «склеились», так как ширина поля недостаточна и не позволяет отделить числа одно от другого.

Третье число дополнено справа нулем (должно быть два символа в дробной части).

Четвертое число округлено, ноль в целой части опущен.

Звездочки означают, что последнее число не поместилось в шесть позиций. В самом деле, из шести позиций поля вывода две отведены под дробную часть, одна – под десятичную точку, и для целой части вместе со знаком остается три позиции. Таким образом, по формату F6.2 можно вывести число, находящееся в интервале [-99; 999].

E, D -спецификации формата

E-спецификация формата предназначена для вывода вещественных чисел в экспоненциальной форме. Если величина выводимого числа не соответствует F-спецификации формата, то вместо слишком большого числа могут быть выведены звездочки, а слишком маленькое число округляется до 0. В подобных случаях рекомендуется использовать E- спецификацию формата.

Общая форма этой спецификации имеет вид:

rEw.d

где r – повторитель, w задает ширину поля вывода, а d определяет количество выводимых значащих цифр числа. В числе, выведенном по E-спецификации, последовательно располагаются:

  1. знак (знак положительного числа опускается);

  2. десятичная точка (десятичная точка расположена перед первой значащей цифрой, ноль перед точкой опускается);

  3. d значащих цифр числа (выводимое значение при необходимости округляется по обычным правилам) ;

  4. четыре символа, указывающие десятичный порядок числа (знак порядка выводится).

Если ширина поля вывода w позволяет, то поле вывода слева дополняется пробелами.

Пример. Вывод двух чисел по формату E12.4

real:: a=483.76, b=-0.0067

103 format (2E12.4)

write (*, 103) a, b

Преобразование числа в соответствии с E-спецификацией:

  1. Точка – перед первой значащей цифрой, чтобы значение не изменилось, используется порядок (степень 10): 483.76 => 0.48376 * 103

0.0067 => 0.67 * 10-2

  1. Число округляется до четырех значащих цифр, при необходимости дробная часть дополняется нулями: 0.4838 * 103

–0.6700 * 10-2

  1. Знак числа «+» опускается.

  2. Результирующая строка дополняется пробелами (для каждого числа 12 позиций):

___.4838Е+03__-.6700E-02

Как и в случае I- и F-спецификаций, если ширина поля вывода не позволяет вывести число, вместо числа выводятся звездочки. Например, по спецификации E12.8 всегда выводятся 12 звездочек независимо от значения числа.

Все, сказанное о спецификации Ew.d, относится и к спецификации Dw.d, с той разницей, что D-спецификация применяется для значений с двойной точностью, при этом символ порядка E заменяется символом D.

G-спецификация формата

G-спецификация формата – это универсальная спецификация для ввода и вывода данных любого типа. Общая форма этой спецификации имеет вид:

rGw.d

Здесь указано, что поле вывода содержит w позиций, а дробная часть состоит из не более, чем d цифр. Значение d игнорируется при использовании с данными логического или символьного типа.

С целыми значениями спецификация Gw.d действует аналогично спецификации Iw.d.

С данными вещественного типа форма представления числа зависит от его значения. Если спецификация Fw.d позволяет вывести число, то используется именно она, в противном случае (если число слишком велико или мало) используется спецификация Ew.d

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]