Fortran - Mảng động
A dynamic array là một mảng, kích thước của mảng này không được biết tại thời điểm biên dịch, nhưng sẽ được biết vào thời điểm thực thi.
Mảng động được khai báo với thuộc tính allocatable.
Ví dụ,
real, dimension (:,:), allocatable :: darray
Thứ hạng của mảng, tức là, kích thước phải được đề cập, tuy nhiên, để cấp phát bộ nhớ cho một mảng như vậy, bạn sử dụng allocate chức năng.
allocate ( darray(s1,s2) )
Sau khi mảng được sử dụng, trong chương trình, bộ nhớ được tạo sẽ được giải phóng bằng cách sử dụng deallocate chức năng
deallocate (darray)
Thí dụ
Ví dụ sau đây minh họa các khái niệm đã thảo luận ở trên.
program dynamic_array
implicit none
!rank is 2, but size not known
real, dimension (:,:), allocatable :: darray
integer :: s1, s2
integer :: i, j
print*, "Enter the size of the array:"
read*, s1, s2
! allocate memory
allocate ( darray(s1,s2) )
do i = 1, s1
do j = 1, s2
darray(i,j) = i*j
print*, "darray(",i,",",j,") = ", darray(i,j)
end do
end do
deallocate (darray)
end program dynamic_array
Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:
Enter the size of the array: 3,4
darray( 1 , 1 ) = 1.00000000
darray( 1 , 2 ) = 2.00000000
darray( 1 , 3 ) = 3.00000000
darray( 1 , 4 ) = 4.00000000
darray( 2 , 1 ) = 2.00000000
darray( 2 , 2 ) = 4.00000000
darray( 2 , 3 ) = 6.00000000
darray( 2 , 4 ) = 8.00000000
darray( 3 , 1 ) = 3.00000000
darray( 3 , 2 ) = 6.00000000
darray( 3 , 3 ) = 9.00000000
darray( 3 , 4 ) = 12.0000000
Sử dụng Tuyên bố Dữ liệu
Các data câu lệnh có thể được sử dụng để khởi tạo nhiều hơn một mảng hoặc khởi tạo phần mảng.
Cú pháp của câu lệnh dữ liệu là -
data variable / list / ...
Thí dụ
Ví dụ sau thể hiện khái niệm -
program dataStatement
implicit none
integer :: a(5), b(3,3), c(10),i, j
data a /7,8,9,10,11/
data b(1,:) /1,1,1/
data b(2,:)/2,2,2/
data b(3,:)/3,3,3/
data (c(i),i = 1,10,2) /4,5,6,7,8/
data (c(i),i = 2,10,2)/5*2/
Print *, 'The A array:'
do j = 1, 5
print*, a(j)
end do
Print *, 'The B array:'
do i = lbound(b,1), ubound(b,1)
write(*,*) (b(i,j), j = lbound(b,2), ubound(b,2))
end do
Print *, 'The C array:'
do j = 1, 10
print*, c(j)
end do
end program dataStatement
Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:
The A array:
7
8
9
10
11
The B array:
1 1 1
2 2 2
3 3 3
The C array:
4
2
5
2
6
2
7
2
8
2
Sử dụng Tuyên bố Vị trí
Các wherecâu lệnh cho phép bạn sử dụng một số phần tử của mảng trong một biểu thức, tùy thuộc vào kết quả của một số điều kiện logic. Nó cho phép thực hiện biểu thức, trên một phần tử, nếu điều kiện đã cho là đúng.
Thí dụ
Ví dụ sau thể hiện khái niệm -
program whereStatement
implicit none
integer :: a(3,5), i , j
do i = 1,3
do j = 1, 5
a(i,j) = j-i
end do
end do
Print *, 'The A array:'
do i = lbound(a,1), ubound(a,1)
write(*,*) (a(i,j), j = lbound(a,2), ubound(a,2))
end do
where( a<0 )
a = 1
elsewhere
a = 5
end where
Print *, 'The A array:'
do i = lbound(a,1), ubound(a,1)
write(*,*) (a(i,j), j = lbound(a,2), ubound(a,2))
end do
end program whereStatement
Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:
The A array:
0 1 2 3 4
-1 0 1 2 3
-2 -1 0 1 2
The A array:
5 5 5 5 5
1 5 5 5 5
1 1 5 5 5