[問題] Boolean Trea Evaluation
看板C_and_CPP作者BlackMatrix (BlackMatrix)時間16年前 (2009/11/13 15:32)推噓3(3推 0噓 18→)留言21則, 2人參與討論串1/2 (看更多)
( *[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
推
11/13 15:36, , 1F
11/13 15:36, 1F
→
11/13 15:36, , 2F
11/13 15:36, 2F
→
11/13 15:37, , 3F
11/13 15:37, 3F
→
11/13 15:37, , 4F
11/13 15:37, 4F
→
11/13 15:47, , 5F
11/13 15:47, 5F
※ 編輯: BlackMatrix 來自: 173.56.121.140 (11/13 15:51)
→
11/13 15:52, , 6F
11/13 15:52, 6F
推
11/13 15:54, , 7F
11/13 15:54, 7F
→
11/13 15:54, , 8F
11/13 15:54, 8F
→
11/13 15:54, , 9F
11/13 15:54, 9F
→
11/13 15:56, , 10F
11/13 15:56, 10F
→
11/13 15:56, , 11F
11/13 15:56, 11F
→
11/13 15:57, , 12F
11/13 15:57, 12F
→
11/13 15:59, , 13F
11/13 15:59, 13F
→
11/13 16:00, , 14F
11/13 16:00, 14F
→
11/13 16:00, , 15F
11/13 16:00, 15F
→
11/13 16:01, , 16F
11/13 16:01, 16F
→
11/13 16:09, , 17F
11/13 16:09, 17F
推
11/13 18:30, , 18F
11/13 18:30, 18F
→
11/13 18:30, , 19F
11/13 18:30, 19F
→
11/13 18:31, , 20F
11/13 18:31, 20F
→
11/13 23:05, , 21F
11/13 23:05, 21F
※ 編輯: 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)
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 2 篇):