Aller au contenu principal

Module 01 · Leçon 4

Tableaux à deux dimensions (matrices)

180 minanalyse · pascal
Affichage du code

Ce que vous saurez faire

  • Déclarer une matrice n × p
  • Parcourir une matrice avec deux boucles imbriquées
  • Distinguer parcours par lignes vs par colonnes

Avant de commencer

Une feuille de notes a 30 élèves × 8 matières. Comment représenter proprement ces 240 notes ? Vous pourriez utiliser 8 tableaux de 30 éléments — ou bien une matrice 30 × 8.


1. Définition

              colonne 1  col 2  col 3
            ┌─────────┬───────┬───────┐
   ligne 1  │  T[1,1] │ T[1,2]│ T[1,3]│
            ├─────────┼───────┼───────┤
   ligne 2  │  T[2,1] │ T[2,2]│ T[2,3]│
            └─────────┴───────┴───────┘

2. Déclaration

T.D.N.T
─────────────────────────────────────
Type
  Notes = Tableau de 30 × 8 réels
─────────────────────────────────────

T.D.O
─────────────────────────────────
M    │ variable Notes
i    │ variable entier
j    │ variable entier
─────────────────────────────────

3. Parcours d'une matrice

Parcours ligne par ligne (le plus courant)

Pour i de 1 à NB_LIGNES Faire
  Pour j de 1 à NB_COLONNES Faire
    Traiter(M[i, j])
  FinPour
FinPour

Parcours colonne par colonne

Pour j de 1 à NB_COLONNES Faire
  Pour i de 1 à NB_LIGNES Faire
    Traiter(M[i, j])
  FinPour
FinPour

4. Exemple complet : moyennes par élève

PROGRAM MoyennesParEleve;
CONST
  NB_ELEVES = 3;
  NB_MAT = 4;
VAR
  M : ARRAY[1..NB_ELEVES, 1..NB_MAT] OF real;
  i, j : integer;
  somme, moy : real;
BEGIN
  { Saisie }
  FOR i := 1 TO NB_ELEVES DO
    FOR j := 1 TO NB_MAT DO
    BEGIN
      Write('M[', i, ',', j, '] = ');
      Readln(M[i, j]);
    END;

  { Moyennes }
  FOR i := 1 TO NB_ELEVES DO
  BEGIN
    somme := 0;
    FOR j := 1 TO NB_MAT DO
      somme := somme + M[i, j];
    moy := somme / NB_MAT;
    Writeln('Moyenne élève ', i, ' : ', moy:5:2);
  END;
END.

5. Exercices

Exercice 1facile
Somme de la matrice

Écrire un algorithme qui calcule la somme totale des éléments d'une matrice M de n lignes et p colonnes.

Voir le corrigé
somme ← 0
Pour i de 1 à n Faire
  Pour j de 1 à p Faire
    somme ← somme + M[i, j]
  FinPour
FinPour
Exercice 2moyen
Matrice symétrique (type bac courant)

Une matrice carrée M (n × n) est symétrique si pour tous i, j : M[i, j] = M[j, i]. Écrire une fonction EstSymetrique(M, n) qui renvoie Vrai ou Faux.

Voir le corrigé
Fonction EstSymetrique(M : Matrice, n : entier) : booléen
Début
  Pour i de 1 à n Faire
    Pour j de i+1 à n Faire     { On ne teste que la moitié supérieure }
      Si M[i, j] ≠ M[j, i] Alors
        EstSymetrique ← Faux
        Sortir       { ou utiliser un drapeau }
      FinSi
    FinPour
  FinPour
  EstSymetrique ← Vrai
FinFonction

En Pascal avec drapeau (sans goto) :

FUNCTION EstSymetrique(M : Matrice; n : integer) : boolean;
VAR
  i, j : integer;
  ok : boolean;
BEGIN
  ok := true;
  FOR i := 1 TO n DO
    FOR j := i + 1 TO n DO
      IF M[i, j] <> M[j, i] THEN
        ok := false;
  EstSymetrique := ok;
END;
Exercice 3difficile
Transposée d'une matrice (hors bac, bonus)

Soit M une matrice n × p. Sa transposée T est de taille p × n et vérifie T[j, i] = M[i, j]. Écrire un programme qui calcule et affiche la transposée.

Voir le corrigé
PROGRAM Transposee;
CONST
  N = 3; P = 2;
VAR
  M : ARRAY[1..N, 1..P] OF integer;
  T : ARRAY[1..P, 1..N] OF integer;
  i, j : integer;
BEGIN
  { Saisie de M omise }

  { Calcul de T }
  FOR i := 1 TO N DO
    FOR j := 1 TO P DO
      T[j, i] := M[i, j];

  { Affichage de T }
  FOR i := 1 TO P DO
  BEGIN
    FOR j := 1 TO N DO
      Write(T[i, j]:4);
    Writeln;
  END;
END.

6. Erreurs fréquentes au bac

  • Inverser les indices dans M[i, j] (lignes vs colonnes).
  • Déclarer une matrice avec des bornes incompatibles avec son usage (ex. [1..N, 1..N] pour une matrice rectangulaire).
  • Faire n * p comparaisons inutiles dans un test de symétrie (la moitié supérieure suffit).

7. Quiz

Quiz (5 questions)

1

Combien d'éléments contient une matrice `ARRAY[1..5, 1..8]` ?

2

Quelle paire de boucles parcourt une matrice **colonne par colonne** ?

3

Pour vérifier qu'une matrice carrée n×n est symétrique, on peut tester :

4

La transposée de la matrice `[[1, 2], [3, 4], [5, 6]]` est :

5

Dans `ARRAY[1..N, 1..P]`, l'accès `M[N+1, 1]` :

Bravo d'être arrivé jusqu'ici. Marquez la leçon terminée pour ancrer le progrès.