besoin d'aide sur arbre binaire

besoin d'aide sur arbre binaire - C++ - Programmation

Marsh Posté le 08-12-2002 à 12:45:50    

salut a tous.
 
bon alors j'ai un probleme... je dois effectuer des calcul apres avoir mis une expression de cette forme "+-*89*67*23" (equivalent a: "((8*9)-(6*7))+(2*3)" ) dans un arbre binaire... bon ca je pense avoir reussi... mais mon probleme c que j'arrive pas a le lire alors que je pense que mon truc est bon...
voila le code, dite moi ce que vous en pensez et si vous voyez l'erreur, dite le moi svp

Code :
  1. #include <stdio.h>
  2. #include <math.h>
  3. #include <string.h>
  4. #include <malloc.h>
  5. #include <conio.h>
  6. #include <windows.h>
  7. #include <time.h>
  8. ////////////////////////////////////////////////////////////////////////////////
  9. typedef struct branches{   
  10. char contenue;
  11. struct branches *gauche;
  12. struct branches *droite;
  13. }branche;
  14. int fin = 0;
  15. ////////////////////////////////////////////////////////////////////////////////
  16. void entrer();
  17. void MettageEnArbre(char *);
  18. void MettageDeLaValeur(char cont,branche *);
  19. ////////////////////////////////////////////////////////////////////////////////
  20. void MettageDeLaValeur(char cont, branche *p){
  21. p->contenue=cont;
  22. printf("%c",cont);
  23. }
  24. /////////////////////////////////////////////////////////////////////////////////
  25. void MettageEnArbre(char *tab, branche *p){
  26. if(fin == strlen(tab)) return;       //condition de fin de creation
  27. if(tab[fin]=='*' || tab[fin]=='+' || tab[fin]=='-' || tab[fin]=='/' || tab[fin]=='%' || tab[fin]=='^'){
  28.  MettageDeLaValeur(tab[fin],p);
  29.  branche *feuilleg=(branche*)malloc(sizeof(branche)); //creation de la feuille de gauche
  30.  branche *feuilled=(branche*)malloc(sizeof(branche)); //creation de la feuille de droite
  31.  p->droite = feuilled;
  32.  p->gauche = feuilleg;        //le pointeur gauche de la fiche actuelle pointe sur la nouvelle fiche;
  33.  fin++;            //on passe a l'element suivant      
  34.  MettageEnArbre(tab,p->gauche);
  35.  MettageEnArbre(tab,p->droite);
  36. }
  37. else if(tab[fin]=='C'){
  38.  MettageDeLaValeur(tab[fin],p);
  39.  branche *feuilleg=(branche*)malloc(sizeof(branche));
  40.  p->gauche = feuilleg;
  41.  fin++;
  42.  MettageEnArbre(tab,p->gauche);
  43. }
  44. else if(tab[fin]>47 && tab[fin]<58){
  45.  MettageDeLaValeur(tab[fin], p);
  46.  fin++;
  47. }
  48. }
  49. ////////////////////////////////////////////////////////////////////////////////
  50. void Lecture(branche *p){
  51.    if(p->gauche) Lecture(p->gauche);
  52.    printf("%c\n",p->contenue);
  53.    if(p->droite) Lecture(p->droite);
  54. }
  55. ////////////////////////////////////////////////////////////////////////////////
  56. void entrer(){
  57. char tab[50];
  58. printf("Entrez Votre Expression: " );
  59. gets(tab);
  60. fflush(stdin);
  61. //printf("\n%s",tab);
  62. branche *ancre =(branche*)malloc(sizeof(branche));   //creation ancre
  63. branche *p=ancre;           //creation d'un pointeur vers l'ancre
  64. MettageEnArbre(tab,p);          //commence la creation de l'arbre
  65. Lecture(p);
  66. getch();
  67. }
  68. ////////////////////////////////////////////////////////////////////////////////
  69. void main(){
  70. int choix;
  71. do{
  72.  system("cls" );
  73.  printf("1- Faire Nouveau Calcul\n2- Quitter\n\nEntrez Votre Choix: " );
  74.  scanf("%d",&choix);
  75.  fflush(stdin);
  76.  switch(choix){
  77.   case 1: entrer();
  78.        break;
  79.   case 2: break;
  80.             default:  printf("\n\nEntrez 1 ou 2 pas %d!!!!!!",choix);
  81.       Sleep(1000);
  82.       break;
  83.  }
  84. }while(choix!=2);
  85. }


 
merci d'avance

Reply

Marsh Posté le 08-12-2002 à 12:45:50   

Reply

Marsh Posté le 08-12-2002 à 12:50:25    

et il est ou le problème? au fait on dit pas branche, mais noeud


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 08-12-2002 à 12:52:11    

bah le probleme c que quand je lance le prog et que je rentre l'expression, et ben tout ce passe bien jusqu'a la lecture ou il me fait une erreur (les truc xp avec debug, send don't send...)

Reply

Marsh Posté le 08-12-2002 à 12:55:22    

tu oublies de mettres tes pointeurs gauche et droit à NULL s'ils osnt inutilisés


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 08-12-2002 à 13:00:07    

MERCI t un dieu!!!!!!!!
ca fait 3 heures que je me casse la tete sur le clavier!!!
trop cool.
 :love:  :love:  :love:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed