Un tableau est une structure de données qui permet de stocker des informations de même type et d'y accéder via un index.
En C#, un tableau est déclaré en indiquant un type et en le suffixant par des crochets ([]) :
int[] tab;
string[] mots;
char[] caractères;
double[] monTableau;Ces 4 variables ne sont pas encore initialisées. Pour les utiliser sans avoir créé de tableaux, on peut leur assigner la valeur null.
int[] tab = null;
if (tab == null) {
Console.WriteLine("Non initialisé");
} else {
Console.WriteLine("Initialisé");
}Ce code affiche donc "Non initialisé".
On peut créer un tableau via un new, le type et le nombre d'éléments :
int[] tab = new int[10];
string[] mots = new string[5];
int nb = 8;
char[] caractères = new char[nb];
double[] monTableau = new double[5 + nb];Comme on le voit sur cet exemple, le nombre d'éléments ne doit pas forcément être constant : il peut être calculé (comme nb ou 5 + nb).
Les différentes cases du tableau sont initialisées à leur valeur par défaut en fonction du type (0 pour les int et les double, null pour les string, ...).
On peut assigner des valeurs dans les cases d'un tableau en utilisant le nom du tableau suivi de l'indice (la position, l'index, ...) placé entre crochets ([]), un = et la valeur à assigner.
int[] tab = new int[10]; // tab a 10 cases valant toutes 0
tab[0] = 5; // tab a 10 cases valant toutes 0, sauf la première qui est à 5
tab[5] = 8; // tab a 10 cases valant toutes 0, sauf la première qui est à 5 et la 6e qui est à 8On peut lire les valeurs des cases d'un tableau en utilisant le nom du tableau suivi de l'indice (la position, l'index, ...) placé entre crochets ([]).
int[] tab = new int[10];
tab[0] = 5;
tab[5] = 8;
int n;
n = tab[0]; // n contient 5
n = tab[1]; // n contient 0
n = tab[5]; // n contient 8On peut initialiser rapidement un tableau dès sa création via des accolades :
int[] tab = new int[] {5,4,0};Cette instruction a pour effet de créer le tableau comme suit :
| Indice | 0 | 1 | 2 |
| Valeur | 5 | 4 | 0 |
Attention ! Il faut que le nombre de colonnes soit égal pour chaque ligne renseignée. Si ce n'est pas le cas, le compilateur n'acceptera pas votre code.
On peut obtenir la taille d'un tableau en utilisant sa propriété Length :
int[] tab = new int[10];
string[] mots = new string[5];
int nb = 8;
char[] caractères = new char[nb];
double[] monTableau = new double[5 + nb];
Console.WriteLine(tab.Length); // affiche 10
Console.WriteLine(mots.Length); // affiche 5
Console.WriteLine(caractères.Length); // affiche 8
Console.WriteLine(monTableau.Length); // affiche 13Cette propriété Length est très pratique pour itérer sur tous les éléments d'un tableau :
int[] tab = new int[10];
tab[0] = 5;
tab[5] = 8;
for(int i = 0; i < tab.Length; i++) {
Console.WriteLine($"tab[{i}] = {tab[i]}");
}Ce code va afficher toutes les cases du tableau tab :
tab[0] = 5
tab[1] = 0
tab[2] = 0
tab[3] = 0
tab[4] = 0
tab[5] = 8
tab[6] = 0
tab[7] = 0
tab[8] = 0
tab[9] = 0
Lorsque l'on veut itérer sur chaque élément d'un tableau, on peut utiliser le mot clé foreach (traduit littéralement en pour chaque) en lui donnant une variable du type des éléments du tableau, le mot clé in et le nom du tableau :
int[] tab = new int[10];
tab[0] = 5;
tab[5] = 8;
foreach(int n in tab) {
Console.WriteLine($"{n}");
}Ce code affichera :
5
0
0
0
0
8
0
0
0
0
Qu'affiche le programme suivant ?
int[] tab = new int[6];
tab[0] = 10;
tab[1] = 15;
tab[2] = tab[0];
tab[3] = tab[1];
tab[4] = tab[0] + tab[1];
tab[5] = 1;
tab[5] += 2;
tab[5]++;
for(int i = 0; i < tab.Length; i++) {
Console.WriteLine($"tab[{i}] = {tab[i]}");
}Solution
// création d'un tableau nommé tab, qui contiendra 6 entiers
int[] tab = new int[6];
// on met 10 dans la case d'index 0
tab[0] = 10;
// on met 15 dans la case d'index 1
tab[1] = 15;
// on recopie la valeur de tab[0] (donc 10) dans la case d'index 2
tab[2] = tab[0];
// on recopie la valeur de tab[1] (donc 15) dans la case d'index 3
tab[3] = tab[1];
// on fait la somme de la valeur de tab[0] (donc 10) et tab[1] (donc 15), ce qui donne la valuer 25, qu'on va assigner à la case d'index 4
tab[4] = tab[0] + tab[1];
// on met 1 dans la case d'index 5
tab[5] = 1;
// on ajoute 2 dans la case d'index 5 (c'est équivalent à tab[5] = tab[5] + 2)
tab[5] += 2;
// on ajoute 1 dans la case d'index 5 (c'est équivalent à tab[5] = tab[5] + 1)
tab[5]++;
// on fait varier i de 0 à 5
for(int i = 0; i < tab.Length; i++) {
// on affiche la case i
Console.WriteLine($"tab[{i}] = {tab[i]}");
}Ce programme affiche donc :
tab[0] = 10
tab[1] = 15
tab[2] = 10
tab[3] = 15
tab[4] = 25
tab[5] = 4
Écrire un programme qui crée un tableau de 10 éléments, le remplit aléatoirement de nombres entiers compris entre -100 et 100 et l'affiche.
Sortie possible :
tab[0] = 81
tab[1] = 40
tab[2] = -86
tab[3] = -31
tab[4] = 18
tab[5] = -81
tab[6] = 63
tab[7] = 10
tab[8] = -16
tab[9] = 63
Solution
// création d'un tableau nommé tab, qui contiendra 10 entiers
int[] tab = new int[10];
// création d'un objet random qui permet d'obtenir des nombres aléatoires
Random random = new Random();
// i varie de 0 à 9
for(int i = 0; i < 10; i++) {
// on assigne à tab[i] une valeur aléatoire entre -100 et 100
tab[i] = random.Next(-100,100);
}
// i varie de 0 à 9
for(int i = 0; i < 10; i++) {
// on affiche la case i
Console.WriteLine($"tab[{i}] = {tab[i]}");
}Écrire un programme qui crée un tableau de 10 éléments, le remplit aléatoirement de nombres entiers compris entre -100 et 100 et l'affiche. Ensuite il recherche le plus petit élément et l'affiche.
Sortie possible :
tab[0] = -38
tab[1] = 90
tab[2] = 21
tab[3] = -80
tab[4] = -84
tab[5] = 52
tab[6] = -39
tab[7] = 32
tab[8] = 84
tab[9] = 4
L'élément le plus petit est : -84
Solution
// création d'un tableau nommé tab, qui contiendra 10 entiers
int[] tab = new int[10];
// création d'un objet random qui permet d'obtenir des nombres aléatoires
Random random = new Random();
// i varie de 0 à 9
for(int i = 0; i < 10; i++) {
// on assigne à tab[i] une valeur aléatoire entre -100 et 100
tab[i] = random.Next(-100,100);
}
// i varie de 0 à 9
for(int i = 0; i < 10; i++) {
// on affiche la case i
Console.WriteLine($"tab[{i}] = {tab[i]}");
}
// on déclare une variable min
// dans laquelle on met le plus grand entier possible
int min = int.MaxValue;
// i varie de 0 à 9
for(int i = 0; i < 10; i++) {
// si la valeur à l'index i du tableau est plus petite que le minimum courant...
if (tab[i] < min) {
// ... on retient cette valeur comme minimum courant
min = tab[i];
}
}
// on affiche le minimum trouvé
Console.WriteLine($"L'élément le plus petit est : {min}");Écrire un programme qui crée un tableau de 10 éléments, le remplit aléatoirement de nombres entiers compris entre -100 et 100 et l'affiche. Ensuite il recherche le plus grand élément et l'affiche.
Sortie possible :
tab[0] = -87
tab[1] = 1
tab[2] = -5
tab[3] = -22
tab[4] = -8
tab[5] = 66
tab[6] = -62
tab[7] = -38
tab[8] = 25
tab[9] = -95
L'élément le plus grand est : 66
Solution
// création d'un tableau nommé tab, qui contiendra 10 entiers
int[] tab = new int[10];
// création d'un objet random qui permet d'obtenir des nombres aléatoires
Random random = new Random();
// i varie de 0 à 9
for(int i = 0; i < 10; i++) {
// on assigne à tab[i] une valeur aléatoire entre -100 et 100
tab[i] = random.Next(-100,100);
}
// i varie de 0 à 9
for(int i = 0; i < 10; i++) {
// on affiche la case i
Console.WriteLine($"tab[{i}] = {tab[i]}");
}
// on déclare une variable max
// dans laquelle on met le plus petit entier possible
int max = int.MinValue;
// i varie de 0 à 9
for(int i = 0; i < 10; i++) {
// si la valeur à l'index i du tableau est plus grande que le maximum courant...
if (tab[i] > max) {
// ... on retient cette valeur comme maximum courant
max = tab[i];
}
}
// on affiche le maximum trouvé
Console.WriteLine($"L'élément le plus grand est : {max}");Écrivez un programme qui :
- lit un nombre
nstrictement positif - lit ensuite les entrées de deux tableaux de taille
n - effectue ensuite l'addition des éléments de ces deux tableaux et en affiche son résultat.
Exemple de sorties :
Quel est la taille des tableaux ? 3 Entrez les 3 éléments du tableau 1 : tab1[0] = 1 tab1[1] = 5 tab1[2] = 7 Entrez les 3 éléments du tableau 2 : tab2[0] = 2 tab2[1] = 2 tab2[2] = 0 La somme des éléments des deux tableaux est : 17
Quel est la taille des tableaux ? 2 Entrez les 2 éléments du tableau 1 : tab1[0] = 1 tab1[1] = 8 Entrez les 2 éléments du tableau 2 : tab2[0] = 3 tab2[1] = 7 La somme des éléments des deux tableaux est : 19
Solution
// affichage de la question
Console.Write("Quel est la taille des tableaux ? ");
// lecture de la taille *n* des tableaux
int n = int.Parse(Console.ReadLine());
// création des tableaux tab1 et tab2 de dimension n
int[] tab1 = new int[n];
int[] tab2 = new int[n];
// affichage du texte
Console.WriteLine($"Entrez les {n} éléments du tableau 1 : ");
// i varie de 0 à n - 1
for(int i = 0; i < n; i++) {
// affichage de la "question"
Console.Write($"tab1[{i}] = ");
// lecture de l'entier et assignation à l'index i de tab1
tab1[i] = int.Parse(Console.ReadLine());
}
// affichage du texte
Console.WriteLine($"Entrez les {n} éléments du tableau 2 : ");
// i varie de 0 à n - 1
for(int i = 0; i < n; i++) {
// affichage de la "question"
Console.Write($"tab2[{i}] = ");
// lecture de l'entier et assignation à l'index i de tab1
tab2[i] = int.Parse(Console.ReadLine());
}
// on déclare et initialise la variable somme à 0
int somme = 0;
// i varie de 0 à n - 1
for(int i = 0; i < n; i++) {
// on cumule dans somme les valeurs à l'indice i de tab1 et tab2
somme = somme + tab1[i] + tab2[i];
}
// on affiche la somme
Console.WriteLine($"La somme des éléments des deux tableaux est : {somme}");Écrire un programme qui crée un tableau de 5 éléments, le remplit aléatoirement de nombres entiers compris entre -100 et 100 et l'affiche. Ensuite il demande à l'utilisteur la position d'un élément à supprimer et décale tous les nombres après cette position d'une case vers le début et met 0 dans la dernière case vide. Vous ne devez pas gérer pas les entrées invalides.
Sorties possibles :
tab[0] = 81 tab[1] = -55 tab[2] = 43 tab[3] = 36 tab[4] = 45 Quelle position voulez-vous supprimer ? 0 tab[0] = -55 tab[1] = 43 tab[2] = 36 tab[3] = 45 tab[4] = 0
tab[0] = -30 tab[1] = -55 tab[2] = -100 tab[3] = 92 tab[4] = 11 Quelle position voulez-vous supprimer ? 2 tab[0] = -30 tab[1] = -55 tab[2] = 92 tab[3] = 11 tab[4] = 0
Solution
// création d'un tableau nommé tab, qui contiendra 10 entiers
int[] tab = new int[5];
// création d'un objet random qui permet d'obtenir des nombres aléatoires
Random random = new Random();
// i varie de 0 à 4
for(int i = 0; i < tab.Length; i++) {
// on assigne à tab[i] une valeur aléatoire entre -100 et 100
tab[i] = random.Next(-100,100);
}
// i varie de 0 à 4
for(int i = 0; i < tab.Length; i++) {
// on affiche la case i
Console.WriteLine($"tab[{i}] = {tab[i]}");
}
// Affiche un ligne blanche
Console.WriteLine();
// Affiche la question
Console.Write("Quelle position voulez-vous supprimer ? ");
// index va contenir l'index du tableau à supprimer
int index;
int.TryParse(Console.ReadLine(), out index);
// on décale tout d'un position vers le début :
// si i = 0, tab[0] = tab[1]
// si i = 1, tab[1] = tab[2]
for(int i = index; i < tab.Length - 1; i++) {
tab[i] = tab[i+1];
}
// on met zéro à la dernière position
tab[tab.Length - 1] = 0;
// Affiche un ligne blanche
Console.WriteLine();
// i varie de 0 à 4
for(int i = 0; i < tab.Length; i++) {
// on affiche la case i
Console.WriteLine($"tab[{i}] = {tab[i]}");
}Créer un tableau de 10 entiers, remplissez-le de valeurs aléatoires entre -100 et 100 et triez ce tableau en utilisant l'algorithme du tri à bulles1.
Exemple de sortie:
Avant le tri :
tab[0] = -86
tab[1] = 57
tab[2] = 50
tab[3] = 99
tab[4] = 74
tab[5] = 62
tab[6] = -53
tab[7] = -67
tab[8] = 12
tab[9] = -69
Après le tri :
tab[0] = -86
tab[1] = -69
tab[2] = -67
tab[3] = -53
tab[4] = 12
tab[5] = 50
tab[6] = 57
tab[7] = 62
tab[8] = 74
tab[9] = 99
Solution
Il faut évidemment déjà bien comprendre l'algorithme du tri à bulle qui permet de trier un tableau facilement.
// déclaration et initialisation d'un tableau de 10 entiers nommé tab
int[] tab = new int[10];
// déclaration et initialisation de random qui permettra d'obtenir des nombres aléatoires
Random random = new Random();
// assignation de 10 nombres aléatoires dans tab
for(int i = 0; i < tab.Length; i++) {
tab[i] = random.Next(-100,100);
}
// affichage du titre (le \n permet d'ajouter un retour à la ligne)
Console.WriteLine("Avant le tri : \n");
// i varie de 0 à tab.Length - 1
for(int i = 0; i < tab.Length; i++) {
// on affiche la case i
Console.WriteLine($"tab[{i}] = {tab[i]}");
}
// pseudo code provenant de Wikipedia :
// pour i allant de (taille de T)-1 à 1
// pour j allant de 0 à i-1
// si T[j+1] < T[j]
// (T[j+1], T[j]) = (T[j], T[j+1])
// i varie de tab.Length - 1 à 1
for(int i = tab.Length - 1; i > 0; i--) {
// j varie de 0 à i - 1
for(int j = 0; j < i; j++) {
// si la case suivante ([j+1]) contient un valeur plus petite que la courante ([j])
if (tab[j + 1] < tab[j]) {
// on échange les deux cases du tableau (swap)
int tmp = tab[j + 1];
tab[j + 1] = tab[j];
tab[j] = tmp;
}
}
}
// affichage du titre (les \n permettent d'ajouter un retour à la ligne)
Console.WriteLine("\nAprès le tri :\n");
// i varie de 0 à tab.Length - 1
for(int i = 0; i < tab.Length; i++) {
// on affiche la case i
Console.WriteLine($"tab[{i}] = {tab[i]}");
}Ecrivez un programme qui vous permet de gérer 10 articles, chacun ayant un nom et un prix. Utilisez 2 tableaux à une dimension pour y stocker les noms et les prix. Utilisez un menu pour faciliter la gestion de ces articles par l'utilisateur, comme suit :
1. Afficher tous les articles et leur prix 2. Modifier le nom d'un article 3. Modifier le prix d'un article 4. Effacer un article 5. Quitter Votre choix: 1 1. Non défini 2. Non défini 3. Non défini 4. Non défini 5. Non défini 6. Non défini 7. Non défini 8. Non défini 9. Non défini 10. Non défini 1. Afficher tous les articles et leur prix 2. Modifier le nom d'un article 3. Modifier le prix d'un article 4. Effacer un article 5. Quitter Votre choix: 2 Quel numéro d'article voulez-vous modifier ? 1 Quel est le nouveau nom de l'article 1 ? Sac à dos Nom modifié avec succès 1. Afficher tous les articles et leur prix 2. Modifier le nom d'un article 3. Modifier le prix d'un article 4. Effacer un article 5. Quitter Votre choix: 1 1. Sac à dos : 0 euros 2. Non défini 3. Non défini 4. Non défini 5. Non défini 6. Non défini 7. Non défini 8. Non défini 9. Non défini 10. Non défini 1. Afficher tous les articles et leur prix 2. Modifier le nom d'un article 3. Modifier le prix d'un article 4. Effacer un article 5. Quitter Votre choix: 3 Quel numéro d'article voulez-vous modifier ? 1 Quel est le nouveau prix de l'article 1 ? 30 Prix modifié avec succès 1. Afficher tous les articles et leur prix 2. Modifier le nom d'un article 3. Modifier le prix d'un article 4. Effacer un article 5. Quitter Votre choix: 1 1. Sac à dos : 30 euros 2. Non défini 3. Non défini 4. Non défini 5. Non défini 6. Non défini 7. Non défini 8. Non défini 9. Non défini 10. Non défini 1. Afficher tous les articles et leur prix 2. Modifier le nom d'un article 3. Modifier le prix d'un article 4. Effacer un article 5. Quitter Votre choix: 2 Quel numéro d'article voulez-vous modifier ? 2 Quel est le nouveau nom de l'article 2 ? Manteau Nom modifié avec succès 1. Afficher tous les articles et leur prix 2. Modifier le nom d'un article 3. Modifier le prix d'un article 4. Effacer un article 5. Quitter Votre choix: 3 Quel numéro d'article voulez-vous modifier ? 2 Quel est le nouveau prix de l'article 2 ? 79 Prix modifié avec succès 1. Afficher tous les articles et leur prix 2. Modifier le nom d'un article 3. Modifier le prix d'un article 4. Effacer un article 5. Quitter Votre choix: 1 1. Sac à dos : 30 euros 2. Manteau : 79 euros 3. Non défini 4. Non défini 5. Non défini 6. Non défini 7. Non défini 8. Non défini 9. Non défini 10. Non défini 1. Afficher tous les articles et leur prix 2. Modifier le nom d'un article 3. Modifier le prix d'un article 4. Effacer un article 5. Quitter Votre choix: 4 Quel numéro d'article voulez-vous modifier ? 1 Article retiré avec succès 1. Afficher tous les articles et leur prix 2. Modifier le nom d'un article 3. Modifier le prix d'un article 4. Effacer un article 5. Quitter Votre choix: 1 1. Non défini 2. Manteau : 79 euros 3. Non défini 4. Non défini 5. Non défini 6. Non défini 7. Non défini 8. Non défini 9. Non défini 10. Non défini 1. Afficher tous les articles et leur prix 2. Modifier le nom d'un article 3. Modifier le prix d'un article 4. Effacer un article 5. Quitter Votre choix: 5
Attention à biem gérer les choix invalides :
1. Afficher tous les articles et leur prix 2. Modifier le nom d'un article 3. Modifier le prix d'un article 4. Effacer un article 5. Quitter Votre choix: 0 Ce choix est invalide 1. Afficher tous les articles et leur prix 2. Modifier le nom d'un article 3. Modifier le prix d'un article 4. Effacer un article 5. Quitter Votre choix: -1 Ce choix est invalide 1. Afficher tous les articles et leur prix 2. Modifier le nom d'un article 3. Modifier le prix d'un article 4. Effacer un article 5. Quitter Votre choix: 15 Ce choix est invalide 1. Afficher tous les articles et leur prix 2. Modifier le nom d'un article 3. Modifier le prix d'un article 4. Effacer un article 5. Quitter Votre choix: dfgdfgdfg Ce choix est invalide 1. Afficher tous les articles et leur prix 2. Modifier le nom d'un article 3. Modifier le prix d'un article 4. Effacer un article 5. Quitter Votre choix: 4 Quel numéro d'article voulez-vous modifier ? un Quel numéro d'article voulez-vous modifier ? -1 Quel numéro d'article voulez-vous modifier ? 11 Quel numéro d'article voulez-vous modifier ? 1 Article retiré avec succès
Solution
// déclaration et initialisation du tableau noms de 10 strings
string[] noms = new string[10];
// déclaration et initialisation du tableau prix de 10 entiers
int[] prix = new int[10];
// déclaration et initialisation de la variable contenant le choix de l'utilisateur
int choix = 0;
// on commence la boucle faire...tant que... (do/while)
do {
// on affiche le menu (le préfixe @ permet d'écrire un string sur plusieurs lignes)
Console.Write(@"
1. Afficher tous les articles et leur prix
2. Modifier le nom d'un article
3. Modifier le prix d'un article
4. Effacer un article
5. Quitter
Votre choix: ");
// on lit le choix de l'utilisateur
// => choix sera à 0 si l'entrée n'est pas un nombre
int.TryParse(Console.ReadLine(), out choix);
// affichage d'une ligne vide
Console.WriteLine();
// si le choix est 1...
if (choix == 1) {
// i varie de 0 à 9
for(int i = 0; i < 10; i++) {
// si, pour l'élément à l'indice i, le nom est assigné ou le prix est assigné...
if (noms[i] != null || prix[i] != 0) {
// on affiche le nom et le prix
Console.WriteLine($"{i + 1}. {noms[i]} : {prix[i]} euros");
} else { // sinon...
// on affiche "Non défini"
Console.WriteLine($"{i + 1}. Non défini");
}
}
} else if (choix >= 2 && choix <= 4) { // sinon, si le choix est compris entre 2 et 4...
// on va demander à l'utilisateur l'index de l'article à modifier
// indexArticle va contenir le numéro d'article à modifier
int indexArticle = -1;
do {
// affichage de la question
Console.Write("Quel numéro d'article voulez-vous modifier ? ");
// on lit indexArticle sur la console
int.TryParse(Console.ReadLine(), out indexArticle);
// si l'index est inférieur à 1 ou supérieur à 10
if (indexArticle < 1 || indexArticle > 10) {
// on met indexArticle à -1
indexArticle = -1;
}
}while(indexArticle == -1); // on boucle sur la demande de l'indice tant que le nombre n'est pas correct
// si le choix est 2 (modification du nom)
if (choix == 2) {
// on affiche la question du nom
Console.Write($"Quel est le nouveau nom de l'article {indexArticle} ? ");
// on lit le nouveau nom
string nom = Console.ReadLine();
// on l'assigne au bon indice dans la tableau noms
noms[indexArticle - 1] = nom;
// on affiche le retour utilisateur
Console.WriteLine("Nom modifié avec succès");
} else if (choix == 3) { // ou si le choix est 3 (modification du prix)
// on affiche la question du prix
Console.Write($"Quel est le nouveau prix de l'article {indexArticle} ? ");
// on lit le nouveau prix
int nouveauPrix = int.Parse(Console.ReadLine());
// on l'assigne au bon indice dans la tableau prix
prix[indexArticle - 1] = nouveauPrix;
// on affiche le retour utilisateur
Console.WriteLine("Prix modifié avec succès");
} else if (choix == 4) { // ou si le choix est 4 (suppression de l'article)
// on efface le nom
noms[indexArticle - 1] = null;
// on efface le prix
prix[indexArticle - 1] = 0;
// on affiche le retour utilisateur
Console.WriteLine("Article retiré avec succès");
}
} else if (choix != 5) { // si ce n'est pas 1, ni 2, ni 3, ni 4, ni 5...
// on affiche le message d'erreur
Console.WriteLine("Ce choix est invalide");
}
} while(choix != 5); // on arrête cette boucle quand le choix est 5