Fortranda Massivlər
Massivlər eyni tipli elementlərdən ibarət, sabit ölçülü ardıcıl kolleksiyanı saxlamaq üçün istifadə olunur. Massivlər məlumat toplama üçün yararlıdır, lakin onları eyni tipli dəyişənlərin kolleksiyası kimi düşünmək daha faydalıdır.
Bütün massivlər ardıcıl yaddaş sahələrindən ibarətdir. Ən aşağı ünvan birinci elementə, ən yüksək ünvan isə sonuncu elementə uyğun gəlir.
Numbers(1) Numbers(2) Numbers(3) Numbers(4) …
Massivlər birölçülü (vektorlar kimi), ikiölçülü (matrislər kimi) ola bilər və Fortran 7-ölçüyə qədər massivlər yaratmağa imkan verir.
Massivlərin Elan Edilməsi
Massivlər dimension atributu ilə elan edilir.
Məsələn, numbers
adlı və real rəqəmlərdən ibarət, 5 elementə malik birölçülü massiv elan etmək üçün:
real, dimension(5) :: numbers
Massivin ayrı-ayrı elementlərinə indekslər vasitəsilə müraciət edilir. Massivin ilk elementi indeks 1-ə malikdir. numbers
massivi 5 real dəyişəndən ibarətdir: numbers(1)
, numbers(2)
, numbers(3)
, numbers(4)
və numbers(5)
.
5 x 5 ölçülü, tam ədədlərdən ibarət ikiölçülü massiv elan etmək üçün:
integer, dimension(5,5) :: matrix
Aşağı həddi açıq şəkildə təyin edərək massiv yaratmaq da mümkündür:
real, dimension(2:6) :: numbers
integer, dimension(-3:2,0:4) :: matrix
Dəyərlərin Təyin Edilməsi
Massivin fərdi elementlərinə dəyər vermək mümkündür:
numbers(1) = 2.0
Yaxud dövr (loop) istifadə edə bilərsiniz:
do i = 1, 5
numbers(i) = i * 2.0
end do
Birölçülü massiv elementlərinə qısa yazılışla dəyər təyin etmək də mümkündür:
numbers = (/1.5, 3.2, 4.5, 0.9, 7.2/)
Qeyd: Qapaq mötərizəsi ‘(’ ilə əks əyrixət ‘/’ arasında boşluq buraxılmamalıdır.
Nümunə
Aşağıdakı nümunədə qeyd edilən konsepsiyalar təsvir olunur.
Kod Nümunəsi
program arrayProg
real :: numbers(5) ! birölçülü massiv
integer :: matrix(3,3), i, j ! ikiölçülü massiv
! numbers massivinə dəyərlər təyin edilməsi
do i=1,5
numbers(i) = i * 2.0
end do
! dəyərlərin ekrana çıxarılması
do i = 1, 5
Print *, numbers(i)
end do
! matrix massivinə dəyərlər təyin edilməsi
do i=1,3
do j = 1, 3
matrix(i, j) = i + j
end do
end do
! dəyərlərin ekrana çıxarılması
do i=1,3
do j = 1, 3
Print *, matrix(i, j)
end do
end do
! qısa yazılışla təyinat
numbers = (/1.5, 3.2, 4.5, 0.9, 7.2/)
! dəyərlərin ekrana çıxarılması
do i = 1, 5
Print *, numbers(i)
end do
end program arrayProg
Kodun icra nəticəsi belə olacaq:
2.00000000
4.00000000
6.00000000
8.00000000
10.0000000
2
3
4
3
4
5
4
5
6
1.50000000
3.20000005
4.50000000
0.899999976
7.19999981
Massivlərlə Əlaqədar Termlər
Term | Mənası |
---|---|
Rank | Massivin ölçülərinin sayı. Məsələn, matrix massivi üçün rank 2, numbers massivi üçün rank 1-dir. |
Extent | Bir ölçü boyunca elementlərin sayı. numbers massivi üçün extent 5, matrix üçün isə hər ölçüdə 3-dür. |
Shape | Massivin ölçülərini göstərən birölçülü tam ədədlər massivi. Məsələn, matrix üçün shape (3, 3) , numbers üçün isə (5) -dir. |
Size | Massivin cəmi elementlərinin sayı. matrix üçün size 9, numbers üçün isə 5-dir. |
Massivlərin Prosedurlara Göndərilməsi
Massivləri prosedura arqument kimi göndərmək mümkündür. Nümunə:
Kod Nümunəsi
program arrayToProcedure
implicit none
integer, dimension(5) :: myArray
integer :: i
call fillArray(myArray)
call printArray(myArray)
end program arrayToProcedure
subroutine fillArray(a)
implicit none
integer, dimension(5), intent(out) :: a
integer :: i
do i = 1, 5
a(i) = i
end do
end subroutine fillArray
subroutine printArray(a)
integer, dimension(5) :: a
integer :: i
do i = 1, 5
Print *, a(i)
end do
end subroutine printArray
Kodun icra nəticəsi:
1
2
3
4
5
Massiv Seqmentləri
Massivin bir hissəsinə müraciət etmək üçün subscript triplet adlanan xüsusi notasiya istifadə olunur:
array([lower]:[upper][:stride], ...)
Massiv seqmentlərindən istifadə nümunəsi:
program arraySubsection
real, dimension(10) :: a, b
integer :: i
a(1:7) = 5.0 ! a(1) - a(7) arası 5.0
a(8:) = 0.0 ! qalanlar 0.0
b(2:10:2) = 3.9
b(1:9:2) = 2.5
do i = 1, 10
Print *, a(i)
end do
do i = 1, 10
Print *, b(i)
end do
end program arraySubsection
Nəticə:
5.00000000
5.00000000
5.00000000
5.00000000
5.00000000
5.00000000
5.00000000
0.00000000E+00
0.00000000E+00
0.00000000E+00
2.50000000
3.90000010
2.50000000
3.90000010
2.50000000
3.90000010
2.50000000
3.90000010
2.50000000
3.90000010