Agregado metodo comprobación paso a paso, agregado arraylist de estado validos y metodo reset en Maquina.java
This commit is contained in:
parent
ad0ca3738a
commit
6744de19d5
@ -13,6 +13,7 @@ import java.util.ArrayList;
|
|||||||
|
|
||||||
class Automata {
|
class Automata {
|
||||||
private ArrayList<Estado> estados;
|
private ArrayList<Estado> estados;
|
||||||
|
private ArrayList<Integer> estados_existentes;
|
||||||
|
|
||||||
Automata(Document document) {
|
Automata(Document document) {
|
||||||
setEstados(new ArrayList<>());
|
setEstados(new ArrayList<>());
|
||||||
@ -50,6 +51,10 @@ class Automata {
|
|||||||
System.exit(1);
|
System.exit(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
estados_existentes = new ArrayList<Integer>();
|
||||||
|
for(int i=0 ; i < getEstados().size() ; i++){
|
||||||
|
if(getEstados().get(i) != null) estados_existentes.add(getEstados().get(i).getQ());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ArrayList<Estado> getEstados() {
|
ArrayList<Estado> getEstados() {
|
||||||
|
@ -14,12 +14,11 @@ class Maquina implements Cloneable {
|
|||||||
private Estado estadoactual;
|
private Estado estadoactual;
|
||||||
private Enlace enlaceactual;
|
private Enlace enlaceactual;
|
||||||
private String cintaanterior;
|
private String cintaanterior;
|
||||||
|
private int cabezal;
|
||||||
|
|
||||||
Maquina(Document document) {
|
Maquina(Document document) {
|
||||||
maquina = new Automata(document);
|
maquina = new Automata(document);
|
||||||
estadoactual = maquina.getEstados().get(0);
|
reset();
|
||||||
enlaceactual = null;
|
|
||||||
cintaanterior = "";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -45,14 +44,23 @@ class Maquina implements Cloneable {
|
|||||||
|
|
||||||
public String getCintaanterior() {return cintaanterior;}
|
public String getCintaanterior() {return cintaanterior;}
|
||||||
|
|
||||||
|
public int getCabezal() {return cabezal;}
|
||||||
|
|
||||||
|
public void reset(){
|
||||||
|
estadoactual = maquina.getEstados().get(0);
|
||||||
|
enlaceactual = null;
|
||||||
|
cintaanterior = "";
|
||||||
|
cabezal = 0;
|
||||||
|
}
|
||||||
|
|
||||||
boolean comprobarCadena(StringBuilder cinta, int[] estadoFinal) {
|
boolean comprobarCadena(StringBuilder cinta, int[] estadoFinal) {
|
||||||
//estadoactual = maquina.getEstados().get(0);
|
//estadoactual = maquina.getEstados().get(0);
|
||||||
int cabezal = 0;
|
|
||||||
int i;
|
int i;
|
||||||
for (i = 0; i < estadoactual.getEnlaces().size(); i++) {
|
for (i = 0; i < estadoactual.getEnlaces().size(); i++) {
|
||||||
if (estadoactual.getEnlaces().get(i).getSi() == cinta.charAt(cabezal)) {
|
if (estadoactual.getEnlaces().get(i).getSi() == cinta.charAt(cabezal)) {
|
||||||
cinta.setCharAt(cabezal, estadoactual.getEnlaces().get(i).getSj());
|
enlaceactual = estadoactual.getEnlaces().get(i);
|
||||||
switch (estadoactual.getEnlaces().get(i).getMovimiento()) {
|
cinta.setCharAt(cabezal, enlaceactual.getSj());
|
||||||
|
switch (enlaceactual.getMovimiento()) {
|
||||||
case 'L': {
|
case 'L': {
|
||||||
cabezal--;
|
cabezal--;
|
||||||
if (cabezal == (-1)) {
|
if (cabezal == (-1)) {
|
||||||
@ -70,19 +78,56 @@ class Maquina implements Cloneable {
|
|||||||
}
|
}
|
||||||
default: {/*Se mantiene*/}
|
default: {/*Se mantiene*/}
|
||||||
}
|
}
|
||||||
estadoactual = estadoactual.getEnlaces().get(i).getQj();
|
estadoactual = enlaceactual.getQj();
|
||||||
i = -1;
|
i = -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for(i=0;i<estadoFinal.length;i++){
|
for(i=0;i<estadoFinal.length;i++){
|
||||||
if(estadoactual.getQ() == estadoFinal[i]) return true;
|
if(estadoactual.getQ() == estadoFinal[i]){
|
||||||
|
reset();
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
reset();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean comprobarCadenaS2S(StringBuilder cinta, int[] estadoFinal){
|
boolean comprobarCadenaS2S(StringBuilder cinta, int[] estadoFinal){
|
||||||
cintaanterior = cinta.toString();
|
cintaanterior = cinta.toString();
|
||||||
return false; // Programando ahora
|
int i;
|
||||||
|
for (i = 0; i < estadoactual.getEnlaces().size(); i++) {
|
||||||
|
if (estadoactual.getEnlaces().get(i).getSi() == cinta.charAt(cabezal)) {
|
||||||
|
enlaceactual = estadoactual.getEnlaces().get(i);
|
||||||
|
estadoactual = enlaceactual.getQj();
|
||||||
|
cinta.setCharAt(cabezal, enlaceactual.getSj());
|
||||||
|
switch (enlaceactual.getMovimiento()) {
|
||||||
|
case 'L': {
|
||||||
|
cabezal--;
|
||||||
|
if (cabezal == (-1)) {
|
||||||
|
cinta.insert(0, "#");
|
||||||
|
cabezal++;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 'R': {
|
||||||
|
cabezal++;
|
||||||
|
if (cabezal == cinta.length()) {
|
||||||
|
cinta.insert(cabezal, "#");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default: {/*Se mantiene*/}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for(i=0;i<estadoFinal.length;i++){
|
||||||
|
if(estadoactual.getQ() == estadoFinal[i]){
|
||||||
|
enlaceactual = null; // Indicar que no hay más transiciones
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user