Character*20,dimension(1:30)::student
Для массива student выделено 30 строк по 20 байт, всего 600 байт.
4) При объявлении массивы можно инициализировать с помощью конструктора массива, например:
integer, dimension(1:10):: digit=(/0,1,2,3,4,5,6,7,8,9/)
5) С помощью конструктора массива можно создавать массивы констант, например:
integer, parameter, dimension(1:5):: digit=(/0,1,2,3,4/)
6) Если задавать границы массива в виде именованных констант, то при необходимости изменить размер массива, вносить изменение можно только в одном месте:
integer, parameter:: L_digit=10
integer:: i
integer, dimension(L_digit: L_digit+10):: digit
do i=L_digit, L_digit+10
digit(i)=i
Enddo
В программе объявлен целочисленный массив из 11 элементов с номерами от 10 до 20. Каждому элементу массива присваивается значение, равное его номеру.
7) Устаревшее допустимое, но не рекомендуемое описание массивов:
integerA(34), B(34), C(7)
Лучше записать так:
integer, dimension(1:34):: A, B
integer, dimension(1:7)::С
Ввод и вывод одномерных массивов
Ввод одномерного массива
Можно ввести значения отдельных элементов массива, перечислив их в списке ввода оператора read, например:
integer, parameter ::N=5
real, dimension(1:N) :: array
open(1, file=’in.txt’)
read(1,*) array(1), array(2), array(3), array(4), array(5)
Из файла «in.txt» вводятся значения пяти элементов вещественного массива array. Но не всегда массивы состоят из пяти элементов, и их перечисление в списке ввода довольно утомительно. Попробуем сократить запись, используя оператор цикла:
do i=1, N
read(1,*) array(i)
Enddo
Код оператора цикла не зависит от размера массива. Однако, обратите внимание на то, что каждый оператор read начинает ввод с новой строки, и поэтому количество строк в файле должно быть равно количеству вводимых элементов массива (каждый элемент – в отдельной строке).
Если же элементы массива подготовить к вводу, перечислив их в одной строке, при выполнении программы будет зафиксирована ошибка ввода (недостаточно данных в файле). Дело в том, что из строки ввода будет прочитано только значение первого элемента массива (один элемент в списке ввода), а после перехода к следующей строке файл «закончится».
Записать оператор ввода можно более компактно, если использовать неявный цикл (конструкция записывается в скобках, если шаг опущен, он по умолчанию равен 1):
(Список ввода, переменная = начальное значение, конечное значение, шаг)
read(1,*) (array(i), i=1,N)
В этом варианте длина списка ввода равна N. Каждая строка файла может содержать произвольное количество значений. Оператор вводит N значений и размещает их в первых N элементах массива.
В следующем операторе неявного цикла
read(1,*) (array(i), i=1,5,2)
список ввода состоит из трех элементов array(1), array(3), array(5).
Из файла, связанного с устройством 1 будут прочитаны 3 первых значения (!), которые будут присвоены элементам массива array(1), array(3), array(5).
Если нужно ввести весь массив, в операторе read можно записать имя массива без индексов, например:
real, dimension(1:5) :: array
open(1, file=’in.txt’)
read(1,*) array ! длина списка ввода равна 5
В этом случае длина списка ввода оператора read определяется размером массива из его описания. Если данных в файле недостаточно для заполнения всех элементов массива, фиксируется ошибка выполнения программы.
Дата добавления: 2017-09-19; просмотров: 341;