Problemme dans un programme en c

Résolu/Fermé
reggaerai Messages postés 15 Date d'inscription mercredi 25 novembre 2009 Statut Membre Dernière intervention 12 novembre 2012 - 25 nov. 2009 à 17:21
reggaerai Messages postés 15 Date d'inscription mercredi 25 novembre 2009 Statut Membre Dernière intervention 12 novembre 2012 - 26 nov. 2009 à 00:08
Bonjour,
je viens de faire un programme qui permet de faire l'insertion d'un nouveau élément dans un tableau mais il y a un problème car quand je lui donne la positon de l'élément à ajouter inférieur à la taille du tableau il insère l'élément dans la position+1 voila le programme si'il ya quelqu'un qui peut m'aider.
merci.

#include<conio.h>
#include<stdio.h>
void main()
{
int taille,dim,i,tab[10],p,val;
clrscr();
printf("donner la dimention du tableau : ");
scanf("%d",&dim);
printf("\ndonner la taille du tableau : ");
scanf("%d",&taille);
printf("============== charger le tableau =============\n");
for(i=0;i<taille;i++)
{
printf("\n t[%d] = ",i+1);
scanf("%d",&tab[i]);
}
printf("Donner la position de l'element ajouter");
scanf("%d",&p);
if(p<0 || p>=dim)
printf("depassement du tableau");
else
{
printf("Donner la valleur de l'element a ajouter: ");
scanf("%d",&val);
if(p >= taille)
{
p=taille;
tab[p]=val;
}
else
{
for(i=taille;i>p;i--)
{
tab[i]=tab[i-1];
tab[p]=val;
}
}
taille++;
printf("voila le nouveau tableau : ");
for(i=0;i<taille;i++)
{
printf("\ntab[%d]=%d",i+1,tab[i]);
}
}
getch();
}

4 réponses

Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 660
25 nov. 2009 à 19:58
for(i=taille;i>p;i--)
{
tab[i]=tab[i-1];
tab[p]=val;
}

ton tab[p] = val, tu veux le faire après avoir décalé tous les éléments, non ? De plus il faut le faire une seule fois. Alors pourquoi le mettre dans la boucle ? il faut le mettre juste après la boucle.

Ceci a causé ton bug, car dans la première fois que la boucle se lance, tab[p] est remplacé par val et perd sa valeur. alors quand la boucle veut "décaler le pième élément" pour laisser de la place au nouveau que tu veux mettre, tu as déja mis (plusieurs fois) la nouvelle valeur, donc l'ancienne est en fait complètement perdue.
0
reggaerai Messages postés 15 Date d'inscription mercredi 25 novembre 2009 Statut Membre Dernière intervention 12 novembre 2012
25 nov. 2009 à 23:56
@Pacorabanix
merci beaucoup mon ami ca marche bien maintenant mais il y t(a une un petit problème c'est que les position ca commence de 0 par exemple
t[1]=1
t[2]=2
t[3]=3
je donne la position de l'élément à ajouter est 0 la valeur est 12 j'ai ceci
t[1]=12
t[2]=1
t[3]=2
t[4]=3
comment je dois fait pour que les position commence de 1 et non 0 merci encore.
0
Yuku Messages postés 199 Date d'inscription samedi 22 mars 2008 Statut Membre Dernière intervention 22 mars 2012 4
26 nov. 2009 à 00:01
Tu ne peux pas modifier ça, c'est ainsi, en C, C++ ou Java, le premier indice d'un tableau sera toujours 0.
Bien sûr, tu peux être malin et dans ton printf(), au lieu d'afficher i (qui est l'indice courant dans ta boucle for i de 1 à n), tu affiches i+1.

Exemple : si tu fais une boucle for jusqu'à 4, tu vas devoir en réalité faire une boucle de 0 à 3, donc :

for(i = 0 ; i < 3 ; i++)

Et dans ton for, pour afficher de 1 à 4 au lieu de 0 à 3, tu fais simplement :

printf(i+1);
(pour afficher le numéro que tu veux, attention, un printf(i+1) ne va absolument pas te montrer ce qu'il y a dans la case i+1 du tableau, simplement le nombre i+1 !)

Voilà :)
0
reggaerai Messages postés 15 Date d'inscription mercredi 25 novembre 2009 Statut Membre Dernière intervention 12 novembre 2012
26 nov. 2009 à 00:08
ok merci beaucoup vraiment vos repense mon vraiment aider encore merci
0