Fortran
Procedury wewnętrzne
Szukaj…
Uwagi
Wiele dostępnych wewnętrznych procedur ma wspólne typy argumentów. Na przykład:
- logiczny argument
MASK
który wybiera elementy tablic wejściowych do przetworzenia - całkowity argument skalarny
KIND
który określa rodzaj wyniku funkcji - argument liczby całkowitej
DIM
dla funkcji redukcji, która kontroluje wymiar, w stosunku do którego przeprowadzana jest redukcja
Używanie PAKI, aby wybrać elementy spełniające warunek
Funkcja pack
wewnętrznego pakuje tablicę do wektora, wybierając elementy na podstawie danej maski. Funkcja ma dwie formy
PACK(array, mask)
PACK(array, mask, vector)
(to znaczy argument vector
jest opcjonalny).
W obu przypadkach array
jest tablicą i mask
typu logicznego i zgodną z array
(skalarem lub tablicą o tym samym kształcie).
W pierwszym przypadku wynikiem jest tablica typu 1 i parametry typu array
przy czym liczba elementów jest liczbą elementów rzeczywistych w masce.
integer, allocatable :: positive_values(:)
integer :: values(5) = [2, -1, 3, -2, 5]
positive_values = PACK(values, values>0)
powoduje, że positive_values
są tablicą [2, 3, 5]
.
Przy obecnym argumencie vector
rangi 1 wynikiem jest teraz rozmiar vector
(który musi mieć co najmniej tyle elementów, ile jest prawdziwych wartości w mask
.
Efektem vector
jest zwrócenie tej tablicy z początkowymi elementami tej tablicy zastąpionymi przez zamaskowane elementy array
. Na przykład
integer, allocatable :: positive_values(:)
integer :: values(5) = [2, -1, 3, -2, 5]
positive_values = PACK(values, values>0, [10,20,30,40,50])
powoduje, że wartości positive_values
są tablicą [2,3,5,40,50]
.
Należy zauważyć, że niezależnie od kształtu array
argumentów wynikiem jest zawsze tablica rangi 1.
Oprócz wyboru elementów tablicy spełniających warunek maskowania często przydatne jest określenie wskaźników, dla których warunek maskowania jest spełniony. Ten wspólny idiom można wyrazić jako
integer, allocatable :: indices(:)
integer i
indices = PACK([(i, i=1,5)], [2, -1, 3, -2, 5]>0)
co powoduje, że indices
są tablicą [1,3,5]
.