![](/user_photo/2706_HbeT2.jpg)
- •Лекция 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. Встроенные функции и процедуры
Integer n, m, kp
real r, ost
integer, allocateble :: kr(:,:) ! объявление размещаемых массивов
real, allocateble :: p(:), ct(:,:,:) ! в операторе описания типа
! объявление размещаемых массивов с использованием атрибута allocateble
dimension kp[allocateble (:,:)], r[allocateble (:)], ost[allocateble(:,:)]
read *, n, m ! ввод размерностей массивов
allocate (kr(n,m), p(n), ct(n,n,n), kp(m,n), r(m), ost(m,m)) ! размещение динамических массивов
read *, kr ! ввод
read *, p ! массивов
.........
deallocate (kr, p, ct) ! освобождение памяти, занимаемой
....... ! размещаемыми массивами kr, p, ct
end
Автоматические массивы
Пример обмена содержимого двух массивов
program main
integer, parameter :: n=5
Integer I
real :: a(n) = (/1., i=1,n /), b(n) = (/2., i=1,n/)
Interface
subroutine su ! при использовании перенимающих форму
real a(:), b(:) ! массивов требуется задание явного интерфейса
end subroutine su
end interface
call su(a,b)
print *, a, b ! результат: 2 2 2 2 2 1 1 1 1 1
end
subroutine su(a,b) ! описание процедуры
real a(:), b(:) ! а и b - массивы, перенимающие форму
real c(size(a)) ! с - автоматический массив
c = a
a = b
b = c
end subroutine su
3.8.5. Массивы – формальные параметры процедур
Массивы заданной формы.
Пример. Вывести первый отрицательный элемент каждого столбца матрицы.
Integer n, m, j
real, allocateble :: kr (:,:) ! объявление размещаемого массива
read *, n, m ! ввод размерностей массивов 3 , 4
allocate (kr(n,m)) ! размещение динамического массива
read *, kr ! ввод исходного массива 1 2 3 -4
! -1 0 2 -3
! 2 -2 3 0
do j=1,m
call sub(kr(1,j),n,j) ! в sub доступны все элементы j-го столбца
end do ! начиная с первого и все последующие элементы матрицы kr
deallocate (kr) ! освобождение памяти
end
subroutine sub(b,n,j) ! количество строк n передается как параметр
Integer n, I, j
real b(n) ! вектор b содержит все элементы
do i=1,n ! столбца j матрицы kr
if(b(i)<0) then
print *, ‘Стобец ’, j, ‘, элемент ‘, b(i)
return
end if
end do
print *, “В столбце ”, j, ‘ нет отрицательных элементов’
end subroutine sub
Результат: Столбец 1, элемент -1
Столбец 2, элемент -2
В столбце 3 нет отрицательных элементов
Столбец 4, элемент -4
Массивы, перенимающие форму
При описании формального параметра каждая размерность имеет вид:
< нижняя граница > :
Пример описания синтаксиса массива, перенимающего форму.
program main
real x(0:3,0:6)