Transformer un tableau : décaler, insérer, supprimer
Modifier un tableau sur place : déplacer les valeurs, en ajouter, en retirer ou en filtrer.
Ce que tu vas apprendre
- Décaler les valeurs d'un tableau dans le bon sens
- Insérer et supprimer une valeur en mettant
nà jour - Filtrer un tableau sur place avec un second indice
Décaler sans écraser
Pour décaler vers la gauche, on parcourt de gauche à droite : t[i] = t[i + 1]. Pour décaler vers la droite, on parcourt de droite à gauche : t[i] = t[i - 1].
Dans le mauvais sens, on recopie une valeur déjà écrasée et tout le tableau finit rempli de la même valeur. Fais l'essai sur papier avec 3 cases.
Insérer et supprimer
Insérer à la position p : décaler vers la droite à partir de la fin jusqu'à p, écrire la nouvelle valeur dans t[p], puis n++.
Supprimer la position p : décaler vers la gauche à partir de p, puis n--. Le tableau garde sa taille déclarée ; c'est n qui indique combien de cases sont utilisées.
Filtrer avec deux indices
Pour garder seulement certaines valeurs, on utilise un indice de lecture i et un indice d'écriture j : chaque valeur gardée est copiée en t[j], puis j avance. À la fin, j est la nouvelle taille.
Exemples commentés
1.Retirer les zéros
#include <stdio.h>
int main(void) {
int t[100], n;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d", &t[i]);
}
int j = 0; // prochaine case où écrire
for (int i = 0; i < n; i++) {
if (t[i] != 0) {
t[j] = t[i];
j++;
}
}
n = j; // nouvelle taille
for (int i = 0; i < n; i++) {
printf(i > 0 ? " %d" : "%d", t[i]);
}
printf("\n");
return 0;
}Entrée
6 0 3 0 0 7 1
Sortie
3 7 1
j avance seulement quand on garde une valeur. L'ordre des valeurs gardées est conservé.
2.Ajouter une valeur au début
#include <stdio.h>
int main(void) {
int t[101], n, v;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d", &t[i]);
}
scanf("%d", &v);
for (int i = n; i > 0; i--) { // de droite à gauche !
t[i] = t[i - 1];
}
t[0] = v;
n++;
for (int i = 0; i < n; i++) {
printf(i > 0 ? " %d" : "%d", t[i]);
}
printf("\n");
return 0;
}Entrée
3 4 5 6 9
Sortie
9 4 5 6
On décale depuis la fin pour ne rien écraser, et on réserve une case de plus (t[101]) pour la valeur ajoutée.
Chaque exemple est compilé et exécuté automatiquement pour garantir la sortie affichée.
Erreurs fréquentes
Décaler dans le mauvais sens
À éviter
for (int i = 1; i <= n; i++)
t[i] = t[i - 1]; // tout devient t[0]À préférer
for (int i = n; i > 0; i--)
t[i] = t[i - 1];Vers la droite, on part de la fin ; vers la gauche, on part du début.
Oublier de mettre n à jour
Après une insertion ou une suppression, la boucle d'affichage doit utiliser la nouvelle taille : n++ ou n--.
Entraîne-toi
5 questions variées pour fixer la leçon : choix, résultat à prévoir, ligne à compléter, code à remettre dans l'ordre, erreur à trouver.
À toi de jouer !
18 exercices pour mettre cette leçon en pratique, du plus simple au plus avancé.