Слайд 2Одномерные массивы
A(1)
A(3)
A(5)
A(7)
A(9)
A(2)
A(4)
A(6)
A(8)
A(10)
Вектора, последовательности
B(-3)
B(-1)
B(1)
B(3)
B(-2)
B(0)
B(2)
B(4)
Слайд 3Одномерные массивы
Объявление и инициализация
real A(10)
real V(1:10), W(-5:15), S(0:90)
real, dimension(10) ::
R = 2 ! все элементы 2
! границы задаются через
константы
integer, parameter :: N = 10
complex :: B(-N:N) = (0.0,0.0) ! обнуление
integer :: C(10) = (/2,6,3,2,1,4,5,6,7,8/)
integer :: D(1:7) = [6,7,2,1,9,0,3]
! массив констант
integer, parameter :: INDX(4) = [12,86,75,9]
Слайд 4Одномерные массивы
Конструктор массива и присваивание
real A(10)
A = [1,2,3,4,5,6,7,8,9,0] !
конструктор
A = (/0,0,0,0,0,2,2,2,2,2/)
A = 0 ! обнуление массива
A = (/(0,k=1,5),(2,k=6,10)/)
! циклический список
A(1) = -2 ! присваивание элементу
A(3) = 2*A(1)+A(5)
Слайд 5Одномерные массивы
Операции над элементами массивов
(массив как обычная переменная)
real A(10), B(10),
C(10)
C = A+B
1. Сложить два вектора
2. Перемножить элементы
вектора C(i) = A(i)*B(i)
real A(10), B(10), C(10)
C = A*B
Слайд 6Одномерные массивы
Операции над элементами массивов
3. Возведение в степень C(i)
= A(i)**B(i)
real A(10), B(10), C(10)
C = A**B
real A(10), B(10)
call
random_number(A)
B = sqrt(A)
4. Вычисление процедур от элементов массива
Слайд 7Одномерные массивы
Обращение к группе элементов
(сечение массива)
1. Индексный триплет (все
параметры необязательны)
нижняя граница : верхняя граница : шаг
0
0
0
3
3
3
3
3
2
2
A(4:8)=3
Слайд 8Одномерные массивы
5
5
5
5
5
3
3
3
2
2
A(:5)=5
0
0
0
3
3
3
5
5
5
5
A(7:)=5
Слайд 9Одномерные массивы
5
5
5
5
5
3
5
3
5
2
A(1:10:2)=5
0
0
0
3
3
3
5
5
5
5
A(::3)=5
Слайд 10Одномерные массивы
2. Векторный индекс - одномерный массив,
содержащий номера избранных элементов массива.
3
1
8
7
4
5
2
0
1
6
A =
1
2
3
4
5
6
7
8
9
10
A(V) = 0
1
2
5
7
8
9
V
=
Применяем векторный индекс
8
7
5
6
A =
0
0
0
0
0
0
Слайд 11Одномерные массивы
Ввод / вывод (экран)
program read_array
integer A(5)
! данные вводятся через
пробел / перевод строки
read(*,*,ERR = 100) A ! 1 2
3 4 5
write(*,*) A ! 1 2 3 4 5
write(*,*) (A(i),i = 1,2) ! 1 2
write(*,*) A(::2) ! 1 3 5
stop
100 stop "Ошибка при чтении данных"
end
Слайд 12Одномерные массивы
Ввод / вывод (файл)
program read_array_file
integer A(5)
open(1,file = "D:\DATA\ARR.txt",ERR =
100) ! ввод из файла
read(1,*,ERR = 101) A
close(1)
open(2,file = "D:\DATA\RES.txt",ERR
= 102) ! вывод в файл
write(2,*,ERR = 103) A(1:4)
close(2)
stop
100 stop "Ошибка при открытии файла"
101 stop "Ошибка при чтении данных"
102 stop "Ошибка при создании файла"
103 stop "Ошибка при записи данных"
end
Слайд 13Двумерные массивы
A =
(1,1)
real A(2,4) ! 2 строки, 4 столбца
real
A(1:2,1:4), B(-1:100,-1:200)
real, dimension(2,4) :: A
integer, parameter :: Mi = 2,
Mj = 4
real, dimension :: A(Mi,Mj)
Объявление
(1,2)
(1,3)
(1,4)
(2,1)
(2,2)
(2,3)
(2,4)
Слайд 14Двумерные массивы
Инициализация
real :: A(2,4) = [2,5,7,9,0,1,4,8]
Двумерный массив хранится в памяти
по столбцам
real :: A(2,4) = 0 ! обнуление массива
Слайд 15Двумерные массивы
Операции над элементами массивов
(массив как обычная переменная)
real A(10,10), B(10,10),
C(10,10)
C = A+B
1. Сложить две матрицы
2. Перемножить элементы
матриц
C(i,j) = A(i,j)*B(i,j)
real A(10,10), B(10,10), C(10,10)
C = A*B
Слайд 16Двумерные массивы
Использование сечений
0
A(:,1)=0
0
0
0
1. Обнулить первый
столбец
матрицы
0
0
0
A(1,:)=0
2. Обнулить первую
строку матрицы
Слайд 17Двумерные массивы
Использование сечений
A(2:Mi-1,2:Mj-1)=2
2
2
2
2
3. Присвоить подматрице значения
2
2
2
2
2
2
Слайд 18Двумерные массивы
Ввод / вывод (экран)
program read_array_2D
integer A(3,3)
! данные вводятся по
столбцам (формат хранения в памяти)
read(*,*,ERR = 100) A ! 1
1 1 2 2 2 3 3 3
! выведем данные по строкам
do i = 1,3
write(*,*) (A(i,j),j = 1,3)
end do
stop
100 stop "Ошибка при чтении данных"
end