Опубликован: 01.11.2012 | Уровень: для всех | Доступ: платный | ВУЗ: Томский государственный университет систем управления и радиоэлектроники
Лекция 4:

Массивы

< Лекция 3 || Лекция 4: 1234 || Лекция 5 >
Аннотация: Четвертая лекция знакомит с массивами и средствами, которые позволяют эффективно их обрабатывать, такие как сечения, векторные индексы, встроенные процедуры, операторы where и forall. Рассказывается о динамических массивах, операторах allocate и deallocate.

Вы можете скачать презентацию к данной лекции здесь.

Одномерные массивы

Вектора, последовательности


Объявление и инициализация

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]
    

Конструктор массива и присваивание

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)
    

Операции над элементами массивов (массив как обычная переменная)

  1. Сложить два вектора
real A(10), B(10), C(10)

C = A+B
    
  1. Перемножить элементы вектора C(i) = A(i)*B(i)
real A(10), B(10), C(10)

C = A*B
    
  1. Возведение в степень C(i) = A(i)**B(i)
real A(10), B(10), C(10)

C = A**B 
    
  1. Вычисление процедур от элементов массива
real A(10), B(10)

call random_number(A) 
B = sqrt(A)
    

Обращение к группе элементов (сечение массива)

  1. индексный триплет все параметры не обязательны

нижняя граница : верхняя граница : шаг






  1. Векторный индекс - одномерный массив, содержащий номера избранных элементов массива.

Ввод / вывод (экран)

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
    

Ввод / вывод (файл)

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
    
< Лекция 3 || Лекция 4: 1234 || Лекция 5 >
Игорь Артёмов
Игорь Артёмов
Россия, Томск, Томский государственный университет, 1998