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??
*************************
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]);
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.
#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]);
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");
}
@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
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:
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.
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");
}