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

Signaler
-
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
61
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
4
Merci

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

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

}

}
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???
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!!
Messages postés
9688
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
2 octobre 2020
1 243
Et en français, qu'est-ce que ça donne ? enfoui le Yoda qui est en toi.
@ 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
9688
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
2 octobre 2020
1 243
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 ?
Messages postés
9688
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
2 octobre 2020
1 243
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]);

}

}
Messages postés
9688
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
2 octobre 2020
1 243
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.
Messages postés
2465
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
8 juin 2016
222
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
Messages postés
2465
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
8 juin 2016
222
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.
Messages postés
2465
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
8 juin 2016
222
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
Messages postés
2465
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
8 juin 2016
222
Ah d'accord, ben tu peut créer un second tableau où tu affichera les nouvelles valeurs...
Messages postés
9688
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
2 octobre 2020
1 243
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
2465
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
8 juin 2016
222
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.