Vous êtes sur la page 1sur 34

Laboratoire de Physique des

Matériaux et des Composants à


Semi-conducteurs
Faculté des Sciences (LPMCS)
Département de Physique

Langages de calcul scientifique - Programmation Fortran


Léçon N° 2 Les tableaux

Dr Komi SODOGA
antoinekomisodoga@gmail.com, UL
15 février 2024

1 / 34
Plan

1 Définitions
Ordre des éléments dans un tableau
2 II-Manipulations de tableaux (constructeur, section,...)
II.1- Constructeur de tableaux
II.2- Initialisation, affectation de tableaux
II.3- Sections de tableaux
Instruction et bloc where
3 III- Tableau dynamique
4 IV. Fonctions intrinsèques particulières aux tableaux
IV.1- Fonctions d’interrogation
IV.2 Fonctions de réductions
IV.3 Fonctions de transformation
IV.4 Fonctions ALL, ANY, COUNT et FORALL

2 / 34
Définitions

I- Définitions

Notions générales
Un tableau est un ensemble d’éléments du même type.
Les tableaux englobent les notions de
o vecteur (tableau 1-D)
o matrice (tableau 2-D)
o grille (tableau 3-D et plus)

On peut les générer de manière


o statique (réservation de la mémoire au moment de la déclaration)
o dynamique (réservation de la mémoire pendant l’exécution)

Les tableaux sont traités comme


o des listes de valeurs par certaines fonctions
o des matrices au sens mathématique par d’autres

3 / 34
Définitions

Déclaration statique d’un tableau


Pour déclarer un tableau, il suffit de préciser l’attribut DIMENSION lors de sa déclaration :
Vecteur
real :: vecteur(3)
real :: vecteur(1:3)
real, dimension(1:3) :: vecteur
real, dimension(-1:1) :: vecteurb
integer, parameter :: n=3
real, dimension(1:n) :: vecteur

Matrices
real (8), dimension (3 ,4) :: mat
real, dimension ( -1:3 ,2 ,0:5) :: a

Tableau à 3, 4 dimensions
integer, parameter :: n=3
real, dimension(1:n,-n:n,0:2*n) :: tab1
real, dimension(1:n,1:n,-n:n,0:2*n) :: tab2

Un tableau peut avoir jusqu’à 7 dimensions au maximum.

4 / 34
Définitions

Remarques
Les éléments des tableaux sont
o utilisés comme n’importe qu’elle autre variable de son type (expression ou
affectation)
n = t(3)*5 + 3
t(1) = 2*k + 5
o de n’importe quel type ( INTEGER, LOGICAL, REAL, COMPLEX,
CHARACTER)
Les indices peuvent prendre la forme de n’importe quelle expression arithmétique de type
INTEGER.

Terminologie (1/2)
Le rang (rank) d’un tableau est son nombre de dimensions.
Le nombre d’éléments dans une dimension s’appelle l’étendue (extent) du tableau dans cette
dimension.
Le profil (shape) d’un tableau est un vecteur dont chaque élément est l’étendue du tableau
dans la dimension correspondante.
La taille (size) d’un tableau est le produit des éléments du vecteur correspondant à son profil.

5 / 34
Définitions

Terminologie (2/2)
Deux tableaux seront dits conformants s’ils ont même profil.
Deux tableaux peuvent avoir la même taille mais avoir des profils différents ; si c’est le cas,
ils ne sont pas conformants !
Exemple 1
real, dimension (-5:4,0:2) :: x
real, dimension (0:9,-1:1) :: y
real, dimension (2,3,0:5) :: z
o Les tableaux x et y sont de rang 2, tandis que le tableau z est de rang 3 ;
o L’étendue des tableaux x et y est 10 dans la 1re dimension et 3 dans la 2e. Ils ont même
profil : (/ 10, 3 /), ils sont donc conformants. Leur taille est égale à 30 ;
o Le profil du tableau z est le vecteur (/ 2, 3, 6 /), sa taille est égale à 36.
Exemple 2
real,dimension(-1:1,10,0:4) :: t
real,dimension(-1:5,0:9) :: tab1
real,dimension(7,2:11) :: tab2
o Le tableau t a pour caractéristiques :
rang 3 ; étendue 3, 10, 5 ; taille 150 ; profil (/3,10,5/)
o Tab1 et Tab2 sont des tableaux de même profil (/7,10/)

6 / 34
Définitions Ordre des éléments dans un tableau

I-Définitions

Ordre des éléments dans un tableau (1/3)


Le caractère multidimensionnel des tableaux n’est pas respecté dans la mémoire des !
Les tableaux sont en général stockés dans une mémoire à un seul indice d’adressage.
En fortran, l’ordre ≪ naturel≫ utilisé pour stocker les éléments des tableaux est celui où le
premier indice varie le premier en mémoire, ensuite le second indice etc...

7 / 34
Définitions Ordre des éléments dans un tableau

Ordre des éléments dans un tableau (2/3)


Pour des tableaux de rang 2, cela signifie que le rangement s’effectue colonne par
colonne

Une lecture globale de matrice dans un fichier par un seul ordre READ (sans boucle
implicite) stockera les éléments sur une même ligne en incrémentant l’indice le plus
à gauche du tableau de rang 2, c’est-à-dire... celui des lignes
Exemple
INTEGER, DIMENSION(2,2) :: mat
...
OPEN(10, file=’mat2x2.dat’, STATUS=’old’)
READ(10, *) mat(:,:)
CLOSE(10)
WRITE(*, *) mat(:,:)
Exercice 1 : Écrire un programme permettant de réaliser le test ci-dessus !

8 / 34
Définitions Ordre des éléments dans un tableau

Ordre des éléments dans un tableau (3/3)


Pour lire la matrice en affectant chaque ligne du fichier à une ligne (au sens mathématique)
de la matrice, on doit expliciter la boucle sur les lignes, alors que celle sur les colonnes peut
être implicite ;
On fera de même pour afficher le tableau selon la disposition mathématique de la matrice
Par exemple, pour lire une matrice 2x3 d’entiers et l’afficher :
INTEGER, PARAMETER :: nl=2, nc=3 ! constantes nommées
INTEGER, DIMENSION(nl, nc) :: matrice ! matrice 2 lignes x 3 colonnes
INTEGER :: ligne, colonne
...
OPEN(10, file=’mat2x3.dat’, STATUS=’old’) ! ouverture du fichier en lecture
DO ligne = 1, nl
READ(10, *) matrice(ligne,:) ! lecture ligne par ligne
END DO
CLOSE(10)
DO ligne = 1, nl
WRITE(*, *) matrice(ligne,:) ! affichage ligne par ligne
END DO
Exercice 2 : Écrire un programme permettant de réaliser le test ci-dessus !

9 / 34
II-Manipulations de tableaux (constructeur, section,...) II.1- Constructeur de tableaux

II-Manipulations de tableaux

II.1- Constructeur de tableaux (array constructor)


On peut définir le contenu d’un tableau à une dimension en utilisant un constructeur de
tableau qui est un vecteur encadré par les délimiteurs (/ et /), ou [ et ] (en fortran 2003)
real, dimension(1:5) :: vecteur = (/ 2., 4., 6., 8., 10. /)
On peut utiliser des expressions dans un constructeur de tableau :
real, dimension(1:5) :: vecteur
real :: n,p
vecteur = (/ 3., n, n+p, 8.*p, p-n /)
On peut utiliser des listes de boucles implicites :
real, dimension(1:5) :: vecteur
integer :: i
vecteur = (/ (2.*i, i = 1,5) /) !(2., 4., 6., 8., 10.)
vecteur = (/ 2., (2.*i, i = 2,4), 10. /) !(2., 4., 6., 8., 10.)
vecteur = (/ (i, 2.*i, i= 1,2), 10. /) !(1. ,2. ,2. ,4. ,10.)
Un autre exemple
INTEGER, DIMENSION(3) :: vecteur = (/ 3, 5, 1 /)
INTEGER, DIMENSION(3) :: vecteur = [ 3, 5, 1 ] ! en fortran 2003
INTEGER :: i
INTEGER, DIMENSION(7) :: v = (/ (2*i, i=1, 4), vecteur /) !boucle implicite
10 / 34
II-Manipulations de tableaux (constructeur, section,...) II.1- Constructeur de tableaux

Constructeur de tableaux

La fonction RESHAPE (1/2)


Permet de fabriquer un tableau de profil donné, à partir d’un tableau à une dimension
o le premier argument contient la liste des valeurs à utiliser.
o le second argument donne la forme de la matric
 
integer, dimension(3,2) :: t
1. 4.
... =⇒ t =  2. 5. 
t = reshape((/ 1., 2., 3, 4., 5., 6. /), (/3,2/)) 3. 6.

Modification de l’ordre de remplissage


t = reshape((/ 1., 2., 3, 4., 5., 6. /), (/3,2/), order=(/2,1/))
 
Remplissage où le 2nd argument varie en premier et le 1er 1. 2.
argument varie en second =⇒ t =  3. 4. 
5. 6.

11 / 34
II-Manipulations de tableaux (constructeur, section,...) II.1- Constructeur de tableaux

La fonction RESHAPE (2/2)

Remplissage par défaut (cas où le premier argu-


ment ne spécifie pas tous les éléments de la ma-
trice) :
integer, dimension(3) :: t1 = (/ (i, i = 1,3) /)
integer, dimension(3,2) :: t2
. . . 
1. 2.

t2 = reshape( t1, (/3,2/), order=(/2,1/), =⇒ t2 =  3. 0 
pad=(/0./)) 0. 0.
ou encore  
1. 2.
t2 = reshape( t1, (/3,2/),order=(/2,1/), &
=⇒ t2 =  3. 0 
pad=(/0., 1./))
1. 0.
Exercice 3 : Écrire un bout de programme permettant de réaliser les tests ci-dessus sur la
function Reshape ! !

12 / 34
II-Manipulations de tableaux (constructeur, section,...) II.2- Initialisation, affectation de tableaux

II. Manipulation de tableaux

II.2- Initialisation, affectation de tableaux


Affectation d’un seul élément
real, dimension(3,2) :: mat1
. . .
mat1(1,2) = 1.
Do j = 1, 2
Do i = 1, 3
mat1(i,j) = i + j
End Do
End Do

Affectation collective : Fortran 90 permet de manipuler globalement l’ensemble des


éléments d’un tableau. On pourra, de ce fait, utiliser le nom d’un tableau dans des
expressions.
En fait, plusieurs opérateurs ont été sur-définis afin d’accepter des objets de type
tableau comme opérande.
Il sera nécessaire, toutefois, que les tableaux intervenant dans une expression soient
conformants. 13 / 34
II-Manipulations de tableaux (constructeur, section,...) II.2- Initialisation, affectation de tableaux

Initialisation, affectation de tableaux


Exemple
real, dimension(6 ,7) :: a,b
real, dimension(2:7 ,5:11) :: c
integer, dimension(4 ,3) :: m

m = 1 ! Tous les éléments valorisés à 1.


! Un scalaire est conformant à tout tableau .
b = 1.5 ! idem
c = b
a = b + c + 4

Autre exemple
real, dimension(6,7) :: a,b
real, dimension(2:7,5:11) :: c
logical, dimension(-2:3,0:6) :: l

b(:,:) = 1.5
c(:,:) = b(:,:)
a(:,:) = b(:,:) + c(:,:) + 4.
l(:,:) = c(:,:) == b(:,:)
14 / 34
II-Manipulations de tableaux (constructeur, section,...) II.2- Initialisation, affectation de tableaux

Initialisation, affectation de tableaux


Il est permis d’initialiser un tableau au moment de sa déclaration ou lors d’une ins-
truction d’affectation au moyen de constructeur de tableaux.
Ceci n’est toutefois possible que pour les tableaux de rang 1. Pour les tableaux de
rang supérieur à 1 on utilisera la fonction reshape que l’on détaillera plus loin.
character(len=1), dimension(5) :: a = &
(/ ’a’, ’b’, ’c’, ’d’, ’e’ /)
integer, dimension(4) :: t1, t2, t3
integer :: i
t1 = (/ 6, 5, 10, 1 /)
t2 = (/ (i*i, i=1,4) /)
t3 = (/ t2(1), t1(3), 1, 9 /)

Rappel : dans les “boucles implicites”, il faut autant de “blocs parenthésés” (séparés
par des virgules) qu’il y a d’indices : (((i+j+k,i=1,3),j=1,4),k=8,24,2)
À noter que chaque indice est défini par un triplet dont le troisième élément (option-
nel) représente le pas.

15 / 34
II-Manipulations de tableaux (constructeur, section,...) II.3- Sections de tableaux

II. Manipulations de tableaux

II.3- Sections de tableaux (1/4)


Il est possible de faire référence à une partie d’un tableau appelée section de tableau
ou sous-tableau.
Cette partie de tableau est également un tableau.
De plus le tableau, dans son intégralité, est considéré comme le tableau parent de la
partie définie.
Le rang d’une section de tableau est inférieur ou égal à celui du tableau parent.
On désigne par section régulière un ensemble d’éléments dont les indices forment une
progression arithmétique.
Pour définir une telle section on utilise la notation par triplet de la forme
val_init:val_fin:pas équivalent à une pseudo-boucle
integer, dimension(10) :: a = (/ (i, i=1,10) /)
integer, dimension(6) :: b
integer, dimension(3) :: c
c(:) = a(3:10:3) ! <== "Gather"
b(1:6:2) = c(:) ! <== "Scatter"
16 / 34
II-Manipulations de tableaux (constructeur, section,...) II.3- Sections de tableaux

II.3- Sections de tableaux (2/4)

17 / 34
II-Manipulations de tableaux (constructeur, section,...) II.3- Sections de tableaux

II.3- Sections de tableaux (3/4)


Exemple
integer, dimension(10) :: a,b,c
integer, dimension(20) :: vec
integer :: i
a(1:9:2) = (/ (i,i=1,9,2) /)
a(2:10:2) = (/ (i,i=-1,-9,-2) /)
b(:) = (/ (i+1,i=1,7), a(1:3) /)
c(1:5) = b(6:10)
c(6:10) = a(1:5)
vec(4:13) = a**2 + b**2 + c**2
NB : la valeur d’une expression tableau est entièrement évaluée avant d’être affectée.
Pour inverser un tableau on pourra écrire :
real, dimension(20) :: tab

tab(:) = tab(20:1:-1)

18 / 34
II-Manipulations de tableaux (constructeur, section,...) II.3- Sections de tableaux

II. Manipulations de tableaux

II.3- Sections de tableaux - Vecteurs d’indices (4/4)


Adressage des éléments d’un tableau en utilisant comme indice un vecteur d’entiers
Exemple
integer, dimension(1:3) :: ind = (/ 1, 4, 7 /)
real, dimension(10,10) :: t
. . .
t(ind, 5) = . . .
Ce qui donne t(1, 5); t(4, 5); t(7, 5)
t(1, 1) t(1, 4) t(1, 7)
Exemple suite : t(ind,ind) donne t(4, 1) t(4, 4) t(4, 7)
t(7, 1) t(7, 4) t(7, 7)
Syntaxe générale < tableau(specif1 , specif2 , . . . , specifn ) >
specifi est une des trois possibilités suivantes :
o indice (expression entière)
o indication de section régulière de la forme [<deb>] : [<fin>] [: <pas>]
o vecteur d’indices (tableau d’entiers à une dimension)

19 / 34
II-Manipulations de tableaux (constructeur, section,...) Instruction et bloc where

II.4- Instruction et bloc where (1/3)


Lorsque les opérations à effectuer sur un tableau dépendent d’une condition portant sur ce
tableau, on peut utiliser l’instruction WHERE, ou la structure WHERE ...END WHERE,
Forme générale :
WHERE (mask)
bloc1
ELSEWHERE
bloc2
END WHERE
Où mask est une expression logique retournant un tableau de logiques.
bloc1 et bloc2 sont constitués uniquement d’instructions d’affectation portant sur des ta-
bleaux. Le membre de droite de ces affectations doit être un tableau conformant avec le
masque
Exemple 1
real, dimension(10) :: a
. . .
WHERE (a > 0.)
a = log(a)
ELSEWHERE
a = 1.
END WHERE

20 / 34
II-Manipulations de tableaux (constructeur, section,...) Instruction et bloc where

II.4- Instruction et bloc where (2/3)


 
100. 10
Exemple 2 : Si mat = , alors
0.1 0.
where(mat.gt.0.) mat = log10(mat)
 
2. 1.
donne mat = et
−1. 0.
where(mat.gt.0.)
mat = log10(mat)
elsewhere
mat = -100
end where
 
2. 1.
donne mat =
−1 −100.
Exemple 3
REAL, DIMENSION(10) :: a, b, c
WHERE ( a > 0. ) b = SQRT(a) ! simple instruction WHERE
WHERE ( a > 0. ) ! bloc WHERE
c = log(a) ! les éléments > 0. du tableau a
ELSEWHERE
c = -1.e20 ! les éléments < 0. ou nul de a

END WHERE
21 / 34
II-Manipulations de tableaux (constructeur, section,...) Instruction et bloc where

II.4- Instruction et bloc where (3/3)


Considérons l’exemple suivant : WHERE(a>0.) b = a/sum(sqrt(a))
La règle veut que les fonctions élémentaires (ici sqrt) apparaissant en argument
d’une fonction non élémentaire (ici sum) ne soient pas soumises au masque.
L’expression sum(sqrt(a)) sera donc calculée sur tous les éléments de a.
Cela provoquera bien sûr une erreur si l’une au moins des valeurs de a est négative.
Lors de l’exécution d’une instruction ou d’un bloc WHERE le masque est évalué avant
que les instructions d’affectation ne soient exécutées. Donc si celles-ci modifient la
valeur du masque, cela n’aura aucune incidence sur le déroulement de l’instruction
ou du bloc WHERE.
Avec FORTRA 95, il est possible d’imbriquer des blocs WHERE qui peuvent être
étiquetés de la même façon que le bloc SELECT ou la boucle DO par exemple.
De plus, le bloc WHERE peut contenir plusieurs clauses ELSEWHERE avec masque logique
(sauf le dernier).

22 / 34
III- Tableau dynamique

III- Tableau dynamique

Allocation dynamique d’un tableau (1/2)


Réservation/Libération d’une quantité d’espace mémoire au moment où c’est
nécessaire
integer :: n
real,dimension(:),allocatable :: vec
real,dimension(:,:),allocatable :: mat
. . .
n = 3
allocate(vec(1:n),mat(1:n,1:n)) !Allouer les tableaux
if (allocated(vec)) print *, ’vec alloué’ !Tester allocation
if (allocated(mat)) print *, ’mat alloué’
deallocate(vec,mat) ! Libérer la mémoire
Gestion des erreurs
allocate(vec(1:n),stat=ierr) !ierr déclaré comme INTEGER
if (ierr.ne.0) print *, ’Erreur’
Affichage d’erreur si tableau déjà alloué ou mémoire insuffisante
23 / 34
III- Tableau dynamique

Allocation dynamique d’un tableau (2/2)

24 / 34
IV. Fonctions intrinsèques particulières aux tableaux IV.1- Fonctions d’interrogation

IV. Fonctions intrinsèques particulières aux tableaux

Fonctions spécifiques aux tableaux


La majorité des procédures intrinsèques sont élémentaires et peuvent donc être appelées avec
des arguments tableaux : elles s’appliquent alors à chacun des éléments scalaires constituant
les tableaux.
Mais il existe des fonctions intrinsèques spécifiquement consacrées à la manipulation des
tableaux

Fonctions d’interrogation
Les fonctions d’interrogation renseignent sur un tableau
SIZE(array [, dim]) donne l’étendue d’un tableau selon la dimension dim si cet argument
optionnel est fourni, et le nombre total d’éléments sinon ;
SHAPE donne le vecteur profil d’un tableau (son étendue est le rang du tableau) ;
LBOUND et UBOUND fournissent un vecteur constitué des bornes respectivement inférieures
et supérieures des indices selon chacune des dimensions du tableau. Si une dimension est
précisée comme argument optionnel, elles fournissent un scalaire indiquant les bornes des
indices selon cette dimension.
MINLOC et MAXLOC fournissent le vecteur des indices du premier élément respectivement mi-
nimum ou maximum du tableau, mais en indexant le tableau à partir d’une borne inférieure
égale à 1 selon chaque dimension, quelles que soient les bornes déclarées.
25 / 34
IV. Fonctions intrinsèques particulières aux tableaux IV.1- Fonctions d’interrogation

IV. Fonctions intrinsèques particulières aux tableaux

Fonctions d’interrogation
Exercice 1 :
On considère le vecteur Vec = (/ 2,-1,10,3,-1 /) et le tableau tab de
dimension (-2 :27, 0 :49),
Écrire un programme qui retourne :
1 les bornes supérieures de tab
2 la borne supérieure de tab selon la 2e dimension
3 les bornes inférieures de tab
4 la borne inférieure de tab selon la 1ere dimension
5 Le profil et la taille de tab
6 La taille de tab selon la dimension 1
7 les positions du plus grand et du plus petit élements de Vec

26 / 34
IV. Fonctions intrinsèques particulières aux tableaux IV.1- Fonctions d’interrogation

IV. Fonctions intrinsèques particulières aux tableaux

Fonctions d’interrogation
Exercice 2 :
On considère la matrice :
 
0 −5 8 −3
A= 3 4 −1 2 
1 5 6 −4

Écrire un programme qui retourne :


1 La position du plus grand des éléments de A inférieur à 5.
2 La position du plus petit des éléments de A supérieur à 5.
3 La position du plus grand des éléments de A selon la dimension 2
4 La position du plus grand des éléments de A selon la dimension 1
5 La position du plus grand des éléments de A inférieur à 5 selon la dimension 2
6 La position du plus grand des éléments de A inférieur à 5 selon la dimension 1

27 / 34
IV. Fonctions intrinsèques particulières aux tableaux IV.2 Fonctions de réductions

IV. Fonctions intrinsèques particulières aux tableaux

Fonctions de réductions
Les fonctions de réduction renvoient un tableau de rang inférieur (éventuellement un scalaire)
à celui passé en argument.

Si on spécifie une dimension, seule cette dimension sera affectée par l’opération de réduction
et le tableau rendu sera de rang r - 1, où r est le rang du tableau initial.

1. SUM et PRODUCT calculent respectivement la somme et le produit des éléments


du tableau.
2. MAXVAL et MINVAL fournissent respectivement le maximum et le minimum d’un
tableau.
3. DOT_PRODUCT donne le produit scalaire de deux vecteurs :
- si u et v sont des vecteurs réels, DOT_PRODUCT(u, v) = SUM(u*v).
- si u et v sont complexes, DOT_PRODUCT(u, v) = SUM(CONJG(u)*v).
4. NORM2 calcule la norme euclidienne d’un tableau de réels de rang quelconque,
soit NORM2(t) = SQRT(SUM(t)**2))

28 / 34
IV. Fonctions intrinsèques particulières aux tableaux IV.2 Fonctions de réductions

Fonctions de réductions
5. MATMUL effectue le produit matriciel de deux tableaux. Elle suppose que les profils de ses
arguments permettent l’opération :
- produit d’une matrice de n lignes et p colonnes par une matrice de p lignes et q colonnes
donnant une matrice de n lignes et q colonnes
- produit d’une matrice de n lignes et p colonnes par un vecteur de taille p donnant un
vecteur de taille n
- produit d’un vecteur de taille n par une matrice de n lignes et p colonnes donnant un
vecteur de taille p.
Par exemple, les calculs de moments d’une série statistique stockée dans un tableau mono-
dimensionnel peuvent s’exprimer de façon très concise à l’aide de ces fonctions.
INTEGER, PARAMETER :: n = 1000
REAL, DIMENSION(n) :: x, y
REAL :: moyenne_x, moyenne_y, variance_x, covariance

moyenne_x = SUM( x(:) ) / REAL( SIZE( x(:) ) )


moyenne_y = SUM( y(:) ) / REAL( SIZE( y(:) ) )

variance_x = SUM( (x(:) - moyenne_x)** 2 ) / REAL(SIZE(x(:)) - 1)


covariance = SUM( (x(:) - moyenne_x) * (y(:)-moyenne_y)) / &
REAL(SIZE(x(:)) - 1)

29 / 34
IV. Fonctions intrinsèques particulières aux tableaux IV.2 Fonctions de réductions

Fonctions de réductions
Exercice 1 :
Écrire un programme permettant de faire les tests de la diapo précédente ! ! On
remplira les vecteurs
et
avec des variables aléatoires Exercice 2 :
On considère la matrice :
 
0 −5 8 −3
A =  3 4 −1 2 
1 5 6 −4

Ecrire un programme permettant d’imprimer les grandeurs suivantes


1 PRODUCT(A,dim=1)
2 PRODUCT(A,dim=2)
3 SUM(A,dim=1)
4 SUM(A,dim=2)
5 PRODUCT(A,dim=1,mask = A ¿ 4)
6 PRODUCT(A,dim=2,mask = A ¿ 3)
30 / 34
IV. Fonctions intrinsèques particulières aux tableaux IV.2 Fonctions de réductions

Fonctions de réductions
Exercice 3 : Soient les vecteurs
    

2 6 2
v 1 =  −3  , v 2 =  3  , et v =  −4 
−1 3 1

et les matrices
   
3 −6 −1 1 −2 −2
A= 2 3 1  et = 3 2 1 
−1 −2 4 2 −2 3

Écrire un programme permettant d’afficher les grandeurs suivantes :


1 produit scalaire de v 1 et v 2 : DOT_PRODUCT(v1,v2)
2 produit matriciel de A et B : MATMUL(A,B)
3 produit matriciel de A et v : MATMUL(A,v)
4 produit matriciel de v et B : MATMUL(v,B)

31 / 34
IV. Fonctions intrinsèques particulières aux tableaux IV.3 Fonctions de transformation

IV. Fonctions intrinsèques particulières aux tableaux

Fonctions de transformation

32 / 34
IV. Fonctions intrinsèques particulières aux tableaux IV.3 Fonctions de transformation

IV. Fonctions intrinsèques particulières aux tableaux

Fonctions de transformation

33 / 34
IV. Fonctions intrinsèques particulières aux tableaux IV.4 Fonctions ALL, ANY, COUNT et FORALL

IV. Fonctions intrinsèques particulières aux tableaux

Fonctions ALL, ANY, COUNT et FORALL


Trois fonctions intrinsèques opèrent sur des tableaux de booléens pour vérifier la validité
d’une expression logique sur les éléments d’un tableau :
1 ALL(<mask>) rend .TRUE. si tous les éléments du tableau booléen <mask> sont
vrais, .FALSE. sinon ; elle réalise un ET logique entre les éléments du tableau
2 ANY(<mask>) rend .TRUE. si un au moins des éléments du tableau booléen <mask>
est vrai, .FALSE. si tous sont à .FALSE. ; elle réalise un OU logique entre les
éléments du tableau
3 COUNT(<mask>) rend le nombre (entier) des éléments du tableau <mask> qui valent
.TRUE.. En pratique, <mask> est produit par application d’un test à un tableau (ou
des tableaux conformes)

34 / 34

Vous aimerez peut-être aussi