next up previous contents
Nächste Seite: Übungsbeispiele Aufwärts: Vordefinierte Unterprogramme Vorherige Seite: Zeichenfunktionen   Inhalt

Feldfunktionen

ALL stellt fest, ob alle Werte der Maske wahr sind
ALLOCATED prüfte, ob dem Feld aktuell Speicher zugewiesen ist
ANY testet, ob irgendein Wert der Maske wahr ist
COUNT zählt die Elemente der Maske, die wahr sind
CSHIFT zirkuläres Verschiebung
DOT_PRODUCT Skalarprodukt, Ergebnis also ein Skalar!
EOSHIFT Verschieben und Einbringen von Randwerten
LBOUND, UBOUND untere bzw. obere Grenze des Feldes
MATMUL Matrizenmultiplikation
MAXLOC, MINLOC Index des größten bzw. kleinsten Feldelements
MAXVAL, MINVAL Wert des größten bzw. kleinsten Feldelements
MERGE alternative Werte, abhängig von Maske
PACK packt (mehrdimensionales) Feld in ein eindimensionales
PRODUCT Produkt aller Feldelemente, die die Maske erfüllen
RESHAPE wandelt ein mehrdimensionales Feld um in ein anderes
SHAPE liefert die Form eines Feldes
SIZE liefert die Größe eines Feldes bzw.
  die Ausdehnung einer Dimension
SPREAD erweitert ein Objekt um eine Dimension
SUM bildet die Summe aller Feldelemente (die die Maske erfüllen)
TRANSPOSE transponiert ein zweidimensionales Feld
UNPACK entpackt ein eindimensionales Feld in ein mehrdimensionales

Auch zur Verwendung der Feldfunktionen noch ein kurzes Beispiel:

PROGRAM feldfunktionen
 IMPLICIT NONE
 INTEGER :: i, n
 INTEGER :: feld1(5), feld2(3,2)

 feld1 = (/ 0, (1, 0, i = 1, 2) /)              !
 feld2 = 0                                      !
                                                !
 IF (ANY(feld1==1) .AND. ALL(feld2==0)) &       !
 n = COUNT (feld1==0)                           !
 WRITE (*,*) n                                  !  3
 feld1 = (/ (i, i=1,5) /)                       !
 WRITE (*,*) CSHIFT (feld1,2)                   !  3   4   5   1   2
 feld2(:,1) = 1                                 !
 WRITE (*,*) feld2                              !  1   1   1   0   0   0
 WRITE (*,*) DOT_PRODUCT(feld1(3:4),feld2(2,:)) !  3
 feld2 = EOSHIFT (feld2, -1, 9, 2)              ! 
 WRITE (*,*) feld2                              !  9   9   9   1   1   1
 WRITE (*,*) MAXLOC(CSHIFT(feld1,-1))           !  1
 WRITE (*,*) MAXVAL(feld2-1), MINLOC(feld2)     !  8   1   2
 WRITE (*,*) MERGE (1, 0, feld2 >= 1)           !  1   1   1   1   1   1
 n = COUNT (feld2 > 1)                          !
 feld1 = (/ PACK (feld2,MASK=feld2>1), &        !
         (i-1, i=n+1, SIZE(feld1)) /)           !
 WRITE (*,*) feld1                              !  9   9   9   3   4
 WRITE (*,*) PRODUCT(feld1)/PRODUCT(feld2,1)    ! 12 8748
 WRITE (*,*) SUM(feld1-1, MASK = feld1>=3)      ! 29
 WRITE (*,*) RESHAPE(feld1,   &                 !  
  (/4,2/),(/0/),(/2,1/))                        !  9   9   4   0   9   3   0   0
                                                !  (zuerst 2. Dimension, Rest=0)
 WRITE (*,*) RESHAPE(feld1,   &                 !
  (/4,2/),(/1/),(/1,2/))                        !  9   9   9   3   4   1   1   1
                                                !  (zuerst 1. Dimension, Rest=1)
 WRITE (*,*) RESHAPE(feld1, SHAPE(feld2))       !  9   9   9   3   4   9
 WRITE (*,*) TRANSPOSE(feld2)                   !  9   1   9   1   9   1
 feld2(:,1) = (/(i, i=1,SIZE(feld2(:,1)))/)     !
 feld2(:,2) = (/(10+i, i=1,SIZE(feld2(:,1)))/)  !
 WRITE (*,*) SPREAD(feld2,2,3)                  ! |  1   11 
END PROGRAM feldfunktionen                      ! |  2   12
                                                ! |  3   13
                                                ! V  1   11 
                                                !    2   12 
                                                !    3   13 
                                                !    1   11 
                                                !    2   12 
                                                !    3   13

next up previous contents
Nächste Seite: Übungsbeispiele Aufwärts: Vordefinierte Unterprogramme Vorherige Seite: Zeichenfunktionen   Inhalt
Reinfried O. Peter 2001-09-07