Guide des Tableaux à Longueur Variable en C : Un Guide pour Débutants
Salut à toi, futurs programmeurs ! Aujourd'hui, nous allons entreprendre un voyage passionnant dans le monde des Tableaux à Longueur Variable (TLV) en C. Ne t'inquiète pas si tu es nouveau dans le domaine de la programmation – je serai ton guide amical, expliquant tout étape par étape. Alors, plongeons dedans !
Qu'est-ce que les Tableaux à Longueur Variable ?
Avant de commencer, comprens ce qu'est un Tableau à Longueur Variable. Imagine que tu organises une fête, mais tu ne sais pas combien d'invités vont venir. Ne serait-il pas merveilleux si tu pouvais préparer une table qui s'ajuste magiquement en fonction du nombre d'invités ? C'est exactement ce que font les TLV en programmation !
Un Tableau à Longueur Variable est un tableau dont la taille est déterminée au moment de l'exécution (lorsque le programme est en cours de fonctionnement) plutôt qu'au moment de la compilation (lorsque le programme est préparé à être exécuté). Cette fonctionnalité a été introduite dans la norme C99 et offre une plus grande flexibilité dans la création de tableaux.
Créer un Tableau à Longueur Variable
Commençons par un exemple simple pour créer un TLV :
#include <stdio.h>
int main() {
int n;
printf("Combien de nombres veux-tu stocker ? ");
scanf("%d", &n);
int numbers[n]; // C'est notre Tableau à Longueur Variable
printf("Entrez %d nombres :\n", n);
for (int i = 0; i < n; i++) {
scanf("%d", &numbers[i]);
}
printf("Vous avez entré : ");
for (int i = 0; i < n; i++) {
printf("%d ", numbers[i]);
}
return 0;
}
Décomposons cela :
- Nous demandons à l'utilisateur combien de nombres ils veulent stocker.
- Nous créons un tableau
numbers
avec la taillen
que l'utilisateur a saisie. - Nous utilisons une boucle pour saisir
n
nombres de l'utilisateur. - Enfin, nous affichons tous les nombres que l'utilisateur a entrés.
C'est la beauté des TLV – nous n'avions pas besoin de savoir la taille du tableau lors de l'écriture du code. La taille est déterminée lorsque le programme s'exécute !
Tableaux à Deux Dimensions Variable
Maintenant, levons le niveau et regardons les TLV à deux dimensions. Imagine que tu crées un plan de siège pour un mariage, mais tu ne sais pas combien de tables il y aura ou combien de places aura chaque table. Les TLV à deux dimensions peuvent t'aider !
Voici un exemple :
#include <stdio.h>
int main() {
int tables, seats;
printf("Combien de tables ? ");
scanf("%d", &tables);
printf("Combien de places par table ? ");
scanf("%d", &seats);
int seating[tables][seats]; // Notre TLV 2D
// Assigner les numéros de places
for (int i = 0; i < tables; i++) {
for (int j = 0; j < seats; j++) {
seating[i][j] = i * seats + j + 1;
}
}
// Imprimer l'arrangement des sièges
printf("\nArrangement des sièges :\n");
for (int i = 0; i < tables; i++) {
printf("Table %d: ", i + 1);
for (int j = 0; j < seats; j++) {
printf("%3d ", seating[i][j]);
}
printf("\n");
}
return 0;
}
Dans cet exemple :
- Nous demandons à l'utilisateur le nombre de tables et de places par table.
- Nous créons un TLV 2D
seating
avec les dimensions[tables][seats]
. - Nous assignons les numéros de places à chaque position.
- Enfin, nous imprimons l'arrangement des sièges.
Cette flexibilité nous permet de créer un plan de siège de n'importe quelle taille, déterminé au moment de l'exécution !
Tableaux Jagged
Maintenant, c'est là que les choses deviennent vraiment intéressantes. Que faire si chaque table à notre mariage a un nombre différent de places ? Entrez les tableaux jagged – un tableau de tableaux où chaque sous-table peut avoir une longueur différente.
Bien que C ne supporte pas directement les tableaux jagged comme certains autres langages, nous pouvons les simuler en utilisant des TLV et des pointeurs. Voici comment :
#include <stdio.h>
#include <stdlib.h>
int main() {
int tables;
printf("Combien de tables ? ");
scanf("%d", &tables);
int *seats = malloc(tables * sizeof(int));
int **seating = malloc(tables * sizeof(int*));
// Entrer le nombre de places pour chaque table
for (int i = 0; i < tables; i++) {
printf("Combien de places à la table %d ? ", i + 1);
scanf("%d", &seats[i]);
seating[i] = malloc(seats[i] * sizeof(int));
}
// Assigner les numéros de places
for (int i = 0; i < tables; i++) {
for (int j = 0; j < seats[i]; j++) {
seating[i][j] = j + 1;
}
}
// Imprimer l'arrangement des sièges
printf("\nArrangement des sièges :\n");
for (int i = 0; i < tables; i++) {
printf("Table %d: ", i + 1);
for (int j = 0; j < seats[i]; j++) {
printf("%3d ", seating[i][j]);
}
printf("\n");
}
// Libérer la mémoire allouée
for (int i = 0; i < tables; i++) {
free(seating[i]);
}
free(seating);
free(seats);
return 0;
}
Cet exemple est plus complexe, donc décomposons-le :
- Nous créons un tableau
seats
pour stocker le nombre de places pour chaque table. - Nous créons un pointeur vers un pointeur
seating
pour simuler notre tableau jagged. - Nous allouons de la mémoire dynamiquement pour chaque table en fonction de son nombre de places.
- Nous assignons les numéros de places et imprimons l'arrangement comme avant.
- Enfin, nous libérons la mémoire allouée pour éviter les fuites mémoires.
Cette approche nous permet d'avoir un nombre différent de places pour chaque table – vraiment flexible !
Table des Méthodes
Voici un tableau de référence rapide des méthodes que nous avons utilisées dans nos exemples :
Méthode | Description | Exemple |
---|---|---|
scanf() |
Lit un input formaté de l'utilisateur | scanf("%d", &n); |
printf() |
Imprime un output formaté sur la console | printf("Hello, %s!", name); |
malloc() |
Alloue de la mémoire dynamiquement | int *arr = malloc(n * sizeof(int)); |
free() |
Libère la mémoire allouée dynamiquement | free(arr); |
Souviens-toi, avec grand pouvoir vient grande responsabilité. Les TLV et l'allocation de mémoire dynamique sont des outils puissants, mais ils doivent être utilisés avec précaution pour éviter des problèmes comme le débordement de pile ou les fuites mémoires.
Et voilà ! Tu viens de faire tes premiers pas dans le monde des Tableaux à Longueur Variable en C. Souviens-toi, la pratique rend parfait, donc n'ayez pas peur d'expérimenter avec ces concepts. Bonne programmation !
Credits: Image by storyset