Bueno esto es un pequeño projecto que dejaron de tarea en la escuela, que trata sobre una Sumatoria de bases en Maquina de Estado Finito(MEF), al principio fue solamente en base 2, pero luego nos pidio en base 3, entonces lo que haciamos era la matriz manualmente, entonces fue que pense mejor en que el usuario meta la base que decee y automaticamente cree la matriz.
Bueno aqui dejo una imagen sobre lo que vendria siendo una Maquina de Estado Finito
(http://3.bp.blogspot.com/_js6wgtUcfdQ/R37rPP0aUlI/AAAAAAAABk4/07WVB4rFTXY/s400/maquina_de_estado_finito.png)
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:
package MEF;
/**
* @Author Victor
*/
public class Consola
{
public static void main
(String[] args
) {
BASE Obj = new BASE();
//Obj.convertirbybase(0);
int base = 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
package MEF;
/**
*
* @author Victor
*/
public class BASE
{
int pos = 1;
{
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;
}
{
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;
}
{
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
int n=0,xx = 0;
//Vemos que matriz es la que llenaremos f=0 o g=1
if(tipo == 0)
{
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{
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;
}
{
}
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 "0";
}
}
Clase read
package MEF;
/**
*
* @author cryptt3r
*/
import java.io.*;
public class read
{
public static boolean error;
try {
// Definir un flujo de caracteres de entrada: flujoE
// Leer. La entrada finaliza al pulsar la tecla Entrar
sdato = flujoE.readLine();
}
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;
}
return Integer.
MIN_VALUE; // valor más pequeño }
}
public static short datoShort
(String message
){ try {
return Short.
parseShort(data
(message
)); }
}
}
public static long dataLong
(String message
){ try {
return Long.
parseLong(data
(message
)); }
}
}
public static float dataFloat
(String message
){ try {
return f.floatValue();
}
}
}
public static double dataDouble
(String message
){ try {
return d.doubleValue();
}
}
}
/*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.