Insertion d'un élément dans un tableau en C [Fermé]

Signaler
-
lotfi de
Messages postés
83
Date d'inscription
dimanche 4 novembre 2012
Statut
Membre
Dernière intervention
6 mai 2013
-
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

Messages postés
345
Date d'inscription
mercredi 14 janvier 2009
Statut
Membre
Dernière intervention
28 juillet 2012
60
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
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 81062 internautes nous ont dit merci ce mois-ci

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]);

}

}
lotfi de
Messages postés
83
Date d'inscription
dimanche 4 novembre 2012
Statut
Membre
Dernière intervention
6 mai 2013

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???
@ lucieb31 :Dommage j'ai pas compris ce tu as dis :/,mais en tt cas merci pr ta reponse
ben fait gaffe
@neotarik : wé ç ça ce que le programme demande, j'éssayé avec ton code mais ça marche pas :/
Messages postés
9713
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
13 septembre 2019
1118
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.
Aaah bon!,j'ai réécris le code comme vous dites mais le programme ne fonctionne pas ou est le probléme ?
Char Snipeur
Messages postés
9713
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
13 septembre 2019
1118
sais pas, je ne sais pas à quoi il ressemble ton code modifié.
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]);

}

}
Char Snipeur
Messages postés
9713
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
13 septembre 2019
1118
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.
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!!
Char Snipeur
Messages postés
9713
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
13 septembre 2019
1118
Et en français, qu'est-ce que ça donne ? enfoui le Yoda qui est en toi.
Messages postés
2483
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
8 juin 2016
214
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+...
@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
JooS
Messages postés
2483
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
8 juin 2016
214
comment ça "existe", tu cherche a remplacer ou a insérer une valeur dans une nouvelle case??
nn, je cherche à insérer une valeur dans une position sans perdre la valeur ancienne qui existe déjà dans la même position.
JooS
Messages postés
2483
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
8 juin 2016
214
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...!!!
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
JooS
Messages postés
2483
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
8 juin 2016
214
Ah d'accord, ben tu peut créer un second tableau où tu affichera les nouvelles valeurs...
Messages postés
9713
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
13 septembre 2019
1118
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.
Messages postés
2483
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
8 juin 2016
214
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");   
}   
Mnt le programme fonctionne bien =),vraiment un grande merci.