Está en la página 1de 11

Instituto Tecnológico de Pachuca

Lenguajes y Autómatas I

Reporte de Programa:

DFA y NFA

Docente: Hernandez Pérez Roberto

Equipo:

Bautista Hernandez Rafael de Jesús 16200616

Mercado González Alejandro 16200654

Zúñiga Vela Gabriel 16200680


Autómata
L={w/w contenga aaa y su longitud minima sea de 5 }

DFA

NFA
Código DFA
/*
Programa de un DFA
Lenguajes y Autómatas I
Catedratico: Roberto Hernández Pérez
Equipo:
Bautista Hernandez Rafael de Jesus 16200616
Mercado Gonzalez Alejandro 16200654
Zuñiga Vela Gabriel 16200680
En esta clase se declaran los métodos del autómata DFA
* Fecha de entrega: 07 de Noviembre del 2019
*/
import javax.swing.JOptionPane;
public class DFA {
int cont;
boolean aceptada;
char [] car;

public DFA(String cadena){

car=cadena.toCharArray();
inicio();

}
public void inicio (){
cont = 0;
aceptada = false;
if(car.length<5){ JOptionPane.showMessageDialog(null,
"Cadena invalida");}else{
Q0();
}
}
public void Q0(){
System.out.println("En q0");
if(cont < car.length){
if(car[cont]=='a'){
cont++;
Q1();
}else if (car[cont]=='b'){
cont++;
Q1();
}else if (car[cont]=='c'){
cont++;
Q1();
}
}
}
public void Q1(){
System.out.println("En q1");
if(cont < car.length){
if(car[cont]=='a'){
cont++;
Q2();
}else if (car[cont]=='b'){
cont++;
Q1();
}else if (car[cont]=='c'){
cont++;
Q0();

}
}
}
public void Q2(){
System.out.println("En q2");
if(cont < car.length){
if(car[cont]=='a'){
cont++;
Q3();
}else if (car[cont]=='b'){
cont++;
Q1();
}else if (car[cont]=='c'){
cont++;
Q1();
}
}
}
public void Q3(){
System.out.println("En q3 cadena aceptada");
aceptada = true;
if(cont < car.length){
if(car[cont]=='a'){
cont++;
Q0();
}else if (car[cont]=='b'){
cont++;
Q3();
}else if (car[cont]=='c'){
cont++;
Q2();
}
}
}
public void QError(){
System.out.println("cadena invalida");
aceptada = false;
return;
}
}
Código NFA
/*
Programa de un NFA
Lenguajes y Autómatas I
Roberto Hernández Pérez
Equipo:
Bautista Hernandez Rafael de Jesus 16200616
Mercado Gonzalez Alejandro 16200654
Zuñiga Vela Gabriel 16200680
Descripción: En esta clase se declaran los métodos del autómata NFA
* Fecha de entrega: 07 de Noviembre del 2019
*/
import javax.swing.JOptionPane;
public class NFA {
int cont;
boolean aceptada;
char [] car;
public NFA (String cadena ){
car=cadena.toCharArray();
inicio();

public void inicio (){


cont = 0;
aceptada = false;
if(car.length<5){ JOptionPane.showMessageDialog(null,
"Cadena invalida");}else{
Q0();
}
}
public void Q0(){
System.out.println("Q0");
if(cont < car.length){
if(car[cont]=='a'){
cont++;
QError();
}else if (car[cont]=='b'){
cont++;
Q1();
}else if (car[cont]=='c'){
cont++;
QError();
}
}
}
public void Q1(){
System.out.println("Q1");
if(cont < car.length){
if(car[cont]=='a'){
cont++;
Q2();
}else if (car[cont]=='b'){
cont++;
QError();
}else if (car[cont]=='c'){
cont++;
Q0();

}
}
}
public void Q2(){
System.out.println("Q2");
if(cont < car.length){
if(car[cont]=='a'){
cont++;
Q3();
}else if (car[cont]=='b'){
cont++;
Q2();
}else if (car[cont]=='c'){
cont++;
Q1();
}
}
}
public void Q3(){
System.out.println("Q3 La cadena es aceptada");
aceptada = true;
if(cont < car.length){
if(car[cont]=='a'){
cont++;
Q3();
}else if (car[cont]=='b'){
cont++;
Q3();
}else if (car[cont]=='c'){
cont++;
Q3();
}
}
}
public void QError(){
System.out.println("Error: El automáta no pertenece a esta cadena");
aceptada = false;
return;
}}