Correction du TD n°8

Exercice 1

Calcul de la somme des valeurs d'une colonne d'une matrice.

001  fonction sommeColonneMatrice(m,c) : entier
002    Données m : Tableau [N][M] de entier
003            c : entier
004    Locales i : entier    { Indice de boucle pour }
005            s : entier    { Somme }
006    s := 0
007    pour i de 0 à N-1 faire
008      s := s + m[i][c]
009    fait
010    Resultat : s
011  fin fonction

Calcul de la somme des valeurs d'une ligne d'une matrice.

001  fonction sommeLigneMatrice(m,l) : entier
002    Données m : Tableau [N][M] de entier
003            l : entier
004    Locales i : entier    { Indice de boucle pour }
005            s : entier    { Somme }
006    s := 0
007    pour i de 0 à M-1 faire
008      s := s + m[l][i]
009    fait
010    Resultat : s
011  fin fonction

Calcul de la somme des valeurs d'une diagonale d'une matrice.

001  fonction sommeDiagonale1Matrice(m,d) : entier
002    Données m : Tableau [N][N] de entier
003            d : entier
004    Locales i : entier    { Indice de boucle pour }
005            s : entier    { Somme }
006    s := 0
007    pour i de 0 à N-1 faire
008      s := s + m[i][(d+i)%N]
009    fait
010    Resultat : s
011  fin fonction

Calcul de la somme des valeurs d'une diagonale d'une matrice.

001  fonction sommeDiagonale2Matrice(m,d) : entier
002    Données m : Tableau [N][N] de entier
003            d : entier
004    Locales i : entier    { Indice de boucle pour }
005            s : entier    { Somme }
006    s := 0
007    pour i de 0 à N-1 faire
008      s := s + m[i][(d-i+N)%N]
009    fait
010    Resultat : s
011  fin fonction

Test si une matrice carrée est pandiagonale magique.

001  fonction testMatriceMagique(m) : booléen
002    Données m : Tableau [N][N] de entier
003    Locales v : entier          { Nombre magique }
004            i : entier          { Indice de boucle pour }
005            magique : booléen   { Résultat fonction }
006    v := sommeColonneMatrice(m,0)
007    magique := vrai
008    i := 0
009    tant que ( i < N ) et magique faire
010      si v != sommeColonneMatrice(m,i) alors
011        res := faux
012        sinon
013        si v != sommeLigneMatrice(m,i) alors
014          res := faux
015          sinon
016          si v != sommeDiagonale1Matrice(m,i) alors
017            res := faux
018            sinon
019            si v != sommeDiagonale2Matrice(m,i) alors
020              res := faux
021            fsi
022          fsi
023        fsi
024      fsi
025      i := i+1
026    fait
027    Résultat : magique
028  fin fonction

Exercice 2

Calcul de la transposée d'une matrice quelconque.

001  action transposeeMatrice(src,dest)
002    Données            src : Tableau [N][M] de entier
003    Données-Résultats  dest : Tableau [M][N] de entier
004    Locales i,j : entier         { Indices de boucle pour }
005    pour i de 0 à N-1 faire
006      pour j de 0 à M-1 faire
007        dest[j][i] := src[i][j]
008      fait
009    fait
010  fin action

Exercice 3

Copie d'une matrice carrée.

001  action copieMatrice(src,dest)
002    Données            src : Tableau [N][M] de entier
003    Données-Résultats  dest : Tableau [N][M] de entier
004    Locales i,j : entier         { Indices de boucle pour }
005    pour i de 0 à N-1 faire
006      pour j de 0 à M-1 faire
007        dest[i][j] := src[i][j]
008      fait
009    fait
010  fin action

Produit d'une matrice carrée par une matrice carrée.

001  fonction produitMatriceMatrice(m1,m2) : Tableau [N][N] de entier
002    Données m1,m2 : Tableau [N][N] de entier
003    Locales i,j,k : entier                  { Indices de boucle pour }
004            m : Tableau [N][N] de entier    { Matrice recherchee }
005    pour i de 0 à N-1 faire
006      pour j de 0 à N-1 faire
007        m[i][j] := 0
008        pour k de 0 à N-1 faire
009          m[i][j] := m[i][j] + m1[i][k]*m2[k][j]
010        fait
011      fait
012    fait
013    Resultat : m
014  fin fonction

Mise à la puissance p entière d'une matrice carrée.

001  fonction puissanceMatrice(t,p) : Tableau [N][N] de entier
002    Données t : Tableau [N][N] de entier
003            p : entier
004    Locales i : entier                       { Indice de boucle pour }
005            res : Tableau [N][N] de entier   { Matrice calculee }
006    copieMatrice(t,res)
007    pour i de 1 à p-1 faire
008      copieMatrice(produitMatriceMatrice(res,t),res)
009    fait
010    Résultat : res
011  fin action

Exercice supplémentaire

Test de symétricité et transitivité d'une relation d'ordre total sur un ensemble représentée par un tableau de booléens.

Auteur: Nicolas JANEY
UFR Sciences et Techniques
Université de Besançon
16 Route de Gray, 25030 Besançon
nicolas.janey@univ-fcomte.fr