- •Лекция 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. Встроенные функции и процедуры
24.000000 Qwertyuiop sub
Управляемый неименованным списком ввод-вывод:
WRITE (u, <FMT=>*) <список вывода>
PRINT * <, список вывода>
READ (u,<FMT=>*) <список ввода>
READ * <, список ввода>
Вывод под управлением неименованного списка выполняется в соответствии с правилами:
вывод производится в последовательные текстовые файлы, на экран или на принтер;
длина создаваемой при выводе записи не превышает 79 символов (для размещения более длинных последовательностей создаются новые записи); в конце каждой записи проставляются символы конца записи;
логические данные выводятся как F и T;
целочисленные данные выводятся в соответствии со спецификатором формата I11;
вещественные или комплексные данные в зависимости от значения выводятся в соответствии с дескрипторами F или Е: если выводимое значение находится в пределах от 1 до 107, то для одинарной точности используется формат F15.6, а для двойной - Е24.15, для значений, не входящих в этот интервал, используются форматы Е15.6Е2 и Е24.15Е3 соответственно;
символьные данные по умолчанию выводятся без ограничений;
вывод объекта производного типа выполняется покомпонентно в порядке появления компонентов в объявлении производного типа.
Пример управляемого неименованным списком ввода и вывода.
program vv3
character(3) name ! описание и
real vec(4) ! инициализация
logical :: flag = .true. ! переменных
print *, 'Input name vec(4)' ! вывод сообщения
read *, name ! введем: ‘Ivanov’
read *, vec ! 3E4 30.4 1.2 2.4
print *, flag, name, vec ! вывод результатов
end program vv3
Результат:
Tiva 30000.000000 30.400000 1.200000 2.400000
3.8. Массивы
3.8.1. Описание размерности статических массивов
DIMENSION имя (список), имя (список), ..., имя (список)
3.8.2. Сечение массива
Индексный триплет имеет вид: <нижняя граница> : <верхняя граница> <:шаг>
Векторный индекс
Пример использования триплета и векторного индекса для задания сечений массивов.
program tt1
integer :: i, x(7) = (/(i, i=1,7)/) ! описание
integer d (5,7) /35*0/ ! и
real a(20) /20*0.0/ ! инициализация
real с(8) /8*0./, b(10,10) /100*0./ ! массивов
integer vi(3), vj(4) ! vi, vj - целочисленные массивы, ис-
vi = (/1,4,6/) ! пользуемые как векторные индексы
vj = (/2,3,7,10/) ! для задания сечений массивов а и b
! присвоение значений элементам массивов через индексный триплет
a(:2) = 1. ! a(1)=a(2)=1.
a(3:7:2) = 3. ! a(3)=a(5)=a(7)=3.0
a(8:10) = 2. ! a(8)=a(9)=a(10)=2.
a(11::5) = 5. ! a(11)=a(16)=5.
a(17:) = -1. ! a(17)=a(18)=a(19)=a(20)=-1.
d(3,:) = 1 ! сечение - третья строка матрицы
d(:,6) = 6 ! сечение - шестой столбец матрицы
! присвоение значений элементам массивов через векторный индекс
c(vi) = 1. ! c(1)=c(4)=c(6)=1.
b(vi,vj) = 2. ! b(1,2)=b(1,3)=b(1,7)=b(1,10)=b(4,2)=b(4,3)=
! b(4,7)=b(4,10)=b(6,2)=b(6,3)=b(9,7)=b(6,10)=2.
b(2,vi) =3. ! b(2,1)=b(2,4)=b(2,6)=3.
x = x(7:1:-1) ! изменения порядка следования элементов массива
print *, ‘Vector a’ ! Вывод сообщения
print *, а ! Вывод значений вектора а
print *, ‘Matrix d’ ! Вывод сообщения
print *, d ! Вывод значений матрицы d
print *, ‘Vector с’ ! Вывод сообщения
print *, c ! Вывод значений вектора с
print *, ‘Matrix b’ ! Вывод сообщения
print *, b ! Вывод значений матрицы b
print *, ‘Vector x’ ! Вывод сообщения
print *, x ! Вывод значений вектора x
end program tt1