- •Лекция 3
- •3. Алгоритмический язык фортран /3,5,11/
- •3.1. Историческая справка
- •1978 Г., Фортран 77.
- •3.2. Элементы языка Фортран
- •3.2.1. Алфавит, форматы записи программы
- •3.2.2. Имена, объекты данных, атрибуты
- •3.2.4. Программные единицы
- •3.3. Порядок следования операторов и метакоманд в программной единице
- •3.4. Организация данных
- •3.4.1. Типы данных
- •3.4.2. Описание несимвольных типов данных
- •3.4.3. Буквальные (неименованные) константы
- •3.4.4. Задание именованных констант
- •3.4.5. Задание начальных значений переменных
- •3.4.6. Символьные данные
- •3.5. Выражения, операции и присваивания
- •3.5.1. Арифметическое выражение
- •Integer(2)
- •Integer(4)
- •3.5.2. Выражения отношения и логические выражения
- •3.5.3. Правила вычисления выражений
- •3.5.4. Константные и описательные выражения
- •3.6. Управляющие операторы и конструкции
- •3.6.2. Конструкция select case
- •1 Continue
- •3.6.5. Операторы pause, stop, end
- •3.7. Форматный ввод-вывод
- •3.7.1. Вводный комментарий
- •3.7.2. Оператор format
- •3.7.3. Дескрипторы данных
- •3.7.4. Дескрипторы управления
- •3.7.5. Задание формата в операторах ввода-вывода
- •20 Format (f5.0, 2p, 2f5.0, 3p, f5.0)
- •21 Format (1x, 2p, e10.3, 3x, 3p, f10.3)
- •3.7.6. Списки ввода-вывода
- •3.7.7. Управляемый списком ввод-вывод
- •Namelist / имя списка b/b / список переменных &
- •24.000000 Qwertyuiop sub
- •3.8. Массивы
- •3.8.1. Описание размерности статических массивов
- •3.8.2. Сечение массива
- •3.8.3. Присваивание значений элементам массива
- •Where (логическое выражение - массив) присваивание массива
- •3.8.4. Динамические массивы
- •Integer n, m, kp
- •Integer I
- •Interface
- •3.8.5. Массивы – формальные параметры процедур
- •Integer n, m, j
- •Integer n, I, j
- •Interface
- •3.9. Файлы Фортрана
- •3.9.1. Основные понятия
- •3.9.2. Операции над внешними файлами
- •3.9.3.Операторы передачи данных
- •Endfile u
- •3.9.4. Порядок выполнения передачи данных
- •3.9.5. Операторы подсоединения устройств к файлам
- •24.000000 Qwertyuiop sub
- •3.9.6. Операторы позиционирования файла
- •3.10. Встроенные функции и процедуры
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