Вы находитесь на странице: 1из 22

1 Avance del proyecto para Teora

de la Computacin
Nombre del proyecto: Simulador de Autmatas
Finitos Determinanticos (SAFD)
Objetivo:
Demostrar el funcionamiento y aplicacin de los autmatas al pblico en general mediante una forma dinmica
y sencilla para el usuario promedio. Con este proyecto desarrollado en java pretendemos dar a conocer que los
autmatas son herramientas tiles para modelar y analizar cualquier sistema en el universo. Han sido
utilizados para modelar sistemas fsicos, crear intrpretes y traductores hasta los ms complejos como los
compiladores, as como interacciones entre partculas, formacin de galaxias, cintica de sistemas moleculares
y crecimiento de cristales, as como diversos sistemas biolgicos a nivel celular, multicelular y poblacional. El
alumno desarrollara un programa hecho en java acorde a los autmatas, para esto deber poner en prctica
todos los conocimientos adquiridos durante su aprendizaje sobre el lenguaje Java. El programa a realizar
servir de herramienta didctica para los usuarios interesados en la prctica de este tema.

Misin:
Permitir al usuario experimentar en vivo las aplicaciones de los autmatas y lograr interesarse por el tema
demostrado, facilitando el aprendizaje a los mismos as como lograr el mximo aprovechamiento de la
herramienta hacia el usuario interesado.

Visin:
El uso del software desarrollado ser didctico, dinmico y atractivo para el usuario. El programa podra ser
usado por todos los estudiantes con necesidad de reforzar sus conocimientos sobre autmatas.

Marco Terico:
Un autmata finito es un modelo matemtico de una mquina que acepta cadenas de un lenguaje definido
sobre un alfabeto A. Consiste en un conjunto finito de estados y un conjunto de transiciones entre esos
estados,
que
dependen
de
los
smbolos
de
la
cadena
de
entrada.
El
Autmata finito acepta una cadena x si la secuencia de transiciones correspondientes a los smbolos de x
conduce
desde
el
estado
inicial
a
un
estado
final.
Si para todo estado del autmata existe como mximo una transicin definida para cada smbolo del alfabeto,
se dice que el autmata es determinstico (AFD). Si a partir de algn estado y para el mismo smbolo de
entrada, se definen dos o ms transiciones se dice que el autmata es no determinstico (AFND). Formalmente
un autmata finito se define como una 5-upla.

M
=
<E,
A,
d,
e0,
F>
donde
E:
conjunto
finito
de
estados
A:
alfabeto
o
conjunto
finito
de
smbolos
de
entrada
d:
funcin
de
transicin
de
estados,
que
se
define
como
d:
E
x
A
-->
E
si
el
autmata
es
determinstico
- d: E x A --> P(E) si el autmata es no determinstico (P(E) es el conjunto potencia de E, es decir el conjunto
de
todos
los
subconjuntos
de
E)
e0:
estado
inicial
F: conjunto de estados finales o estados de aceptacin

Generalmente se asocia con cada autmata un grafo dirigido, llamado diagrama de transicin de estados.
Cada nodo del grafo corresponde a un estado. El estado inicial se indica mediante una flecha que no tiene
nodo origen. Los estados finales se representan con un crculo doble. Si existe una transicin del estado e al
estado ej. Para un smbolo de entrada a, existe entonces un arco rotulado a desde el nodo e al nodo ej.
Los autmatas vienen a ser mecanismos formales que ``realizan'' derivaciones en gramticas formales. La
manera en que las realizan es mediante la nocin de reconocimiento. Una palabra ser generada en una
gramtica si y solo si la palabra hace transitar al autmata correspondiente a sus condiciones terminales. Por
esto es que los autmatas son analizadores lxicos (llamados en ingls ``parsers'') de las gramticas a que
corresponden.

Estos son los autmatas finitos ms sencillos. Se construyen a partir de un conjunto de estados Q y de un
conjunto de smbolos de entrada T. Su funcionamiento queda determinado por una funcin de transicin.
.Si t (q, s)=p esto se interpreta como que el autmata transita del estado q al estado p
cuando arriba el smbolo s. En todo autmata finito se cuenta con un estado inicial,
de estados finales

y un conjunto

. Con todo esto definido, la estructura

es un

autmata regular. De manera natural, t se extiende a una funcin de transicin


.Toda palabra se
aplica al autmata y este, partiendo del estado inicial, transita con cada smbolo de la palabra dada segn lo
especifique t, correspondiendo a ese smbolo y al estado actual en el autmata. Una palabra es reconocida por
el autmata si lo hace arribar a un estado final. El lenguaje del autmata consta de todas las palabras
reconocidas.

Ejemplo: Sea

el autmata cuyo conjunto de estados es

, su estado inicial es q0 = a y el conjunto de estados finales es

de smbolos de entrada es
.

Su

, el

transicin

queda

determinada

por

la

tabla

Observamos que, partiendo del estado a, mientras lleguen 1's se est en el estado inicial, con un 0 se pasa a
b, con un segundo 0 se pasa a c y de ah no se sale ms. En b, al llegar un 1 se regresa al estado inicial. As
pues, para arribar al estado a desde a mismo la cadena de entrada ha de ser una sarta de varias de 1's
separadas Estas por nico 0's. En otras palabras, el autmata reconoce al lenguaje (1 +0)*1+.
Los autmatas tienen como aplicacin hacer ms sencilla las tareas para el ser humano. Uno de los ejemplos
de aplicacin es la de un controlador de riego. El autmata controla el regado de un campo teniendo en
cuenta varios factores que son:

La cantidad de agua de un depsito abastecido con lluvia teniendo en cuenta el ndice de pluviosidad
minuto a minuto.
La hora del da, con el fin de realizar el regado a las horas ms favorables, que son aquellas en las
que la evaporacin es menor.
La hora del ltimo regado, con el fin de espaciarlos lo necesario y suficiente.

Esto se har mediante un sistema que controlar la cantidad de agua que cae en base al tiempo (1 entrada).
Se usar una salida de real para control de apertura y cierre de la vlvula del depsito (1 salida real). El resto
ser control del reloj en tiempo real de que dispone el equipo y el programa BASIC que lo maneja todo.

Formalmente un autmata finito determinista consiste en una quntupla (S,

, , i, F) donde:

S: es un conjunto finito de estados.


: es el alfabeto de la maquina.
: es una funcin(funcin de transicin) de SXS a S
i: estado inicial(un elemento de S)
F: conjunto de estados de aceptacin (sub-conjunto de S)

DIAGRAMA DE TRANSICIONES DETERMINISTA


Para representar un programa en el mecanismo de control utilizamos un diagrama de transiciones cuyos
estados representan los estados de la mquina y cuyos arcos representan una posible transicin de la
mquina. Por lo tanto, los estados de inicio y aceptacin del diagrama corresponden a los estados de inicio y
aceptacin del autmata.
Un diagrama para un AFD aceptara

si y solo si su estado inicial es tambin un estado de aceptacin.

El requisito del determinismo impone ciertas restricciones sobre los diagramas de transiciones que pueden
aparecer en los programas para un autmata finito determinista. Se dice que un diagrama de transiciones es
determinista si cumple las siguientes condiciones:
En particular, cada estado de estos diagramas solo debe tener un arco que sale para cada smbolo del
alfabeto; de lo contrario, una mquina que llega a este estado se enfrentara a una eleccin de cul debe ser el
arco a seguir.

Adems, dicho diagrama debe estar completamente definido, es decir debe existir por lo menos un arco para
cada smbolo del alfabeto; de lo contrario, una mquina que llega a este estado puede enfrentarse a una
situacin donde no pueda aplicarse ninguna transicin.

Ejemplo 1:
El siguiente diagrama no es determinista ya que no est completamente definido; no representa cual ser la
accin que debe ocurrir si se recibe una letra o un dgito mientras se encuentra en el estado 2.

Ejemplo 2:
El siguiente diagrama tiene problemas similares ya que entre otras cosas no describe que deber suceder si
recibe un punto mientras se encuentra en el estado inicial.

No obstante, los dos diagramas vistos anteriormente no tienen ms de un arco de salida de un estado para
cada smbolo y, por consiguiente, pueden modificarse para ajustarse a los requisitos del determinismo,
aplicando lo siguiente:

Aadimos un estado que representara un papel de captacin global


Para cada smbolo del alfabeto, dibujar un arco rotulado con dicho smbolo, que empieza y termina
en este nuevo estado.
Agregamos arcos de los otros estados a este nuevo, hasta que cada uno de los estados sea el origen
de un arco para cada smbolo del alfabeto.

Diagrama modificado del ejemplo 1.

Diagrama modificado del ejemplo 2.

En este ejercicio el nuevo estado es el nmero 8. Observe que en diagrama original la ocurrencia de una
cadena inaceptable ocasionaba un error al solicitar el recorrido de un arco inexistente. En el diagrama
modificado, una cadena inaceptable ocasiona que la maquina recorra un arco a estado 8, donde permanece
hasta alcanzar el final de la cadena de entrada. Al llegar a este punto se rechazara la cadena, ya que el estado
8 no es de aceptacin. Por esto, los dos diagramas son equivalentes en lo que se refiere a que aceptan las
mismas cadenas; difieren solo en la manera en que llegan a sus conclusiones.

AUTOMATA FINITO NO DETERMINISTA


Esta mquina se parece mucho a un AFD, pues tambin analiza cadenas construidas a partir de un S y solo
puede tener un nmero finito de estados, algunos de los cuales son de aceptacin y uno es el estado inicial. A
diferencia de los AFD, la transicin que se ejecuta en una etapa dada de un AFN puede ser incierta, es posible
aplicar cero, una o ms de una transicin mediante el mismo smbolo de entrada, como sucede con una
mquina que no est completamente definida.
Ejemplo, diagrama de transiciones que acepta cadenas que representan enteros o cadenas que representan
nmeros reales en notacin decimal.

Un AFN acepta una cadena si es posible que su anlisis deje a la maquina en un estado de aceptacin.
De manera formal, un AFN se define como sigue, un AFN consiste en una quntupla (S,

, p, i, F) donde:

S es un conjunto finito de estados.


es el alfabeto de la maquina
p es un sub-conjunto de SXS XS llamada relacin de transiciones.
i es el estado inicial (un elemento de S)
F es la coleccin de estados de aceptacin (un sub-conjunto de S).

Desarrollo:
El proyecto tratara de un simulador de autmatas, el sistema pedir el nmero de estados del autmata, los
estados finales y el inicial, as como la cadena que se quiere comprobar. Por consiguiente evaluara la cadena
introducida
y
se
mostrara
la
tabla
de
transiciones
correspondiente.
Se pretende que sea una herramienta didctica en el aprendizaje de autmatas, se espera agregar todas las
opciones mostradas.

Anlisis
Anlisis de los requisitos:

Plataforma java (jdk 6)


Editor de cdigo (Text Pad, Blue J, Neat Beans, etc)
Conocimientos previos de programacin O.O
Conocimientos previos de Teora de la Computacin
Sistema operativo Windows (XP, Vista, Seven)

Tabla de eventos:

ACTIVIDAD
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R

INICIO

Decisin de proyecto a realizar


10/02/2010
Investigacin previa para obtener conocimientos bsicos
12/02/2010
Estudio de viabilidad econmica
14/02/2010
Elaboracin del anteproyecto
13/02/2010
Entrega del anteproyecto
15/02/2010
Aprobacin del proyecto
17/02/2010
Elaborar un anlisis con los requerimientos para desarrollar el proyecto 19/02/2010
Obtencin de todos los requerimientos
22/02/2010
Elaboracin borrador del diseo o del proyecto en papel
28/02/2010
Diseo del programa con herramientas UML
05/03/2010
Inicio de la codificacin
26/02/2010
Revisin de fuentes (libros, internet) para la codificacin
24/02/2010
Inicio de pruebas del proyecto
11/03/2010
Elaboracin de manual tcnico
15/03/2010
Elaboracin de manual operativo
20/03/2010
Presentacin preliminar del proyecto
20/04/2010
Entrega del proyecto
20/04/2010
Presentacin en el domo
27/04/2010

Diagrama de Gantt

DURACION
(DIAS)
2
10
5
3
1
2
4
5
7
9
15
10
3
8
9
1
1
1

TERMINACION
12/02/2010
22/02/2010
19/02/2010
16/02/2010
16/02/2010
19/02/2010
23/02/2010
27/02/2010
07/03/2010
14/03/2010
13/03/2010
06/03/2010
14/03/2010
23/03/2010
29/03/2010
21/04/2010
20/04/2010
27/04/2010

Diseo
La ventana de entrada es la siguiente

Tendr 5 botones para evaluar la cadena y una tabla de transiciones. El primer


botn pedir cuantas entradas tiene el autmata es decir los estados que lo
componen:

El segundo botn "Crear alfabeto" pedir los smbolos de entrada del autmata,
primero deben entrar el nmero de caracteres del alfabeto y despus los smbolos
uno por uno como se muestra a continuacin:

El tercer botn "Inicio y final" es para especificar qu estado es el primero y cual o


cules son las salidas.

El siguiente botn "Crear tabla" tendr la finalidad de crear la tabla de transicin


con los datos recabados y se llenaran los espacios que antes estaban vacios de la
tabla. Para terminar el botn " Cadena a revisar" pedir una cadena que evaluara
posteriormente:

El resultado de la evaluacin se mostrara por una ventana que se muestre ya sea


vlida o no:

Codificacin
Una primera parte del programa a desarrollar se muestra a continuacin, para crear
la interfaz pensada necesitamos dos clases, una para los grficos y los eventos
principales; la otra es una clase mtodo donde trabajaremos con el mtodo que
necesitamos para complementarla:
CLASE GRAFICO
view source
print?

001 import java.awt.*;


002 import java.awt.event.*;
003 import javax.swing.*;
004
005 public class Grafico extends JFrame
006 {
007
008

//VARIABLES
private Metodo metodo = new Metodo();

009
010

String inicio,ultimo;
String q[];

011
012

int cuantosq;
String tabla[][];

013
014

int cuantosalf;
String alfa[];

015
016

private Container contenedor;

017
018

private GridBagLayout esquema;


private GridBagConstraints restricciones;

019

private
JButton
botonrevisar,botoninifin;

botonq,

botonalfa,

020
021
022

public Grafico()
{

023
024

super( "Automatas" );
contenedor = getContentPane();

025
026

esquema = new GridBagLayout();


contenedor.setLayout( esquema );

027
028

botonq = new JButton("Crear Simb. de Edos.");

029

botonalfa = new JButton("Crear Alfabeto");

botontabla,

030

botontabla = new JButton("Crear Tabla");

031
032

botonrevisar = new JButton ("Cadena a revisar");


botoninifin = new JButton ("Inicio y Final");

033
034

//DESACTIVAR BOTONES
botontabla.setEnabled(false);

035
036

botonrevisar.setEnabled(false);
botoninifin.setEnabled(false);

037
038
039
040
041
042
043
044

// instanciar restricciones de GridBagLayout


restricciones = new GridBagConstraints();

// crear componentes de GUI

045
046

// weightx
predeterminado

weighty

para

areaTexto1

son

0:

// anchor para todos los componentes es CENTER:


predeterminado
048
restricciones.fill = GridBagConstraints.BOTH;
047

049
050

agregarComponente(botonq,0,0,2,1);
agregarComponente(botonalfa,1,0,2,1);

051
052

agregarComponente(botoninifin,2,0,2,1);
agregarComponente(botontabla,3,0,2,1);

053
054

agregarComponente(botonrevisar,4,0,2,1);
ManejadorBoton manejador = new ManejadorBoton();

055
056

botonq.addActionListener(manejador);
botonalfa.addActionListener(manejador);

057
058

botontabla.addActionListener(manejador);
botoninifin.addActionListener(manejador);

059
060

botonrevisar.addActionListener(manejador);
//DESACTIVAR BOTONES

061
062

setSize( 500, 500 );

063
064

setLocationRelativeTo(null);
setVisible( true );

065
066

} // fin del constructor de DemoGridBag

067
068

// m?todo para establecer restricciones

069
070

private class ManejadorBoton implements ActionListener

el

valor

el

valor

071
072
073
074

{
public void actionPerformed( ActionEvent evento )
{
if(evento.getSource() == botoninifin)

075
076
077
078
079

{
inicio = JOptionPane.showInputDialog("Inserta el Inicio
de estado");
agregarComponente(new JTextField("Inicio: " +inicio+"

ultimo = JOptionPane.showInputDialog("Inserta el Final


de estado");
agregarComponente(new

JTextField("Final:

"+ultimo)

,6,1,1,1);

080

SwingUtilities.updateComponentTreeUI(contenedor);

081
082

}
if(evento.getSource()==botonq)

083

084

")

,6,0,1,1);

cuantosq=metodo.creaint("Cuantas

entradas

son?:

(Q)");

085
086

q=new String[cuantosq];
q = metodo.crearQ (cuantosq,q);

087
088

if(cuantosq>=1 && cuantosalf>=1)


{

089
090

botontabla.setEnabled(true);
}

091
092

botoninifin.setEnabled(true);
for(int z=0;z < q.length; z++)

agregarComponente(new
JTextField("
"+q[z]),z+1,2,1,1);
094
SwingUtilities.updateComponentTreeUI(contenedor);
093

095
096

}
if(evento.getSource()==botonalfa)

097

098

cuantosalf=metodo.creaint("Cuantos
el alfabeto?:");

caracteres

099
100

alfa=new String[cuantosalf];
alfa = metodo.crearalfabeto(cuantosalf, alfa);

101
102

if(cuantosq>=1 && cuantosalf>=1)


{

tiene

103
104

botontabla.setEnabled(true);
}

105
106

agregarComponente(new JTextField("edo/alfa") ,0,2,1,1);

107

for(int m=0;m<=alfa.length-1;m++)

108

agregarComponente(new
"+alfa[m]),0,m+3,1,1);

109
110

111
112

if(evento.getSource()==botonrevisar)
{

SwingUtilities.updateComponentTreeUI(contenedor);

113
114
115

JTextField("

int contador=0;
String cad[] = new String[metodo.creaint("Que Largo
tiene la cadena?")];

116
117

for(int conta=0; conta< cad.length; conta++)


cad[conta] = JOptionPane.showInputDialog("Insertar el
118
valor "+(conta+1)+" de la cadena");
119
120

for(int conta1=0; conta1< cad.length; conta1++)

121

for(int conta=0; conta< alfa.length; conta++)


if(alfa[conta].equals(cad[conta1])
122
cad[conta1].equals("") || cad[conta1].equals(" ") )
123
124

||

contador++;

125
126

if(contador==cad.length)
inicio = metodo.revisar(alfa, q, tabla, cad, inicio);

127

else
JOptionPane.showMessageDialog(null, "la cadena tiene

128

errores");

129
130
131
132

if( inicio.equals(ultimo))
{

JOptionPane.showMessageDialog(null,
completo la cadena");
134
}
133

"el

automata

135

else
JOptionPane.showMessageDialog(null, "el automata NO
136
completo la cadena");
137
138

139
140

if(evento.getSource()==botontabla)
{

141
142
143

SwingUtilities.updateComponentTreeUI(contenedor);

tabla

metodo.creartabla(alfa,

cuantosalf, q);
for(int z=0;z < q.length; z++)
{

cuantosq,

144

for(int j=0; j < alfa.length; j++)

145

146

agregarComponente(new
"+tabla[z][j]),z+1,j+3,1,1);

147
148

149
150

int conta=0;
for(int z=0;z < q.length; z++)

151
152

for(int j=0; j < alfa.length; j++)


{

153
154

for(int sim=0; sim < q.length; sim++)


{

155
156

if(q[sim].equals(tabla[z][j]) )
conta++;

157
158

JTextField("

}
if(

tabla[z][j].equals("")

||

tabla[z][j].equals(" ") )

159
160

conta++;
}

161
162

if(conta == cuantosq*cuantosalf)

163
164

else

botonrevisar.setEnabled(true);

165
166

{
botonrevisar.setEnabled(false);

167 estado tiene


favor.");
168
169
170

JOptionPane.showMessageDialog(null, "La Tabla de


Simbolos de estado que no entiende\nCorregir por
}
SwingUtilities.updateComponentTreeUI(contenedor);

171
172

173

}
private void agregarComponente( Component componente, int fila, int
174
columna, int anchura, int altura )
175
176

{
// establecer gridx y gridy

177
178

restricciones.gridx = columna;
restricciones.gridy = fila;

179
180

// establecer gridwidth y gridheight

181
182

restricciones.gridwidth = anchura;
restricciones.gridheight = altura;

183
184

// establecer restricciones y agregar componente

185
186

esquema.setConstraints( componente, restricciones );


contenedor.add( componente );

187
188

}
public static void main( String args[] )

189
190

191
192

Grafico aplicacion = new Grafico();


aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
}

193
194 } // fin de la clase DemoGridBag

PRUEBAS Y DEPURACION
La primera prueba de nuestro cdigo es una versin acercada del diseo principal,
esta es una vista preliminar del programa:

Como primera prueba se han creado los botones respectivos y solo el botn "Crear
smbolos de estados" y "Crear alfabeto" son funcionales:

Conclusiones esperadas
Creemos firmemente que una herramienta como el software que queremos realizar seria de mucha utilidad
para los alumnos de la materia de teora de la computacin. Al usar grficos el aprendizaje se vuelve ms
sencillo, es por eso que el simulador de autmatas debe ser aprobado.

Glosario tcnico

La teora de la computacin: es una ciencia, en particular una rama de la matemtica y de la


computacin que centra su inters en el estudio y definicin formal de los cmputos.
Autmata: es una mquina, un mecanismo artificial. Pero tambin puede ser un instrumento musical
que toca con ayuda de un mecanismo oculto.
Un autmata finito o mquina de estado finito: es un modelo matemtico de un sistema que recibe
una cadena constituida por smbolos de un alfabeto y determina si esa cadena pertenece al lenguaje
que el autmata reconoce.
Grafo: es un conjunto de objetos llamados vrtices o nodos unidos por enlaces llamados aristas o
arcos, que permiten representar relaciones binarias entre elementos de un conjunto.
Autmata Programable, o PLC (Controlador Lgico Programable): toda mquina electrnica, diseada
para controlar en tiempo real y en medio industrial procesos secuenciales. Su manejo y programacin
puede ser realizada por personal elctrico o electrnico sin conocimientos informticos. Realiza
funciones lgicas: series, paralelos, temporizaciones, contajes y otras ms potentes como clculos,
regulaciones, etc.
Cadenas: conjunto de caracteres enlazados entre s.
El lenguaje de programacin es el medio que utilizan los programadores para crear un programa de
ordenador; un lenguaje de marcas es el medio para describir a un ordenador el formato o la
estructura de un documento; etc.

Bibliografa
http://html.rincondelvago.com/automatas-programables_2.html
http://es.wikipedia.org/wiki/Desarrollo_en_cascada

Вам также может понравиться