kropq Napisano Czerwiec 13, 2008 Zgłoś Share Napisano Czerwiec 13, 2008 Witam mam za zadanie napisac program który za pomocą drzewa obliczy wyrażenie artmetyczne. Mam funkcje oblliczajaca ale nie potrafie napisac dodawania elementów do drzewa. Czytałem już dużo o drzewach ale nie moge załapać tego zbytnio. Z góry dziękuje za każdą pomoc. Oto mój kawałek kodu. #include <stdio.h> #include <stdlib.h> #define dz_plus 1 #define dz_minus 2 #define dz_mnozenie 3 #define dz_dzielenie 4 #define dz_wartosc -1 int main() { struct _wezel { struct _wezel *lewy; struct _wezel *prawy; int dzialanie; double wartosc; }; double Oblicz(struct _wezel *w) { switch(w->dzialanie) { case dz_plus: return Oblicz(w->prawy) + oblicz (w->lewy); case dz_minus: return Oblicz(w->prawy) - oblicz (w->lewy); case dz_mnozenie: return Oblicz(w->prawy) * oblicz (w->lewy); case dz_dzielenie: return Oblicz(w->prawy) / oblicz (w->lewy); case dz_wartosc: return w->wartosc; else: system("PAUSE"); return 0; Link do komentarza Udostępnij na innych stronach More sharing options...
Jason Napisano Czerwiec 13, 2008 Zgłoś Share Napisano Czerwiec 13, 2008 W switch'u na końcu powinno być default zamiast else, a dodawanie do drzewa powinno wyglądać mniej więcej tak (rozumiem, że chodzi o drzewo BST, albo chociaż zwykłe binarne?): struct BST { int key; struct BST *p; struct BST *left; struct BST *right; }; struct BST *dodaj(struct BST *root,int k) { struct BST *y=NULL; struct BST *x=root; struct BST *z; z=(struct BST*) malloc(sizeof(struct BST)); z->key=k; z->left=z->right=z->p=NULL; while (x!=NULL) { y=x; if (x->key > z->key) x=x->left; else x=x->right; } z->p=y; if (root==NULL) root=z; else if (y->key > z->key) y->left=z; else y->right=z; return root; } Program najpierw przygotowuje element (alokacja pamięci itp.), a potem go wstawia tak, żeby drzewo było zgodne własnościami BST. I z jakiej paki, używasz raz Oblicz, raz oblicz ?? wielkość liter musi się zgadzać. Tutaj masz cały programik wykorzystujący tą funkcję: http://www.jason.unit1.pl/?strona=1&podstrona=11 Link do komentarza Udostępnij na innych stronach More sharing options...
kropq Napisano Czerwiec 13, 2008 Autor Zgłoś Share Napisano Czerwiec 13, 2008 Te oblicz to przez przypadek wiem że wielkość liter się liczy. Mam jeszcze jedno pytanko jak wpisac na drzewo wyrażenie arytmetyczne bo to jest w tym zadaniu najgorsze :/??nie chodzi mi o kod tylko o sposób. Link do komentarza Udostępnij na innych stronach More sharing options...
Jason Napisano Czerwiec 13, 2008 Zgłoś Share Napisano Czerwiec 13, 2008 To w tym samym miejscu gdzie przypisujesz wartość klucza drzewa, przypisujesz też wyrażenie arytmetyczne. Nie wiem jak on to ma liczyć... np. jak jest suma to ma być parent+left+right ?? Link do komentarza Udostępnij na innych stronach More sharing options...
kropq Napisano Czerwiec 13, 2008 Autor Zgłoś Share Napisano Czerwiec 13, 2008 tak jak suma to lewa galaz + prawa np wyrazenie 2+4*6-4/3 ma wpisac na drzewo a potem obliczyc z drzewa...funkcję obliczajaca mam potrzeba mi sposobu jak wpisac wyrazenie na te drzewo :/ Link do komentarza Udostępnij na innych stronach More sharing options...
Polecane posty
Zarchiwizowany
Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.