Fortran
Procedury wewnętrzne
Szukaj…
Uwagi
Wiele dostępnych wewnętrznych procedur ma wspólne typy argumentów. Na przykład:
- logiczny argument
MASKktóry wybiera elementy tablic wejściowych do przetworzenia - całkowity argument skalarny
KINDktóry określa rodzaj wyniku funkcji - argument liczby całkowitej
DIMdla 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] .