Томский государственный университет систем управления и радиоэлектроники
Опубликован: 01.11.2012 | Доступ: свободный | Студентов: 655 / 77 | Длительность: 06:01:00
Тема: Программирование
Специальности: Системный архитектор, Тестировщик
Лекция 4:
Массивы
Аннотация: Четвертая лекция знакомит с массивами и средствами, которые позволяют эффективно их обрабатывать, такие как сечения, векторные индексы, встроенные процедуры, операторы 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)
Операции над элементами массивов (массив как обычная переменная)
- Сложить два вектора
real A(10), B(10), C(10)
C = A+B
- Перемножить элементы вектора C(i) = A(i)*B(i)
real A(10), B(10), C(10)
C = A*B
- Возведение в степень 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)
Обращение к группе элементов (сечение массива)
- индексный триплет все параметры не обязательны
нижняя граница : верхняя граница : шаг
- Векторный индекс - одномерный массив, содержащий номера избранных элементов массива.
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






