ANNEXE 5

Original: https://www.nsc.liu.se/~boein/f77to90/a5.html


Fonctions intrinsèques en Fortran 90
  • Introduction
  • 1. fonction qui détermine si un certain argument se trouve dans une liste d’arguments réels
  • 2. fonctions numériques
  • 3. mathématiques fonctions
  • 4. fonctions de chaînes de caractères
  • 5. fonction de chaîne de caractère à la demande
  • 6. aimables fonctions
  • 7. fonction logique
  • 8. fonctions d’enquête numérique
  • 9. bit fonction d’enquête
  • 10. fonctions de manipulation de bits
  • 11. les fonctions de transfert
  • 12. fonctions de manipulation virgule flottante
  • 13. les fonctions vectorielles et de la multiplication des matrices
  • 14. fonctions de tableau
  • 15. fonctions d’enquête tableau
  • 16. tableau construire des fonctions
  • 17. tableau reshape fonction
  • 18. fonctions de manipulation de tableau
  • 19. fonctions emplacement tableau
  • 20. fonctions d’enquête pointeur
  • 21. intrinsèques sous-routines
  • Routines de temps
    • Routine de copie bit
    • Routines de numéro aléatoires
Introduction
Il est un grand nombre de fonctions intrinsèques et cinq subroutinesin intrinsèque Fortran 90. Je traite les routines numériques et mathématiques très peu de temps, puisqu’ils ne sont pas modifiés de Fortran 77 et devraient donc être bien connus.
Cette section est basée sur l’article 13 de la norme ISO (1991), qui contient un traitement plus formel. Nous suivre l’arrangement des différentes fonctions et sous-routines dans la norme, mais expliquer directement dans la liste. Pour un traitement plus détaillé, nous nous référons à Metcalf et Reid (1990, 1993).
Quand un paramètre ci-dessous est facultatif, qu’il est donné en caractères minuscules. Lorsqu’une liste d’arguments contient plusieurs arguments, la fonction peut être appelée soit en position associés arguments ou par un mot clé. Mot clé doit être utilisé si certains argument précédent n’est pas inclus. Mots clés sont normalement les noms qui sont donnés ci-dessous.
Nous n’avons pas toujours donné toutes les limites naturelles aux variables, par exemple que la position n’est pas autorisée à être négatif.
1. Fonction qui détermine si un certain argument se trouve dans une liste d’arguments réels :
La fonction PRESENT(A) renvoie. LA VALEUR TRUE. Si l’argument A est dans la liste d’appel. LA VALEUR FALSE. dans les autres cas. L’utilisation est illustrée dans l’exemple de programme dans le chapitre 8 du texte principal.
2. Fonctions numériques :
Ce qui suit est disponible de Fortran 77: ABS, AIMAG, AINT, ANINT, CMPLX, CONJG, DBLE, DIM, DPROD, INT, MAX, MIN, MOD, l’Inn, réel et signe.
En outre, plafond, plancher et MODULO ont été ajoutés à Fortran 90. Seul le dernier est difficile à expliquer, ce qui est plus facile à faire avec les exemples de l’ISO (1991)
    MOD (8,5)    gives  3     MODULO (8,5)    gives  3

MOD (-8,5)   gives -3     MODULO (-8,5)   gives  2
MOD (8,-5)   gives  3     MODULO (8,-5)   gives -2
MOD (-8,-5)  gives -3     MODULO (-8,-5)  gives -3

Les fonctions suivantes de Fortran 77 peuvent utiliser un paramètre de type comme dans AINT (un, genre), à savoir AINT, ANINT, CMPLX, INT, l’Inn et REAL.

Un fait historique est que les fonctions numériques en Fortran 66 devaient avoir un nom spécifique (différent) dans différentes précisions, et ces noms explicites sont toujours les seuls qui peuvent être utilisés lorsqu’un nom de fonction est passé en tant qu’argument.
Un tableau complet de toutes les fonctions numériques suivre. Les noms qui sont marqués d’une étoile * ne sont pas autorisés à être utilisés comme arguments. Certaines fonctions, comme INT et IFIX ont deux noms spécifiques, soit utilisable. En revanche, certaines fonctions n’ont pas un nom spécifique. Ci-dessous j’ai utiliser C pour les valeurs à virgule flottante complexe, D pour les valeurs à virgule flottante en double précision, j’ai pour les entiers, et valeurs à virgule R pour flottante en simple précision.
Screenshot 2015-04-28 22:21
Screenshot 2015-04-28 22:22
 Screenshot 2015-04-28 22:23
Troncature est vers zéro, INT(-3.7) devient -3, mais arrondi est correct, que nint(-3.7) devient -4. Les nouvelles fonctions de plancher et plafond tronquer vers moins et plus infini, respectivement.
La fonction CMPLX peut avoir un ou deux arguments, si les deux arguments sont présents, ceux-ci doivent être du même type mais pas complexe.
La fonction MOD(X,Y) calcule X INT(X/Y) * Y.
La fonction de transfert du signe SIGN(X,Y) prend le signe du deuxième argument et met sur le premier argument, ABS si Y > = 0 et-ABS(X) s’Y < 0.
Positive différence DIM est une fonction que je n’ai jamais utilisé, mais DIM(X,Y) donne XY si c’est positive et à zéro dans le cas contraire.
Produit scalaire DPROD est par ailleurs une fonction très utile qui donne au produit de deux nombres en simple précision comme un nombre à double précision. Il est rapide et précise.
Les deux fonctions MAX et MIN sont uniques, car ils peuvent avoir un nombre arbitraire d’arguments, mais au moins deux. Les arguments doivent être du même type, mais ne sont pas autorisés à être de type complexe.
3. Fonctions mathématiques :
Identique à Fortran 77. Toutes les fonctions trigonométriques travailler en radians. Les suivantes sont disponibles : ACOS, ASIN, ATAN, ATAN2, COS, COSH, EXP, LOG, LOG10, SIN, SINH, SQRT, TAN et TANH.
Un fait historique est que les fonctions mathématiques en Fortran 66 devaient avoir un nom spécifique (différent) dans différentes précisions, et ces noms explicites sont toujours les seuls qui peuvent être utilisés lorsqu’un nom de fonction est passé en tant qu’argument.
Un tableau complet de toutes les fonctions mathématiques suivent. Ci-dessous j’ai utiliser C pour les valeurs à virgule flottante complexe, D pour les valeurs à virgule flottante en double précision, j’ai pour les entiers, et valeurs à virgule R pour flottante en simple précision.
 Screenshot 2015-04-28 22:24
Screenshot 2015-04-28 22:24
Le but de la plupart de ces fonctions est évident. Notez qu’ils sont tout seuls définie pour les nombres à virgule flottante et pas pour les entiers. Vous ne pouvez donc pas calculer la racine carrée de 4 comme SQRT(4), mais au lieu de cela, vous pouvez utiliser NINT(SQRT(REAL(4))). Notez également que toutes les fonctions complexes retournent la valeur principale.
La racine carrée donne un résultat réel pour un véritable argument en simple ou double précision et un résultat complex pour un argument complex. SQRT(-1.0) donne un message d’erreur (généralement déjà au moment de la compilation), alors que vous pouvez obtenir la racine carrée complexe en utilisant les instructions suivantes.

COMPLEX, PARAMETER    :: MINUS_ONE = -1.0
COMPLEX               :: Z
Z = SQRT(MINUS_ONE)

L’argument pour les logarithmes habituelles doit être positif, alors que l’argument pour sabot doit être différente de zéro.

Le module pour que l’argument ASIN et ACOS doit être d’au plus 1. Le résultat sera dans [-pi/2, pi/2] et [0, pi], respectivement.
La fonction ATAN renvoie une valeur dans [-pi/2, pi/2].
La fonction ATAN2(Y,X) = arctan(y,x) retournera une valeur en (-pi, pi]. Si Y est positif, le résultat sera positif. Si Y est zéro, le résultat sera nul si X est positif et pi si X est négatif. Si Y est négatif, le résultat sera négatif. Si X est zéro, le résultat sera plus ou moins pi/2. X et Y ne sont pas autorisés à zéro en même temps. Le but de la fonction est d’éviter la division par zéro.
Une limitation naturelle pour les fonctions mathématiques est la précision limitée et la plage, ce qui signifie que par exemple EXP peut causer des dépassements négatifs ou dépassement des valeurs assez commun de l’argument. Les fonctions trigonométriques obtiendra une précision très faible pour les grands arguments. Ces limitations sont dépendantes de l’implémentation et devraient figurer dans le manuel du fournisseur.
4. Fonctions de chaînes de caractères :
Les fonctions ci-dessous effectuent des opérations d’et vers les chaînes de caractères. Veuillez noter qu’aissa fonctionne avec des caractères ASCII standard tandis que le CHAR travaille avec la représentation dans l’ordinateur que vous utilisez.

ACHAR(I)          Returns the ASCII character which has number I
ADJUSTL(STRING)   Adjusts to the left
ADJUSTR(STRING)   Adjusts to the right
CHAR(I, kind)     Returns the character that has the number I
IACHAR(C)         Returns the ASCII number of the character C
ICHAR(C)          Returns the number of character C

INDEX(STRING, SUBSTRING, back)  Returns the starting position for a
substring within  a  string.  If BACK  is  true then you get the
last starting position, in the  other case, the first one.

LEN_TRIM(STRING)  Returns the length of the string without the possibly
trailing blanks.

LGE(STRING_A, STRING_B)
LGT(STRING-A, STRING_B)
LLE(STRING_A, STRING_B)
LLT(STRING_A, STRING_B)

Les ci-dessus routines comparer deux chaînes à l’aide de triage selon ASCII. Si une chaîne est plus courte que l’autre, les flans sont ajoutés à la fin de la chaîne courte. Si une chaîne contient un caractère à l’extérieur du jeu de caractères ASCII, le résultat est dépendant de l’implémentation.

REPEAT(STRING, NCOPIES)    Concatenates a character string NCOPIES
times with itself.
SCAN(STRING, SET, back)    Returns the position of the first occurrence
of any character in the string SET in the string
STRING. If BACK is true, you will get
the rightmost such character.
TRIM(STRING)               Returns the character string STRING without
trailing blanks.
VERIFY(STRING, SET, back)  Returns the position of the first character
in STRING which is not in SET.  If BACK
is TRUE, you get the last one!
The result is zero if all characters are
included!

5. Fonction de chaîne de caractère à la demande :

Len(String) retourne la longueur d’une chaîne de caractères. Il n’a pas à se voir assigner une valeur à la variable STRING.
6. Aimables fonctions :

KIND(X)
SELECTED_INT_KIND(R)
SELECTED_REAL_KIND(p, r)

La première renvoie le type de l’argument réel, qui peut être de type INTEGER, REAL, complexe, de logique ou de caractère. L’argument X n’a pas à être assignés à n’importe quelle valeur. La seconde retourne un type entier avec le nombre de chiffres, et la troisième renvoie le genre des nombres à virgule flottante avec précision numérique au moins les chiffres P et une plage exposant décimale entre -R et + r. Les paramètres P et R doivent être entiers scalaires. Il faut au moins un des P et R.

Le résultat de SELECTED_INT_KIND est un entier de zéro et vers le haut, si le genre souhaité n’est pas disponible, vous obtiendrez -1. Si plusieurs types de mises en œuvre satisfont à la condition, l’un avec la gamme moins décimal est utilisé. Si encore il y a plusieurs types ou sortes qui satisfont à la condition, celui avec le plus petit nombre aimable serviront.

 

Le résultat de SELECTED_REAL_KIND est aussi un entier de zéro et vers le haut ; Si le genre souhaité n’est pas disponible, -1 est retourné si la précision n’est pas disponible, -2 si la plage de l’exposant n’est pas disponible et if-3 nul des exigences sont disponibles. Si plusieurs mises en œuvre types satisfont à la condition, l’un avec la précision décimale moins est retourné, et s’il y a plusieurs d’entre eux, celui avec le moins bon nombre est renvoyé.
Des exemples sont donnés dans le chapitre 2 du texte principal. Exemples de types dans quelques implémentations différentes (NAG et Cray) sont donnés à l’appendice 6.
7. Fonction logique :
LOGIQUE (L, genre) convertit entre différents types de variables logiques. Variables logiques peuvent être implémentés de différentes façons, par exemple avec une représentation physique occupant un bit (non recommandé), un octet, un mot, ou peut-être même un mot double. Cette différence est importante si COMMON et équivalence avec les variables logiques ont été mal utilisés dans un programme en mode de programmation Fortran 66 traditionnel.
8. Fonctions d’enquête numérique :
Ces fonctions fonctionnent avec un certain modèle d’integer et arithmétique à virgule flottante, voir ISO (1991), section 13.7.1. Les fonctions renvoient des propriétés des nombres du même type que la variable X, qui peut être réel et certain entier de cas. Les fonctions qui retournent des propriétés de l’argument réel X sont disponibles dans la section 12 ci-dessous, les fonctions de manipulation en virgule flottante.

DIGITS(X)       The number of significant digits
EPSILON(X)      The  least  positive  number  that added
to 1 returns a number that is greater than 1
HUGE(X)         The largest positive number
MAXEXPONENT(X)  The largest exponent
MINEXPONENT     The smallest exponent
PRECISION(X)    The decimal precision
RADIX(X)        The base in the model
RANGE(X)        The decimal exponent
TINY(X)         The smallest positive number

9. Fonction d’enquête bit :

BIT_SIZE(I) retourne le nombre de bits selon le modèle de représentation du bit dans la norme ISO (1991), section 13.5.7. Normalement, nous obtenons le nombre de bits dans un mot (entier).
10. Fonctions de manipulation de bits :
Le modèle de représentation du bit dans la norme ISO (1991), section 13.5.7 est utilisé.

Screenshot 2015-04-28 22:26

11. Fonctions de transfert :

TRANSFERT (taille de la SOURCE, moule,) spécifie que la représentation physique du premier argument SOURCE doit être traitée comme si elle avait le type et les paramètres comme deuxième argument du moule, mais sans les convertir. Le but est de donner une possibilité de passer une quantité d’un certain type via une routine qui n’a pas exactement ce type de données.
12. Fonctions de manipulation virgule flottante :
Ces fonctions fonctionnent dans un certain modèle d’integer et floating-point arithmetic, voir la norme ISO(1991), section 13.7.1. Les fonctions retournent des nombres associés à la variable réelle X du type réel. Les fonctions qui retournent des propriétés pour les numéros du même type que la variable X sont en vertu de l’article 8 (fonctions numériques enquête).

Screenshot 2015-04-28 22:27

13. Les fonctions vectorielles et de la multiplication des matrices :

 

DOT_PRODUCT (VECTOR_A, VECTOR_B) est un produit scalaire de deux vecteurs, qui doivent avoir la même longueur (même nombre d’éléments).
Please note that if VECTOR_A is of type COMPLEX the result is SUM(CONJG(VECTOR_A)*VECTOR_B).
MATMUL (MATRIX_A, MATRIX_B) fait le produit de deux matrices, qui doit être compatible, c’est-à-dire avoir les dimensions comme (M, K) et (K, N). Utilisé dans le chapitre 11 du texte principal.
14. Fonctions du tableau :
TOUS (masque, dim) renvoie une valeur logique qui indique si toutes les relations en masque sont. VRAI., le long de la dimension voulue, si le deuxième argument est donné.
TOUT (masque, dim) renvoie une valeur logique qui indique si une relation dans le masque. VRAI., le long de la dimension voulue, si le deuxième argument est donné.
COUNT (masque, dim) retourne une valeur numérique qui indique le nombre de relations au masque qui sont. VRAI., le long de la dimension voulue, si le deuxième argument est donné.
MAXVAL (masque de dim, tableau,) retourne la plus grande valeur dans le tableau ARRAY, de ceux qui obéissent à la relation dans le troisième argument masque si celui-là est donné, avec seulement la dimension désirée si le deuxième argument DIM est donné.
MINVAL (masque de dim, tableau,) retourne la plus petite valeur dans le tableau ARRAY, de ceux qui obéissent à la relation dans le troisième argument masque si celui-là est donné, avec seulement la dimension désirée si le deuxième argument DIM est donné.
Les retours de produits (masque de dim, tableau,) le produit de tous les éléments du tableau ARRAY, de ceux qui obéissent à la relation dans le troisième argument masque si celui-là est donné, avec seulement la dimension désirée si le deuxième argument DIM est donné.
SOMME (masque de dim, tableau,) renvoie la somme de tous les éléments du tableau ARRAY, de ceux qui obéissent à la relation dans le troisième argument masque si celui-là est donné, avec seulement la dimension désirée si le deuxième argument DIM est donné. Un exemple est donné à l’annexe 3, article 10.
15. Fonctions de tableau enquête :
Voir aussi l’annexe 3, article 10.
ALLOCATED(Array) est une fonction logique qui indique si le tableau est alloué.
LBOUND (ARRAY, dim) est une fonction qui retourne la limite inférieure de la dimension du tableau. Si DIM (la dimension) n’est pas donné comme argument, vous obtenez un vecteur entier, si DIM est inclus, vous obtenez la valeur entière avec exactement cette limite dimension inférieure, pour lesquels vous avez demandé.
Shape(source) est une fonction qui retourne la forme d’un tableau SOURCE comme vecteur d’entiers.
Size(Array, Dim) est une fonction qui retourne le nombre d’éléments dans un tableau ARRAY, si DIM n’est pas donné, et le nombre d’éléments dans la dimension pertinente si DIM est inclus.
UBOUND (tableau, dim) est une fonction similaire à LBOUND qui retourne les limites de dimensions supérieures.
16. Tableau construire des fonctions :
FUSION (TSOURCE, FSOURCE, masque) est une fonction qui relie les deux tableaux. Il donne les éléments dans TSOURCE si est la condition dans le masque. LA VALEUR TRUE. et FSOURCE si est la condition dans le masque. LA VALEUR FALSE. Les deux champs TSOURCE et FSOURCE doivent être du même type et la même forme. Le résultat est également de ce type et de cette forme. MASQUE doit également avoir la même forme.
Je donne ici un exemple assez complet de l’utilisation de fusion qui aussi utilise REMODELER de la section suivante afin de construire les matrices de test appropriée.
Notez que les deux sous-routines WRITE_ARRAY et WRITE_L_ARRAY sont des routines de test d’écrire les matrices qui, dans le premier cas, sont d’un type réel, dans le second cas d’un type de logique.
IMPLICIT NONE
INTERFACE
      SUBROUTINE WRITE_ARRAY (A)
             REAL :: A(:,:)
      END SUBROUTINE WRITE_ARRAY
      SUBROUTINE WRITE_L_ARRAY (A)
             LOGICAL :: A(:,:)
      END SUBROUTINE WRITE_L_ARRAY
END INTERFACE

REAL, DIMENSION(2,3)      :: TSOURCE, FSOURCE, RESULT
LOGICAL, DIMENSION(2,3)   :: MASK
TSOURCE = RESHAPE( (/ 11, 21, 12, 22, 13, 23 /), &
                   (/ 2, 3 /) )
FSOURCE = RESHAPE( (/ -11, -21, -12, -22, -13, -23 /), &
                   (/ 2,3 /) )
MASK = RESHAPE( (/ .TRUE., .FALSE., .FALSE., .TRUE., &
                   .FALSE., .FALSE. /), (/ 2,3 /) )

RESULT = MERGE(TSOURCE, FSOURCE, MASK)
CALL WRITE_ARRAY(TSOURCE)
CALL WRITE_ARRAY(FSOURCE)
CALL WRITE_L_ARRAY(MASK)
CALL WRITE_ARRAY(RESULT)
END

SUBROUTINE WRITE_ARRAY (A)
REAL :: A(:,:)
DO I = LBOUND(A,1), UBOUND(A,1)
   WRITE(*,*) (A(I, J), J = LBOUND(A,2), UBOUND(A,2) )
END DO
RETURN
END SUBROUTINE WRITE_ARRAY

SUBROUTINE WRITE_L_ARRAY (A)
LOGICAL :: A(:,:)
DO I = LBOUND(A,1), UBOUND(A,1)
   WRITE(*,"(8L12)") (A(I, J), J= LBOUND(A,2), UBOUND(A,2))
END DO
RETURN
END SUBROUTINE WRITE_L_ARRAY

The following output is obtained

       11.0000000   12.0000000   13.0000000
       21.0000000   22.0000000   23.0000000

       -11.0000000 -12.0000000  -13.0000000
       -21.0000000 -22.0000000  -23.0000000

                 T           F            F
                 F           T            F

       11.0000000  -12.0000000  -13.0000000
      -21.0000000   22.0000000  -23.0000000
PACK (vecteur ARRAY, masque,) emballe un tableau à un vecteur avec le contrôle du masque. La forme de la matrice logique masque a être d’accord avec celui de ARRAY ou masque doit être une valeur scalaire. Si le vecteur est inclus, il doit être un tableau de rang 1 (c.-à-d. un vecteur) au moins autant d’éléments que ceux qui sont vraies dans le masque et ont le même type que le tableau. Si le masque est un scalaire avec la valeur. LA VALEUR TRUE. alors vecteur au contraire doit avoir le même nombre d’éléments dans le tableau.
Le résultat est un vecteur avec autant d’éléments que ceux dans le tableau qui obéissent à des conditions si le vecteur est non inclus (c’est-à-dire tous les éléments si le masque est un scalaire avec valeur. VRAI.). Dans l’autre cas, le nombre d’éléments du résultat sera que dans le vecteur. Les valeurs seront ceux approuvés, c’est-à-dire les valeurs qui remplissent la condition, et seront dans l’ordre de Fortran ordinaire. Si le vecteur est inclus et le nombre de ses éléments dépasse le nombre de valeurs approuvées, les valeurs manquantes requises par le résultat sont tirées les emplacements correspondants dans le vecteur.
L’exemple suivant est basé sur la modification de l’un pour la fusion, mais je donne maintenant seulement les résultats.

Screenshot 2015-04-28 22:28

PROPAGATION (SOURCE, DIM, NCOPIES) retourne un tableau du même type que l’argument SOURCE avec le grade augmente d’un chiffre. Les paramètres DIM et NCOPIES sont des entiers. Si NCOPIES est négatif la valeur zéro est utilisée à la place. Si SOURCE est une valeur scalaire, propagation deviendrait alors un vecteur avec des éléments NCOPIES qui ont tous la même valeur comme SOURCE. Le paramètre DIM indique quel indice devrait être étendu. Elle doit être comprise entre 1 et 1 + (grade de SOURCE), si la SOURCE est un scalaire, alors DIM doit être un. Le paramètre NCOPIES est le nombre d’éléments dans les nouvelles dimensions. Discussion supplémentaire est donnée dans la solution d’exercer (11.1).

Décompressez (VECTOR, masque, ARRAY) disperse un vecteur dans un tableau sous contrôle du masque. La forme du tableau logique masque a être d’accord avec celui de ARRAY. Le tableau vecteur doit avoir le grade 1 (c’est-à-dire un vecteur) au moins autant d’éléments que ceux qui sont fidèles sous le masque et abrite le même type que le tableau. Si ARRAY est vu comme un scalaire alors il est considéré soit un tableau avec la même forme que le masque et les mêmes éléments scalaires partout.
Le résultat sera un tableau avec la même forme que le masque et le même type que le vecteur. Les valeurs seront celles du vecteur qui sont accepté (c’est-à-dire ceux remplissant la condition dans le masque), repris dans l’ordre de Fortran ordinaire, alors que dans les positions restantes dans le tableau les anciennes valeurs sont conservés.
17. Tableau reshape fonction.
REMODELER (SOURCE, forme, coussin,) construit un tableau avec une forme spécifiée forme à partir des éléments dans un tableau donné SOURCE. Si le PAD n’est pas inclus, la taille de la SOURCE doit être au moins produit (forme). Si le tampon est inclus il doit avoir le même type comme SOURCE. Si l’ordre est incluse, elle doit être un tableau d’entiers avec la même forme que la forme et les valeurs doivent être une permutation de (1,2,3,…, N), N est le nombre d’éléments dans la forme, il doit être inférieur ou égal à 7.
Le résultat a bien sûr une forme forme et les éléments sont celles de SOURCE, éventuellement complété avec un tampon. Les différentes dimensions ont été permutées à la cession des éléments si l’ordonnance a été inclus, mais sans influence sur la forme du résultat.
Quelques exemples simples sont donnés dans le précédent et la section suivante et aussi à l’annexe 3, section 9. Un exemple plus complexe, qui illustre également les arguments facultatifs, suit.

Screenshot 2015-04-28 22:29Screenshot 2015-04-28 22:30

 

18. Fonctions de manipulation de tableau.
Les fonctions de Maj renvoyer la forme d’un tableau inchangé, mais déplacent les éléments. Ils sont assez difficiles à expliquer, donc je vous recommande d’étudier aussi la norme ISO (1991).
CSHIFT (dim tableau, Maj,) effectue un déplacement circulaire de positions de décalage vers la gauche si SHIFT est positive et à la droite si elle est négative. Si ARRAY est un vecteur de que la Maj se fait de façon naturelle, si c’est un tableau d’un rang plus élevé alors que le changement est dans toutes les sections le long de la dimension DIM. S’il manque des DIM, elle est réputée être 1, dans d’autres cas, qu’il doit être un nombre entier scalaire entre 1 et n (où n est égal à la position du tableau). L’argument SHIFT est un entier scalaire ou un tableau d’entiers de rang n-1 et la même forme que le tableau, sauf le long de la dimension DIM (ce qui est supprimé en raison de la position inférieure). Différentes sections peuvent donc être déplacées dans diverses directions et avec différents nombres de positions.
EOSHIFT (limites de tableau, Maj, dim) effectue le déplacement vers la gauche si la MAJ est positif et à la droite si elle est négative. Au lieu des éléments décalés les nouveaux éléments sont tirés de limite. Si ARRAY est un vecteur de que la Maj se fait de façon naturelle, si c’est un tableau d’un rang plus élevé, le déplacement sur toutes les sections est le long de la dimension DIM. Si DIM est manquant, il équivaut à 1, dans d’autres cas, qu’il doit avoir une valeur scalaire entier entre 1 et n (où n est égal à la position du tableau). L’argument SHIFT est un entier scalaire si tableau a le rang 1, dans l’autre cas, qu’il peut être un entier scalaire ou un tableau d’entiers de rang n-1 et avec la même forme que le tableau Tableau sauf le long de la dimension DIM (ce qui est supprimé en raison de la position inférieure).
Le correspondant s’applique jusqu’à la limite qui doit avoir le même type que le tableau. Si le paramètre de limite est manquant, vous avez le choix des valeurs zéro. LA VALEUR FALSE. ou d’un cache utilisé, selon le type de données. Différentes sections peuvent ainsi être déplacées dans diverses directions et avec différents nombres de positions. S’ensuit un exemple simple de ces deux fonctions pour le cas du vecteur, le programme et la sortie.

Screenshot 2015-04-28 22:31

S’ensuit un exemple simple des deux fonctions dans le cas de la matrice. J’ai utilisé ici de REMODELER afin de créer une matrice appropriée pour commencer à travailler avec. Le programme n’est pas reproduit ici, seules les principales instructions.B = (/ 11.0, 12.0, 13.0, 14.0, 15.0, 16.0 /)

Screenshot 2015-04-28 22:31

TRANSPOSE (matrice) transpose une matrice, qui est un tableau de rang 2. Il remplace les lignes et les colonnes de la matrice.
19. Fonctions de tableau de localisation :

 

MAXLOC (ARRAY, masque) renvoie la position de l’élément plus grand dans le tableau tableau, si le masque n’est inclus que pour ceux qui remplissent les conditions requises dans le masque. Le résultat est un vecteur entier ! Il est utilisé dans la solution de l’exercice (11.1).
MINLOC (ARRAY, masque) renvoie la position du plus petit élément dans le tableau tableau, si le masque n’est inclus que pour ceux qui remplissent les conditions requises dans le masque. Le résultat est un vecteur entier !
20. Fonctions d’enquête pointeur :
ASSOCIATED (pointeur, cible) est une fonction logique qui indique si le pointeur de pointeur est associé à une cible, et si une cible spécifique est incluse il indique il s’est associé à exactement cet objectif. Si le pointeur et la cible sont les pointeurs, le résultat est. LA VALEUR TRUE. seulement si les deux sont associés à la même cible. Je renvoie le lecteur au chapitre 12 du texte principal, pointeurs.
21. Intrinsèques sous-routines :
  • Routines de temps :
DATE_AND_TIME (date, heure, zone, valeurs)
Un sous-programme qui renvoie la date, l’heure et le fuseau horaire. Au moins un argument doit être donnée.
La DATE doit être une variable de chaîne de caractère scalaire au moins 8 caractères et il reçoit la valeur CCYYMMDD siècle, année, mois et jour. Tous sont données numériquement, avec des blancs si le système ne comporte pas la date.
TEMPS doit aussi être une variable de chaîne de caractère scalaire au moins 10 caractères et il est attribué une valeur hhmmss.sss pour le temps en heures, minutes, secondes et millisecondes. Tous sont données numériquement avec des blancs si le système ne comporte pas une horloge.
ZONE doit être une variable de chaîne de caractère scalaire au moins 5 caractères et il est affecté de la valeur + hhmm pour signe, de temps en heures et minutes pour la différence de l’heure locale sur l’heure UTC (qui était auparavant appelé Greenwich Mean Time). Tous sont données numériquement, avec des blancs si le système ne comporte pas une horloge. En Suède nous obtenons donc + 0100 en hiver et en été + 0200, à Novossibirsk, nous obtenons + 0700.
Les valeurs des variables est au contraire un vecteur entier au moins 8 éléments, il donne la meilleure façon d’utiliser les résultats de DATE_AND_TIME à des calculs dans un programme. Si le système ne comporte pas la date ou l’heure vous obtenez la valeur-HUGE(0), qui est le plus petit nombre entier dans le modèle, comme sortie. Le vecteur comprendra les éléments suivants : année, mois, jour, décalage horaire en minutes, heures, minutes, secondes et millisecondes.
SYSTEM_CLOCK (COMTE, COUNT_RATE, COUNT_MAX)
Sous-routine qui retourne l’heure système. Au moins un argument doit être donnée. NOMBRE est un entier scalaire qui est augmenté d’une unité pour chaque cycle jusqu’à COUNT_MAX, il commence une fois de plus. S’il n’y a aucune horloge système-HUGE(0) est renvoyée.
COUNT_RATE est un entier scalaire qui donne le nombre de cycles par seconde. S’il n’y a aucune horloge de système la valeur zéro est retournée.
COUNT_MAX est un entier scalaire qui fournit la valeur maximale pouvant atteindre les COUNT. S’il n’y a aucune horloge système, zéro est retournée à la place.
  • Routine de copie bit :
MVBITS (DE, FROMPOS, LEN, À, TOPOS)
Une sous-routine qui copie la séquence de bits en position FROMPOS et a la longueur LEN pour cible à partir de position TOPOS. Les bits restants ne sont pas modifiés. Toutes les quantités doivent être entiers et tous sauf TO doivent avoir INTENT(IN) tandis que TO est censé avoir INTENT(INOUT) et être du même type aimable à compter du. La même variable peut être à la fois FROM et TO. Certaines restrictions naturelles s’appliquent aux valeurs de LEN, FROMPOS et TOPOS et vous avez aussi de considérer la valeur de BIT_SIZE.
  • Routines de numéro aléatoires :
Une séquence de nombres aléatoires de pseudo peut être générée d’une valeur de départ qui est stockée comme vecteur d’entiers. Les sous-routines offrent une interface portable vers une séquence aléatoire dépendante de numéro de mise en œuvre.
RANDOM_NUMBER(HARVEST)
Cette routine retourne dans la récolte de variable à virgule flottante numéro un (ou plusieurs si la récolte est un tableau) des nombres aléatoires compris entre zéro et 1.
RANDOM_SEED(size, put, get)
Cette sous-routine réinitialise ou fournit des informations sur, le générateur de nombres aléatoires. Aucun argument ne doit être fournis. La variable de sortie taille doit être un entier scalaire et donne le nombre d’entiers utilisations (N) le processeur pour la valeur de départ. La variable d’entrée PUT est un vecteur entier qui met les numéros de départ fournies par l’utilisateur dans le générateur de nombres aléatoires. La variable de sortie GET (également un vecteur entier) lit la valeur actuelle de départ. Exemple :

Screenshot 2015-04-28 22:33

Un exemple simple sur l’utilisation de ces fonctions est maintenant disponible.


Dernière modification : 10 août 2009

Comments are closed.