Sous-programmes non élémentaires

new art 16

Les paramètres-résultats, de genre intent(out), doivent obligatoirement être des "variables" du type précisé pour l'argument correspondant.




Accès à l'horloge


call date_and_time ([date] [,time] [,zone] [,values])

date et l'heure catégorie: P arguments: [c][,c][,c][,i] paramètres - résultats: date, time, zone, values

Renvoie des informations sur l'heure, la date, etc. Lorsque elles ne sont pas disponibles, on obtient par défaut un espace pour les arguments de type caractère et la valeur -huge(0) (le plus petit entier négatif) pour les arguments de type numérique.
Les arguments date, time, zone sont des chaînes de caractères, et values est un vecteur du type entier.
Tous les arguments sont de genre intent(out).

date [character (len=8) ]: la date sous la forme aaaammjj (4 caractères pour l'année, 2 pour le numéro de mois, 2 pour le numéro de jour),

time [character (len=10) ]: l'heure sous la forme hhmmss.ddd (2 caractères pour l'heure, 2 pour les minutes, 2 pour les secondes, un point et 3 caractères pour les millièmes de secondes),

zone [character (len=5) ]: écart entre l'heure locale et le temps universel sous la forme shhmm (1 caractère pour le signe + ou -, 2 caractères pour les heures et 2 caractères pour les minutes),

values [vecteur de 8 entiers]: il reçoit sous forme numérique l'ensemble des informations précédentes soit dans l'ordre: 1) année, 2) numéro de mois, 3) numéro de jour, 4) l'écart en minutes avec le temps universel, 5) l'heure (entre 0 et 23), 6) minutes (entre 0 et 59), 7) secondes (entre 0 et 59), 8) millisecondes (entre 0 et 999).


call system_clock ([count] [,count_rate] [,count_max])

l'horloge interne catégorie: P arguments: [i][,i][,i] paramètres - résultats: count, count_rate, count_max

Renvoie les trois informations de type integer, concernant l'horloge interne:

count: valeur de la pulsation courante de l'horloge interne qui est une valeur cyclique variant de 0 à count_max
(ou -huge(0) si elle n'est pas accessible),

count_rate: fréquence de l'horloge interne (ou 0 si elle n'est pas accessible),

count_max: valeur maximale de l'horloge interne (qui, au-delà, repart à 0), ou 0 si elle n'est pas accessible.

Tous les arguments sont de genre intent(out). Les valeurs count_rate et count_max sont des constantes du système.


Exemples:

call date_and_time (date, time, zone, values)

peut, par exemple, renvoyer les résultats:
date: 19971128
time: 165310.000
zone: +0100
values: 1997 11 28 60 16 53 10 0

call system_clock (count, count_rate, count_max)

peut, par exemple, renvoyer les résultats:
count: 57190
count_rate: 1
count_max: 86399



Nombres aléatoires


call random_number (harvest)

nombres aléatoires catégorie: P arguments: r paramètres - résultats: harvest

Renvoie dans harvest un (ou une suite de) nombre(s) pseudo-aléatoire(s) appartenant à l'intervalle [0, 1[ .
L'argument harvest peut être une variable scalaire réelle ou un tableau de réels - dans ce cas, on obtient une série de nombres aléatoires.


call random_seed ([size] [,put] [,get])

parametrage du générateur des nombres aléatoires catégorie: P arguments: [i][,i][,i] paramètres d'entrée: size, get
paramètres - résultats: put

Permet de reinitialiser ou d'interroger le générateur de nombre aléatoires utilisé par la routine random_number.
Les trois paramètres sont du type entier, size et get sont de genre intent(out) et put est de genre intent(in).
Les arguments permettent de changer ou de consulter les paramètres d'initialisation. Un seul des trois arguments est autorisé.

size: taille du tableau d'entiers utilisé comme "graines" pour la génération des nombres aléatoires,

put: vecteur d'entiers (de taille au moins égale à la valeur fournie dans size) qui correspond aux valeurs qui seront utilisées comme graines pour la génération des nombres aléatoires,

get: vecteur d'entiers (de taille égale à la valeur fournie dans size) qui correspond aux valeurs internes utilisées pour la génération des nombres aléatoires.

Si aucun argument n'est précisé dans call random_seed, le générateur de nombres aléatoires est initialisé d'une manière dépendant des options du système.


Exemples:

real :: harv1, harv2(5)
call random_number(harvest=harv1)
harv1 vaut par exemple 0.4727130

call random_number(harvest=harv2)
harv2 vaut par exemple (/ 0.8866535, 0.9864795, 0.7616581, 0.1881613, 0.4274641 /)

real :: s, g(1), p(1)
random_seed (size=s) ! renvoie par exemple: s = 1
random_seed (get=g) ! renvoie par exemple: g = 136843850
p= 123456
random_seed (put=p) ! initialise le générateur des nombres aléatoires
! cette initialisation donnera toujours la même valeur de harvest, par exemple
! call random_number(harvest) pourra renvoyer toujours harvest = 0.9662123

Retour à la table des matières