Re: [問題] DEBUG到現在 放棄 神手大大救命T_T

看板C_and_CPP作者 (藍影)時間14年前 (2011/07/02 05:51), 編輯推噓4(409)
留言13則, 6人參與, 最新討論串2/2 (看更多)
※ 引述《xm3vul3h06 (蠶哥)》之銘言: : http://codepad.org/a8hUjOKQ 恕刪,先補上原問題圖檔 http://0rz.tw/F4Dww 這裡大概敘述一下,如果我不知道那本是通訊之類的書 我會以為那是本較特別 C 語言的書,我看到敘述的想法是:FSM (可能我走火入魔了) -------- 一開始先定義 enum state, typedef enum tagState{a, b, c, d}State; 會用 enum 是用到,其實裡面的 a, b, c, d,到時候全都當 0, 1, 2, 3 去運算。 再來是編解碼方式,輸出部份我用的比較特別,給一個 table char out_table[][3] = {"00", "11", "10", "01", "11", "00", "01", "10"}; out_table[0] 代表狀態 a(a=0), 輸入 0 之輸出 out_table[1] 代表狀態 a(a=0), 輸入 1 之輸出 out_table[2] 代表狀態 b(b=1), 輸入 0 之輸出 out_table[3] 代表狀態 b(b=1), 輸入 1 之輸出 依此類推 於是根據狀態與輸入,可得到輸出: printf("%s ", out_table[state*2 + (*ptr-'0')]); --------- 再來是狀態轉移,這裡分輸入是 0 與輸入是 1 時做轉移 State Zero_Trans[] = {a, c, a, c}; State One_Trans[] = {b, d, b, d}; 這部份事實上也可以用一個轉移表就完成,程式碼也會較精簡 --------- 出來的碼參考如下 #include <stdio.h> typedef enum tagState{a, b, c, d}State; int main() { char input[] = "110111001000"; char *ptr=input; char out_table[][3] = {"00", "11", "10", "01", "11", "00", "01", "10"}; State Trans[] = {a, b, c, d, a, b, c, d}; State state=a; while(*ptr){ printf("%s ", out_table[state*2 + (*ptr-'0')]); state = Trans[state*2 + (*ptr - '0')]; ++ptr; } return 0; } ------ 好的 FSM 當然不如上所述,會用到一些 function pointer array, 但這裡的 action 只是簡單的字串輸出, 故直接用 char array of array 取代。 好奇 bleed 大所用之三維陣列意指如何。 以上淺見, 歡迎賜教。 -- YouLoveMe() ? LetItBe() : LetMeFree(); -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 180.177.73.222 ※ 編輯: tropical72 來自: 180.177.73.222 (07/02 06:04)

07/02 10:39, , 1F
http://pastie.org/2152893 輸出沒問題,但不保證對。
07/02 10:39, 1F

07/02 10:41, , 2F
http://codepad.org/F9GNy22f 再加一連結備份。
07/02 10:41, 2F

07/02 13:39, , 3F
謝謝 :)
07/02 13:39, 3F

07/02 14:55, , 4F
BTW.迴旋碼是不是就是一般指的Gary code格雷碼???
07/02 14:55, 4F

07/02 21:56, , 5F
都好厲害阿~"~ 請問我這種寫程式的方法縱使結果對到外
07/02 21:56, 5F

07/02 21:57, , 6F
面會不會無法被接受:(??
07/02 21:57, 6F

07/03 00:56, , 7F
我想問,除了你有版友可以接受嗎 XD
07/03 00:56, 7F

07/03 00:57, , 8F
只要不管多少時間,你還是看得懂這段程式,就不算太糟XDD
07/03 00:57, 8F

07/03 01:22, , 9F
所以在外界 寫程式不只要結果 還要別人看得懂@@?
07/03 01:22, 9F

07/03 01:26, , 10F
除非這段程式碼永遠不需要修改與維護,那沒人看懂也沒差
07/03 01:26, 10F

07/03 01:53, , 11F
寫程式跟寫文章一樣
07/03 01:53, 11F

07/03 01:55, , 12F
別人看不懂有三種:演算法不會,變數亂命名,莫名一段code
07/03 01:55, 12F

07/03 01:56, , 13F
文件說明,註解,變數命名應是最基礎的,你應只少了說明.
07/03 01:56, 13F
文章代碼(AID): #1E3a5sWA (C_and_CPP)
文章代碼(AID): #1E3a5sWA (C_and_CPP)