Autómata Finito Determinista Código C++ En esta ocasión les traigo la implementación de un u n AFD en lenguaje C++, primeramente una breve defnición de lo que es. Un autómata fnito determinista es una quntupla que denotaremos de manera gen!rica por "#$%,&,q',(,F) donde* •
% es un conjunto fnito cuos elementos llamaremos estados.
•
& es un alabeto que llamamos alabeto de entrada.
•
q'∈% es un estado se ñalado que llamamos estado inicial.
•
F es un subconjunto de % no vaco, cuos elementos llamamos estados fnales.
•
( es una una aplicaci aplicación ón de %-& %-&→% , que llamamos llamamos unción unción de transició transición. n.
ara la implementación se utili/a una matri/ de transición convirtiendo los smbolos letras del alabeto en ndices de la matri/ donde los estados son las F01A2 los smbolos son las C31U"4A2, por ejemplo*
5enemos un alabeto & # 6a, b, c7, entonces en la matri/ de transición tomara la letra 8a8 como ndice ' , letra 8b8 ndice 9 letra 8c8 ndice : 1o mismo seria para el alabeto, pero all no interesa que letra representa si no cuantos estados tiene cu;l es su estado inicial cu;les son sus estados fnales. En el programa que implemente solo pedir; eso cantidad de estados pregunta por el estado inicial los fnales. El programa est; dividido en "en< de = opciones 9. 0ngresar autómata :. >erifcar de palabra =. 2alir Ingresar autómata* 5endremos que ingresar la cantidad de smbolos la cantidad de estados. 1uego tendremos que ingresar los smbolos del alabeto, los estados los genera solo no es necesario ingresarlo. 2eguidamente tendremos que ingresar la matri/ de transición donde no olvidemos que rempla/amos los nombres de los estados por n
All tenemos un ejemplo, donde s9 tomara el valor de ' s: el valor de 9 as tendramos que ingresarlo en el programa cuando pida la matri/. 2eguidamente tenemos que indicar cu;l es el estado inicial, supongamos que uese 29entonces tendramos que ingresar 9 ó : si uese 2: lo mismo seria para los estados fnales.
Verifcar palabra* Es la parte donde probamos nuestro autómata, tendremos que ingresarla de acuerdo a nuestro alabeto de smbolos de ingresamos en la parte de ?ingresar autómata?.
Implementación /* * C++ - Autómata Finito Determinista * Copyright 2014 Martin Cru !tiniano * Des"rip"ión# $ngresa autómata% &eri'"a pa(a)ra * ite# martin"rume */
,in"(ue .iostream ,in"(ue .&e"tor ,in"(ue .a(gorithm ,in"(ue .string ,in"(ue .st(i)h ,e'ne MA 100 using namespa"e st
&oi Mostrarstaos3&e"tor.int &5 "out .. 67n7n 8AD! D9 A:8!MA8A 7n7n6 ;or3int i<0 i.&sie3 i++5 "out .. 6 6 .. i ..6 -- =6 .. &>i? .. en( @ @
&oi $ngresaAutomata3&e"tor.int % &e"tor."har % int 8>MA?>MA?5
int num // Bumero e estaos
int num // Bumero e sm)o(os "har "
// enerano estaos "out .. 67n Cantia e staos# 6 "in num ;or3int i<0 i.num i++5 pushE)a"3i @
// $ngresano sm)o(os "out .. 67n Cantia e im)o(os# 6 "in num "out .. en( ;or3int i<0 i.num i++5 "out .. 67t im)o(o 6 .. i+1 .. 6 # 6 "in " pushE)a"3" @ sort3)egin3%en3 // !renano sm)o(os
// $ngresano ta)(a e transi"iones "out .. 67n $BG 8AH9A D 8GAB$C$!B 7n7n6 ;or3int i<0 i.num i++5 ;or3int I<0 I.num I++5 "out .. 67t 8>6..i..6?>6..I..6? # 6 "in 8>i?>I? @ @
// Mostrano ta)(a e transi"iones "out .. 67n7n 8AH9A D 8GAB$C$!B 7n7n6 ;or3int i<0 i.num i++5 ;or3int I<0 I.num I++5 "out .. 67t6 .. 8>i?>I? .. 6 6 @ "out .. en( @ @
&oi menu35 "out .. 67n7t7t A:8!MA8A F$B$8! D8GM$B$8A7n7n6 "out .. 67t 1 $ngresar Automata 7n6 "out .. 67t 2 Jeri'"ar pa(a)ra 7n6 "out .. 67t K a(ir 7n6 "out .. 67t $ngrese op"ion# 6 @
)oo( Jeri'"arLa(a)ra3&e"tor.int % int 8>MA?>MA?% int =0% &e"tor.int=;5
int =% s = < =0 )oo( staoJeri'"a"ion < ;a(se
;or3int i<0 i.sie3 i++5
s < >i? = < 8>=?>s? @
;or3int i<0 i.=;sie3 i++5 i;3=<<=;>i?5 staoJeri'"a"ion < true )rea @ @ return staoJeri'"a"ion @
&oi Con&ertirLa(a)ra3string pa(a)ra% &e"tor."har% &e"tor.int5
int i% <0
hi(e3sie3N
?<<>i?5 pushE)a"3i @ @ ++ @ @ /* Fun"ion Lrin"ipa( --------------------------------------------------------------*/ int main3 5 &e"tor.int staos &e"tor."har im)o(os int 8ransi"iones>MA?>MA? int =0 // stao ini"ia( &e"tor.int=; // staos 'na(es &e"tor.int )oo( Automata$ngresao < ;a(se // Aun no se ha ingresao autómata
int op% temp% tam
o5 menu3 "inop
sit"h3op5
"ase 1# staos"(ear3 im)o(os"(ear3 =;"(ear3
$ngresaAutomata3staos% im)o(os% 8ransi"iones Mostrarstaos3staos
"out .. 67n $ngrese estao ini"ia(# 6 "in =0
"out .. 67n Cuantos e estaos 'na(es hayO# 6 "in tam
"out .. en( ;or3int i<0 i.tam i++5 "out .. 67t Bumero e estao 'na(# 6 "in temp =;pushE)a"3temp @
Automata$ngresao < true )rea
"ase 2#
i;3Automata$ngresao5 string pa(a)ra "(ear3 )oo( staoJeri'"a"ion < ;a(se "out .. 67n $ngrese pa(a)ra# 6 "in pa(a)ra
Con&ertirLa(a)ra3pa(a)ra% im)o(os%
staoJeri'"a"ion < Jeri'"arLa(a)ra3% 8ransi"iones% =0% =;
i;3staoJeri'"a"ion5 "out .. 67n7t La(a)ra a"eptaa 7n7n6 @ e(se5 "out .. 67n7t La(a)ra no a"eptaa 7n7n6 @ @ e(se5 "out .. 67n Automata no ingresaoN 7n6 @
)rea
"ase K# ePit30
e;au(t# "out .. 67n7t!p"ion in"orre"taN7n6
@
//"out .. 67n7n6 system36pause6 system36"(s6
@hi(e3opN