Personne pour me corriger et m'indiquer si je suis sur la bonne voie SVP?
Merci
Version imprimable
Personne pour me corriger et m'indiquer si je suis sur la bonne voie SVP?
Merci
je crois qu'on connait ma position, alors j'insiste pas:roll:
Ton code est pas bon.
Ton diagramme avec parent_haut et cie, il sert a rien (enfin ce que ton code permet de representer n'est pas utile). Pourquoi une expression par exemple 3+4 dans
(3+4)+5 devrait elle avoir deux parents?
le parent de 3+4, cest (3+4) + 5
ensuite, generalement c'est pas fils haut fils bas mais fils gauche fils droit.
Enfin, j'ai pas regarde en detail, par contre tu pourrais commencer par voir si la structure que tu affiches est correct en faisant ton jeu de test dans main. (a mon avis c'est une mine a segfault ton truc, mais bon peut etre pas :mouarf:)
par ex, void test1(){///blabla} void test2(){//blabla} et dans main tu appeles toutes tes void testx
Exact, losque je lance quelque chose du genre:Citation:
a mon avis c'est une mine a segfault
Bonne compilation, le code se lance mais a la fin du programme, lors de la destruction des objet message d'erreur.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 #include "Tree.h" #include "Leaf.h" #include "Add.h" using namespace std; void main() { srand((unsigned)time(NULL)); double *test; Tree *tree; tree = new Tree; Expression Test; Node Test_3(Test->m_parent); } Tree.h
C'est fait deja dans le précedent post, d'aileurs il me semble que l'arborescence est bonne voir schema et lien vers l'imprim ecran qui affiche l'espion de mon arbre:Citation:
j'ai pas regarde en detail, par contre tu pourrais commencer par voir si la structure que tu affiches est correct en faisant ton jeu de test dans main.
http://dk1.ti1ca.com/get/81.249.49.2...scence_Exo.JPG
Merci
enfin ce que ton code permet de representer n'est pas utileCitation:
il me semble que l'arborescence est bonne
Tu t'y prends pas de la bonne maniere. Deja, lache ton clavier (virtuel :mouarf:) et regarde ta classe Tree. Est-ce qu'elle te semble simple? Est-ce qu'elle te semble clair? Quel est l'interet d'avoir des doubles references entre son pere et son fils?
Rien ne t'empeche d'aborder le probleme de maniere differente, mais une methode comme creer fils n'a aucun sens.
Je m'attends plus a voir quelque chose commeCitation:
C'est fait deja dans le précedent post
Code:
1
2
3
4
5
6
7 Node* parent=new Node(); parent->operationCode=PLUS;//ouais enum c'est mal Node* leftChild=new Node(3); Node* rightChild=new Node(2); parent->setLeftChild(leftChild); parent->setrightChild(rightChild); std::cout<<(parent->eval()==5)<<std::endl;//doit afficher 1
Voire même un joli:
Code:
1
2
3
4 Node *gauche = new Node(3); Node *droite = new Node(5); Node *parent = new Node(PLUS, gauche, droite);
Je commence à comprendre.
Mon erreur me semble t il vient du fait qu'un arbre est un objet à part entiere, ce qui m'a conduit à reutiliser une classe tree coder en TD qui avait pour but de nous faire decouvri les pointeur et les noeuds...
En gros je creer un arbre puis je rempli avec un objet expression.
La fonction creer_fils je l'utilise pour creer des descendance à mon objet expression de depart, car à priori je ne sais pas combien l'expression disposera d'operande etr d'operateur ( meme si je sais que pour faire un exo il me faut au minimu 2 operande et un operateur).
Alors ce que vous me proposez est en fait "integrer" la notion d'arbre à l'interieur meme de mes classe.
Donc deja je sais pas de quelle classe tu parles.Citation:
Alors ce que vous me proposez est en fait "integrer" la notion d'arbre à l'interieur meme de mes classe.
Bon j'insiste parce que la j'ai l'impression que c'est la direction le mur.
Il faut faire simple.
Oublie ton objet expression oublie ton mot arbre. Oublies tes composites et oublie egalement ton code.
Comment decomposes tu le calcul 3+4*5+1-26 ?
PS: j'espere que c'est pas la correction de la classe Tree que tu as, parce que c'est moche.
D'une part, on prefere generalement le mot Tree pour designer le machin global. Donc un Tree qui a des fils Tree, c'est pas top.
Ensuite, faut que tu arretes de penser arbre mais vraiment noeud.
Merci
A la base c'est une classe noeud que j'ai renomer tree pour eviter,Citation:
D'une part, on prefere generalement le mot Tree pour designer le machin global. Donc un Tree qui a des fils Tree, c'est pas top.
Ensuite, faut que tu arretes de penser arbre mais vraiment noeud.
je dirais comme cela:Citation:
Comment decomposes tu le calcul 3+4*5+1-26
Code:
1
2
3
4 (3+4)*(5+1)-26 (7*6)-26 42-26 16
Mauvaise réponse! Essaies encore. :mrgreen:
(utilises google pour vérifier ton calcul)
Note: le but consiste à ne faire qu'une seule opération par ligne.
(donc (3+4)*(5+1) -> 7*6 c'est pas bon, t'as fait deux opérations en même temps)
Même mathématiquement parlant, c'est faux...
Merci
Putain j'ai pas l'air con pour un gars sensait faire un prog de calcul mental.Citation:
Même mathématiquement parlant, c'est faux...
Je pense que tu voulais faire allusion à la notation polack inverse, alors cela peux donner quelque chose comme cela:Citation:
Mauvaise réponse! Essaies encore.
(utilises google pour vérifier ton calcul)
Code:3+ 4 5* 1- 26 +
Non je fais pas allusion a la pollack je te demande juste de montrer le calcul que tu fais pour trouver le résultat de 3+4*5+1-26 .
Ok je vais essayé:
Code:
1
2
3
4
5 4*5=20 1-26=-25 20-25=-5 3-5=2
ok.
Et bien maintenant, pour chaque ligne, tu crees un noeud qui contient un int operandeAGauche, et un int operandeADroite, un char signeOperation et une fonction evaluate.
Typiquement, pour la ligne 2:
tu as noeud.operandeAGauche=4
noeud.operandeADroite=5
noeud.signeOperation='+'
noeud.evaluate: doit retourner 20.
seras-tu capable d'écrire une telle classe?