Mission Carthage

Accueil › Cours › Les matrices

Matrices en algo et Python : parcours, diagonales, transposée

Chapitre 17 · 3ème SI, Bac SI

Un tableau à deux dimensions : lignes et colonnes, parcours, sommes, maximum, diagonales et transposée.

Les leçons de ce chapitre

  1. Créer et afficher une matrice
  2. Calculer sur une matrice
  3. Chercher et transposer

Leçon 17.1 : Créer et afficher une matrice

10 min

Une matrice est un tableau à deux dimensions : des lignes et des colonnes, comme une grille de mots croisés ou un tableau de notes (une ligne par élève, une colonne par matière). Chaque case a deux indices : M[i, j] est la case de la ligne i et de la colonne j.

Attention : Ne crée pas une matrice avec [[0] * 4] * 3 : les trois lignes seraient la même liste, et changer une case changerait toute la colonne. Utilise for … in range comme ci-dessus.

Astuce : Au bac, on rencontre aussi from numpy import array puis M = array([[int()] * 4] * 3) : avec numpy, cette écriture est sûre et on écrit M[i, j].

En Python

On remplit une matrice 2 × 3 avec les valeurs lues, puis on l'affiche ligne par ligne.

L = 2
C = 3
M = [[0] * C for i in range(L)]
for i in range(L):
    for j in range(C):
        M[i][j] = int(input())
for i in range(L):
    ligne = ""
    for j in range(C):
        ligne = ligne + str(M[i][j]) + " "
    print(ligne)

En algorithme

Les lignes vont de 1 à L et les colonnes de 1 à C.

Algorithme AfficherMatrice
Début
  L ← 2
  C ← 3
  Pour i de 1 à L Faire
    Pour j de 1 à C Faire
      Lire(M[i, j])
    FinPour
  FinPour
  Pour i de 1 à L Faire
    ligne ← ""
    Pour j de 1 à C Faire
      ligne ← ligne + convch(M[i, j]) + " "
    FinPour
    Ecrire(ligne)
  FinPour
Fin

TDO
Objet | Type/Nature
M | Matrice de 2 lignes et 3 colonnes d'entiers
L, C, i, j | Entier
ligne | Chaîne

Leçon 17.2 : Calculer sur une matrice

11 min

Les calculs sur une matrice reprennent ceux des tableaux, avec deux boucles. On peut parcourir toutes les cases, une seule ligne (i fixé, j varie) ou une seule colonne (j fixé, i varie).

Pour une matrice carrée n × n, la diagonale principale contient les cases où i = j, et la deuxième diagonale celles où i + j = n + 1 (en algorithme, indices à partir de 1) ou i + j = n - 1 (en Python, à partir de 0).

Astuce : Pour une diagonale, une seule boucle suffit : M[i, i] pour la principale, M[i, n + 1 - i] pour l'autre.

En Python

Somme de toutes les cases et maximum d'une matrice donnée.

M = [[12, 7, 30], [5, 41, 9], [18, 3, 26]]
n = 3
s = 0
grand = M[0][0]
for i in range(n):
    for j in range(n):
        s = s + M[i][j]
        if M[i][j] > grand:
            grand = M[i][j]
print("Somme :", s)
print("Maximum :", grand)

En algorithme

Le maximum commence avec la première case M[1, 1], jamais avec 0.

Algorithme SommeMax
Début
  M[1, 1] ← 12
  M[1, 2] ← 7
  M[1, 3] ← 30
  M[2, 1] ← 5
  M[2, 2] ← 41
  M[2, 3] ← 9
  M[3, 1] ← 18
  M[3, 2] ← 3
  M[3, 3] ← 26
  n ← 3
  s ← 0
  grand ← M[1, 1]
  Pour i de 1 à n Faire
    Pour j de 1 à n Faire
      s ← s + M[i, j]
      Si M[i, j] > grand Alors
        grand ← M[i, j]
      FinSi
    FinPour
  FinPour
  Ecrire("Somme : ", s)
  Ecrire("Maximum : ", grand)
Fin

TDO
Objet | Type/Nature
M | Matrice de 3 lignes et 3 colonnes d'entiers
n, s, grand, i, j | Entier

Leçon 17.3 : Chercher et transposer

10 min

Chercher une valeur dans une matrice se fait comme dans un tableau, mais il faut deux indices. Pour s'arrêter dès qu'on trouve, on utilise des boucles Tant que et un booléen.

La transposée d'une matrice L × C est une matrice C × L : la ligne i devient la colonne i. Autrement dit TR[j, i] ← M[i, j].

Astuce : Avec deux Tant que, on remet j au début à chaque nouvelle ligne, et on avance à la ligne suivante seulement si on n'a pas trouvé.

En Python

On cherche une valeur et on affiche sa position (ligne, colonne), comptées à partir de 1.

M = [[3, 8, 1], [9, 4, 7]]
x = int(input())
trouve = False
i = 0
while i < 2 and not trouve:
    j = 0
    while j < 3 and not trouve:
        if M[i][j] == x:
            trouve = True
        else:
            j = j + 1
    if not trouve:
        i = i + 1
if trouve:
    print("Ligne", i + 1, "colonne", j + 1)
else:
    print("Absent")

En algorithme

Mêmes boucles avec des indices de 1 à 2 et de 1 à 3.

Algorithme ChercherMatrice
Début
  M[1, 1] ← 3
  M[1, 2] ← 8
  M[1, 3] ← 1
  M[2, 1] ← 9
  M[2, 2] ← 4
  M[2, 3] ← 7
  Lire(x)
  trouve ← Faux
  i ← 1
  Tant que (i ≤ 2) et (Non trouve) Faire
    j ← 1
    Tant que (j ≤ 3) et (Non trouve) Faire
      Si M[i, j] = x Alors
        trouve ← Vrai
      Sinon
        j ← j + 1
      FinSi
    FinTantQue
    Si Non trouve Alors
      i ← i + 1
    FinSi
  FinTantQue
  Si trouve Alors
    Ecrire("Ligne ", i, " colonne ", j)
  Sinon
    Ecrire("Absent")
  FinSi
Fin

TDO
Objet | Type/Nature
M | Matrice de 2 lignes et 3 colonnes d'entiers
x, i, j | Entier
trouve | Booléen

S'entraîner gratuitement

Chaque leçon a 3 exercices gratuits avec indices pour appliquer ce chapitre avec Hannibot.

Ouvrir le chapitre dans Mission Carthage Essayer dans le compilateur en ligne

← Chapitre précédent : Arithmétique · Chapitre suivant : Les enregistrements →

Tous les chapitres · Voir les devoirs corrigés de 2ème TI

Cours écrit pour Mission Carthage d'après le programme officiel. Ton professeur reste la référence.