Re: [問題] if簡化的問題
※ 引述《aup65797 (有緣人)》之銘言:
: code如網址:
: http://codepad.org/mqAb2UuB
: 這是控制led燈的程式..如何把if簡化.
: 因為感覺程式有點攏長..switcha是開關
: 煩請大大解說...
來看看第一個 if 做了哪些事情:
if(switcha==0)
{
cnta++;
if(cnta%6==0)
{
led=0;
}
if(cnta%12==0)
{
led=1;
}
}
因為 6跟 12有著最大公因數 6, 當 cnta為12的倍數時, 本來開著
的LED燈會被關閉然後再打開, 這是你真正想要的結果嗎?
如果不是, 第一步應該判斷 cnta 是否為6的倍數, 然後才判斷它
是不是12的倍數, 必須構成一個巢狀結構, 以避免上述問題發生
if(switcha==0)
{
cnta++;
if(cnta%6==0)
led= (cnta % 12 == 0) ? 1 : 0;
}
我認為這樣就夠了,實在沒必要為了個人的特殊嗜好再對剩下的 if
做消除的動作, 那會變成這樣:
if(switcha==0)
{
cnta++;
led = (cnta % 6 == 0) ? (cnta % 12 == 0) ? 1
: 0
: led;
}
但還是建議你把注意力放在消去這麼多型式一樣, 意義卻不同的 0
和 1, 數值上他們是這樣沒錯, 但你的程式碼看起來卻更像是在做
數值運算; 而非控制燈號. 我偏好的寫法是像這樣:
int const light = 1,
douse = 0;
int const high_potential = 1,
low_potential = 0;
if(switcha==low_potential)
{
cnta++;
if(cnta%6==0)
led= (cnta % 12 == 0) ? douse : light;
}
它所帶來的效益遠比你全消去if所產生的還要多, 也提供了另一個
指標:
如果無法給予變數一個對應到問題情境裡的適當命名, 很
可能代表你不了解這個問題
--
◢████ ◢█ ◢██◣ ◢█ ◢███ ◢█ T-ara版怎麼去
████◤ ██ ◢██◣█ ██ ████ ██ s ~> T-ara
█/███ ██ ██ ██ █/█ ◢███ █/█ 歡迎您的光臨
████◤ ██ ██ ██ ██◤ ███◤ ██◤ 恩靜、智妍、孝敏
█/███ ██ █/██◤ ██ █/██ ██ 素妍、居麗、寶藍
████◤ █◤ ◥██◤ █◤ ████◤█◤ 花英 ψmakigoto123
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.121.197.115
→
03/25 23:03, , 1F
03/25 23:03, 1F
感謝樓上提醒! 我再修改一下..
推
03/25 23:16, , 2F
03/25 23:16, 2F
→
03/25 23:17, , 3F
03/25 23:17, 3F
推
03/26 02:17, , 4F
03/26 02:17, 4F
→
03/26 12:34, , 5F
03/26 12:34, 5F
回樓上兩位, 已經修改好了!
推
03/27 17:15, , 6F
03/27 17:15, 6F
原原PO的程式會先0後1, 我覺得應該做錯了
※ 編輯: loveme00835 來自: 140.121.197.115 (03/27 18:44)
討論串 (同標題文章)