Nombre: Uso de Matrices en Java
Descripción:
En este pequeño ejemplo se realizan las operaciones basicas de las matrices, a demas de incluir una clase para poder leer datos desde el teclado.
URL: http://www.mygnet.net/codigos/java/matricesyvectores/uso_de_matrices_en_java.826
Código Fuente:
import java.io.*;
public class MenuMatriz
{
public static void main(String args[])
{
Operaciones obj= new Operaciones();
Leer Lee = new Leer();
int op;
do
{
System.out.println("n M E N U ");
System.out.println("=========================");
System.out.println(" [1] SUMA");
System.out.println(" [2] RESTA");
System.out.println(" [3] MULTIPLICACCION");
System.out.println(" [4] DIVICION");
System.out.println(" [5] SALIR");
System.out.print("nELIGE UNE OPCION : ");
op=Lee.datoInt();
switch (op)
{
case 1: obj.Suma(); break;
case 2: obj.Resta(); break;
case 3: obj.Multiplicacion(); break;
case 4: obj.Division(); break;
case 5: System.out.println("nFin del programa."); break;
default: System.out.println("n¡¡¡Error de seleccion!!!");
}
}while(op!=5);
}
}
class Leer
{
public static String dato()
{
String sdato="";
try
{
InputStreamReader isr = new InputStreamReader (System.in);
BufferedReader flujo =new BufferedReader (isr);
sdato=flujo.readLine();
}
catch (IOException e)
{
System.err.println("Error"+ e.getMessage());
}
return sdato;
}
public static int datoInt()
{
try
{
return Integer.parseInt (dato());
}
catch(NumberFormatException e)
{
return Integer.MIN_VALUE;
}
}
public static float datoFloat()
{
try
{
Float f = new Float(dato());
return f.floatValue();
}
catch(NumberFormatException e)
{
return Float.NaN; // No es un Número; valor float.
}
}
}
class Operaciones
{
void Muestra(float M[][],int F,int C)
{
for(int y=0; y<F; y++)
{
System.out.print("n");
for(int x=0; x<C; x++)
System.out.print(M[x][y]+" ");
}
}
void Muestra(int M[][],int F,int C)
{
for(int y=0; y<F; y++)
{
System.out.print("n");
for(int x=0; x<C; x++)
System.out.print(M[x][y]+" ");
}
}
boolean Compara(int AX,int AY,int BX,int BY)
{
if ((AX==BX && AY==BY))
return true;
return false;
}
boolean Compara(int AX,int BY)
{
if ((AX==BY))
return true;
return false;
}
void Suma()
{
Leer Lee = new Leer();
Operaciones Obj= new Operaciones();
int FA=0;
int FB=0;
int CA=0;
int CB=0;
System.out.println("n Teclee el número de Filas y Columnas para las matrices.");
System.out.print("n Filas de A:"); FA=Lee.datoInt();
System.out.print("n Filas de B:"); FB=Lee.datoInt();
System.out.print("n Columnas de A:"); CA=Lee.datoInt();
System.out.print("n Columnas de B:"); CB=Lee.datoInt();
int A[][] = new int[CA][FA];
int B[][] = new int[CB][FB];
int S[][] = new int[CA][FB];
if (Obj.Compara(CA,FA,CB,FB))
{
System.out.println("nElementeos para A:");
for(int y=0; y<FA; y++)
for(int x=0; x<CA; x++)
{
System.out.print("A["+(x+1)+"]["+(y+1)+"] = "); A[x][y]= Lee.datoInt();
}
System.out.println("nElementeos para B:");
for(int y=0; y<FB; y++)
for(int x=0; x<CB; x++)
{
System.out.print("B["+(x+1)+"]["+(y+1)+"] = "); B[x][y]= Lee.datoInt();
}
System.out.println("nMatriz A:n");
Obj.Muestra(A,FA,CA);
System.out.println("nMatriz B:n");
Obj.Muestra(B,FB,CB);
for(int y=0; y<FB; y++)
for(int x=0; x<CB; x++)
S[x][y]=A[x][y]+B[x][y];
System.out.println("nLa suma es:n");
Obj.Muestra(S,FA,CB);
}
else
{
System.out.println("n Para sumarce las matrices tienen que tener las mismas dimenciones");
}
}
void Resta()
{
Leer Lee = new Leer();
Operaciones Obj= new Operaciones();
int FA=0;
int FB=0;
int CA=0;
int CB=0;
System.out.println("n Teclee el número de Filas y Columnas para las matrices.");
System.out.print("n Filas de A:"); FA=Lee.datoInt();
System.out.print("n Filas de B:"); FB=Lee.datoInt();
System.out.print("n Columnas de A:"); CA=Lee.datoInt();
System.out.print("n Columnas de B:"); CB=Lee.datoInt();
int A[][] = new int[CA][FA];
int B[][] = new int[CB][FB];
int S[][] = new int[CA][FB];
if (Obj.Compara(CA,FA,CB,FB))
{
System.out.println("nElementeos para A:");
for(int y=0; y<FA; y++)
for(int x=0; x<CA; x++)
{
System.out.print("A["+(x+1)+"]["+(y+1)+"] = "); A[x][y]= Lee.datoInt();
}
System.out.println("nElementeos para B:");
for(int y=0; y<FB; y++)
for(int x=0; x<CB; x++)
{
System.out.print("B["+(x+1)+"]["+(y+1)+"] = "); B[x][y]= Lee.datoInt();
}
System.out.println("nMatriz A:n");
Obj.Muestra(A,FA,CA);
System.out.println("nMatriz B:n");
Obj.Muestra(B,FB,CB);
for(int y=0; y<FB; y++)
for(int x=0; x<CB; x++)
S[x][y]=A[x][y]+(B[x][y]*-1);
System.out.println("nLa resta es:n");
Obj.Muestra(S,FA,CB);
}
else
{
System.out.println("n Para restarse las matrices tienen que tener las mismas dimenciones");
}
}
void Multiplicacion()
{
Leer Lee = new Leer();
Operaciones Obj= new Operaciones();
int FA=0;
int FB=0;
int CA=0;
int CB=0;
int suma=0;
int h=0;
System.out.println("n Teclee el número de Filas y Columnas para las matrices.");
System.out.print("n Filas de A:"); FA=Lee.datoInt();
System.out.print("n Filas de B:"); FB=Lee.datoInt();
System.out.print("n Columnas de A:"); CA=Lee.datoInt();
System.out.print("n Columnas de B:"); CB=Lee.datoInt();
int A[][] = new int[CA][FA];
int B[][] = new int[CB][FB];
int S[][] = new int[CA][FB];
if (Obj.Compara(CA,FB))
{
System.out.println("nElementeos para A:");
for(int y=0; y<FA; y++)
for(int x=0; x<CA; x++)
{
System.out.print("A["+(x+1)+"]["+(y+1)+"] = "); A[x][y]= Lee.datoInt();
}
System.out.println("nElementeos para B:");
for(int y=0; y<FB; y++)
for(int x=0; x<CB; x++)
{
System.out.print("B["+(x+1)+"]["+(y+1)+"] = "); B[x][y]= Lee.datoInt();
}
System.out.println("nMatriz A:n");
Obj.Muestra(A,FA,CA);
System.out.println("nMatriz B:n");
Obj.Muestra(B,FB,CB);
for(int y=0; y<FB; y++)
for(int x=0; x<CB; x++)
{
h=0;
suma=0;
while(h<CA && h<FB)
{
suma+=A[h][y]*B[x][h];
h++;
}
S[x][y]=suma;
}
System.out.println("nLa multiplicacion es:n");
Obj.Muestra(S,FA,CB);
}
else
{
System.out.println("n Para multiplicarse el numero de columnas de la matriz A tiene que ser igual nal numero de filas de la matriz B");
}
}
void Division()
{
Leer Lee = new Leer();
Operaciones Obj= new Operaciones();
int FB=0;
int CB=0;
int FA=0;
int CA=0;
int suma=0;
float aux=0;
int h=0;
System.out.println("n Teclee el número de Filas y Columnas para las matrices.");
System.out.print("n Filas de A:"); FA=Lee.datoInt();
System.out.print("n Filas de B:"); FB=Lee.datoInt();
System.out.print("n Columnas de A:"); CA=Lee.datoInt();
System.out.print("n Columnas de B:"); CB=Lee.datoInt();
float A[][] = new float [CB][FB];
float B[][] = new float [CB][FB];
float S[][] = new float [CB][FB];
float I[][] = new float [CB][FB];
float C[][] = new float [CB][FB];
if(Obj.Compara(CA,FB))
{
System.out.println("nElementeos para A:");
for(int y=0; y<FA; y++)
for(int x=0; x<CA; x++)
{
System.out.print("A["+(x+1)+"]["+(y+1)+"] = "); A[x][y]= Lee.datoFloat();
}
System.out.println("nElementeos para B:");
for(int y=0; y<FB; y++)
for(int x=0; x<CB; x++)
{
System.out.print("B["+(x+1)+"]["+(y+1)+"] = "); B[x][y]= Lee.datoFloat();
}
System.out.println("nMatriz A:n");
Obj.Muestra(B,FB,CB);
System.out.println("nMatriz B:n");
Obj.Muestra(B,FB,CB);
///////////////Matris inverza de B/////////////////////
for(int y=0; y<FB; y++)
for(int x=0; x<CB; x++)
{
C[x][y]= B[x][y];
if(x==y)
I[x][y]=1;
else
I[x][y]=0;
}
System.out.println("nMatriz C:(copia de B)n");
Obj.Muestra(C,FB,CB);
System.out.println("nMatriz I: (unidad)n");
Obj.Muestra(I,FB,CB);
System.out.println("n");
int k=0;
for(int H=0; H<FB; H++)
{
if (C[H][H]==0)
{
System.out.println("La matriz no tiene inversa, por que el elemento ("+H+","+H+") es cero, nel cual es utilizado como pivote para la inversa.");
}
else
{
C[H][H]*=(1/C[H][H]); //Convierte el pivote a 1.
for(int y=H+1; y<FB; y++)
{
aux=(C[k][y] * -1);
for(int x=0; x<CB; x++)
{
C[x][y]+=(aux * C[x][H]);
I[x][y]+=(aux * I[x][H]);
}
}
for(int y=0; y<H; y++)
{
aux=(C[k][y] * -1);
for(int x=0; x<CB; x++)
{
C[x][y]+=(aux * C[x][H]);
I[x][y]+=(aux * I[x][H]);
}
}
k++;
}
}
System.out.println("nMatriz inversa :n");
Obj.Muestra(I,FB,CB);
System.out.println("nMatriz C:n");
Obj.Muestra(C,FB,CB);
///////////////////////////////////////////////////////
for(int y=0; y<FB; y++)
for(int x=0; x<CB; x++)
{
h=0;
suma=0;
while(h<CB && h<FB)
{
suma+=A[h][y]*I[x][h];
h++;
}
S[x][y]=suma;
}
System.out.println("nLa division es:n");
Obj.Muestra(S,FB,CB);
}
else
{
System.out.println("n Para dividirse el numero de columnas de la matriz A tiene que ser igual nal numero de filas de la matriz B, ademas B tiene que ser una matriz cuadrada.");
}
}
}