日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

dfa2.java 原理_DFA编程练习2

發布時間:2023/12/10 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 dfa2.java 原理_DFA编程练习2 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目: 請設計DFA, 使其接受全部含有奇數個1的串, 假定 ∑ = {0, 1}.

解:

DFA可能出現兩個個狀態:

qeven: 讀入了偶數個1的串.

qodd: 讀入了奇數個1的串, 該狀態也是終結狀態(accept state).

它們的狀態轉移圖如下:

編寫程序, 運行效果如下:

測試用例說明:

0000不被上圖的DFA接受

1111不被上圖的DFA接受

1符合題目要求, 被DFA接受

0011001符合題目要求, 被DFA接受

空串不被DFA接受

0不被上圖DFA接受

程序代碼如下:

/* FSM-example2.c

* Using Deterministic Finite Automaton to recongnize

* a `0-1 string`

*

* Example2: Please design a DFA, accept every string

* containing odd numers of 1.

**/

#include

#include // calloc()

#include

enum {

STATE_even = 1, // Even number of 1 has readed

STATE_odd, // Odd number of 1 has readed

STATE_T // Accept state

};

typedef struct fsm_st {

int state;

int pos; // point to current pos

char buf[BUFSIZ];

}fsm_st;

fsm_st* myFsm;

void FSMdriver(fsm_st*);

void Hault(int);

int main() {

/* Create a FSM and initialize */

myFsm = (fsm_st*)calloc(0x1, sizeof(myFsm));

myFsm->state = STATE_even;

myFsm->pos = 0;

/* Read a string */

printf("Input a 01-string: ");

fgets(myFsm->buf, BUFSIZ, stdin);

/* Strat FSM */

while( myFsm->state != STATE_T ) {

FSMdriver(myFsm);

}

printf("Accept string!

");

free(myFsm);

return 0;

}

void FSMdriver(fsm_st* me) {

int pos = me->pos;

switch(me->state) {

case STATE_even:

if( me->buf[pos] == ‘1‘ ) {

me->state = STATE_odd;

me->pos++;

} else if( me->buf[pos] == ‘0‘ ) {

me->state = STATE_even;

me->pos++;

} else {

Hault(STATE_even);

}

break;

case STATE_odd:

if( me->buf[pos] == ‘0‘ ) {

me->state = STATE_T; // Terminated correctly

me->pos++;

} else if( me->buf[pos] == ‘1‘ ) {

me->state = STATE_even;

me->pos++;

} else {

me->state = STATE_T; // At the end stay in STATE_odd

}

break;

}

}

void Hault(int s) {

printf("FSM hault in STATE_%d

", s);

printf("FSM don‘t accept this string

");

free(myFsm);

exit(0);

}

DFA編程練習2

總結

以上是生活随笔為你收集整理的dfa2.java 原理_DFA编程练习2的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。