Problem d'affichage d'un tableau de float préalablement stoker avec memcpy()

orezza Messages postés 38 Date d'inscription vendredi 1 août 2003 Statut Membre Dernière intervention 12 mai 2005 - 15 déc. 2003 à 18:52
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 - 15 déc. 2003 à 23:51
voila le code que j'ai tapé dans mon prog, j'ai pas mis la source entiere je vous mets kand meme l'arbre à noter que
Liste_note_TP et Liste_note_TD sont des tableaux de float pourriez vous m'aidez c urgent.
A l'affichage j'ai 0.0

typedef struct Arbre
{
int Noeud;
char nom[MAX];
char prenom[MAX];
float liste_note_TP[MAX];
float liste_note_TD[MAX];
char tel[MAX];
struct Arbre *SAG;
struct Arbre *SAD;

} Arbre;

memcpy(Racine->liste_note_TP, Liste_note_TP, sizeof(float)*MAX);
memcpy(Racine->liste_note_TD, Liste_note_TD, sizeof(float)*MAX);

lorsque il vient le moment d'afficher:

printf("\n\tListe des notes de tp: %.1f",Racine->liste_note_TP);
printf("\n\tListe des notes de td: %.1f",Racine->liste_note_TD);

11 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
15 déc. 2003 à 20:25
Racine->liste_note_TP[i] a afficher dans le printf mais pas l'adresse du tableau.
BruNews, ciao...
0
orezza Messages postés 38 Date d'inscription vendredi 1 août 2003 Statut Membre Dernière intervention 12 mai 2005
15 déc. 2003 à 20:48
voila la maniere dont je saisis mes notes
on notera ke j'eregistre d'abord dans a de type float et et apres je fais prends la veleur correspondante a la case du tableau car si je fais un scanf("%f",Liste_note_TP[i] = a);
j'ai un run time Error... je sais pas pkoi ?!

for(i=0; i< nbr; i++)
{
printf("\n\tNote No%d: " , i+1);
scanf("%f", &a);
Liste_note_TP[i] = a;
}

memcpy(Racine->liste_note_TP, Liste_note_TP, sizeof(float)*MAX);
memcpy(Racine->liste_note_TD, Liste_note_TD, sizeof(float)*MAX);

printf("\n\tListe des notes de tp: %.1f",Racine->liste_note_TP[i]);
printf("\n\tListe des notes de td: %.1f",Racine->liste_note_TD[j]);

voila mon nouv code et j'ai toujours des 0.0... HelP
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
15 déc. 2003 à 21:02
Moi, les scanf et autres CONSOLEries...
BruNews, ciao...
0
orezza Messages postés 38 Date d'inscription vendredi 1 août 2003 Statut Membre Dernière intervention 12 mai 2005
15 déc. 2003 à 21:09
BruNews on s'en fout des scanf !

j'ai apporté la correction que tu m'avais dit ie:
si j'ai bien interprété:

dans ma fonction d'affichage

printf("\n\tListe des notes de td: %.1f",Racine->liste_note_TD[i]);

mais ça m'affiche pas les bonnes valeurs...
0

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

Posez votre question
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
15 déc. 2003 à 21:14
salut, juste une tite astuce pour eviter ce genre de déclaration
struct Arbre *SAG;
tu peut faire

typedef struct S_Arbre
{
int Noeud;
char nom[MAX];
char prenom[MAX];
float liste_note_TP[MAX];
float liste_note_TD[MAX];
char tel[MAX];
PT_Arbre SAG;
PT_Arbre SAD;

} Arbre, *PT_Arbre;

désolé si tu le savais deja
0
orezza Messages postés 38 Date d'inscription vendredi 1 août 2003 Statut Membre Dernière intervention 12 mai 2005
15 déc. 2003 à 21:17
lol merci kand meme djl !
oaui je le savais mais remonte dans la conversation et essaye de resoudre mon blem !

Merci d'avance :-) !
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
15 déc. 2003 à 21:19
Et bien teste un reaffichage illico du float que tu inseres dans ton tableau de float pour etre certain.
BruNews, ciao...
0
orezza Messages postés 38 Date d'inscription vendredi 1 août 2003 Statut Membre Dernière intervention 12 mai 2005
15 déc. 2003 à 21:26
J'affiche toute de suite apres avoir saisie mon tableau j'ai okun blem a l'affichage ?!

le problem ne viendrait il pas de :

memcpy(Racine->liste_note_TP, Liste_note_TP, sizeof(float)*MAX);

ou de mon printf ?!
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
15 déc. 2003 à 21:27
oui c'est troublant ton probleme, le bout de code que tu montre me semble juste, peut etre que l'erreur est en amont?
0
orezza Messages postés 38 Date d'inscription vendredi 1 août 2003 Statut Membre Dernière intervention 12 mai 2005
15 déc. 2003 à 21:33
CA ME SOULE TROP ALORS VOILA LE CODE
alors suivez la demarche suivante, tapez 1 saisissez une fiche etudiant puis faite 0 pour kitter la saisie d'un etudiant.
faites 2 cad afficher vous verrez le pb...

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

#define MAX 30
float Liste_note_TP[MAX], Liste_note_TD[MAX];
char NOM[MAX], PRENOM[MAX], TEL[MAX], TEL1[MAX];
int TD, i, j;
//float Liste_note_TP[MAX], Liste_note_TD[MAX];

typedef struct Arbre
{
int td;
int Noeud;
char nom[MAX];
char prenom[MAX];
float liste_note_TP[MAX];
float liste_note_TD[MAX];
char tel[MAX];
struct Arbre *SAG;
struct Arbre *SAD;

} Arbre;

//on affiche l'arbre de maniere decroissante
AfficherArbreCroissant(Arbre *Racine)
{
if (Racine!=NULL)
{
AfficherArbreCroissant(Racine->SAG);
printf("\n\n\tTd:%d ",Racine->td);
printf("\n\tNom: %s",Racine->nom);
printf("\n\tPrenom: %s",Racine->prenom);
printf("\n\tTelephone: %s",Racine->tel);
printf("\n\tNumero de secu: %d", Racine->Noeud);
printf("\n\tListe des notes de tp: %.1f",Racine->liste_note_TP[i]);
printf("\n\tListe des notes de td: %.1f",Racine->liste_note_TD[j]);
AfficherArbreCroissant(Racine->SAD);
}
}

//creation de mon repertoire
Arbre* CreerNoeud(Arbre *Racine,int valeur, char NOM[MAX], char PRENOM[MAX], float Liste_note_TP[MAX], float Liste_note_TD[MAX], char TEL[MAX])
{

if (Racine!= NULL)
{
if (Racine->Noeud>valeur)
{
Racine->SAG=CreerNoeud(Racine->SAG,valeur,NOM,PRENOM,Liste_note_TP,Liste_note_TD,TEL);
}
else
{
Racine->SAD=CreerNoeud(Racine->SAD,valeur,NOM,PRENOM,Liste_note_TP,Liste_note_TD,TEL);
}
}
else
{
Racine=(Arbre*)malloc(sizeof(Arbre));
Racine->Noeud = valeur;
strcpy(Racine->nom, NOM);//je recopie ma chaine de caractere stoker dans NOM dans mon arbre
strcpy(Racine->prenom, PRENOM);//idem
strcpy(Racine->tel, TEL);//idem
Racine->td = TD;
//je copie le bloc d'information stoker dans Liste_note_TP vers
//Racine->liste_note_TP
memcpy(Racine->liste_note_TP, Liste_note_TP, sizeof(float)*MAX);
memcpy(Racine->liste_note_TD, Liste_note_TD, sizeof(float)*MAX);
Racine->SAD = NULL;
Racine->SAG = NULL;
}

return Racine;
}

//permet d'enregistrer l'arbre dans un fichier
EnregArbre(Arbre *Racine, char *NomFic)
{
int nb;

FILE * fic;
fic = fopen(NomFic,"at");

if (Racine!=NULL)
{
nb=Racine->Noeud;
fwrite(&nb,sizeof(int),1,fic);

fclose(fic);
if (Racine->SAD!=NULL || Racine->SAG!=NULL)
{
EnregArbre(Racine->SAG,NomFic);
EnregArbre(Racine->SAD,NomFic);
}
}
}

//permet de charger l'arbre qui avait été sauvé dans un fichier
Arbre *ChargerArbre(Arbre *Racine, char * NomFic)
{
int nb;

FILE * fic;
fic = fopen(NomFic,"rt");
fread(&nb,sizeof(int),1,fic);

while (!feof(fic))
{
Racine = CreerNoeud(Racine,nb,NOM,PRENOM,Liste_note_TP,Liste_note_TD,TEL);
fread(&nb,sizeof(int),1,fic);

}
fclose(fic);

return Racine;
}

//Je recherche l'eleve avec son N° de Td, son nom et son Tel
Arbre* RechercheNoeud(Arbre *Racine, int valeur)
{
if (Racine!=NULL)
{
if( (Racine->Noeud > valeur) )
{
Racine = RechercheNoeud(Racine->SAG,valeur);
}
else
{
if( (Racine->Noeud < valeur) )
{
Racine=RechercheNoeud(Racine->SAD,valeur);
}
}

//return Racine;
}
return Racine;
}

Arbre *Supprimer_Eleve(Arbre * Racine, int valeur)
{
Arbre *NoeudASupprimer;
if ( Racine->Noeud == valeur ) // on a trouvé l'élément à supprimer
{
NoeudASupprimer=Racine;

if( NoeudASupprimer->SAG == NULL ) //si ya pa de SAG, on retourne SAD
return NoeudASupprimer->SAD;
else
{
Racine=NoeudASupprimer->SAG; //sinon on recherche dans SAG l'endroit pour insérer le SAD
while (Racine->SAD!=NULL)
{
Racine=Racine->SAD;
}
Racine->SAD=NoeudASupprimer->SAD;
return NoeudASupprimer->SAG;
}
free(NoeudASupprimer);
}
else
{
if (Racine->Noeud>valeur)
{
Racine->SAG=Supprimer_Eleve(Racine->SAG,valeur);
}
else
{
Racine->SAD=Supprimer_Eleve(Racine->SAD,valeur);
}
}
return Racine;
}

int Menu(void)
{
int Choix;
do
{
system("cls"); //efface l'écran
printf("\n\t==================================================================");
printf("\n\t= =");
printf("\n\t= Gestion d'un repertoire d'eleve =");
printf("\n\t= =");
printf("\n\t==================================================================\n\n\n");
printf("\n\n\t Menu Pricipal\n");
printf("\n\t 1- Ajouter une fiche eleve au repertoire");
printf("\n\t 2- Afficher le repertoire par ordre de td decroissant");
printf("\n\t 3- Rechercher un noeud");
printf("\n\t 4- Supprimer un etudiant du repertoire");
printf("\n\t 5- Copier le repertoire dans un fichier");
printf("\n\t 6- Charger l'arbre à partir du fichier de sauvegarde");
printf("\n\t 7- Quitter\n");
printf("\n\n\n\n\n\n\n\tChoix :");
scanf("%d",&Choix);

} while (Choix <1 || Choix > 7);
system("cls");

return Choix;
}

void main(void)
{

int valeur, nbr, nbr1, nbr2, nbr3; //i, j; //k, l;
/*char NOM[MAX], PRENOM[MAX], TEL[MAX], TEL1[MAX]*/ float a, b, c, d ;
//float Liste_note_TP[MAX], Liste_note_TD[MAX];
int Choix;
char *NomFic="Fic.txt";
Arbre *Racine;
//Arbre *TelRecherche=NULL;
Arbre *RepRecherche;
//on initialise le pointeur de tete
Racine=NULL;
Choix = Menu();

while (Choix!=7)
{
if (Racine==NULL && Choix>1 && Choix <7)
{
printf("Vous devez d'abord saisir un arbre");
printf("\n\n\n\n\n\tAppuyez sur une touche pour retourner au menu principal");
getch();
}
else
{
switch (Choix)
{
case 1 :
printf("\n\t(0 pour finir la saisie)\n\n");
printf("\n\tEntrer le Numero de securite sociale de l'individu:");
scanf("%d",&valeur);

if(valeur != 0)
{

printf("\n\n\tSaisissez a present les caracteristiques de l'eleve\n");
printf("\n\n\tNom: ");
scanf("%s", NOM);
printf("\n\tPrenom: ");
scanf("%s", PRENOM);
printf("\n\tTd: ");
scanf("%d", &TD);
printf("\n\tTelephone: ");
scanf("%s", TEL);
printf("\n\tEntrer le nombre de note de Tp:");
scanf("%d", &nbr);
for(i=0; i< nbr; i++)
{
printf("\n\tNote No%d: " , i+1);
scanf("%f", &a);
Liste_note_TP[i] = a;

}
printf("\n\tEntrer le nombre de note de Td:");
scanf("%d" , &nbr1);
for(j=0; j<nbr1; j++)
{
printf("\n\tNote No%d: ", j+1);
scanf("%f", &b);
Liste_note_TD[j] = b;

}
}

while (valeur != 0)
{
system("CLS");
Racine=CreerNoeud(Racine,valeur,NOM,PRENOM,Liste_note_TP,Liste_note_TD,TEL);
printf("\n\tEntrer le Numero de securite sociale de l'individu:");
scanf("%d",&valeur);

if ( valeur != 0 )
{
printf("\n\tSaisissez a present les caracteristiques de l'eleve\n");
printf("\n\n\tNom: ");
scanf("%s", NOM);
printf("\n\tPrenom: ");
scanf("%s", PRENOM);
printf("\n\tTd: ");
scanf("%d", &TD);
printf("\n\tTelephone: ");
scanf("%s", TEL);
printf("\n\tEntrer le nombre de note de TP:");
scanf("%d", &nbr2);
for(i=0; i < nbr2; i++)
{
printf("\n\tNote No%d: " , i+1);
scanf("%f", &c);
Liste_note_TP[i] = c;
}
printf("\n\tEntrer le nombre de note de Td:");
scanf("%d" , &nbr3);
for(j=0; j<nbr3; j++)
{
printf("\n\tNote No%d: ", j+1);
scanf("%f", &d);
Liste_note_TD[j] = d ;

}
}

}
break;



case 2 :

AfficherArbreCroissant(Racine);
printf("\n\n\n\n\n\tAppuyez sur une touche pour retourner au menu principal");
getch();
break;



case 3 :

printf("\n\tNumero de Td de l'eleve a rechercher: ");
scanf("%d", &valeur);
//printf("\n\tTel:");
//scanf("%s" , TEL1);
RepRecherche = RechercheNoeud(Racine,valeur);
//strcpy(TelRecherche->tel, TEL1); if( (RepRecherche->Noeud valeur) )// && (TelRecherche->tel TEL1) )
{
printf("\n\tL'etudiant au No de Secu Scial:%d a ete trouve !", RepRecherche->Noeud);
}
else//printf("\n\t%s", TelRecherche->tel);
if(RepRecherche->Noeud != valeur)
{
printf("Impossible de trouver la valeur recherch\202e");
}

printf("\n\n\n\n\n\tAppuyez sur une touche pour retourner au menu principal");
getch();
break;


case 4 :

printf("No de Securite Sociale de l'eleve a supprime\205:");
scanf("%d",&valeur);
Racine=Supprimer_Eleve(Racine,valeur);
printf("\n\n\n\n\n\tAppuyez sur une touche pour retourner au menu principal");
getch();
break;

case 5:

system("del Fic.txt");
system("cls");
EnregArbre(Racine,NomFic);
printf("Arbre enregistr\202\n");
printf("\n\n\n\n\n\tAppuyez sur une touche pour retourner au menu principal");
getch();
break;

case 6:

system("CLS");
Racine=ChargerArbre(Racine,NomFic);
printf("\n\n\n\n\n\tAppuyez sur une touche pour retourner au menu principal");
getch();
break;

}

}

Choix=Menu();
}
}
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
15 déc. 2003 à 23:51
Faut faire une boucle pour afficher le tableau !!!

for(i = 0; i < MAX; i++)
{
printf("\n\tListe des notes de tp: %.1f",
Racine->liste_note_TP[i]);
}
0
Rejoignez-nous