Fortran
Procedure intrinseche
Ricerca…
Osservazioni
Molte delle procedure intrinseche disponibili hanno in comune tipi di argomenti. Per esempio:
- un argomento logico
MASK
che seleziona elementi di matrici di input da elaborare - un argomento scalare intero
KIND
che determina il tipo di risultato della funzione - un argomento intero
DIM
per 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]
.