NSI 1ère

Tableaux multidimensionnels
Exercices corrigés

Maîtrisez les tableaux multidimensionnels : déclaration, accès, manipulation, algorithmes de base grâce à ces 5 exercices détaillés.

Concepts & Exercices
\(\text{Matrice}[i][j] = \text{valeur}\)
Accès à un élément
Déclaration
tab[3][4]: entier
Création
Accès
tab[1][2]
Lecture
Affectation
tab[1][2] ← 5
Écriture
📊
Matrice : Structure de données à deux dimensions pour stocker des éléments organisés en lignes et colonnes.
🔢
Indices : Deux indices pour accéder à un élément (ligne, colonne) - généralement de 0 à n-1.
🎯
Accès : O(1) - Accès direct à n'importe quel élément par ses coordonnées.
Exercice 1
Déclarer et initialiser une matrice 3x3 d'entiers
Exercice 2
Accéder et modifier des éléments d'une matrice
Exercice 3
Calculer la somme de tous les éléments d'une matrice
Exercice 4
Calculer la somme des diagonales d'une matrice carrée
Exercice 5
Transposer une matrice carrée
Corrigé : Exercices 1 à 3
1 Déclaration et initialisation
Définition :

Tableau multidimensionnel : Structure de données qui stocke des éléments organisés selon plusieurs dimensions (2D, 3D, etc.).

Méthode de déclaration :
  1. Déclarer la matrice avec des dimensions fixes
  2. Spécifier le nombre de lignes et de colonnes
  3. Initialiser les éléments (optionnel)
  4. Accéder aux éléments par leurs coordonnées
// Déclaration d'une matrice 3x3 d'entiers VARIABLES matrice[3][3] : ENTIER VARIABLES i, j : ENTIER // Initialisation manuelle matrice[0][0] ← 1 matrice[0][1] ← 2 matrice[0][2] ← 3 matrice[1][0] ← 4 matrice[1][1] ← 5 matrice[1][2] ← 6 matrice[2][0] ← 7 matrice[2][1] ← 8 matrice[2][2] ← 9 // Initialisation dans des boucles imbriquées POUR i DE 0 À 2 FAIRE POUR j DE 0 À 2 FAIRE matrice[i][j] ← i * 3 + j + 1 FIN POUR FIN POUR
┌─────────────┬─────────────┬─────────────┐
│ matrice[0][0]│ matrice[0][1]│ matrice[0][2]│ ← Ligne 0
│ 1 │ 2 │ 3 │
├─────────────┼─────────────┼─────────────┤
│ matrice[1][0]│ matrice[1][1]│ matrice[1][2]│ ← Ligne 1
│ 4 │ 5 │ 6 │
├─────────────┼─────────────┼─────────────┤
│ matrice[2][0]│ matrice[2][1]│ matrice[2][2]│ ← Ligne 2
│ 7 │ 8 │ 9 │
└─────────────┴─────────────┴─────────────┘
Matrice 3x3 avec coordonnées et valeurs
Étape 1 : Déclarer la matrice

Spécifier le type des éléments et les dimensions [lignes][colonnes]

Étape 2 : Accéder aux éléments

Utiliser deux indices [ligne][colonne] allant de 0 à n-1

Étape 3 : Initialiser les valeurs

Affecter des valeurs à chaque case de la matrice

Résultat :

Matrice déclarée et initialisée avec des valeurs accessibles par coordonnées

Règles appliquées :

Indices : Commencent à 0 et vont jusqu'à dimension-1

Homogénéité : Tous les éléments sont du même type

Accès : Direct par les coordonnées en temps constant O(1)

2 Accès et modification
Définition :

Accès aux éléments : Opération qui permet de lire ou modifier la valeur d'un élément à des coordonnées données.

Opération Syntaxe Exemple Lecture matrice[ligne][colonne] valeur ← tab[1][2] Écriture matrice[ligne][colonne] ← valeur tab[1][2] ← 15 Parcours DEUX boucles imbriquées POUR i DE 0 À n-1: POUR j DE 0 À m-1
VARIABLES grille[4][4] : ENTIER VARIABLES i, j : ENTIER // Initialisation POUR i DE 0 À 3 FAIRE POUR j DE 0 À 3 FAIRE grille[i][j] ← i * 4 + j FIN POUR FIN POUR // Lecture d'un élément ECRIRE("Élément en [2][1]:", grille[2][1]) // Modification d'un élément grille[2][1] ← 99 // Accès dans des boucles imbriquées VARIABLES sommeDiagonale : ENTIER sommeDiagonale ← 0 POUR i DE 0 À 3 FAIRE sommeDiagonale ← sommeDiagonale + grille[i][i] FIN POUR
┌─────────────┬─────────────┬─────────────┬─────────────┐
│ grille[0][0]│ grille[0][1]│ grille[0][2]│ grille[0][3]│ ← Ligne 0
│ 0 │ 1 │ 2 │ 3 │
├─────────────┼─────────────┼─────────────┼─────────────┤
│ grille[1][0]│ grille[1][1]│ grille[1][2]│ grille[1][3]│ ← Ligne 1
│ 4 │ 5 │ 6 │ 7 │
├─────────────┼─────────────┼─────────────┼─────────────┤
│ grille[2][0]│ grille[2][1]│ grille[2][2]│ grille[2][3]│ ← Ligne 2
│ 8 │ 99 │ 10 │ 11 │ ← Élément modifié!
├─────────────┼─────────────┼─────────────┼─────────────┤
│ grille[3][0]│ grille[3][1]│ grille[3][2]│ grille[3][3]│ ← Ligne 3
│ 12 │ 13 │ 14 │ 15 │
└─────────────┴─────────────┴─────────────┴─────────────┘
Grille 4x4 avec l'élément [2][1] modifié
Étape 1 : Lire un élément

Utiliser les deux indices pour accéder à la valeur : grille[2][1]

Étape 2 : Modifier un élément

Affecter une nouvelle valeur aux coordonnées : grille[2][1] ← 99

Étape 3 : Parcourir la matrice

Utiliser des boucles imbriquées pour accéder à tous les éléments

Résultat :

Capacité à lire et modifier n'importe quel élément de la matrice

Règles appliquées :

Accès direct : O(1) - temps constant pour accéder à un élément

Coordonnées valides : Vérifier que les indices sont dans les bornes

Modification : Peut être faite directement par affectation

3 Somme des éléments
Définition :

Somme d'une matrice : Calcul de la somme de tous les éléments en parcourant la matrice avec des boucles imbriquées.

FONCTION sommeMatrice(mat[][] : ENTIER, lignes : ENTIER, colonnes : ENTIER) : ENTIER DEBUT VARIABLES i, j, resultat : ENTIER resultat ← 0 POUR i DE 0 À lignes-1 FAIRE POUR j DE 0 À colonnes-1 FAIRE resultat ← resultat + mat[i][j] FIN POUR FIN POUR RETOURNER resultat FIN
┌─────────────┬─────────────┬─────────────┐
│ 1 │ 2 │ 3 │ ← Ligne 0 → Somme: 6
├─────────────┼─────────────┼─────────────┤
│ 4 │ 5 │ 6 │ ← Ligne 1 → Somme: 15
├─────────────┼─────────────┼─────────────┤
│ 7 │ 8 │ 9 │ ← Ligne 2 → Somme: 24
└─────────────┴─────────────┴─────────────┘
Somme totale: 6 + 15 + 24 = 45
i j mat[i][j] resultat avant resultat après 0 0 1 0 1 0 1 2 1 3 0 2 3 3 6 1 0 4 6 10 1 1 5 10 15 1 2 6 15 21 2 0 7 21 28 2 1 8 28 36 2 2 9 36 45
Étape 1 : Initialiser l'accumulateur

Créer une variable resultat initialisée à 0

Étape 2 : Parcourir la matrice

Utiliser deux boucles imbriquées pour accéder à chaque élément

Étape 3 : Accumuler les valeurs

Additionner chaque élément à l'accumulateur

Résultat :

La fonction retourne la somme de tous les éléments de la matrice

Règles appliquées :

Initialisation : Toujours initialiser l'accumulateur à 0

Parcours complet : Visiter tous les éléments de la matrice

Accumulation : Ajouter chaque élément à l'accumulateur

Corrigé : Exercices 4 à 5
4 Somme des diagonales
Définition :

Diagonales d'une matrice carrée : Diagonale principale (indices égaux) et diagonale secondaire (indices complémentaires).

FONCTION sommeDiagonales(mat[][] : ENTIER, taille : ENTIER) : ENTIER DEBUT VARIABLES i, sommePrincipale, sommeSecondaire : ENTIER sommePrincipale ← 0 sommeSecondaire ← 0 POUR i DE 0 À taille-1 FAIRE // Diagonale principale: mat[i][i] sommePrincipale ← sommePrincipale + mat[i][i] // Diagonale secondaire: mat[i][taille-1-i] sommeSecondaire ← sommeSecondaire + mat[i][taille-1-i] FIN POUR // Si la matrice est impaire, on a compté le centre deux fois SI taille MOD 2 = 1 ALORS // Soustraire l'élément central une fois sommeSecondaire ← sommeSecondaire - mat[taille DIV 2][taille DIV 2] FIN SI RETOURNER sommePrincipale + sommeSecondaire FIN
┌─────────────┬─────────────┬─────────────┐
│ 1* │ 2 │ 3# │ ← Diagonale principale: *
├─────────────┼─────────────┼─────────────┤
│ 4 │ 5* │ 6# │ Diagonale secondaire: #
├─────────────┼─────────────┼─────────────┤
│ 7# │ 8 │ 9* │
└─────────────┴─────────────┴─────────────┘
Diagonale principale: 1 + 5 + 9 = 15
Diagonale secondaire: 3 + 5 + 7 = 15 (moins le centre: 10)
Somme totale: 15 + 10 = 25
Étape 1 : Calculer la diagonale principale

Sommer les éléments où ligne = colonne (mat[i][i])

Étape 2 : Calculer la diagonale secondaire

Sommer les éléments où ligne + colonne = taille - 1 (mat[i][taille-1-i])

Étape 3 : Gérer le centre

Pour les matrices impaires, soustraire l'élément central (compté deux fois)

Résultat :

Algorithmes qui calculent la somme des deux diagonales en O(n) opérations

Règles appliquées :

Diagonale principale : Indices égaux [i][i]

Diagonale secondaire : [i][n-1-i] pour une matrice n×n

Centre : Dans les matrices impaires, l'élément central est compté deux fois

5 Transposition
Définition :

Transposition : Opération qui transforme une matrice en échangeant ses lignes et ses colonnes (mat[i][j] devient mat[j][i]).

PROCEDURE transposerMatrice(mat[][] : ENTIER, taille : ENTIER) DEBUT VARIABLES i, j, temp : ENTIER POUR i DE 0 À taille-1 FAIRE POUR j DE i+1 À taille-1 FAIRE // Échanger mat[i][j] avec mat[j][i] temp ← mat[i][j] mat[i][j] ← mat[j][i] mat[j][i] ← temp FIN POUR FIN POUR FIN
Avant transposition:
┌─────────────┬─────────────┬─────────────┐
│ 1 │ 2 │ 3 │
├─────────────┼─────────────┼─────────────┤
│ 4 │ 5 │ 6 │
├─────────────┼─────────────┼─────────────┤
│ 7 │ 8 │ 9 │
└─────────────┴─────────────┴─────────────┘

Après transposition:
┌─────────────┬─────────────┬─────────────┐
│ 1 │ 4 │ 7 │
├─────────────┼─────────────┼─────────────┤
│ 2 │ 5 │ 8 │
├─────────────┼─────────────┼─────────────┤
│ 3 │ 6 │ 9 │
└─────────────┴─────────────┴─────────────┘
mat[i][j] devient mat[j][i] pour tous i,j
Étape 1 : Parcourir la matrice

Utiliser des boucles imbriquées pour accéder aux éléments

Étape 2 : Limiter le parcours

Ne traiter que les éléments au-dessus de la diagonale (j > i)

Étape 3 : Échanger les éléments

Échanger mat[i][j] avec mat[j][i] pour chaque paire

Résultat :

Matrice transposée en O(n²) opérations, avec optimisation pour éviter les doublons

Règles appliquées :

Échange : mat[i][j] ↔ mat[j][i] pour tous les couples

Optimisation : Limiter le parcours à j > i pour éviter les doubles échanges

Diagonale : Les éléments de la diagonale restent inchangés

Cours bien détaillé
\(\text{Mat}[i][j] = \text{valeur}, \text{ où } 0 \leq i < n \text{ et } 0 \leq j < m\)
Accès aux éléments
🎯
Définition : Un tableau multidimensionnel est une structure de données qui stocke des éléments organisés selon plusieurs dimensions.
📏
Objectif : Permettre le stockage et la manipulation de données structurées en 2D, 3D ou plus.
📐
Caractéristiques : Taille fixe, accès direct par coordonnées, éléments homogènes.
📝
Applications : Jeux, images, calculs matriciels, cartes, tableaux de scores.
💡
Conseil : Toujours vérifier les bornes avant d'accéder à un élément
🔍
Attention : Les indices commencent à 0 dans la plupart des langages
Astuce : Utilisez des constantes pour les dimensions des matrices
📋
Méthode : Initialisez toujours les matrices avant utilisation
Vérification : Testez vos algorithmes avec des matrices de petite taille
Algorithmes classiques :
  • Somme : Parcours avec accumulateur (boucles imbriquées)
  • Recherche : Parcours avec condition d'arrêt
  • Diagonales : Accès spécifique aux éléments [i][i] et [i][n-1-i]
  • Transposition : Échange des éléments [i][j] avec [j][i]
  • Rotation : Transformation complexe des positions
Règles importantes :
  • La taille d'une matrice est fixe une fois déclarée
  • Les indices commencent à 0 et vont jusqu'à dimension-1
  • Un accès hors bornes provoque une erreur
  • Les éléments sont du même type dans une matrice homogène
  • L'accès direct par coordonnées est en temps constant O(1)
Tableaux multidimensionnels Structures de données simples