Supprimer une case d'un tableau en c [Fermé]

Signaler
-
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
-
Bonjour,
je suis novice en C et en fusant ma 1ere application sur les tableau je me suis trouver dans un problème :
je veux supprimer un champ d'un tableau en C j'ai écris mon programme mais la solution n'est pas l'idéal :( et j'ai pas trouver la solution :(

voici mon code et j'aimerais bien trouver une solution !!!! aidez moi :(
#include <stdio.h>
#include <conio.h>

int main() {

int t[50], n, v, i, ind ;
v=0;
printf ("taille de tableau");
scanf("%i",&n);

for (i=0;i<n;i++)
{

printf("t[%i]",i);
scanf("%i",&t[i]);
}


printf("donner l'indice à supprimer");
scanf("%i",&ind);

for(i=ind;i<=n;i++)
{
t[i]=t[i+1];
printf("%i##",t[i]);


}
for (i=0;i<n;i++){
printf("%i**",t[i]);
}getch();
return 0;

}

4 réponses

Messages postés
698
Date d'inscription
dimanche 1 novembre 2009
Statut
Membre
Dernière intervention
31 décembre 2017
135
mais la solution n'est pas l'idéal
Qu'entends-tu par là ?
for(i=ind;i<=n;i++)
Ton indice débordera, il faut mettre: 'i<n-1', car tu utiises 't[i+1]'.
Bonne continuation.
salut,
merci pour ta réponse mais le problème est que en mettant 'i<n-1' j'ai une répétition de la valeur du derniére case du tableau et j'ai pas compris pourquoi :(
bon a vrais dire j'ai trouver une solution mais je sais pas car je crois que c'est la tricherie ^^ car j'ai ajouter après la boucle for en question" n--;" et comme ça le résultat afficher a la fin est correcte et je ne trouve pas la dernière case en double !!!
es que cette solution est logique ou on peut avoir une solution concrète a mon problème ???
voici le code après la correction
#include <stdio.h>
#include <conio.h>

int main() {

int t[50], n, v, i, ind ;
v=0;
printf ("taille de tableau");
scanf("%i",&n);

for (i=0;i<n;i++)
{
printf("t[%i]",i);
scanf("%i",&t[i]);
}
printf("donner l'indice à supprimer");
scanf("%i",&ind);

for(i=ind;i<n-1 ;i++)
{
t[i]=t[i+1];

}
n--;
for (i=0;i<n;i++){
printf("%i**",t[i]);
}getch();
return 0;

}
Messages postés
698
Date d'inscription
dimanche 1 novembre 2009
Statut
Membre
Dernière intervention
31 décembre 2017
135
car j'ai ajouter après la boucle for en question" n--;" et comme ça le résultat afficher a la fin est correcte et je ne trouve pas la dernière case en double
C'est tout à fait logique; puisque tu supprimes un élément, il y a ... un élément de moins ;-)
Bonne nuit.
merci pour ta réponse
et j'ai une dernière question :
qu'es que je dois changer dans mon code pour pouvoir ajouter une case !!!! et es que c'est possible de changer que la boucle for simplement merci
Messages postés
698
Date d'inscription
dimanche 1 novembre 2009
Statut
Membre
Dernière intervention
31 décembre 2017
135
Ajouter, c'est comme supprimer; il faudra décaler le tableau, mais évidemment dans l'autre sens.
Il faudra simplement ajouter une saisie de la valeur à ajouter et un test pour ne pas déborder la taille du tableau (d'ailleurs tu aurais dû déjà faire un test (tu ne peux supprimer qu'un indice inférieur à 'n')).
Bonne nuit.
merci bien pour ton aide et tes conseils !!!!! bonne nuit a toi aussi
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 688
Salut
Je rajouterai également un point fondamental.
Si tu souhaites rajouter une case, il faut que tu vérifies que le tableau est assez grand pour contenir ce nouvel élément. Si c'est n'est pas le cas, tu devras allouer une case supplémentaire.
Il est donc primordial pour ce genre d'exercice de ne pas utiliser un tableau mais un pointeur sur une zone du tas (tableau dynamique). Ainsi, tu pourras réallouer la taille si besoin. En pratique, dès qu'on a besoin d'une case, on réalloue pour une dizaine de case (à changer suivant les besoins) histoire de ne pas appeler la fonction (realloc) trop souvent et perdre en efficacité.

Cdlt,