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
MASKqui sélectionne les éléments des tableaux d'entrée à traiter - un argument scalaire entier
KINDqui détermine le type de résultat de la fonction - un argument entier
DIMpour 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] .