Fortran
Procédures intrinsèques
Recherche…
Remarques
Un grand nombre des procédures intrinsèques disponibles ont des types d'argument communs. Par exemple:
- un argument logique
MASK
qui sélectionne les éléments des tableaux d'entrée à traiter - un argument scalaire entier
KIND
qui détermine le type de résultat de la fonction - un argument entier
DIM
pour une fonction de réduction qui contrôle la dimension sur laquelle la réduction est effectuée
Utilisation de PACK pour sélectionner des éléments répondant à une condition
La fonction pack
intrinsèque emballe un tableau dans un vecteur, en sélectionnant des éléments basés sur un masque donné. La fonction a deux formes
PACK(array, mask)
PACK(array, mask, vector)
(c'est-à-dire que l'argument vector
est facultatif).
Dans les deux cas, array
est un tableau et un mask
de type logique conforme à array
(un scalaire ou un tableau de même forme).
Dans le premier cas, le résultat est rang-1 tableau de paramètres de type et de type de array
le nombre d'éléments étant le nombre d'éléments vrais dans le masque.
integer, allocatable :: positive_values(:)
integer :: values(5) = [2, -1, 3, -2, 5]
positive_values = PACK(values, values>0)
les valeurs positive_values
sont le tableau [2, 3, 5]
.
Avec l'argument vector
rank-1, le résultat est maintenant la taille du vector
(qui doit avoir au moins autant d'éléments que de valeurs vraies dans le mask
.
L'effet avec vector
est de renvoyer ce tableau avec les éléments initiaux de ce tableau écrasés par les éléments masqués du array
. Par exemple
integer, allocatable :: positive_values(:)
integer :: values(5) = [2, -1, 3, -2, 5]
positive_values = PACK(values, values>0, [10,20,30,40,50])
les [2,3,5,40,50]
positive_values
sont le tableau [2,3,5,40,50]
.
Il convient de noter que, quelle que soit la forme du array
arguments array
le résultat est toujours un tableau de rang 1.
En plus de sélectionner les éléments d'un tableau répondant à une condition de masquage, il est souvent utile de déterminer les indices pour lesquels la condition de masquage est remplie. Cet idiome commun peut être exprimé comme
integer, allocatable :: indices(:)
integer i
indices = PACK([(i, i=1,5)], [2, -1, 3, -2, 5]>0)
résultant en des indices
étant le tableau [1,3,5]
.