Pascal Repeat-Until問題

2012-02-29 6:50 am
repeat
write('Choose your option: ');
readln(option);
case option of
1:writeln('You choose to one);
2:writeln('You choose to two');
3:writeln('You choose to three');
else writeln('Invalid option, Please try again!');
end;
until option=1 or option=2 or option=3;

我知錯左係until到...但係有咩方法可以係until到check多幾個情況呢...
或者如果唔得既話...
有咩打法可以做到同樣效果呢...

唔該晒

回答 (1)

2012-02-29 11:19 am
✔ 最佳答案
你係錯在pascal的 and/or項式,而不是until的句式。
pascal很講求格式化,做到一絲不苟。
和人腦不同,有時一個括號可令意義不夠明確。
and 和 or 的句式是兩個數字的算式,即 如 0 and 1 得出 0,只有 1 and 1才得出1。or則只有 0 or 0得0,其餘得1。
(其實可用於 binary 算式和boolean算式, 意義一樣)
所以你寫成 until option = 1 or option=2 or option=3;
順序編譯時會看成 until option = 1 or option (即1 和option 做 OR,但其後再一個等號就變成不能解。syntax error
所以一定要加括號。
變成until (option = 1) or (option=2) or (option=3);
清清楚楚的 ,先做 (option =1),結果是一個 boolean,後面的 (option=2) 和 (option=3) 也回傳一個 boolean,最後,把三個boolean 做 OR。結果送給 until指令。
寫開其他語言的可能認為好煩,但委實十分清楚。
順帶一提,如果你的句子包括and 及or,
例如 until (a=1) or (b=2) and (c=3),意思不夠清楚。編譯時可能不出錯誤,但未必是你的意思。因為
((a=1) or (b=2)) and (c=3)

(a=1) or ((b=2)) and (c=3))
即先處理OR和AND先的結果差太遠。

後記:until後的一句也可以寫成
until (option>=1) and (option<=3);
如你的選項由1至10,這個寫法較好。(唔使 or or or or )
又如果,你的選項不是順序,可以用set
如 until (option in [1,3,5,7,10..15]);




收錄日期: 2021-04-26 12:07:33
原文連結 [永久失效]:
https://hk.answers.yahoo.com/question/index?qid=20120228000051KK00804

檢視 Wayback Machine 備份