====== Fiche savoirs sur les tableaux en C# ====== ===== Présentation ===== En informatiques un **tableau** est un **regroupement** de **variables** de même type mises dans des **cases** contigües en mémoire centrale. Voici un exemple de tableau de 4 notes en mémoire centrale : ^Adresse^Valeur^ |1500|10| |1501|09| |1502|15| |1503|12| En programmation, un nom est donné au tableau et on utilise un indice plutôt que les adresses mémoire : Le tableau **notes** : ^Indice^Valeur^ |0|10| |1|09| |2|15| |3|12| Pour accéder à une variable du tableau, il faut : * utiliser le **nom** du tableau ; * suivi d'un indice de **case**. ===== Tableau statique et tableau dynamique===== Un **tableau statique** a une taille **fixe** déterminée à la déclaration du tableau. Un **tableau dynamique** a une taille qui est **définie lors de l'exécution du programme**. La taille du tableau est alors définie au moment de l’exécution du programme et en fonction du déroulement de ce programme. Cela permet d'avoir une **allocation dynamique de mémoire** en fonction des besoins. ===== Déclarer un tableau ===== Pour déclarer un tableau en C# il faut que * le nombre de case soit **fixe** ; * et définir **dès le départ le nombre de cases** ; * précisez le **type** des données. letype[] nomTableau = new letype[taille]; // exemple int[] notes = new int[4]; ===== Utiliser un tableau statique de données ===== Un tableau s’utilise comme une variable mais en précisant l’indice de la case concernée. // exemple notes[0] = 10; notes[1] = 9; notes[2] = 15; notes[3] = 12; Voici une manière de renseigner le tableau de notes avec les valeurs saisies par l'utilisateur : // Déclaration du tableau int[] notes = new int[4]; // Saisie des notes for (int i = 0; i < 4; i++) { Console.Write("Entrez une note : "); notes[i] = int.Parse(Console.ReadLine()); } **Exercice 1** * Créez un nouveau projet TableauExercice1. * Le programme doit permettre de saisir 5 températures entières entre -20 et +40 (sans contrôler la saisie) ; * Le programme doit ensuite afficher combien de températures sont négatives et combien de températires sont positives **Exercice 2** * Documentez-vous sur la gestion de **tableau dynamique** en C# * Créez un nouveau projet TableauExercice2. * Reprenez le code de l'exercice 1 et utilisez un tableau dynamique en lieu et place du tableau statique ===== Rechercher dans un tableau ===== Il est parfois nécessaire de trier les tableaux ou de faire des recherches dans les tableaux. Pour information, voici les vidéos sur 3 solutions possible de tris, en C# : * Tri par sélection : https://youtu.be/0Z8rYUjFrG4 * Tri par insertion : https://youtu.be/dSN7mtGOeZc * Tri par bulle : https://youtu.be/kUP8kb9t50Q ==== Recherche séquentielle dans un tableau non trié==== La recherche se fait * à partir de la première case du tableau, * en comparant chaque case avec la valeur cherchée, * et la recherche s’arrête dès que la valeur est trouvée, ou en fin de tableau si la valeur n’est pas présente. C’est la méthode de recherche la plus simple et qui fonctionne que le tableau soit trié ou non. Cependant, cette méthode est peu performante dans le cas d’un tableau trié. Le nombre d’itérations n’est pas fixe. * au minimum : 1 fois (si la valeur se trouve dans la 1re case) * au maximum : n fois (si la valeur n’est pas trouvée) **Exercice 2** * Créez un nouveau projet TableauExercice2. * Le programme doit permettre de saisir un tableau de températures de n cases (il faut saisir la taille du tableau au préalable) puis de saisir une valeur à chercher. * La recherche se fait séquentiellement. * Un message doit préciser si la valeur a été trouvée ou non. * Dans le cas où elle a été trouvée, il faut préciser la position dans le vecteur. On ne s'inquiètera pas du problème lié à une saisie erronée au niveau du type d'une variable. **Exercice 3** * Créez une nouveau projet à partir de ce dépôt Git https://github.com/ctecher/TableauExercice3.git * Le programme doit permettre de saisir le nombre de notes à gérer ; * Puis vous permettre des saisir les notes en les rangeant dans un tableau à une dimension pouvant contenir le nombre de notes voulus. * Le programme doit alors calculer la moyenne des notes et l'afficher : * **sans faire appel à une fonction** ; * puis en faisant **appel à une fonction** qui reçoit en paramètre le tableau de notes et qui retourne la moyenne. En C#, pour obtenir la taille d’un tableau, il faut utiliser **Length** sur le tableau. Par exemple, si le tableau s’appelle notes, alors notes.Length donne sa taille. ===== Les tableaux à deux dimensions ===== * Les tableaux qui ont été présentés étaient à une dimension. * Il est possible de déclarer des tableaux à plusieurs dimensions. * Les tableaux à 2 dimensions peuvent aussi être appelés **matrices**. ==== Déclaration et utilisation d'un tableau à 2 dimensions ==== // Syntaxe de la déclaration letype[,] nomTableau = new letype[nbColonnes,nbLignes]; // Syntaxe d’accès à une case nomTableau[indiceColonne, indiceLigne] // Exemple de déclaration int[,] distance = new int[10,20]; /* Affichage de la case d’indices (i, j) * avec i forcément entre 0 et 9 * avec j forcément entre 0 et 19 */ Console.WriteLine(distance[i, j]); // boucles pour remplir chaque case de la matrice for (int x = 0; x < 10; x++) { for (int y = 0; y < 20; y++) { distance[x, y] = int.Parse(Console.ReadLine()); } } Pour parcourir une matrice complète, il faut 2 boucles imbriquées.