Fortran
Procedure intrinseche
Ricerca…
Osservazioni
Molte delle procedure intrinseche disponibili hanno in comune tipi di argomenti. Per esempio:
- un argomento logico
MASKche seleziona elementi di matrici di input da elaborare - un argomento scalare intero
KINDche determina il tipo di risultato della funzione - un argomento intero
DIMper una funzione di riduzione che controlla la dimensione su cui viene eseguita la riduzione
Usando PACK per selezionare elementi che soddisfano una condizione
La funzione del pack intrinseco racchiude una matrice in un vettore, selezionando gli elementi in base a una determinata maschera. La funzione ha due forme
PACK(array, mask)
PACK(array, mask, vector)
(cioè, l'argomento vector è facoltativo).
In entrambi i casi la array è una matrice e una mask di tipo logico e conforme array (uno scalare o una matrice della stessa forma).
Nel primo caso il risultato è un array di tipo 1 di tipo e parametri di tipo di array con il numero di elementi che rappresenta il numero di elementi reali nella maschera.
integer, allocatable :: positive_values(:)
integer :: values(5) = [2, -1, 3, -2, 5]
positive_values = PACK(values, values>0)
risultati in positive_values come matrice [2, 3, 5] .
Con l'argomento vector rank-1 presente il risultato è ora la dimensione del vector (che deve avere almeno tanti elementi quanti sono i veri valori nella mask .
L'effetto con vector è restituire quella matrice con gli elementi iniziali di quella matrice sovrascritta dagli elementi mascherati array . Per esempio
integer, allocatable :: positive_values(:)
integer :: values(5) = [2, -1, 3, -2, 5]
positive_values = PACK(values, values>0, [10,20,30,40,50])
Risultati in positive_values essendo la matrice [2,3,5,40,50] .
Va notato che, indipendentemente dalla forma array degli argomenti, il risultato è sempre un array di rank-1.
Oltre a selezionare gli elementi di un array che soddisfano una condizione di mascheramento, è spesso utile determinare gli indici per i quali viene soddisfatta la condizione di mascheramento. Questo linguaggio comune può essere espresso come
integer, allocatable :: indices(:)
integer i
indices = PACK([(i, i=1,5)], [2, -1, 3, -2, 5]>0)
risultando negli indices l'array [1,3,5] .