0% encontró este documento útil (0 votos)
135 vistas

Automatas Programables

Este documento describe la implementación de un autómata con pila en C++. Explica brevemente la teoría de los autómatas con pila y cómo reconocen lenguajes libres de contexto. Luego muestra el código C++ que implementa las funciones para apilar, desapilar y recorrer una cadena de entrada para determinar si es aceptada por el autómata. El código lee una cadena, mantiene un estado y una pila, y determina si la cadena es aceptada o rechazada.
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
135 vistas

Automatas Programables

Este documento describe la implementación de un autómata con pila en C++. Explica brevemente la teoría de los autómatas con pila y cómo reconocen lenguajes libres de contexto. Luego muestra el código C++ que implementa las funciones para apilar, desapilar y recorrer una cadena de entrada para determinar si es aceptada por el autómata. El código lee una cadena, mantiene un estado y una pila, y determina si la cadena es aceptada o rechazada.
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 5

Automata Con Pila En C++

SOCIALIZA ESTO
0

Un poco de Teoria:

En teora de Autmatas, un autmata con Pila, es un


modelo matemtico de un sistema que recibe
una cadena constituida por smbolos de un alfabeto, y
determina si esta cadena pertenece al lenguaje que el
autmata reconoce. El lenguaje que reconoce un
autmata con pila pertenece al los Lenguajes Libres
de Contexto en la clasificacin de la Jerarqua de
Chomsky.

Veamos un Ejemplo de como funciona este


modelo matemtico:
Probamos con las palabras w=aabb y w=aab, y vemos
si pertenecen o no a L.

De la imagen anterior podemos ver que la


palabra w=aabb pertenece a L, y w=aab no pertenece
a L.

Implementacion en C++:
DATA HOSTED WITH BY PASTEBIN.COM - DOWNLOAD RAW - SEE ORIGINAL
1. /*
2. Autor: Joel Cesar Fernandez Segura
3. Curso: Tecnicas De Construccion de Programas
4. Ejercicio: Implementacion de un Automata Con Pila
5. IDE: CodeBlocks
6. Pagina Web: http://codebotic.blogspot.com
7.
8. */
9. #include<iostream>
10. #include<cstdlib>
11.
12. using namespace std;
13.
14. struct nodo{
15.
16. char a;//campo donde se almacenara el caracter
17. struct nodo *sgte;
18. };
19.
20. typedef struct nodo *pila;
21.
22. /*---------------Funcion para Apilar un Caracter--------*/
23. void apila(pila &p,const char a){
24.
25. pila q=new (struct nodo) ;
26. q->a=a;
27. q->sgte=p;
28. p=q;
29. }
30.
31. /*------------- Funcion para Desapilar un elemento -----*/
32. void desapila(pila &p){
33.
34. int n=p->a;
35.
36. pila q=p;
37. p=p->sgte;
38. delete(q);
39. }
40.
41. /*------Funcion que decidir si se apila o desapila----*/
42. int recorrer(int e,char letra, pila &p){
43.
44. const char a='x';
45.
46. if(e==0&&letra=='a'){
47. apila(p,a);
48. return 0;
49. }
50.
51. if(e==0&&letra=='b'){
52. desapila(p);
53. return 1;
54. }
55.
56. if(e==1&&letra=='b'){
57. desapila(p);
58. return 1;
59. }
60.
61. return 0;
62. }
63.
64. /*---------- Lee la palabra Ingresada -------------*/
65. void leer(char pal[], pila &p){
66.
67. int estado=0;
68. int i=0;
69.
70. cout<<"\te. inicial//letra\n";
71. while(pal[i]){
72. cout<<"\t"<<estado<<" "<<pal[i]<<endl;
73. estado=recorrer(estado,pal[i],p);
74. i++;
75. }
76.
77. if(estado==1&&p==NULL)
78. cout<<"\n\tPalabra aceptada";
79.
80. else
81.
82. cout<<"\n\tPalabra rechazada";
83. }
84.
85. /*----------------Funcion Principal----------------*/
86. int main(void){
87.
88. system("color 0a");
89. pila p=NULL;//inicializamos la pila
90.
91. cout<<"\n\n\t*****AUTOMATA CON PILA*******\n\n";
92. char w[50]="aabb";//Cambiar la Palabra Aqui...!!!!
93. leer(w,p);
94. cout<<endl<<endl;
95. return 0;
96. }

También podría gustarte