Aller au contenu principal

Tableaux

Notions théoriques

Déclarer et initialiser un tableau

// Déclaration avec taille fixe
int[] notes = new int[5]; // 5 cases, toutes à 0
notes[0] = 14;
notes[1] = 17;

// Déclaration avec initialisation
int[] notes = { 14, 17, 9, 12, 15 };

// Avec new (équivalent)
int[] notes = new int[] { 14, 17, 9, 12, 15 };

// Collection expression C# 12 (syntaxe moderne)
int[] notes = [14, 17, 9, 12, 15];

Accès aux éléments et propriété Length

int[] notes = { 14, 17, 9, 12, 15 };

Console.WriteLine(notes[0]); // 14 (premier élément)
Console.WriteLine(notes[4]); // 15 (dernier élément)
Console.WriteLine(notes.Length); // 5

// notes[5] → IndexOutOfRangeException !
IndexOutOfRangeException

Accéder à un indice hors des bornes du tableau (notes[5] sur un tableau de 5 éléments) provoque une IndexOutOfRangeException à l'exécution. Toujours vérifier que l'indice est entre 0 et tableau.Length - 1.

Parcourir un tableau

int[] notes = { 14, 17, 9, 12, 15 };

// foreach (recommandé pour la lecture)
foreach (int note in notes)
{
Console.WriteLine(note);
}

// for (quand on a besoin de l'indice)
for (int i = 0; i < notes.Length; i++)
{
Console.WriteLine($"Note {i + 1} : {notes[i]}");
}

Méthodes utiles de la classe Array

int[] nombres = { 5, 3, 8, 1, 9, 2 };

Array.Sort(nombres); // tri croissant : { 1, 2, 3, 5, 8, 9 }
Array.Reverse(nombres); // inverse : { 9, 8, 5, 3, 2, 1 }
int idx = Array.IndexOf(nombres, 5); // cherche 5 → retourne son indice

Console.WriteLine(string.Join(", ", nombres)); // affiche "9, 8, 5, 3, 2, 1"
Console.WriteLine(nombres.Min()); // 1 (avec using System.Linq)
Console.WriteLine(nombres.Max()); // 9
Console.WriteLine(nombres.Sum()); // 28

Tableaux 2D

// Tableau 2D : grille de 3 lignes × 4 colonnes
int[,] grille = new int[3, 4];

// Initialisation directe
int[,] matrice = {
{ 1, 2, 3, 4 },
{ 5, 6, 7, 8 },
{ 9, 10, 11, 12 }
};

Console.WriteLine(matrice[1, 2]); // 7 (ligne 1, colonne 2)
Console.WriteLine(matrice.GetLength(0)); // 3 (nombre de lignes)
Console.WriteLine(matrice.GetLength(1)); // 4 (nombre de colonnes)

// Parcours
for (int i = 0; i < matrice.GetLength(0); i++)
{
for (int j = 0; j < matrice.GetLength(1); j++)
{
Console.Write($"{matrice[i, j],4}");
}
Console.WriteLine();
}

Exemple pratique

// Gestion des notes d'une classe
string[] noms = { "Alice", "Bob", "Charlie", "Diane", "Éric" };
double[] notes = { 15.5, 12.0, 8.5, 17.0, 11.5 };

// Trouver la note maximale et son titulaire
double noteMax = notes[0];
int indiceMax = 0;

for (int i = 1; i < notes.Length; i++)
{
if (notes[i] > noteMax)
{
noteMax = notes[i];
indiceMax = i;
}
}

// Calculer la moyenne
double somme = 0;
foreach (double n in notes) somme += n;
double moyenne = somme / notes.Length;

// Affichage
Console.WriteLine("=== Résultats de la classe ===");
for (int i = 0; i < noms.Length; i++)
{
string statut = notes[i] >= 10 ? "✓" : "✗";
Console.WriteLine($" {statut} {noms[i],-10} : {notes[i]:F1}/20");
}
Console.WriteLine(new string('-', 35));
Console.WriteLine($" Moyenne : {moyenne:F2}/20");
Console.WriteLine($" Meilleur : {noms[indiceMax]} ({noteMax:F1}/20)");

Test de mémorisation/compréhension


Comment accède-t-on au premier élément d'un tableau `int[] t` ?


Quelle propriété donne la taille d'un tableau en C# ?


Quelle exception est levée quand on accède à un indice hors des bornes ?


Comment obtenir le nombre de lignes d'un tableau 2D `int[,] m` ?


Quelle méthode affiche les éléments d'un tableau séparés par des virgules ?


TP pour réfléchir et résoudre des problèmes

Vous allez gérer un classement de notes avec des tableaux parallèles.

Étape 1 — Déclarer les tableaux

Déclarez deux tableaux parallèles : noms et notes.


Bonne pratique - Tableaux parallèles vs objets

Deux tableaux parallèles (noms[i] correspond à notes[i]) fonctionnent pour de petits exemples. En pratique, préférez créer une classe Eleve avec ses propriétés — vous éviterez les désynchronisations si les tableaux ont des tailles différentes ou si l'ordre change.

Étape 2 — Trouver la note maximale

Parcourez le tableau pour trouver l'indice de la note maximale.


Bonne pratique - Initialiser l'indice du maximum à 0

Commencer avec indiceMax = 0 (le premier élément comme candidat) puis comparer avec les suivants à partir de i = 1 est l'algorithme classique pour trouver un maximum. Il ne faut jamais initialiser à une valeur arbitraire comme -1 ou int.MinValue pour un indice.

Étape 3 — Afficher le classement trié

Affichez les noms et notes dans l'ordre des notes décroissantes.


Bonne pratique - Cloner avant de trier

notes.Clone() crée une copie du tableau avant de le trier. Sans cela, Array.Sort(notes) modifierait le tableau original et désynchroniserait les tableaux parallèles noms et notes. Toujours travailler sur une copie si vous avez besoin du tableau original intact.

📌 Une solution