看板 C_and_CPP 關於我們 聯絡資訊
( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 ) ( 未必需要依照此格式,文章條理清楚即可 ) 遇到的問題: (題意請描述清楚) 我之前還有PO了一個關於改XYZ的東西已經解決了, 可是我想說萬一有人(?) 用的到我就 放在那邊了 這次的問題比較複雜一點點 就是要算出我的Boolean Tree的結果 假如這是我寫入進去的東西 TF|F~& (T = True, F = False, | = Or, & = And, ~ = ?(其實我只知道他是Unary Operator, 只能拿一個element) 那我的Tree應該是這樣: & / \ | ~ / \ \ T F F 所以說, T||F = T, 其中一方要是T, 那就是T ~的作用就是把F改成T, T改成F 那通過| 我可以求出 T, 在通過~可以求出T 那& = true 因為T&T = True 要用Recursion來寫出這整個東西, 可是我寫的不太對: 另外, 有規定一定要用int 通過這個code, 我希望就是從一個Root當中分段right跟left & / \ Right Left 希望得到的正確結果: 希望他可以給我, if (eval(root) == 1), cout << "Whole statement is true; 之類的東西 else...Whole statement is false 那麼root, 就是我的pointer point到我樹的開頭, 以這個例子來說就是 & = root 程式跑出來的錯誤結果: Runtime error 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) C++ 有問題的code: (請善用置底文標色功能) template <class Object> int eval(Node<Object> *r) { if (isalpha (r->element)) { if (r->element == 'T') { return 1; } else if (r->element == 'F') { return 0; } } int left = eval (r->left); int right = eval (r->right); char op = r->element; if (op == '&') { return(left*right); //if it's true, then it gives me 1, if it's false, then it gives me 0 } else if (op == '|') { if ((right == 1) ||(left == 1)) { return 1; } else if ((right == 0) || (left == 0)) { return 0; } } else if (op == '~') { if (right == 1) return 0; else if (right == 0) return 1; //改掉了, 因為只有right有東西 } } 補充說明: 程序: 錯誤解答 http://nopaste.csie.org/67592 已修正正確解答 http://nopaste.csie.org/1b2f3 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 173.56.121.140
ledia:"~" 下面只有 left child (或是只有 right) 看你存哪邊 11/13 15:36
ledia:應該不能拿去 eval 吧 ? 11/13 15:36
ledia:換句話說就是, 看到是 '~' 只能 eval 有資料的那一邊 11/13 15:37
ledia:其它的才能把左右子樹都 eval 出來用 11/13 15:37
BlackMatrix:阿!~~~你說得非常沒有錯 11/13 15:47
※ 編輯: BlackMatrix 來自: 173.56.121.140 (11/13 15:51)
BlackMatrix:謝謝, 不過還是有runtime error, 所以我還在改~謝謝 11/13 15:52
ledia:eval 要在知道哪個 op 之後再做 11/13 15:54
ledia:或者是你的 eval 一開始要檢查, 傳進來是 null 就隨便回傳值 11/13 15:54
ledia:不要繼續做下去 (雖然這樣的做法比較不好) 11/13 15:54
BlackMatrix:基本上所有的檢查都已經被我寫完了, 剩下這個... 11/13 15:56
BlackMatrix:因為我recursion非常非常不拿手 11/13 15:56
BlackMatrix:我感覺我基本上都寫錯了, 不管怎麼改就是過不去 11/13 15:57
BlackMatrix:如果我放進去TF|F~&就runtime error 11/13 15:59
BlackMatrix:可是放進去FF&就會寫說是False 11/13 16:00
BlackMatrix:詭異阿!~~~~~ 11/13 16:00
BlackMatrix:我好像找到問題了, FF|可以, '~'不管怎樣都不行 11/13 16:01
BlackMatrix:弄不好...挨挨 11/13 16:09
ledia:你的 code 就是現在文章這樣嗎 ? 11/13 18:30
ledia:還是你用置底的貼 code 網頁貼一個最新版本? 11/13 18:30
ledia:(eval 的部份) 11/13 18:31
BlackMatrix:我只貼了evaluation的部分, 抱歉我睡著了= = 11/13 23:05
※ 編輯: BlackMatrix 來自: 128.238.244.111 (11/14 00:47) ※ 編輯: BlackMatrix 來自: 173.56.121.140 (11/14 10:48) ※ 編輯: BlackMatrix 來自: 173.56.121.140 (11/14 10:49)