lunes, 19 de octubre de 2009

Examen!



El conjunto de las palabras en {a, b} tales que toda a est´a precedida por alguna
b, como por ejemplo “"”, “b”, “bba”, “babaa”, etc.


Este programa acepta palabras que contengan solo a y b en su lenguaje, con la unica condicion es que por cada a que coloquemos siempre debe de haber una b:





Palabras aceptadas: b, ba, bab, baba, bababa, bbabbabb etc.




No aceptadas: a, ab, abb, ababaa, abbba, etc.




Con el siguiente automata finito:







Y la Tabla de Transiciones:


Estado a b FC


1 2 3 A

2 2 2 E

3 4 3 A

4 2 3 A





public class Lexico {
public String comprueba(String palabra)
{
String nuevacadena=palabra+ '%';
int tam=nuevacadena.length();
String resultado=null;
int mat [][]=new int [5][3];

// TABLA DE TRANSICIONES

// A B FC
mat[0][0]=2; mat[0][1]=3; mat[0][2]=90;
mat[1][0]=2; mat[1][1]=2; mat[1][2]=90;
mat[2][0]=4; mat[2][1]=3; mat[2][2]=100;
mat[3][0]=2; mat[3][1]=3; mat[3][2]=100;


//comienza el ciclo, donde compara cada una de las letras de la palabra.
int reng=1, colu=0;
try
{
for(int i=0;i {
reng=reng-1;



if(nuevacadena.charAt(i)=='a')
{
colu=0;
reng=mat[reng][colu];

}

if(nuevacadena.charAt(i)=='b')
{
colu=1;
reng=mat[reng][colu];

}


if(nuevacadena.charAt(i)=='%') //Marca el fin de cadena
{
nuevacadena=palabra;
colu=2;
if(mat[reng][colu]==100)
{
resultado= "Cadena Valida";
}
else
resultado= "Cadena Invalida";

}
}
}catch (ArrayIndexOutOfBoundsException exc)
{
}
return resultado;
}

}


Programación del botón:


private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
JOptionPane.showMessageDialog(null, jTextField1.getText());
Lexico app= new Lexico();
jTextField2.setText(app.comprueba(jTextField1.getText()));
}


No hay comentarios:

Publicar un comentario