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 !
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
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.
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.
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.
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.