Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ИиП_3.doc
Скачиваний:
1
Добавлен:
21.04.2019
Размер:
303.1 Кб
Скачать

3.7.5. Задание формата в операторах ввода-вывода

Основные операторы ввода-вывода на Фортране: READ, WRITE, PRINT.

Пример, иллюстрирующий различные способы задания формата.

program vv1

integer k ! описание и

integer :: ka=10, arr(3)=(/1,2,3/) ! инициализация

real a, b, c, d x, y, z ! переменных

namelist /mes/ ka,arr ! описание именованного списка

! первый способ (метка указывает на оператор формата)

10 format (1x, f8.3, i10) ! 1x – при вводе – пробел, при выводе –

! печать с новой строки; f8.3 (8 символов под действительное число,

! из них 3 – под дробную часть); i10 (10 символов под число);

! числа выравниваются по правому краю

print *, 'Input: a k (format (1x, f8.3, i10))' ! вывод сообщения

read (*,10) a, k ! ввод с преобразованием по формату 10

print *, 'Output: a, k (format (1x, f8.3, i10))' ! вывод сообщения

write (*,10) a, k ! вывод с преобразованием по формату 10

! Использование масштабного множителя

20 Format (f5.0, 2p, 2f5.0, 3p, f5.0)

print *, 'Input: x b c d (format (f5.0, 2p, 2f5.0, 3p, f5.0))' ! сообщение

read (*, 20) x, b, c, d ! ввод по формату 20

21 Format (1x, 2p, e10.3, 3x, 3p, f10.3)

print *, 'Output: x, x (1x, 2p, e10.3,3x, 3p, f15.3))' ! вывод сообщения

write (*,21) x, x ! вывода по формату 21

! Использование спецификатора bz

print *, 'Input: y z (format (f4.0, bz, f4.0))'

30 format (f4.0, bz, f4.0) ! Пусть y и z – это поля записей:

read (*,30) y, z ! 24 и 24, тогда переменные

31 format (2f6.0) ! получат значения 24, 204

print *, 'Output: y, z (format (2f6.0))' ! вывод сообщения

write (*, 31) y, z ! вывода по формату 31

! второй способ (встроенный оператор ввода-вывода в виде

! символьного выражения)

write (*, ‘(1x, f8.3, i10)’) a, k ! вывод по формату, указанному

! в виде символьной строки

! третий способ (вывод именованного списка)

print *, 'Output: mes' ! вывод сообщения

write (*,mes) ! вывод именованного списка на экран без преобразований

! четвертый способ ссылки (использование управляемого неименованным

! списком ввода-вывода)

print *, 'Input: a1 k1' ! вывод сообщения

read *, a1, k1 ! ввод с клавиатуры без редактирования

write (*,*) a1, k1 ! вывод на экран без преобразований

print *, 'Output: a1, k1' ! вывод сообщения

print *, a1, k1 ! вывод на экран без преобразований

end program vv1

3.7.6. Списки ввода-вывода

Списки неявных циклов: (список, i=m1,m2,<m3>)

Пример вывода горизонтальной линии.

print ‘(1x, 64a1)’, (‘_’,k=1,64) ! в списке вывода 64 элемента

3.7.7. Управляемый списком ввод-вывод

Управляемый именованным списком ввод-вывод:

WRITE (u, <NML=> имя списка В/В)

REАD (u, <NML=> имя списка В/В)

Оператор объявления именованного списка:

Namelist / имя списка b/b / список переменных &

</ имя списка B/B / список переменных ... >

При выводе именованного списка результат имеет вид:

&имя_списка_вывода

имя переменной = значение | список значений

..............

имя переменной = значение | список значений

/

Пример вывода именованного списка.

program vv2

integer :: k, arr(5) = (/1,2,3,4,5/) ! описание и

logical :: fl = .true. ! инициализация

real :: r4*4=24, r8*8 =28 ! переменных

character(10) :: c=‘qwertyuiop’ !

namelist /mes/ k, fl, r4, r8, c, arr ! объявление именованного списка mes

k=100

write (*,mes) ! вывод именованного списка mes

end program vv2

Результат:

&MES

K = 100

FL = T

R4 = 24.000000

R8 = 28.000000000000000

C = qwertyuiop

ARR = 1 2 3 4 5

/

Ввод именованного списка: &имя_списка или $имя_списка

Каждый элемент ввода имеет вид: имя_переменной = значение | список значений

Пример ввода именованного списка. Пусть требуется ввести файл a.txt следующего содержания:

&Mes

K = 100, FL = T, C10 = ‘qwertyuiop’

r4 =24.0, arr = 1,2,3,4,5, c4 = ‘sub’

/

Программа ввода имеет вид:

integer k, arr(5) ! описание

logical fl ! переменных

real r4 !

character c10*10, c4*4 !

namelist /mes/ k,fl,r4,c10,c4,arr ! объявление именованного списка mes

open (1,file=‘a.txt’) ! открытие файла a.txt

read (1,mes) ! ввод информации в элементы

! списка mes из файла a.txt

write (*,*) k,arr,fl ! вывод

write (*,*) r4,’ ‘,c10,’ ‘,c4 ! результатов

Результат:

100 1 2 3 4 5 T