Voila je vous mets le code qui est un code trouver sur ce site mais que j'ai modifié. je ne comprends pas les erreurs de compilations pourriez-vous rapidement me repondre.
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;
Racine->nom = NOM; //le bug est la left operand muste be l-value
Racine->prenom= PRENOM; //le bug est la left operand muste be l-value
Racine->tel = TEL;//le bug est la left operand muste be l-value
Racine->liste_note_TP = Liste_note_TP;//le bug est la left operand muste be l-value
Racine->liste_note_TD = Liste_note_TD;//le bug est la left operand muste be l-value
Racine->SAD = NULL;
Racine->SAG = NULL;
}
return Racine;
}
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;
}
}
Arbre * OterNoeud(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=OterNoeud(Racine->SAG,valeur);
}
else
{
Racine->SAD=OterNoeud(Racine->SAD,valeur);
}
}
return Racine;
}
int Menu(void)
{
int Choix;
do
{
system("cls"); //efface l'écran
printf("\n 1- Ajouter un noeud");
printf("\n 3- Afficher l'arbre dans l'ordre croissant");
printf("\n 7- Rechercher un noeud");
printf("\n 8- Enlever un noeud");
printf("\n 11- Quitter\n");
printf("\n\n\n\n\n\n\nChoix :");
scanf("%d",&Choix);
} while (Choix <1 || Choix >11);
system("cls");
return Choix;
}
void main(void)
{
int valeur, nbr, nbr1, i, j;
char NOM[MAX], PRENOM[MAX], TEL[MAX];
float Liste_note_TP[MAX], Liste_note_TD[MAX];
int Choix;
char *NomFic="Fic.txt";
Arbre *Racine;
Arbre *RepRecherche;
//on initialise le pointeur de tete
Racine=NULL;
Choix = Menu();
while (Choix!=11)
{
if (Racine==NULL && Choix>1 && Choix <10)
{
printf("Vous devez d'abord saisir un arbre");
printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nAppuyez sur une touche pour retourner au menu principal");
getch();
}
else
{
switch (Choix)
{
case 1 : {
printf("(0 pour finir la saisie)");
scanf("%d",&valeur);
printf("\n\tNumero de td de l'eleve a saisir:");
scanf("%d",&valeur);
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\tTelephone: ");
scanf("%s", TEL);
printf("\n\tEntrer le nombre de note de Tp:");
scanf("%d", &nbr);
for(i=0; i< nbr; i++)
{
printf("Note No%d: " , i+1);
scanf("%f", Liste_note_TP[i]);
}
printf("\n\tEntrer le nombre de note de Td:");
scanf("%d" , &nbr1);
for(j=0; j<nbr1; j++)
{
printf("Note No%d: ", j+1);
scanf("%f", Liste_note_TD[j]);
}
while (valeur != 0)
{
Racine=CreerNoeud(Racine,valeur,NOM,PRENOM,Liste_note_TP,Liste_note_TD,TEL);
printf("Numero de td de l'eleve a saisir(0 pour finir la saisie) : ");
scanf("%d",&valeur);
printf("\n\tNumero de td de l'eleve a saisir:");
scanf("%d",&valeur);
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\tTelephone: ");
scanf("%s", TEL);
printf("\n\tEntrer les notes de Tp: ");
scanf("%f", &Liste_note_TP);
printf("\n\tEntrer les notes de Td: ");
scanf("%f", &Liste_note_TD);
}
}
break;
case 2 :
{
AfficherArbreCroissant(Racine);
printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nAppuyez sur une touche pour retourner au menu principal");
getch();
}
break;
case 3 :
{
printf("Saisir la valeur a rechercher : ");
scanf("%d", &valeur);
RepRecherche=RechercheNoeud(Racine,valeur);
if (RepRecherche->Noeud == valeur)
{
printf("%d", RepRecherche->Noeud);
}
else
{
printf("Impossible de trouver la valeur recherch\202e");
}
printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nAppuyez sur une touche pour retourner au menu principal");
getch();
}
break;
case 4 :
{
printf("Saisir la valeur du noeud \205 supprimer : \n");
scanf("%d",&valeur);
Racine=OterNoeud(Racine,valeur);
printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nAppuyez sur une touche pour retourner au menu principal");
getch();
}
break;
}
}
Choix=Menu();
}
}
A voir également:
Left operand must be l-value
Left operand must be l-value in c - Meilleures réponses
Faudrait commencer par lire serieusement un bouquin de C.
strcpy est pour les chaines(suite d'octets avec terminateur NULL).
Tu as memcpy pour copier d'une zone memoire vers une autre.
Racine->Noeud est int, tu affectes int, pourquoi il y aurait erreur ?
BruNews, ciao...
BruNews pourrais tu une nouvelle fois m'aider au quelqu'un d'autre je ne comprends pas cet erreur ?!
ça compile mais ça plante kand on execute.
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
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;
}
}
Arbre * OterNoeud(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=OterNoeud(Racine->SAG,valeur);
}
else
{
Racine->SAD=OterNoeud(Racine->SAD,valeur);
}
}
return Racine;
}
int Menu(void)
{
int Choix;
do
{
system("cls"); //efface l'écran
printf("\n 1- Ajouter un noeud");
printf("\n 2- Afficher l'arbre dans l'ordre croissant");
printf("\n 3- Rechercher un noeud");
printf("\n 4- Enlever un noeud");
printf("\n 5- Quitter\n");
printf("\n\n\n\n\n\n\nChoix :");
scanf("%d",&Choix);
} while (Choix <1 || Choix >5);
system("cls");
return Choix;
}
void main(void)
{
int valeur, nbr, nbr1, i, j;
char NOM[MAX], PRENOM[MAX], TEL[MAX];
float Liste_note_TP[MAX], Liste_note_TD[MAX];
int Choix;
char *NomFic="Fic.txt";
Arbre *Racine;
Arbre *RepRecherche;
//on initialise le pointeur de tete
Racine=NULL;
Choix = Menu();
while (Choix!=11)
{
if (Racine==NULL && Choix>1 && Choix <10)
{
printf("Vous devez d'abord saisir un arbre");
printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nAppuyez 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\tNumero de td de l'eleve a saisir:");
scanf("%d",&valeur);
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\tTelephone: ");
scanf("%s", TEL);
printf("\n\tEntrer le nombre de note de Tp:");
scanf("%d", &nbr);
for(i=0; i< nbr; i++)
{
//problem printf("\n\tNote No%d: " , i+1);
scanf("%f", &Liste_note_TP[i]);
}
printf("\n\tEntrer le nombre de note de Td:");
scanf("%d" , &nbr1);
for(j=0; j<nbr1; j++)
{
printf("\nNote No%d: ", j+1);
scanf("%f", &Liste_note_TD[j]);
}
while (valeur != 0)
{
system("CLS");
Racine=CreerNoeud(Racine,valeur,NOM,PRENOM,Liste_note_TP,Liste_note_TD,TEL);
printf("\n\tNumero de td de l'eleve a saisir:");
scanf("%d",&valeur);
/*while(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\tTelephone: ");
scanf("%s", TEL);
for(i=0; i< nbr; i++)
{
printf("\n\tNote No%d: " , i+1);
scanf("%f", &Liste_note_TP[i]);
}
printf("\n\tEntrer le nombre de note de Td:");
scanf("%d" , &nbr1);
for(j=0; j<nbr1; j++)
{
printf("\nNote No%d: ", j+1);
scanf("%f", &Liste_note_TD[j]);
}
/*printf("\n\tEntrer les notes de Tp: ");
scanf("%f", &Liste_note_TP);
printf("\n\tEntrer les notes de Td: ");
scanf("%f", &Liste_note_TD);*/
//}
}
}
break;
case 2 :
{
AfficherArbreCroissant(Racine);
printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nAppuyez sur une touche pour retourner au menu principal");
getch();
}
break;
case 3 :
{
printf("Saisir la valeur a rechercher : ");
scanf("%d", &valeur);
RepRecherche=RechercheNoeud(Racine,valeur);
if (RepRecherche->Noeud == valeur)
{
printf("%d", RepRecherche->Noeud);
}
else
{
printf("Impossible de trouver la valeur recherch\202e");
}
printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nAppuyez sur une touche pour retourner au menu principal");
getch();
}
break;
case 4 :
{
printf("Saisir la valeur du noeud \205 supprimer : \n");
scanf("%d",&valeur);
Racine=OterNoeud(Racine,valeur);
printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nAppuyez sur une touche pour retourner au menu principal");
getch();
}
break;
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;
}
}
Arbre * OterNoeud(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=OterNoeud(Racine->SAG,valeur);
}
else
{
Racine->SAD=OterNoeud(Racine->SAD,valeur);
}
}
return Racine;
}
int Menu(void)
{
int Choix;
do
{
system("cls"); //efface l'écran
printf("\n 1- Ajouter un noeud");
printf("\n 2- Afficher l'arbre dans l'ordre croissant");
printf("\n 3- Rechercher un noeud");
printf("\n 4- Enlever un noeud");
printf("\n 5- Quitter\n");
printf("\n\n\n\n\n\n\nChoix :");
scanf("%d",&Choix);
} while (Choix <1 || Choix >5);
system("cls");
return Choix;
}
void main(void)
{
int valeur, nbr, nbr1, i, j;
char NOM[MAX], PRENOM[MAX], TEL[MAX];
float Liste_note_TP[MAX], Liste_note_TD[MAX];
int Choix;
char *NomFic="Fic.txt";
Arbre *Racine;
Arbre *RepRecherche;
//on initialise le pointeur de tete
Racine=NULL;
Choix = Menu();
while (Choix!=11)
{
if (Racine==NULL && Choix>1 && Choix <10)
{
printf("Vous devez d'abord saisir un arbre");
printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nAppuyez 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\tNumero de td de l'eleve a saisir:");
scanf("%d",&valeur);
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\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", &Liste_note_TP[i]);
}
printf("\n\tEntrer le nombre de note de Td:");
scanf("%d" , &nbr1);
for(j=0; j<nbr1; j++)
{
printf("\nNote No%d: ", j+1);
scanf("%f", &Liste_note_TD[j]);
}
while (valeur != 0)
{
system("CLS");
Racine=CreerNoeud(Racine,valeur,NOM,PRENOM,Liste_note_TP,Liste_note_TD,TEL);
printf("\n\tNumero de td de l'eleve a saisir:");
scanf("%d",&valeur);
/*while(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\tTelephone: ");
scanf("%s", TEL);
for(i=0; i< nbr; i++)
{
printf("\n\tNote No%d: " , i+1);
scanf("%f", &Liste_note_TP[i]);
}
printf("\n\tEntrer le nombre de note de Td:");//blem
scanf("%d" , &nbr1);
for(j=0; j<nbr1; j++)
{
printf("\nNote No%d: ", j+1);
scanf("%f", &Liste_note_TD[j]);
}
/*printf("\n\tEntrer les notes de Tp: ");
scanf("%f", &Liste_note_TP);
printf("\n\tEntrer les notes de Td: ");
scanf("%f", &Liste_note_TD);*/
//}
}
}
break;
case 2 :
{
AfficherArbreCroissant(Racine);
printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nAppuyez sur une touche pour retourner au menu principal");
getch();
}
break;
case 3 :
{
printf("Saisir la valeur a rechercher : ");
scanf("%d", &valeur);
RepRecherche=RechercheNoeud(Racine,valeur);
if (RepRecherche->Noeud == valeur)
{
printf("%d", RepRecherche->Noeud);
}
else
{
printf("Impossible de trouver la valeur recherch\202e");
}
printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nAppuyez sur une touche pour retourner au menu principal");
getch();
}
break;
case 4 :
{
printf("Saisir la valeur du noeud \205 supprimer : \n");
scanf("%d",&valeur);
Racine=OterNoeud(Racine,valeur);
printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nAppuyez sur une touche pour retourner au menu principal");
getch();
}
break;