Insertion d'un élément dans un tableau en C

Fermé
Hanan - 24 janv. 2011 à 22:27
lotfi de Messages postés 83 Date d'inscription dimanche 4 novembre 2012 Statut Membre Dernière intervention 6 mai 2013 - 7 avril 2013 à 11:07
Bonjour,



J'ai écris un programme en langage c permettant d'insérer un élément dans un tableau déjà remplis mais sans perdre aucun élément. voilà le code:
"
#include <stdio.h>
void main ()
{
float tab[100];
int x,p,i;
tab[0]=13.44;
tab[1]=10.6;
tab[2]=12;
tab[3]=0;
tab[4]=111;
tab[5]=2;
tab[6]=1.5;
tab[7]=15;
tab[8]=19;
tab[9]=1;
printf("\n le tableau avant l'insertion est : \n");
for(i=0;i<=9;i++){
printf("%.2f ",tab[i]);
}
/*saisir le nombre et la position*/
printf("donner la valeur de x \n");
scanf("%d",&x);
printf("donner la position \n");
scanf("%d",&p);
/*la position p doit être entre 1 et 9*/
if(p>=0 && p<=9)
{
for(i=11;i<=p+1;i++){
tab[i]=tab[i-1]; }
tab[p]=x;}
/*l'affichage du tableau aprés l'insertion*/
printf("\n le tableau aprés l'insertion est : \n");
for(i=0;i<=9;i++){
printf("%.2f ",tab[i]);

}

}

"
le probléme dans cette partie :

for(i=11;i<=p+1;i++){
tab[i]=tab[i-1]; }
parce que" i " il incremente chaque fois :s,svp qlq a des idées pr résoudre ce prb??
*************************

merci d'avance

13 réponses

lucieb31 Messages postés 345 Date d'inscription mercredi 14 janvier 2009 Statut Membre Dernière intervention 28 juillet 2012 62
24 janv. 2011 à 23:23
ton i commence à 11, tu peux pas entrer dans la boucle vu que 1 < p < 9 or ta boucle s'arrete quand i <= p + 1 ce qui est tjrs vrai vu que 11 > 10
5
d'après ce que j'ai compris vous voudrez faire un prog.c qui fait insères un élément dans un tableau déjà remplis dans un position et faire un translation du tableau a partir de cette position si c'est le cas tester avec ce prog

#include <stdio.h>
void main ()
{
float tab[100];
float x,p,i;
tab[0]=13.44;
tab[1]=10.6;
tab[2]=12;
tab[3]=0;
tab[4]=111;
tab[5]=2;
tab[6]=1.5;
tab[7]=15;
tab[8]=19;
tab[9]=1;
printf("\n le tableau avant l'insertion est :\n ");
for(i=0;i<=9;i++){
printf("%.2f | ",tab[i]\n);
}
/*saisir le nombre et la position*/
printf("donner la valeur de x \n");
scanf("%f",&x);
printf("donner la position \n");
scanf("%f",&p);
/*la position p doit être entre 1 et 9*/
if(p>=0 && p<=9)
{
for(i=p;i<=10;i++){
tab[i+1]=tab[i]; }
tab[p]=x;}
/*l'affichage du tableau aprés l'insertion la taille de votre tableau devient 10 parce que on y a un élément*/
printf("\n le tableau aprés l'insertion est : \n");
for(i=0;i<=10;i++){
printf("%.2f ",tab[i]);

}

}
1
lotfi de Messages postés 83 Date d'inscription dimanche 4 novembre 2012 Statut Membre Dernière intervention 6 mai 2013
7 avril 2013 à 11:07
oups au niveau de redomnsionner de tableau :
for(i=p;i<=10;i++){
tab[i+1]=tab[i]; }
comment faire ça ??? le contenu de tab[i+1] a éte ecraser nn???
0
Ce qui ne fonctionne pas c'est :quand on insére un nombre x dans une position p la valeur ancienne dans cette position il perds!!
1
Char Snipeur Messages postés 9688 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 2 octobre 2020 1 333
25 janv. 2011 à 16:17
Et en français, qu'est-ce que ça donne ? enfoui le Yoda qui est en toi.
0
@ lucieb31 :Dommage j'ai pas compris ce tu as dis :/,mais en tt cas merci pr ta reponse
0
ben fait gaffe
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
@neotarik : wé ç ça ce que le programme demande, j'éssayé avec ton code mais ça marche pas :/
0
Char Snipeur Messages postés 9688 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 2 octobre 2020 1 333
25 janv. 2011 à 11:09
dommage que tu ne comprenne pas lucieb, car elle a raison.
Je rajouterai qu'il n'y a aucune raison que ta boucle commence à 11. Et que ta copie de tableaux est mal faite, il faut la faire dans l'autre sens, sinon tu ne fait que propager le dernier nombre.
0
Aaah bon!,j'ai réécris le code comme vous dites mais le programme ne fonctionne pas ou est le probléme ?
0
Char Snipeur Messages postés 9688 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 2 octobre 2020 1 333
25 janv. 2011 à 12:31
sais pas, je ne sais pas à quoi il ressemble ton code modifié.
0
voilà le code modifié :

#include <stdio.h>
void main ()
{
float tab[100];
float x,p,i;
tab[0]=13.44;
tab[1]=10.6;
tab[2]=12;
tab[3]=0;
tab[4]=111;
tab[5]=2;
tab[6]=1.5;
tab[7]=15;
tab[8]=19;
tab[9]=1;
printf("\n le tableau avant l'insertion est :\n ");
for(i=0;i<=9;i++){
printf("%.2f \n",tab[i]);
}
/*saisir le nombre et la position*/
printf("donner la valeur de x \n");
scanf("%f",&x);
printf("donner la position \n");
scanf("%f",&p);
/*la position p doit être entre 1 et 9*/
if(p>=0 && p<=9)
{
for(i=p;i<=10;i++){
tab[i+1]=tab[i]; }
tab[p]=x;}
/*l'affichage du tableau aprés l'insertion */
printf("\n le tableau aprés l'insertion est : \n");
for(i=0;i<=10;i++){
printf("%.2f ",tab[i]);

}

}
0
Char Snipeur Messages postés 9688 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 2 octobre 2020 1 333
25 janv. 2011 à 14:41
je ne vois rien qui cloche. Soit plus précis : qu'est-ce qui ne fonctionne pas ?
affiche les valeurs saisies x et p pour être sure.
0
JooS Messages postés 2465 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 228
Modifié par JooS le 25/01/2011 à 15:20
Salut... est ce que c'est pour remplacer une valeur ce trouvant dans le tableau, ou pour insérer une nouvelle...??

#include <stdio.h>        
void main () {       
  float tab[100],p;       
  int i;       
  tab[0]=13.44;       
  tab[1]=10.6;       
  tab[2]=12;       
  tab[3]=0;       
  tab[4]=111;       
  tab[5]=2;       
  tab[6]=1.5;       
  tab[7]=15;       
  tab[8]=19;       
  tab[9]=1;       

  printf("\nLe tableau avant l'insertion est:\n\n");       

  for(i=0;i<=9;i++) printf("%.2f\t",tab[i]);       //affichage du tableau       

  printf("\nDonnez le numero de la case a remplacer, suivi de la valeur a inserer: ");       
  scanf("%d%f",&i,&p);          //choix de la case a traiter, et de la valeur a insérer        

  while(i) {                        //tant que i existe(vrai), soit un nombre n'importe...       
    if(i>=0 && i<=9) {         //le cas ou i existe dans notre liste       
       tab[i]=p;       //remplacer la valeur de la case i par la valeur p       
           
       for(i=0;i<=9;i++) {        //reafficher le tableau       
         printf("%.2f\t",tab[i]);       
       }       

       printf("\nDonner le n°= de case a remplacer, suivi de la valeur a inserer: ");       
       scanf("%d%f",&i,&p);  //possibilité de refaire l'operation       
    }                                    //fin de si       
         
    else {                             //le cas ou i n'existe pas dans notre liste       
      printf("\nLe numero de case est de 0 a 9, suivi de la valeur a inserer: ");       
      scanf("%d%f",&i,&p);       
    }                                     //fin de else       
  }                                       //fin de tant que       
  scanf("\n");       
}       



Peut être que ça t'aidera...
a+...
0
@JooS :
le probléme existe encore, la valeur inséré remplace la valeur ancienne :s,mais tu m'a fais pousser de penser à la situation si l'utilisateur tape une position >9 et le donne une 2éme chanse.
merci bcp
0
JooS Messages postés 2465 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 228
Modifié par JooS le 25/01/2011 à 15:22
comment ça "existe", tu cherche a remplacer ou a insérer une valeur dans une nouvelle case??
0
nn, je cherche à insérer une valeur dans une position sans perdre la valeur ancienne qui existe déjà dans la même position.
0
JooS Messages postés 2465 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 228
Modifié par JooS le 25/01/2011 à 15:29
o_O', tu veut avoir deux valeurs dans une seul case(variable), je pense pas que c'est possible...
sinon, qu'est ce qui s'afficherais, l'ancienne ou la nouvelle valeur...!!!
0
nn, juste on incremente une autre case, par exemple c'est l'utilisateur veut insérer la valeur 19 dans la position 4
le tableau avant l'insertion:
13.44 10.6 12 0 111 2 1.5 15 19 1
le tableau aprés l'insertion:

13.44 10.6 12 19 0 111 2 1.5 15 19 1
0
JooS Messages postés 2465 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 228
25 janv. 2011 à 16:33
Ah d'accord, ben tu peut créer un second tableau où tu affichera les nouvelles valeurs...
0
Char Snipeur Messages postés 9688 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 2 octobre 2020 1 333
25 janv. 2011 à 16:18
ba oui, suis-je bête !
Comme je te l'avais déjà dit, il faut que tu inverses ta boucle, sinon tu propages la dernière valeur. C'est à dire qu'il faut que tu commences de la fin et que tu reviennes à la position d'insertion.
0
JooS Messages postés 2465 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 228
Modifié par JooS le 25/01/2011 à 17:13
Voila, c'est tout ce que j'ai pu faire, essaye...a+

#include <stdio.h>   
  void main () {   
  float tab[100],p;   
  int i,n=1,j;   
  tab[0]=5;   
  tab[1]=9;   
  tab[2]=12;   
  tab[3]=19;   
  tab[4]=6;   
  tab[5]=8;   
  tab[6]=1.5;   
  tab[7]=15;   
  tab[8]=19;   
  tab[9]=1;   

  printf("\nle tableau avant l'insertion est:\n\n");   

  for(i=0;i<=9;i++) printf("%.2f\t",tab[i]); //affichage du tableau

  printf("\nLe N°= de case a remplacer, suivi de la valeur a inserer: ");   
  scanf("%d%f",&i,&p); //lire le numero de case a traiter, et la valeur a inserer dedant

  while(i) {              //tant que i existe, soit un nombre n'importe...
    if(i>=0 && i<9+n) {     //le cas ou i existe dans notre liste   
      for(j=9+n;j>=i;j--) {   
        tab[j+1]=tab[j];   
      }   
      tab[i]=p;   
      for(i=0;i<=9+n;i++) {  //reafficher le tableau
        printf("%.2f\t",tab[i]);   
      }   
      printf("\nDonner le numero de case a remplacer, suivi de la valeur a inserer: ");   
      scanf("%d%f",&i,&p); //possibilité de refaire l'operation
      n++;    //on incremente a chaque reutilisation, comme ça, si on avais 10nombres, on aura 11, puis 12...
  }   
    else {                 //le cas ou i n'existe pas dans notre liste
      printf("\nLe numero de case est de 0 a %d, suivi de la valeur a inserer: ",8+n);   
      scanf("%d%f",&i,&p);   
    }   
  }   
scanf("\n");   
}   
0
Mnt le programme fonctionne bien =),vraiment un grande merci.
0