Re: [問題] DEBUG到現在 放棄 神手大大救命T_T
※ 引述《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
07/02 10:39, 1F
→
07/02 10:41, , 2F
07/02 10:41, 2F
→
07/02 13:39, , 3F
07/02 13:39, 3F
推
07/02 14:55, , 4F
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
07/03 00:56, 7F
→
07/03 00:57, , 8F
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
07/03 01:55, 12F
→
07/03 01:56, , 13F
07/03 01:56, 13F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):