Томский государственный университет систем управления и радиоэлектроники
Опубликован: 01.11.2012 | Доступ: свободный | Студентов: 651 / 76 | Длительность: 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