Bueno aqui dejo una imagen sobre lo que vendria siendo una Maquina de Estado Finito

Y ya de ahi se crean las Tablas F & G, F son las entradas y a donde nos enviaran y G, las salidas que obtendriamos
Bueno ya sin mas aqui les dejo mi code, por si les interesa n_n, o algo que sea de utilidad.
CODIGO
Clase Consola:
Código
package MEF;
/**
* @Author Victor
*/
public class Consola
{
public static void main(String[] args)
{
BASE Obj = new BASE();
//Obj.convertirbybase(0);
int base = 0;
String a="0",b="0";
do{
base = read.dataInt("Teclee Base 2 - 9: ") ;
}while(base < 2);
String [][] f = Obj.Llenar(base, 0);
//String [][] g = Obj.Llenar(base, 0);
String [][] g = Obj.Llenar(base, 1);
Obj.SOP(Obj.imprimir(base, f, g));
Obj.SOP("\n\n");
a = read.data("Teclee Primer valor: ");
b = read.data("Teclee Segundo valor: ");
String suma = Obj.suma(a, b, f, g);
Obj.SOP("\nLa Suma de " + a + " y " + b + " es igual a: " + suma);
}
}
Clase BASE
Código
package MEF;
/**
*
* @author Victor
*/
public class BASE
{
int pos = 1;
public String suma(String a, String b, String [][] f, String [][] g)
{
String n,nn;
String r = "";
while(a.length() > b.length())
{
b = "0" + b;
}
while(a.length() < b.length())
{
a = "0" + a;
}
for(int x = (a.length()-1); x>=0; x--)
{
n = String.valueOf(a.charAt(x)) + "" + String.valueOf(b.charAt(x));
for(int t = 0; t<f[0].length; t++)
{
nn = (f[0][t]);
if(n.equals(nn))
{
r = valor(t,f,g) + r;
}
}
}
if(pos == 2)
r = "1"+r;
return r;
}
private String valor(int columna,String [][] f,String [][] g)
{
String m = "";
if (pos == 1)
{
if(f[1][columna] != "SA")
{
pos = 2;
}
m = g[1][columna];
}else{
if(f[2][columna] == "SA")
{
pos = 1;
}
m = g[2][columna];
}
return m;
}
public String imprimir(int base,String [][] f, String [][] g)
{
String k = "";
k = k + ("\nTABLA F - BASE:" + base+"\n");
for(int x = 0; x<3; x++)
{
if(x == 1)
k = k + ("SA|");
else if(x == 2)
k = k + ("CA|");
else
k = k + ("EI|");
for(int xx = 0; xx<(base*base); xx++)
{
k = k + (f[x][xx] + "|");
}
k = k + ("\n");
}
k = k + ("\nTABLA G - BASE:" + base+"\n");
for(int x = 0; x<3; x++)
{
if(x == 1)
k = k + ("SA|");
else if(x == 2)
k = k + ("CA|");
else
k = k + ("EI|");
for(int xx = 0; xx<(base*base); xx++)
{
while(g[0][xx].length() > g[x][xx].length())
{
g[x][xx] = " " + g[x][xx];
}
k = k + (g[x][xx] + "|");
}
k = k + ("\n");
}
return k;
}
//Llenando la matriz
public String [][] Llenar(int base, int tipo)
{
//Creamos una matriz la cual luego llenaremos
String [][] m = new String[2][base*base];
int n=0,xx = 0;
//Vemos que matriz es la que llenaremos f=0 o g=1
if(tipo == 0)
{
String [][] f = new String[3][base*base];
for(int x = 0; x<3; x++)
{
xx = 0;
for(int i = 0; i<base; i++)
{
for(int ii = 0; ii<base; ii++)
{
if(x == 1)
{
if((i+ii) < base)
f[x][xx] = "SA";
else
f[x][xx] = "CA";
xx++;;
}else if(x == 2){
if(((i+ii)+1) < base)
f[x][xx] = "SA";
else
f[x][xx] = "CA";
xx++;;
}else{
f[x][n] = convertirnumero(i) + "" + convertirnumero(ii);
n++;
}
}
}
}
m = f;
}else{
String [][] g = new String[3][base*base];
for(int x = 0; x<3; x++)
{
xx = 0;
for(int i = 0; i<base; i++)
{
for(int ii = 0; ii<base; ii++)
{
if(x == 1)
{
if((i+ii) < base)
g[x][xx] = convertirnumero(i+ii);
else
g[x][xx] = convertirnumero(g(base,i,ii));
xx++;;
}else if(x == 2){
if(((i+ii)+1) < base)
g[x][xx] = convertirnumero((i+ii+1));
else
g[x][xx] = convertirnumero(g1(base,i,ii));
xx++;;
}else{
g[x][n] = convertirnumero(i) + "" + convertirnumero(ii);
n++;
}
}
}
}
m = g;
}
return m;
}
public void SOP(String msg)
{
System.out.print(msg);
}
private static int g(int base, int i, int ii)
{
return (int)((i+ii)-base);
}
private static int g1(int base, int i, int ii)
{
return (int)((i+ii+1)-base);
}
public static String convertirnumero(int i)
{
//System.out.println("\n" + i);
String [] letras = {"A", "B", "C" , "D", "E", "F", "G", "H"};
for(int n = 0; n<(n+letras.length); n++)
{
if(i == n)
{
if(n >= 10)
return letras[n-10];
else
return String.valueOf(n);
}
}
return "0";
}
}
Clase read
Código
package MEF;
/**
*
* @author cryptt3r
*/
import java.io.*;
public class read
{
public static boolean error;
public static String data(String message) {
String sdato = "";
System.out.print(message);
try {
// Definir un flujo de caracteres de entrada: flujoE
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader flujoE = new BufferedReader(isr);
// Leer. La entrada finaliza al pulsar la tecla Entrar
sdato = flujoE.readLine();
}
catch(IOException e) {
System.err.println("Error: " + e.getMessage());
}
return sdato; // devolver el dato tecleado
}
public static int dataInt(String message){
try {
error=false;
int val=Integer.parseInt(data(message));
if (val<-32768||val>32767)
error=true;
return val;
}
catch(NumberFormatException e) {
return Integer.MIN_VALUE; // valor más pequeño
}
}
public static short datoShort(String message){
try {
return Short.parseShort(data(message));
}
catch (NumberFormatException e){
return Short.MIN_VALUE;
}
}
public static long dataLong(String message){
try {
return Long.parseLong(data(message));
}
catch (NumberFormatException e){
return Long.MIN_VALUE;
}
}
public static float dataFloat(String message){
try {
Float f = new Float(data(message));
return f.floatValue();
}
catch (NumberFormatException e){
return Float.NaN;
}
}
public static double dataDouble(String message){
try {
Double d = new Double(data(message));
return d.doubleValue();
}
catch (NumberFormatException e){
return Double.NaN;
}
}
/*public static char dataChar(String message){
try {
Char d = new Char(data(message));
return d.charValue();
}
catch (NumberFormatException e){
return Char.NaN;
}
}*/
}
Solamente me falto, hacer la comprobacion de que los numeros que ingresemos ninguno sea mayor a la base, sorry se me paso eso, pero lo pueden hacer ahi mientras leen.










Autor


En línea

