Autómata finito en lenguaje c
GRUPO DE TRABAJO (Alumnos de 2º 5º)
Juarez, Roberto Fernando
Romano, Andres
COMENTARIOS
El programa permite:
-Especificar el grafo de transiciones
-Ingresar la palabra a ser analizada-Analizar la palabra a partir del grafo
Con esto se logro obtener una implementación generalizada para cualquier palabra perteneciente a un lenguaje regular.
PROGRAMA EN C
/* El siguiente programa, construye un automata finito a partir de la carga
de un grafo de transiciones deterministico, y analiza una palabra ingre-
sada para determinar si responde ono, al Lenguaje del Grafo ingresado.
*/
#include
#include
#include
#include
#include
#include
#define maxnodo 10 /* para un grafo con mas de diez estados, modifique
la constante maxnodo.*/
typedef struct registro {char nombre;
char estado;
char simbent[4];
char trans[4];
struct registro *sig[4];
}nodo;
void autor()
{ gotoxy(9,25);
printf("Alummos: Juarez, Roberto Fernando; Romano, Andres - U.T.N. 2004.");
}
void pausa()
{
gotoxy(22,25); printf("Pulse una tecla para continuar...");getch();
gotoxy(22,25); printf(" ");
}
void pausaleer()
{
gotoxy(16,24); printf("Pulse una tecla para leer el proximo simbolo...");
getch();
gotoxy(16,24); printf(" ");
}
void dibujanodo(int col, int fil)
{
gotoxy(col,fil); printf ("ÚÄÄÄÄÄÂÄÄÄÄÄÂÄÄÂÄÄÂÄÄÄÄÄ¿");gotoxy(col,fil+1); printf ("³ ³ ³ ³ ³ ³");
gotoxy(col,fil+2); printf ("³ ³ ÃÄÄÅÄÄÅÄÄÄÄÄ´");
gotoxy(col,fil+3); printf ("³ ³ ³ ³ ³ ³");
gotoxy(col,fil+4); printf ("³ ³ ÃÄÄÅÄÄÅÄÄÄÄÄ´");
gotoxy(col,fil+5); printf ("³ ³ ³ ³ ³ ³");
gotoxy(col,fil+6); printf ("³ ³ ÃÄÄÅÄÄÅÄÄÄÄÄ´");gotoxy(col,fil+7); printf ("³ ³ ³ ³ ³ ³");
gotoxy(col,fil+8); printf ("ÀÄÄÄÄÄÁÄÄÄÄÄÁÄÄÁÄÄÁÄÄÄÄÄÙ");
}
void ver_dato_nodo(nodo *actual, int col, int fil)
{
gotoxy(col-7,fil+7); printf("%x",actual);
gotoxy(col,3+fil); printf("%c",actual->nombre);
gotoxy(col+6,3+fil); printf("%c",actual->estado);
for(int k=0;(actual->simbent[k]!= ' '); ++k)
{
gotoxy(col+10,k+k+fil); printf("%c",actual->simbent[k]);
gotoxy(col+13,k+k+fil); printf("%c",actual->trans[k]);
gotoxy(col+16,k+k+fil); printf("%x",actual->sig[k]);
}
}
void cargar_nodo(nodo *lis[],int max)
{
int nrotrans, nroestados, ult;
char modifica;
clrscr();
gotoxy(20,2);printf("CARGA DE DATOS EN LOS ESTADOS (nodos)");
for(ult = 0; lis[ult] != NULL; ++ult); //para agregar al ultimo
do {
gotoxy(10,5);
printf("Debera Ingresar la cantidad de estados que ");
gotoxy(10,6);
printf("tendra el grafo, o que desea "
" agregar al grafo. (menores a %i): ",max - ult);
scanf("%i",&nroestados);}while((nroestados < 0) || (nroestados > max - ult));
for (int i = ult; i < ult + nroestados; ++i)
{
clrscr();
gotoxy(20,2); printf("Carga de datos en los Estados (nodos)");
gotoxy(15,3); printf("El primer Estado (nodo) a cargar, debe ser inicial.");
gotoxy(29,4); printf("%i de %i Estados",(i+1),nroestados);...
Regístrate para leer el documento completo.