- •Лекция 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.8.3. Присваивание значений элементам массива
Конструктор массива: (/ список значений /)
Встроенный цикл имеет вид: (выражение, встроенный DO-цикл, i=m1,m2 <,m3>)
Пример присваивания значений элементам массива.
program tt2
integer i, j, k ! описание целочисленных переменных
integer b(7), c(2,3), d(5), x(5,2), y ! описание массивов
dimension y(3,4) ! описание размерности массива y
integer a(3) /3,2,1/ ! описание и инициализация массива
real r(7) ! описание массива
real, parameter :: pi = 3.141593 ! описание и инициализация переменной
logical fl(10) ! описание логического массива
! присваивание значений элементам массивов
b = (/ a,a,5 /) ! в списке конструктора одномерный массив и скаляр
print *, ‘Vector b’ ! Вывод сообщения
print *, b ! Вывод значений вектора b
data ((c(i,j), j=1,3), i=1,2) /3*1,3*2/ ! встроенный цикл в операторе data
b= (/ c,-7 /) ! в списке конструктора двухмерный массив и скаляр
d = (/ 1,2,3,4,5 /) ! конструктор массива задает после-
! довательность чисел от 1 до 5
r = (/ (cos(real(k)*pi/180.0), k=1,14,2) /) ! в списке конструктора
! встроенный цикл
fl =(/(.true., k=1,5), (.false., k=6,10) /) ! в списке конструктора
! два встроенных цикла
! присваивание значений элементам двухмерных массивов
! с использованием встроенной функции reshape
! source – конструирует элементы массива, shape – размещает
x = reshape(source = (/ (2*i, i=2,11) /), shape = (/ 5,2 /))
y = reshape((/ ((i*j, i=1,3), j=3,6) /), shape = (/ 3,4 /))
! Вывод результатов
print *, ‘Vector b’ ! Вывод сообщения
print *, b ! Вывод значений вектора b
print *, ‘Vector d’ ! Вывод сообщения
print *, d ! Вывод значений вектора d
print *, ‘Vector r’ ! Вывод сообщения
print *,r ! Вывод значений вектора r
print *, ‘Vector fl’ ! Вывод сообщения
print *, fl ! Вывод значений вектора fl
print *, ‘Matrix x’ ! Вывод сообщения
print *, x ! Вывод значений матрицы x
print *, ‘Matrix y’ ! Вывод сообщения
print *, y ! Вывод значений матрицы y
end program tt2
Оператор имеет синтаксис:
Where (логическое выражение - массив) присваивание массива
Конструкция WHERE:
WHERE (логическое выражение - массив)
операторы присваивания массивов 1
END WHERE
или
WHERE (логическое выражение - массив)
операторы присваивания массивов 1
ELSE WHERE
операторы присваивания массивов 2
END WHERE
Пример использования конструкции WHERE.
program tt3
integer :: a(5) = (/ 1,-1,1,-1,1 /), b(-2:2) = 0 ! описание и
! инициализация массивов
where (a>b) ! поэлементное сравнение
b = b +2 ! и поэлементное
elsewhere ! присваивание
b = b – 3 ! значений
a = a +b ! массивам
end where
print *, a ! результат: 1 -4 1 -4 1 -4
print *, b ! результат: 2 -3 2 -3 2 -3
end program tt3
3.8.4. Динамические массивы
Атрибуты POINTER и ALLOCATEBLE.
Операторы ALLOCATE:
ALLOCATE (имя ссылки | имя массива (список)
<, имя ссылки | имя массива (список)>... <, STAT = переменная>)
Оператор DEALLOCATE: DEALLOCATE (а-список <, STAT = переменная>)
Пример описания динамических массивов.