åã®èšäºã§ã¯ãç¶æ
å³ãšé·ç§»ïŒãªãŒãããã³ã¹ã¿ã€ã«ïŒã䜿çšããåçããã»ã¹ã®èšè¿°ã®å¿ççåŽé¢ãšãç¶æ
å³ãšé·ç§»ãåçããã»ã¹ã®ããè¯ãçè§£ãäžããããšã«ã€ããŠèª¬æããŸããã 仿¥ã¯ããªãŒãããã³ã¢ãããŒããå
·äœåããç¶æ
å³ãšããããã³ãŒãã«å€æããæ¹æ³ãåŒãç¶ã確èªããŸãã åã®èšäºã®ãããã¯ã¯ææ©çã«ä»æ¥ã®è³æã«æµã蟌ãã®ã§ããããããçè§£ããããšããå§ãããŸããç®æ¬¡
ç¶æ
å³ïŒ=ã°ã©ãå³ã
ãã§ã«è¿°ã¹ãããã«ãç¶æ
å³ã¯ãœãããŠã§ã¢ã¢ã«ãŽãªãºã ãèšè¿°ããããã®ãã䟿å©ãªä»£æ¿åœ¢åŒã§ãã ããã«ãç¶æ
å³ã¯åçããã»ã¹ãèšé²ããèªç¶ãªåœ¢ã§ãããã¢ã«ãŽãªãºã ã®ã°ã©ãå³ã¯ãæçœã§ãããããããåå¥ã«ç€ºããããçè§£ãæãªã£ããããå¿
èŠã®ãªãå®è£
æ©èœãæ¢ã«å«ãã§ãã人工çãªæ§é ã§ãããã ããæè¡çã«ã¯å¿
èŠãªã¢ã¯ã·ã§ã³ã®ã·ãŒã±ã³ã¹ãæ£ãã説æããŠããŸãã
ãã ããç¶æ
å³ã¯ãã°ã©ãå³ãèšé²ããããã®åãªãå¥ã®ã°ã©ãã£ã«ã«è¡šèšã§ã¯ãªããããã€ãã®åªããæ©èœãåããŠããŸãã å³1ïŒbãcïŒã¯ãå³1ã®èšäºã§ããåæã®ã°ã©ãæ¹åŒã«å¯Ÿå¿ããåããªãŒãããã³ã®ç¶æ
å³ã瀺ããŠããŸãã 1ïŒaïŒã
å³1 aïŒã ãœãŒã¹ã°ã©ããã£ãŒãå³1 bïŒãcïŒã ã¢ã«ãŽãªãºã ãå®è£
ããåçã®ãªãŒãããã³ã®ç¶æ
å³
ïŒaïŒãå³1ïŒcïŒã¯ãç¶æ
å³ãšé·ç§»ã®èª€ã£ãèšé²ã®äŸã瀺ããŠããŸãã äžæ£ç¢ºãªç¹ã¯ãèµ€ãé·æ¹åœ¢ã§åŒ·èª¿è¡šç€ºãããé·ç§»ã¯ãå
¥åã€ãã³ãã ãã§ãªãããã®ç¶æ
ã§ã¯åãååã®å
ã®ã°ã©ããã€ã¢ã°ã©ã ã®ãã©ã°ã«å¯Ÿå¿ãããã©ã°ã«ãã£ãŠã決å®ãããããšã§ãïŒå³ 1ïŒaïŒã¯ãå
¥åæåã®ã¿ãèæ
®ããŠããã»ã¹ã®ç¶æ
ãç£èŠããããšãã§ããªããªã£ãããããã©ã°cã倿Žããããžãã¯ãäœããã®åœ¢ã§èæ
®ããå¿
èŠããããŸãã åé¡ã¯ãã©ã°cèªäœã«ããããŸãããããã®ãã©ã°ã倿Žããããžãã¯ãç¶æ
s1ã ãã«çµã³ä»ããããŠããªããšããäºå®ã«ãããŸãã ãã®ãã©ã°ã®å€æŽã«é¢é£ä»ããããã€ãã³ããs1ã®ã¿ã«é¢é£ä»ããããå Žåããã®ãããªåé¡ã¯ååšããŸããã èµ€ã§åŒ·èª¿è¡šç€ºãããé·ç§»ã¯s1ã«å°éãããã¹ã«äŸåããŸã ãããã¯ãªãŒãããã³ã®å®çŸ©ãšççŸããåå¿ã¯å
¥åã·ã³ãã«ãšçŸåšã®ç¶æ
ã®ã¿ã«äŸåããŸãã æ¬æã§ããã«èšåããããã«ããããèªååã®ååãšåŒã³ãŸãã
å³ã®ã¢ã«ãŽãªãºã ã®é¡èãªéæåå®è£
ã®ã°ã©ãæ¹åŒ 1ïŒaïŒã¯ãç¶æ
ãæç€ºçã«å®çŸ©ãããŠãããããããã£ãŠç¶æ
éã®é·ç§»ãå®çŸ©ãããŠããªããããæ£ããç¶æ
å³ã®åœ¢åŒã§èšè¿°ããã®ã¯ããã»ã©ç°¡åã§ã¯ãããŸããã å³ã®å³ãæãã«ã¯ 1ïŒbïŒå³ã®ã¢ã«ãŽãªãºã ã«ãã 1ïŒaïŒ åçã®ãªãŒãããã³ãååŸããå¿
èŠããããŸããã ã°ã©ãã¹ããŒã ã®åçã®ãªãŒãããã³ãååŸããææ³ã¯ã次ã®ããããã®èšäºã§æ€èšå¯Ÿè±¡ã«ãªããŸãããéèªåãããã°ã©ã ãå«ãããžã¿ã«ããã€ã¹ã¯ãã¹ãŠããããã®ç¶æ
ã¯æç€ºçã«èšè¿°ãããŠããªãã«ããããããã æ°åŠçãªæå³ã§ã®ç¶æ
ã§ãã ãã®ãããªç¶æ
ã¯ãéå黿°ååŠã®éåå
åã«äŒŒãŠãããç°¡åã«èª¬æããããšãã§ããŸãããããã¯ã©ãã«ã§ããããã©ãã«ãç¹å®ã§ã¯ãããŸããããååšããäœçšããŸãã
ãã®äŸã§ã¯ãå¶ç¶ãã°ã©ãå³ã®åãã©ã³ãã1ã€ã®ç¶æ
ã«å¯Ÿå¿ããŠããŸãã ã€ãŸããååºåã·ã³ãã«ã¯1ã€ã®ç¶æ
ã§ã®ã¿ååŸãããŸãã ãã ãããã©ã°ã倿Žããããžãã¯ãç°ãªãå Žåã1ã€ã®åºåã·ã³ãã«ãè€æ°ã®ç°ãªãç¶æ
ã§ååŸãããããèšãæãããšãã°ã©ãå³ã®åããã©ã³ããè€æ°ã®ç°ãªãç¶æ
ã«å¯Ÿå¿ããããšãããããŸãã ããã¯ãããããããã®ç¹ã§ããã«è€éãªã±ãŒã¹ã§ãã
å·ã«ã€ããŠè©±ããŠããã®ã§ãå®å
šã«èªç¶ãªè³ªåãçºçããŸãïŒãããã€ã®å·ã«å¯ŸåŠããªããã°ãªããŸãããïŒã èªåå®è£
ã§ã¯ãå¿
èŠã«å¿ããŠãç¶æ
ã®æ°ãããçšåºŠãŸã§ä»»æã«èšå®ããŸãã
éæåã¢ãããŒãã®å Žåãåçã®ãªãŒãããã³ã®æœåšçãªç¶æ
ã®æ°ã¯æ¬¡ã®ãšããã§ãã
$$衚瀺$$ 2 ^ \ããã¹ã{total_digit_of all_variable_variables_beingããããã } $$衚瀺$$
ã€ãŸãã
boolãªã©ã®åäœã決å®ãã倿°ã1ã€ã§ã远å ãããšããæ§é ã倿°ã®æ°ã2åã«ãªããæ¡ä»¶ä»ãã§ãåè·¯å¯èœãç¶æ
ãšåŒã³ãŸãã ãããã®ç¶æ
ã®å€ãã¯å°éäžèœãªç¶æ
ã§ãã å°éäžèœãªç¶æ
ã¯ãã¹ãŠãåäœã決å®ãã倿°ã«å¯Ÿããã¢ã¯ã·ã§ã³ã®ç¹å¥ã«éžæãããããžãã¯ã«ãã£ãŠèªåçã«é€å€ããããããã®ã¢ã¯ã·ã§ã³ãäºãã«éãªãåã£ãŠæãŸããçµæãåŸããããšæ³å®ãããŸãã å¿çåŠã®èгç¹ãããããã¯çµæãšããŠæãŸããçµæãããããäžé£ã®å€æ¹åã¢ã¯ã·ã§ã³ãšããŠã®åçããã»ã¹ã§ããããšã
æãåºããŸãã åè¿°ã®ããã«ãçè§£ããã®ã¯éåžžã«è€éãªåœ¢åŒã§ãã åçããã»ã¹ã®ãªãŒãããã³èšè¿°ïŒç¶æ
å³ïŒãšã¢ã«ãŽãªãºã èšè¿°ïŒã°ã©ãå³ïŒã®éãã®è¯ãé¡äŒŒæ§ã¯ããã®å°é¢æ°ã®ã°ã©ãã®ã°ã©ã颿°ã®ä»£ããã«èª¿ã¹ãããšãã§ããŸãã
è¡åãæ±ºå®ãã倿°ãå°ãªãå Žåãã¢ã«ãŽãªãºã ã®èšè¿°ã®è€éãã¯ããã»ã©é¡èã§ã¯ãããŸãããããã®ãããªå€æ°ã®æ°ãå¢ãããšãã¢ã«ãŽãªãºã ã®ç¥èŠã®è€éãã¯ææ°é¢æ°çã«å¢å€§ãã粟ç¥ãæå§ããŸãã
åäœãå®çŸ©ãã倿°ãšããçšèªãæç¢ºã«ããå¿
èŠããããŸãã éæåå®è£
ã®å Žåãããã¯å®è³ªçã«ã¢ã«ãŽãªãºã åå²ãäœæãã倿°ã§ãã èªåå®è£
ã®å Žåãããã¯å
éšç¶æ
倿°ã§ãã 倿°ãšããŠã å
éšç¶æ
ã¯ããã¹ãŠã®ç¶æ
ããªã¹ããããŠããåæå倿°ïŒ=ã¡ããã©intïŒããŸãã¯2ã€ã®ç¶æ
ãããªãå Žåã¯åãªãbool倿°ã§ãã æ¬¡ã«ããªãŒãããã³ã®ãœãããŠã§ã¢å®è£
ã®ããŸããŸãªãªãã·ã§ã³ã瀺ããŸãã
ãã§ã«èšäºã®åé ã§è¿°ã¹ãããã«ãã°ã©ãå³ã¯ãªãŒãããã³ã®èšé²åœ¢åŒã§ããã ãã§ãªããåŸæ¥ã®ã¢ã«ãŽãªãºã ã®èšé²åœ¢åŒã§ããããŸãã æ¡ä»¶ä»ãé·ç§»æäœãé·ç§»ç¢å°ã§è¡šãããŠãããšããäºå®ã¯ãé©ãããšã§ã¯ãããŸãããããµã€ã¯ã«ãã©ã®ããã«è¡šçŸããã®ã§ããããïŒ ç§ãã¡ã®ãã·ã³ãé·æ¹åœ¢ã®ããŒãã«ãééãããšããŸããããã€ãŸããåçŽãµã€ã¯ã«ãšæ°Žå¹³ãµã€ã¯ã«ã®å€æ°ã®çµã¿åããã®åèšæ°ã¯m * nã§ãã çµæã®ãªãŒãããã³ã«ã¯åãæ°ã®ç¶æ
ããããŸããïŒã€ãŸãããªãŒãããã³ã¹ã¿ã€ã«ã§ã«ãŒããèšè¿°ããæ¹æ³ã¯ãããŸããïŒ
ã«ãŒããèããŠã¿ãŸãããïŒ
for(i = 5; i--; ){}
ãã®ãµã€ã¯ã«ã®
æ¡ä»¶ã®èгç¹ãããã«ãŠã³ã¿ãŒ5,4,3,2,1ã®å€ã¯åãå€ã§ãã ã¯ããã«ãŒãæ¬äœiã®å
éšã§ããã¯ãã©ã¡ãŒã¿ãŒã§ããããã°ã©ã ã®åäœã¯ãã®ãã©ã¡ãŒã¿ãŒã®ç°ãªãå€ã«ãã£ãŠç°ãªããŸãããforã«ãŒãæäœã®èгç¹ãããã«ãŠã³ã¿ãŒå€æ°ã¯0ã§ã¯ãªã2ã€ã®å€ãåãããšãã§ããŸãã倿°iã¯ããã°æ¬äŒŒãã©ã°å€æ°ã§ãã
ããŒãã«ãã©ããŒã¹ãªãŒãããã³ã«æ»ããšããã®ãªãŒãããã³ã«ã¯2ã€ã®ç¶æ
ãš2ã€ã®æ¬äŒŒãã©ã°å€æ°ãããããšã«æ³šæããŠãã ããã
- æ°Žå¹³ãµã€ã¯ã«ã«ãŠã³ã¿ãŒ ãã¹ããŒã¿ã¹ã決å®ããŸãã
{0}-åçŽã«ãŒãã
{1ã...ã5ã...}-æ°Žå¹³ãµã€ã¯ã«ã - åçŽãµã€ã¯ã«ã«ãŠã³ã¿ãŒãçµäºæ¡ä»¶ã決å®ããŸãã
å³2.ç¶æ
å³ã䜿çšãããã¹ããããã«ãŒãã®èšé²ãå³ã«ç€ºã
ãã¯ããã«ãã®äŸã®Out_textãªãŒãããã³ 3ã¯ããªãŒãããã³ã®ç¶æ
ã®å€åãåŒãèµ·ããã€ãã³ãã®èгç¹ããè峿·±ããã®ã§ãã
å³3.ãããã¹ããããã¯ã®èªå衚瀺ããç¶æ
å³ãå€éšãšã¿ãªããå¯äžã®ã€ãã³ãã¯è¡æ«ã§ãããã®ãªãŒãããã³ã®ä»ã®ãã¹ãŠã®ã€ãã³ãã¯çŽç²ã«å
éšã§ãããã¢ã«ãŽãªãºã èªäœã®åäœã«ãã£ãŠçæãããŸãã ãã ããããã¯ãåè¿°ã®èªååã®ååã«éåããŸãããç¹å®ã®ç¶æ
ããã®é·ç§»ã«åœ±é¿ãããã¹ãŠã®ã€ãã³ãã¯ãåãç¶æ
èªäœã«ãã£ãŠçæãããããã§ããã€ãŸãããªãŒãããã³ã®åäœã¯ããã®ç¶æ
ãžã®å°éæ¹æ³ã«äŸåããŸããã
èªåå®è£
ãããããã°ã©ã ã¯ã°ã©ãå³ãšããŠè¡šãããšãã§ããèªåçã«å®è£
ããããŸãŸã«ãªããŸãã å³ 4.察å¿ããç¶æ
å³ã®ã°ã©ãå³ãšãèšäºã®åé ã«ç€ºããé·ç§»ã®äŸã瀺ããŸãã
å³4.å³3ã§èª¬æãããªãŒãããã³ã«å¯Ÿå¿ããã°ã©ãå³ 1ïŒbïŒã芧ã®ããã«ãèªåçã«å®è£
ãããããã°ã©ã ãèšé²ãããšãã³ã³ãã¯ããã«é¢ããŠã°ã©ãå³ã¯ç¶æ
å³ãããèãã倱ãããŸãã
ããã§ãèªåããã°ã©ãã³ã°ãšèªååè·¯ãåºå¥ãããã®ãæ€èšããŠãã ããã
èªååè·¯ã®ã¢ãŒããã¡ã¯ãã
屿©ã«whatããŠãããã®ãããããçè§£ããããã«ããœãããŠã§ã¢ãã·ã³ã®2ã€ã®ã«ããŽãªïŒã·ã³ããªãã¯ãšæ©èœïŒã玹ä»ããŸãã ãã£ã©ã¯ã¿ãŒãã·ã³ã¯ãå
¥åã§äžé£ã®æåãåãå
¥ããåºåã§äžé£ã®æåãçºè¡ãããã·ã³ã§ãã ããã¯ãå€å
žçãªæœè±¡ãªãŒãããã³ ã颿£æ°åŠã§å®éã«èæ
®ããããªãŒãããã³ã®å®å
šãªé¡äŒŒç©ã§ãã æåãªãŒãããã³ã¯ãã³ãŒãã®èªèãæ£èŠè¡šçŸã®è§£æãèšèªåæãæ©èœãªãŒãããã³ã®æé©åãããã³äžè¬çãªã¢ã«ãŽãªãºã ã«äœ¿çšãããŸãã ãããã®å®è£
æ¹æ³ã«ã€ããŠã¯ã仿¥ã®èšäºã®åŸåã§èª¬æããæ¬¡ã®ããããã®èšäºã§è©³çްã«èª¬æããŸãã
æ©èœçãªãœãããŠã§ã¢ãã·ã³ã¯ããããã®ãã·ã³ãšã¯å察ã§ãïŒæ¬æã§ã¯ããã°ã©ã ãšåŒã³ãŸãïŒ-ã³ã³ãã¥ãŒã¿ãŒãŸãã¯ãã€ã¯ãã³ã³ãããŒã©ãŒã®ã¢ããªã±ãŒã·ã§ã³ãšå¶åŸ¡ããã°ã©ã ã®å®å
šãªé¡äŒŒäœã§ãã ãããã¯ãåãã¢ãžã¥ãŒã«ãåšèŸºæ©åšã®ãã€ã¯ãã³ã³ãããŒã©ãå¶åŸ¡ãããµãã«ãŒãã³ããŸãã¯ããã€ãã®æçšãªäœæ¥ãå®è¡ãããµãã«ãŒãã³ããŸãã¯ãŠãŒã¶ãŒãšã®ã€ã³ã¿ã©ã¯ãã£ããªäœæ¥ãå®è£
ãããµãã«ãŒãã³ã§ãããèªåçã«èšèšããã³å®è£
ãããŸãã
èªååè·¯ã§ã¯ãæœè±¡ãªãŒãããã³ã®éçºåŸã®æ¬¡ã®ã¹ãããã¯æ§é åæã§ããæœè±¡ä¿¡å·ãšç¶æ
ããã©ã€ãããããã§ãšã³ã³ãŒãããããšã³ã³ãŒãæ¹æ³ãéžæããããšããã§ã«ãšã³ã³ãŒãããããããã§åäœããè«çåè·¯ãæ§ç¯ãããŸãã æ©èœçãªãœãããŠã§ã¢ãã·ã³ã¯ãæ§é ãã·ã³ã«é¡äŒŒãããœãããŠã§ã¢ã§ãã
åè·¯ã®èгç¹ããã®ã¿æ©èœçãªãŒãããã³ãæ€èšãããããã«æ§é çãªãŒãããã³ä»¥äžã®ãã®ãèŠããªãå Žåããã®ãããªçãå€èгã¯å¹²æžããå¯èœæ§ãé«ããªããŸãã ãã®ã¢ãããŒãã¯ãèªååè·¯ããã®ãã¬ãŒã·ã³ã°ããŒããŒã§ãããèªåèšèšãããã¢ãžã¥ãŒã«ã®é
çœ®æ¹æ³ã®ãã³ãã¬ãŒããæäŸããŸãã
å³5.ãœãããŠã§ã¢ãã·ã³ã®å®è£
ã®äžè¬çãªãã¿ãŒã³ããã¯ãèšèšããã»ã¹ãé¢åã«ãªããšããäºå®ã«ã€ãªãããã»ãšãã©ã®å Žåããã®ãã³ãã¬ãŒãã§èŠå®ãããŠããäžå¿
èŠãªæ£åŒãªæé ãå«ãŸããŸãã
ããããå®éã®ããã»ã¹ã圢åŒåãããã·ã°ãã«ã®ã»ããã«å€ããããããçš®ã®ãèªååããããAPIã䜿çšããªãããšã¯ãèªåããã°ã©ãã³ã°ã®å©ç¹ããããããŸãã å©ç¹ã¯ãç¶æ
å³ã®ã«ããŽãªã«åçããã»ã¹ãèšé²ããããšã§ããããã«ãããããã°ã©ãã³ã°ãããäºæž¬å¯èœã«ãªããŸãã ãªãŒãããã³ãæäœãªãŒãããã³ãšå¶åŸ¡ãªãŒãããã³ã«é©åã«åå²ããŸãããã®åå²ã®äžéšãšããŠãæäœãªãŒãããã³ãæ£ããåççã«éžæããããšã«ããããœãªã¥ãŒã·ã§ã³ã广çã«ãªããæ¬¡ã®èšäºã§èª¬åŸåãæã£ãŠç€ºãããŸãã
åè·¯èªåæ©ã®éçºè
ã®åäœãæ©æ¢°çã«ã³ããŒããŸããããã¯ãã¢ãŒãã£ãã¡ã¯ããšããèšèãæå³ãããã®ã§ããèªåããã°ã©ãã³ã°ã¯ãèªååè·¯ã®æºããããæ®ããŠãããã°ã©ã ãåŠçããŸãã ãã®ããã°ã©ã ã¯éåžžã«äŸ¿å©ã§ãã©ã¹ããã¯çŽ æã§ããããã®çŽ æã®å¯å¡æ§ã人æ°ãéããŸããã éåžžã®æ¹æ³ã§ããã°ã©ãã³ã°ããããšã«ãããããžã¿ã«åè·¯ãèšèšããã«ãŒãã³ãçãããšãã§ããŸãã ã¢ã¯ã·ã§ã³ãå®è¡ããå¿
èŠãããå Žåãæ¡ä»¶ã確èªããŠå®è¡ããŸããç¹å¥ãªããªã¬ãŒé¢æ°ãäœæããå¿
èŠã¯ãããŸããã ç§ã¯äœã«ã€ããŠè©±ããŠããã®ã§ããïŒ ãã®ããã«æžãããšãã§ããŸãïŒ
if(IO_latch->Data_1_received && IO_latch->Permission) { State = 5; }
ã§ãã§ãã
typedef bool paTrigger(); typedef void paAction(); struct tLink_Trigger_Action { paTrigger * Trigger; paAction * Action; int Next_state; }; bool Trigger_X(){return(IO_latch->Data_1_received && IO_latch->Permission);}; void Action_X(){State = 5;}; tLink_Trigger_Transition Table[States_max][ Triggers_max] = { {}, { âŠ,{ Trigger_X, Action_X }, ⊠}, {}, {}, {}}; uint Engine (uint Message) { if(State->Trigger()) { State->Action(); State = State->Next_state; } ⊠}
éããæããŸããïŒ
è¶
圢åŒäž»çŸ©ã®æ¯æè
ãç°è°ãå±ããããšãã§ããã®ã¯ãéåžžã®ããã°ã©ãã³ã°ã§ã¯äŒèšåŠçãå°ãªããèªååè·¯æ¹åŒã§ã¯ãã¹ãŠã®ããããã«ãŠã³ãããããšããããšã ãã§ãã ããã«å¯ŸããŠããã©ã¡ãŒã¿ãèæ
®ããããšã«åé¡ãããå Žåãã¢ã«ãŠã³ãã£ã³ã°ãèæ
®ããŠã¡ã€ã³ãã·ã³ãã«ãŒãã³ããè§£æŸãããµããã·ã³ãäœæãã䟡å€ããããšçããŸãã ããã¯ã建èšçãªåè§£ã®ãã³ãã§ãã
ããã°ã©ã ã«é¢é£ããç¶æ³ã®ãã©ãã¯ãåçããã»ã¹ã®ã¢ããªã³ã°ãšåæã®ããã®äŸ¿å©ãªããŒã«ãæäŸããèªåã¡ã³ã¿ã«ãã³ãã¬ãŒããåæã«éãéçºè
ãæ¯é
ããéåžžã®ããã°ã©ãã³ã°ã®åçŽãªåã³ã奪ããšããäºå®ã«ãããŸãã ç§ã®æèŠã§ã¯ãããã¯èªåããã°ã©ãã³ã°æè¡ããšããŸããã¯ãªå¥œå¥å¿ä»¥äžã«äžæã§ããªãæãæ·±å»ãªçç±ã®1ã€ã§ãã
ãæ³åã®ãšããããã®è«äºã®çãšãªã£ãŠããç¶æ³ãå
æããããã®èªç¶ãªæ¹æ³ã¯ãäž¡æ¹ã®ãã©ãã€ã ãæå€§éã«æŽ»çšããããšã§ãã ãã®å Žåãå
éšç¶æ
ã¯æ¬¡ã®çä¿¡ã€ãã³ãã®åŠçæ¹æ³ã瀺ããã®ã§ã¯ãªããäžçš®ã®åäœã¢ãŒãã«ãªããŸãã ããã¯éèŠã§ãã ããããç¶æ
ã¯ãã¢ã«ãŽãªãºã ããã°ããã®é䜿çšãããŠãããµãã«ãŒãã³ãšèŠãªãããå¿
èŠããããŸãã åæã«ã圌ã¯å
¥åä¿¡å·ãåŠçãã鱿«ã«ã©ãã«ã§ãè¡ããã«æŸéããããšãã§ããŸãã ããç¶æ
ã§ã¯ãããã°ã©ã ãåãã¿ã€ãã®äœæ¥ãå®è¡ããåãã¿ã€ãã®ç¯å²ãè¶
ãããã¹ãŠã®ãã®ãå¥ã®ç¶æ
ã«è»¢éãããããšãçè§£ãããŸãã ç¶æ
ããç¶æ
ãžã®é·ç§»ã¯ãä¿¡å·ã«ãã£ãŠè¡ãããã®ã§ã¯ãªãããã®ã¢ã«ãŽãªãºã ã«ãšã£ãŠéèŠãªã€ãã³ãã«ãã£ãŠã®ã¿è¡ãããŸãã ãããŠãéžæããæ¡ä»¶ã«åºã¥ããŠããããã®ã€ãã³ããèªåã§éžæããŸãã ãããã£ãŠãåç¶æ
ã¢ãŒãã«ã¯åã蟌ã¿ããã°ã©ã ãå«ããããšãã§ããŸãã

å³6. ç¶æ
ãåäœã¢ãŒãã§ããèšèšãã¿ãŒã³ã
ããããããã°ã©ã ã¯ç§»è¡ãããŸã§é¢æ°ã¢ãŒãã ãã§ã¯ãããŸããã çãå埩ãå®è¡ãããã®éã«ç¶æ³ãå¶åŸ¡ããŸãã ããã«ãã¢ããªã±ãŒã·ã§ã³å
šäœã¯æ¬¡ã®ããã«ãªããŸãã
å³7.ããã°ã©ã ã®ã³ãã¥ããã£ãã€ãŸããããã°ã©ã ã䜿çšãããšã äŒæ¥ã®ãã«ãã¿ã¹ã¯ã®æŠå¿µã«ãªããŸããããã¯ã äŒæ¥ã®ãã«ãã¿ã¹ã¯ã®å€å
žçãªã¢ã«ãŽãªãºã ãšã¯å¯Ÿç
§çã«ãäœããã®çç±ã§éåžžã®ã¢ããªã±ãŒã·ã§ã³èªäœãäœããã®çç±ã§OSãåç
§ããã·ã¹ãã ã«å¶åŸ¡ãè¿ãå Žåãããã°ã©ã ã¯æåã«èšèšãããŸãå¶åŸ¡ã1ã¹ãããã ãåãåãããã°ã©ã ãšããŠããããå®è¡ããå¶åŸ¡ã次ã®ååŸ©ã«æž¡ããŸãã äŒæ¥ã®ãã«ãã¿ã¹ã¯ãšããã°ã©ã ã®éãã¯æ£åŒã«æ¡ä»¶ä»ãã§ãããããã°ã©ã ãèªåçã«èŠãããšã¯ãã®å埩æ§ãæå³ãããããããã°ã©ã ãå¶åŸ¡ãæ»ãããšããå¿ããããããªåé¡ã¯ãããŸããã
å³ã«ç€ºãããã«ãããã°ã©ã ã¯ãã«ãã¹ã¬ããOSã®å¶åŸ¡äžã§ãåé¡ãªãåäœããŸãã åæã«ããã¡ãããäŒæ¥ã®ãã«ãã¿ã¹ã¯ã¯äžèŠã®ããã§ãããã¢ãžã¥ãŒã«ã®èªåããã€ã¹ã¯ãèªåèšèšã«é¢é£ããäžèšã®ãã¹ãŠã®å©ç¹ãä¿æããŠããŸãã
å³8.ãã«ãã¹ã¬ããç°å¢ã®ããã°ã©ã ãããã°ã©ã ã¯ãç§»è¡äžã«çºçããåäžã®ã¢ã¯ã·ã§ã³ãå®è¡ã§ããåãç¶æ
ïŒåäœã¢ãŒãïŒã§æ¡åŒµã¢ã¯ãã£ããã£ãå®è¡ã§ããããããã®ç¶æ
å³ã¯æ©èœãšMiles and MoorsãååŸããŸãã ããšãã°ãããŒãã³ã°ã¡ãŒã¿ãŒã¯ç¶æ
å³ã§è¡šãããŸãã
å³9.ããã°ã©ã ãããŒãã³ã°ã¡ãŒã¿ãŒãã説æã¯ãã·ã³ãã€ã«ãºãšã ãŒã¢ã®æ©èœãçµã¿åããããã®ã§ããããŒãã³ã°ã¡ãŒã¿ãŒã®äŸã¯ãŸã æ€èšãããŠããŸããããç¶æ
å³ãèŠããšãäœãå±éºãªã®ããçè§£ããã®ã¯ç°¡åã§ãã ç¶æ
å³ã«ãããã®ã«ãŠã³ã¿ã®èª¬æã¯ãããã¹ãã䜿çšããŠäœæãããåããã·ã³ã®èª¬æãããã¯ããã«æçã§ããããšã«æ³šæããŠãã ããã
çè«ã®èгç¹ããã¯ãããŒãªãŒãªãŒãããã³ãšã ãŒã¢ãªãŒãããã³ã®æ©èœã1ã€ã®ç¶æ
å³ã«çµã¿åãããããšã§ééããç¯ããŸããã ãã®ãããªãªãŒãããã³ã§æ°åŠæŒç®ãå®è¡ããå¿
èŠãããå Žåãããã¯ããŒãªãŒã»ãªãŒãããã³ãšèŠãªãããšãã§ããŸãã åãæ©èœãåããæœè±¡ãªãŒãããã³ã®å ŽåãMealyãªãŒãããã³ã¯ããå°ãªãç¶æ
ã§çµæãåºãããšãã§ããŸãã ãã€ã«ãã ãŒã¢ãã·ã³ã«ããŸãã¯ãã®éã«å€æããããã®æ°åŠçææ³ããããŸãã
äžèšã¯ããã°ã©ã ãäœã§ãããã«ã€ããŠå°ãå
ãåœãŠãŸããããããå®è£
ããæ¹æ³ã«ç§»ããŸãããã
æ©èœçãªãœãããŠã§ã¢ãå®è£
ããæ¹æ³ã
åã«èª¬æãããå³ã®äŸ¿å®äžã®ã°ã©ãå³ããå§ããŸãããã 10ã
å³10.å®è£
ããã°ã©ãå³ãã°ã©ãå³ããçŽæ¥ç¶ãæãæçœãªãçŽæ¥çãªã解決çã¯ãswitchã¹ããŒãã¡ã³ãã䜿çšããŠãè€æ°Cã®ä»£æ¿ã®ç¶æ
ãæ±ºå®ããããšã§ãã æ¬¡ã®å
¥åã·ã³ãã«ãåãåããšãããã°ã©ã ã¯çŸåšã®ç¶æ
ãå€å¥ããç¶æ
ããšã«å
¥åã·ã³ãã«ãåæãããå
¥åã·ã³ãã«ããšã«ç¹å®ã®ç¶æ
ãžã®é·ç§»ã ãã§ãªãåºåã·ã³ãã«ãèšå®ãããŸãã
ãªãã·ã§ã³1 #define mStep ((uword) (-2))
Automataã¯ã Switchãã¯ãããžãŒãšIAR visualStateã§åæ§ã®æ¹æ³ã§å®è£
ãããŸãã
ããã°ã©ããŒã¹ããŒãã®æŠå¿µã¯ãç§»è¡ãè¡ããã«ãã°ããæ©èœããããåæã«ãå°ããªã¢ã¯ãã£ããã£ããç¶ç¶ã§ããããã°ã©ã æäœã¢ãŒããšããŠè§£éãããããããã°ã©ã ãæ°ããç¶æ
ã«ç§»è¡ããããšãä¿èšŒãããŠããªãå
¥åã·ã³ãã«ãããã¯ãã§ãïŒå
éšçãªçç±ã§åœŒãç¬ãã§è¡ããªãéãïŒããããã圌ã¯ãããæ¯åã¢ã¯ãã£ãã«ããŸãã ã¹ãããèšå·ã¯mStepã§ãã
2çªç®ã®å®è£
ãªãã·ã§ã³ã¯æ ¹æ¬çã«ç°ãªããŸãããªã¹ãã«ç€ºãããã«ãåã€ãã³ãã®ãã³ãã©ãŒãäœæããŸã
ãªãã·ã§ã³2 uint Message_i0_handler(uint &State) { uint Out; switch (State) {
äžèšã®ãªãã·ã§ã³ã¯ãåºæ¬çãªèãæ¹ãåæ ããåºæ¬çãªãªãã·ã§ã³ã§ãããããªãé¢åã§æéãããããŸãã ãã ãããããã¯ãããã°ããæžããïŒçžå¯ŸçïŒããã³äœæ¥ãé«éåããïŒå®éã®ïŒæ¹åã«åé¡ãªã倿ŽãããŸãã
ãªã¹ããªãã·ã§ã³2ã«ç€ºãã³ãŒãã倿ŽããŸããåMessage_ixx_handlerã€ãã³ããã³ãã©ãŒããåç¶æ
ã«å¯Ÿå¿ããäžé£ã®é¢æ°ã«åå²ããŸãã
ãªãã·ã§ã³3 uint Message_i0_handler_for_s1(uint &State) { { , }; State = 2; Out = 2; return(Out); } uint Message_i0_handler_for_s2(uint &State) { { , }; State = 1; Out = 1; return(Out); } ... uint Message_Step_handler_for_s1(uint &State) { {, , }; return(mStep); }
åèšãããšã
States * Messagesæ©èœãå¿
èŠã§ããããšãçè§£ãããŸãããäžéšã¯ç¹°ãè¿ãããå ŽåããããŸãããããã«ãããå°æ°ãããããŸããã
ããã§ååŸãããã¹ãŠã®ã¡ãœãããé
åã«çµåãããšããã·ã³ã¯ã«ãŒããšã³ãžã³é¢æ°ããåäœãããšã³ãžã³ã¯ãã©ãŒã ã«èšè¿°ã§ããŸãã
typedef uint (*paMessage_handler)(uint &State); paMessage_handler Reactions[6][3] = { { Message_i0_handler_for_s1, Message_i1_handler_for_s1, Message_i2_handler_for_s1}, ... { Message_i0_handler_for_s6, Message_i1_handler_for_s6, Message_i2_handler_for_s6}, }; paMessage_handler Reactions_for_Step [6] = { Message_mStep_handler_for_s1, ..., Message_mStep_handler_for_s6 }; uint Engine(uint Input = mStep) { uint State = 3; if(Input == mStep) return(Reactions_for_Step [State] (State)); else return(Reactions[State][Input] (State)); }
ãã®ãªãã·ã§ã³ã䜿çšãããšãå²ã蟌ã¿ãã³ãã©ãŒã§ã®ã€ãã³ããã£ã¹ãããã¹ããŒã ãšåäžãšã³ãžã³ããã®åŠçãé©åã«å®è£
ãããŸãã
åæ§ã®æ¹æ³ãã boost.statechartãã³ãã¬ãŒãã®å®è£
ã®åºç€ãšãªããŸãã
åã®2ã€ã®ãªãã·ã§ã³ã®äž»ãªæ¬ ç¹ã¯ãèªååè·¯ã®ã¢ãŒãã£ãã¡ã¯ãã§ããã€ãŸãããã®æ¹æ³ã§ããã°ã©ãã³ã°ãããšããããã°ã©ããŒã®ã¹ã¿ã€ã«ãã®ããã°ã©ãã³ã°ãç¶æããããšãã§ãããé床ã«è¥å€§åãã衚圢åŒã®ããã°ã©ãã³ã°ã¹ã¿ã€ã«ã䜿çšããå¿
èŠããããŸãã
衚圢åŒã®ããã°ã©ãã³ã°ãæäŸãããã®ãæ€èšããŠãã ããã
- ã+ãã¯ãåç¶æ
ã®ãã¹ãŠã®ã€ãã³ãã«å¯Ÿããåå¿ããªã¹ãããŸãïŒæªåŠçã®ã€ãã³ãã«ã¯ã¹ã¿ãããããŸãïŒã å®å
šãªèª¬æããããŸãã
- ã-ãããããåæã«ããã¹ãŠãéåžžã«é¢åã«èªèãããŠãããããäžéšã®ã¿ã€ããã¹ã®å¯èœæ§ã¯éåžžã«å€§ãããã空çœãæ®ããŠããŸãã ã€ãŸããèªåããã°ã©ãã³ã°èªäœãããä¿¡é Œæ§ã®é«ãéçºæ¹æ³è«ã§ãããšããäºå®ã«ãããããããä¿¡é Œæ§ã®åäžã«ã€ããŠã¯èšåããŠããŸããã
IAR瀟ãvisualStateãªãŒãããã³ã®ã°ã©ãã£ãã¯ããã°ã©ãã³ã°ã®éãé²ãã ããšã¯é©ãããšã§ã¯ãããŸãããããã°ã©ãã³ã°ã®èªåããã¹ãããŒã¹ã®ããã°ã©ãã³ã°ã¹ã¿ã€ã«ã¯äººåãã§ã¯ãªãããšãèæ
®ããŠãã ããã
ãªã¹ãã®ããªã¢ã³ã1ã¯ãåãå
¥ããããç¶æ
æäœã¢ãŒãã®æŠå¿µã«ãã£ãŠæ¡åŒµãããŠããå Žåã倿Žã®å¯èœæ§ã®ç¹ã§ã¯ããã«æçã§ãããšæãããŸãã
åç¶æ
ã®å
¥åä¿¡å·ãã³ãã©ãŒïŒå€éšã¹ã€ããïŒãåå¥ã®é¢æ°ïŒé¢æ°ã¢ãŒãïŒã«é
眮ããŸãã
ãªãã·ã§ã³4 uint State_1 (uint &State, uint Input) { {, , }; switch (Input) {
ç¶æ
颿°ãã€ã³ããã¯ã¹ã§ç€ºãããšãã§ããããã«ãæ°ãã«åé¢ãããç¶æ
颿°ã¯ãã¹ãŠé
åã«é
眮ãããŸãã 倿°å
éšç¶æ
ã¯ã€ã³ããã¯ã¹ã§ãããã¿ã€ã
uintã®å€ã§ããããšã³ãžã³ã¯æ¬¡ã®åœ¢åŒãåããŸãã
typedef uint (*paState)(uint &State, uint Input); paState States[6] = { { State_1, ..., State_6}, }; uint Engine(uint Input = mStep) { static uint State = 3; return(States [State] (State, Input)); }
ãªãã·ã§ã³3ãšäžèŠé¡äŒŒããŠãããããããã¯ãäžé£ã®å€æŽã¢ãŒããšããŠã®ããã°ã©ããŒã®æŠå¿µãšããäžèŽããŠããŸãã åç¶æ
颿°ã¯ã¢ãŒã颿°ã§ãããããèªäœãå¿
èŠãªãã¹ãŠã®åšèŸºæ©åšããŸãã¯åšèŸºæ©åšããã®åæããŒã¿ãã¬ãŒã ãããŒãªã³ã°ããå
¥åæåã ãã§ãªãããã«åºã¥ããŠé·ç§»ããŸãã
å
¥åã·ã³ãã«ã«ã¯ããã¹ãŠã®ããã°ã©ã ã«å¯ŸããŠåãã¿ã€ãã®ã·ã¹ãã ã¡ãã»ãŒãžãå«ãŸããå ŽåããããŸãã ããã¯ãç¹ã«ãç¶æ
颿°èªäœãåŸæ¥ã®æã銎æã¿ã®ããæ¹æ³ã§èšè¿°ã§ããããšãæå³ããŸãã
ãã®ãªãã·ã§ã³ã¯ã å
éšç¶æ
倿°ã®åå€ããã®ç¶æ
ãåŠçãã颿°ã«äžæã«é¢é£ä»ããããŠããããã ãªãã·ã§ã³1ãããåªããããã©ãŒãã³ã¹ã瀺ããç¶æ
颿°ãåŒã³åºããšãç®çã®é¢æ°ãžã®ãã€ã³ã¿ãŒã åæã«ã ãªãã·ã§ã³1ãå®è£
ããå Žå ã å
éšç¶æ
倿°ã¯ç¶æ
çªå·ã«å¯Ÿå¿ããå€ãšç¹°ãè¿ãæ¯èŒãããŸãã
ãã®ãªãã·ã§ã³ã¯é«éã§ãããã«ãŒãã³ã®éã¯æžããŸããã ãã®å®è£
ã®äž»ãªæ¬ ç¹ã¯ãç¶æ
ããŒãã«ãæã¡ãããããŒãšã³ãŒããã¡ã€ã«ã«ç¶æ
ã®äžŠåèšé²ãä¿æããå¿
èŠããããããã°ãäºéèšè¿°ã®åé¡ãã³ããŒ/貌ãä»ãããªãããšã§ãã ãã ãããã®åé¡ã¯éåžžã«ç°¡åã«è§£æ±ºãããŸããæå®ãããäŸã倿ŽããŸãã宿°ããŒãã«å
ã®ãã€ã³ã¿ãŒã®ã€ã³ããã¯ã¹ã§ããå
éšç¶æ
倿°ã®ä»£ââããã«ãããèªäœãç¶æ
颿°ãžã®ãã€ã³ã¿ãŒã§ããå
éšç¶æ
倿°ã䜿çšã§ããŸãã
ãªãã·ã§ã³5 typedef uint (*paState)( void * argState, uint Input); uint State_1 (paState * State, uint Input) { {, , }; switch (Input) {
説æãããŠãããªãã·ã§ã³ã¯ããèªç¶ãªãããã°ã©ãã³ã°ãšã»ãšãã©å€ãããŸãããããã¯ãã¹ã€ããã®å
éšæ§é ãšããããã®ä»£ããã«æ¬¡ã®ã¿ã€ãã®æ§é ã䜿çšã§ãããšæ³åãããšããã«æçœã«ãªããŸãã if(IO_latch->Data_1_received && IO_latch->Permission) { State = 5; }
ãã®ãªãã·ã§ã³ã¯ãåã
ã®ç¶æ
ã¢ãŒããå¥ã
ã®æ©èœã§åãåºããããšããç¹ã§ã®ã¿ãèªç¶ãªãããã°ã©ãã³ã°ãšç°ãªããŸãããã ããã¿ã¹ã¯ãåçŽãªãµãã¿ã¹ã¯æ©èœã«åå²ããããšã¯ãããã°ã©ãã³ã°ã®äž»ãªææ³ã®1ã€ã§ããããã§ã¯ããœãŒã¹ã³ãŒãã®æ©æ¢°çã§çŽ æŽãªæçåãåé¿ãããããã°ã©ã ãåå²ããããã®å»ºèšçãªåºæºïŒåå¥ã®ç¶æ
ã¯åå¥ã®é¢æ°ïŒããããšããäºå®ã«ã€ããŠã®ã¿è©±ããŠããŸãïŒãã®é¢æ°ã¯å€§ãããªããããšãã°ã . , , ( â ), , , « » .
«», tDisplay::Out_text, «». .
11.ãã®äŸãããããããã«ããã¹ãŠã®ç¶æ
ã¯åäžã®é¢æ°ãšããŠå®è£
ã§ããŸãããã®äŸã§ã¯ãgotoæŒç®åã䜿çšããå¿
èŠã¯ãããŸããããæ¢åã®å€å
žçãªæ§é äœã§ããåå²ãšã«ãŒãã«è¿œå ããŸãããããèªäœã¯ãããã°ã©ãã³ã°ã®å¥ã®æ§é çæ§æã§ããããªãŒãããã³ã®ç¶æ
ãžã®ç§»è¡ã§ãããã®æ§é èšèšã«ã€ããŠè©³ãã説æããŸããäžè¬çãªå Žåãåç¶æ
ã¯ã©ãã«ã§ããŒã¯ãããç¶æ
éã®é·ç§»ã¯gotoæ§é state_nameã䜿çšããŠå®è¡ãããŸããç¶æ
ã¯åžžã«ã©ãã«ã§å§ãŸããããã°ã©ã ã¯ãã®ãšã³ããªãã€ã³ã以å€ããç¶æ
ã«å
¥ãããšã¯ã§ããŸãããæ¬åŒ§{}ã§å²ãããšãã§ãã1ã€ã®é¢æ°ïŒïŒïŒå
ã«ãªãŒãããã³ããã¹ãã§ããŸããããããããã¯ãã§ã«å€ãããŸããããã«ãããåäžã®é¢æ°å
ã§äœæ¥ããå Žåã§ããã¢ãžã¥ãŒã«æ§ã®ååãžã®æºæ ãä¿èšŒããããããgotoã¹ããŒãã¡ã³ãã®äœ¿çšãåæãšããä¿¡é Œã§ããããã°ã©ãã³ã°ã®ååã«éåãããã®ã¯ãããŸããããã¹ãŠã®é·ç§»ã¯ãç¶æ
å³ã«å®å
šã«åŸã£ãŠè¡ãããŸããããã«ãããè€éããå¢ãããšãªã倿Žãå ããããšãã§ãããã¹ãŠãæ£ã§æŽçããããã以äžã®ããšã¯ãããŸããããã®ãœãªã¥ãŒã·ã§ã³ã®å¯äžã®æ¬ ç¹ã¯ããã·ã³ãäœæ¥ãéå§ãããšãã¹ããŒã«ç¶æ
ã«åãæ¿ãããŸã§ãã·ã³å
ã«æ®ãããšã§ãããã£ã¹ãã¬ã€ã®å Žåãããã¯æè¿ãããŸããããªãŒããã¿ã®ã³ãã¥ããã£ãšããŠå®è£
ãããã·ã¹ãã ã®æ©èœããã°ã©ã å³7ã¯ããã®æ¹æ³ã§æ©èœããèœåããªãå ŽåããããŸãããã®å ŽåãäŸ6ã®ããã«ãåç¶æ
ã¯åå¥ã®é¢æ°ã«ãã£ãŠèšè¿°ãããå¿
èŠããããŸããããã°ã©ã ã³ãŒãã®å®è£
ã®äŸ¿å®äžãé·ç§»ã¯ãã¯ãã«ãã£ãŠå®è¡ãããŸãã
typedef uint (*paState)( void * argState, uint Input); #define mGoto(argState,argOut){\ State = (paState*)argState;\ return(argOut);\ } #define mStall_code ( (uword)(-1) ) #define mStall(){\ return(mStall_code);\ }
ãã®åçŽãªAPIã䜿çšãããšãåããªãŒãããã³ã®ç¶æ
颿°ãããªãŒãããã³ã®åäœãå¶åŸ¡ã§ããŸãããã®ãããªã³ãã³ãã¯ãå®è¡ãããšæ©èœãçµäºããããããã®ãªãŒãããã³ã®å€åŽã«ãããªãŒãããã³ã«å¯ŸããŠåŒã³åºãããšã¯ã§ããŸããã説æãããŠããã³ãã³ãã·ã¹ãã ã®äœ¿çšã¯ãã¹ããŒã ã«åŸã£ãŠå®è¡ãããŸãããªãã·ã§ã³7 paState *Display_state; void tDisplay::Out_text (int arg_x0, int arg_y0, int arg_x1, int arg_y1, int arg_x_shift, int arg_y_shift, unsigned char * argText, TMemo * argDebug) {
ãã®å®æœåœ¢æ
ã§ã¯ããªãŒãããã³ãšã³ãžã³ã¯ã颿°æ¬äœã§ã¯ãªããå¥ã®ã¹ã¬ããããããããã¹ãããå®è¡ãã§èµ·åãããŠãããã衚瀺ã®å Žåããã®å¿
èŠæ§ã¯æããã§ã¯ãããŸããããåãããã¯ã衚瀺ããåŸãæ°ããããŒã¿ãåŠçãããŠããæ¬¡ã®ãããã転éããã®ã«æéããããããšãæ³åããŠãã ãããèªåçã«ãããã¯ãã«ãã¿ã¹ã¯ç°å¢ããªãå Žåã§ãå¹ççã«å®è£
ãããŸãããã®äŸã¯ããªãŒãããã³å®è£
ã®æçšæ§ã玹ä»ããæ©äŒãæäŸããŸãããã®å ŽåãOut_textãåŒã³åºããšããã»ã¹ãå
é»ããããã®ãšã³ãžã³ã¯ãèšç®éãèš±ãéããããã¯ã°ã©ãŠã³ãã®ã¹ãŒããŒã«ãŒããŸãã¯å²ã蟌ã¿ãã³ãã©ãŒã§å®æçã«èµ·åãããŸãã説æãããŠããã·ã³ãã«ãªAPIã¯éåžžã«äŸ¿å©ã§éåžžã«æ©èœçã§ããããã䜿çšããŠãäŸ4ã倿Žãããšã次ã®ããã«ãªããŸãããšã³ãžã³ã¯ãªãã·ã§ã³4ãšåãã§ãã
ãªãã·ã§ã³8 uint State_1 (paState * State, uint Input) { {, , }; switch (Input) {
ãã®APIã¯ãèªååæã®ããŒãºã®å€§éšåãã«ããŒããåçŽãã«ãããããããå®çšã«äŸ¿å©ã§ãã以äžããã®ãªãã·ã§ã³ãåºæ¬çãªæ§é å®è£
ãšåŒã³ãŸãã建èšçãšããèšèã¯ããã®å®è£
æ¹æ³ãæãåãå
¥ããããããã«ãå®éã®çµéšã«çŽæ¥åŸãããšãæå³ããŸããäžéšã®äŸã§ã¯ãå
éšç¶æ
倿°ã¯ãšã³ãžã³é¢æ°ã®æ¬äœã§éçãšããŠå®£èšãããŠããŸãããããã¯æ
£äŸã§ããå®éããªãŒãããã³ã¯ã¯ã©ã¹ã«ãã£ãŠèšè¿°ããããã®å€æ°ã¯ãªãŒãããã³ã®èšè¿°åã¯ã©ã¹ã®äžéšã§ããã¹ããŒããã·ã³èšè¿°åãšãã®ãã·ã³ã®äœæ¥å€æ°ããã·ã³ã³ã³ããã¹ããšããçšèªãšåŒã¶ããšã«åæããŸãããªãŒãããã³ã®ã³ã³ããã¹ããå
·äœçãªæ§é ããªãŒãããã³ã説æãããã®ã®åé¡ã«ã¯ãå€ãã®ãã¥ã¢ã³ã¹ããããŸãããã®åé¡ã«ã€ããŠã¯å¥ã®èšäºãåãäžããããŸããã·ã³ããªãã¯ãœãããŠã§ã¢ãã·ã³ãå®è£
ããæ¹æ³ã
æåŸã«ãåçŽãªã·ã³ããªãã¯ãªãŒãããã³ãå®è£
ããæ¹æ³ãæ€èšããŸããäžèšã®ããã«ããããã¯å¥åã®ãã¡ããªãŒã圢æãããã®æŠå¿µã¯æ©èœçãªãŒãããã³ãšã¯å€§ããç°ãªããå€å
žçãªæœè±¡ãªãŒãããã³ã§ããã2ã€ã®ãªãŒãããã³ãã¡ããªãŒãå®è£
ããæ¹æ³ã¯ç°ãªããŸãããå
±éã®æ©èœãåããŠããŸãããªãŒãããã³ãããããã®å
¥åãæåã®ã·ãŒã±ã³ã¹aãbãcãåãåããæå®ãããã·ãŒã±ã³ã¹ãæ€åºããå Žåã«1ããä»ã®ãã¹ãŠã®å Žåã«0ãäžãããšããŸããåžæã®bacabã·ãŒã±ã³ã¹ãããŸãããããã®ãªãŒãããã³ã®ç¶æ
å³ãå³ã«ç€ºããŸãã 12
å³12. bacabå
¥åã·ãŒã±ã³ã¹æ±ºå®ãã·ã³ã次ã®ããããã®èšäºã§ããã®ãããªãã·ã³ã®èªåã³ã³ãã€ã«ã®ã¢ã«ãŽãªãºã ã瀺ããŸããæ¬¡ã«ããã®ãã·ã³ãæãå¹ççã«å®è£
ããæ¹æ³ãæ€èšããŸãã 2次å
é
åãäœæããæãç°¡åãªæ¹æ³ uint FSM[States_amount][Alphabet_size];
ãã¹ããããåé
åã¯ç¶æ
ã«å¯Ÿå¿ãããã¹ããããé
åã®åèŠçŽ ã«ã¯ãåå
¥åæåã®æ¬¡ã®ç¶æ
ã®ã€ã³ããã¯ã¹ãå«ãŸããŸããäžè¬çãªå Žåãåå
¥åæåã¯0ããAlphabet_Size-1ã®ã€ã³ããã¯ã¹ã«é¢é£ä»ããããŠããŸãããã®é
åã¯ãå€å
žçãªãªãŒãããã³é·ç§»ããŒãã«ã§ããåºåã·ã³ãã«ã¯åžžã«ãã³ãŒããèªèããããå Žåãé€ããŠåžžã«0ã§ãããããåºåããŒãã«ã¯äœæã§ããŸããããã³ãŒããèªèãããå Žåãæ¬¡ã®ç¶æ
ã§ã¯ãªããå€0ã1ã2ã...ã«æ°å0xffãå«ãŸããŸãã ffããã®å Žåããšã³ãžã³1ããã®æ»ãã³ãŒããããã³æ¬¡ã®ç¶æ
ã®ã€ã³ããã¯ã¹ã¯0ã§ãããã®ãããªãªãŒãããã³ã®ãšã³ãžã³ã¯ãã³ã¡ã³ããªãã®åçŽãªé¢æ°ã«ãã£ãŠèšè¿°ãããŸãã uint FSM[States_amount][Alphabet_size]; uint Engine(uint Input) { static uint State = 0; State = FSM[State][Index_for(Input)]; if(State == (uint)(-1)) { State = 0; return 1; } else return 0; }
ãªãŒãããã³ãå®è£
ããåºæ¬çãªæ¹æ³ã説æããŸãããå®è£
æ¹æ³ã®ãããªãéçºã¯ããã·ã³ã®æ¥ç¶ã«é¢é£ããŠããŸããããã¯å¥ã®å€§ããªãããã¯ã§ãããå¥ã®ã·ãªãŒãºã®èšäºãããã«å°å¿µããŸãã仿¥ã®ã¬ãã¥ãŒã¯çµãããŸãããæ¬¡ã®èšäºã§ã¯ãå¹çã«ã€ããŠãã€ãŸã枬å®å¯èœãªãã©ã¹ã«ã€ããŠèª¬æããŸãã