orezza
Messages postés38Date d'inscriptionvendredi 1 août 2003StatutMembreDernière intervention12 mai 2005
-
14 déc. 2003 à 21:18
orezza
Messages postés38Date d'inscriptionvendredi 1 août 2003StatutMembreDernière intervention12 mai 2005
-
14 déc. 2003 à 22:49
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;
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 14 déc. 2003 à 21:57
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...
orezza
Messages postés38Date d'inscriptionvendredi 1 août 2003StatutMembreDernière intervention12 mai 2005 14 déc. 2003 à 22:47
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;