Fortran - Tableaux dynamiques
UNE dynamic array est un tableau dont la taille n'est pas connue au moment de la compilation, mais sera connue au moment de l'exécution.
Les tableaux dynamiques sont déclarés avec l'attribut allocatable.
Par exemple,
real, dimension (:,:), allocatable :: darray
Le rang du tableau, c'est-à-dire les dimensions doivent être mentionnés cependant, pour allouer de la mémoire à un tel tableau, vous utilisez le allocate fonction.
allocate ( darray(s1,s2) )
Une fois le tableau utilisé, dans le programme, la mémoire créée doit être libérée en utilisant le deallocate fonction
deallocate (darray)
Exemple
L'exemple suivant illustre les concepts décrits ci-dessus.
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
Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant -
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
Utilisation de la déclaration de données
le data L'instruction peut être utilisée pour initialiser plus d'un tableau, ou pour l'initialisation de section de tableau.
La syntaxe de l'instruction de données est -
data variable / list / ...
Exemple
L'exemple suivant illustre le concept -
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
Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant -
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
Utilisation de la déclaration Where
le whereL'instruction vous permet d'utiliser certains éléments d'un tableau dans une expression, en fonction du résultat d'une condition logique. Il permet l'exécution de l'expression, sur un élément, si la condition donnée est vraie.
Exemple
L'exemple suivant illustre le concept -
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
Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant -
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