Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - Neo102

#1
Java / Ayuda con matriz mxn
23 Febrero 2013, 12:14 PM
Buenas,
Venía en busca de nuevo de vuestros sabios consejos para los que nos iniciamos en este mundillo. En este caso es acerca de un problemilla de multiplicacion de matrices mxn, de cualquier tamaño, en la web hay algo de informacion, la he revisado, pero el caso es que no me acaba de sacar por pantalla el resultado de la multiplicación. Debe ser una chorrada, pero llevo bastante tiempo probando soluciones, y no soy capaz de dar con ella, y estoy empezando a perder la esperanza. He definido las instrucciones , pero a la hora de llamar a la clase, compila todo el programa, pero sin calcular esta operacion (sin mostrar el resultado, lo demás sí que lo hace correctamente).

He creado 3 clases diferentes, que son principal, Matriz y Multiplicacion.java. Es un poco largo, pero ahí van :

import java.io.*;
import java.util.*;

public class Principal {
   
   public static void main(String[] args) throws IOException {
      
   BufferedReader in= Text.open(System.in);
   System.out.print("\r");   
   Matriz A,B;   
   Multiplicacion m;
   int f,c;


   System.out.println("Introduzca la primera Matriz:\n");
   System.out.print(" Número de Filas (matriz A): ");
   f=Text.readInt(in);
   System.out.print(" Número de Columnas (matriz A): ");
   c=Text.readInt(in);
   A=new Matriz(f,c);

   System.out.print("Introducir Elementos: ");// introducimos datos
   System.out.println("Matriz A:("+A.filas+"x"+A.columnas+")");
   for(int i=0;i<A.filas;i++){
   for(int j=0;j<A.columnas;j++){
   System.out.print(" Elemento"+"["+i+"]"+"["+j+"] ?:");
   A.Llenar(Text.readInt(in),i,j);
      }   
   } System.out.println();

   System.out.println("Introduzca la segunda Matriz: ");      
   System.out.print(" Número de Filas (matriz B): ");
   f=Text.readInt(in);
   System.out.print(" Número de Columnas (matriz B): ");
   c=Text.readInt(in);
   B=new Matriz(f,c);


   System.out.println("Matriz B:("+B.filas+"x"+B.columnas+")");
   for(int i=0;i<B.filas;i++){
   for(int j=0;j<B.columnas;j++){
   System.out.print(" Elemento"+"["+i+"]"+"["+j+"] ?:");
   B.Llenar(Text.readInt(in),i,j);
      }
   }
   System.out.println();

   if (A.columnas == B.filas) {
      System.out.println("Matriz A");
   A.Mostrar();//Se muestran las dos matrices creadas, antes
   System.out.println();
   System.out.println("Matriz B");
   B.Mostrar(); // de mostrar el resultado de la multiplicación
   m=new Multiplicacion();
   Matriz resultado = m.producto();
   resultado.mostrar();
   }
   
else {
   System.out.println("<<<error>>>;: No pudo realizarse el producto.");
      }
   }
}

public class Matriz{
   
   public int[][] matriz;
   public int filas,columnas;
   
   public Matriz(){
      filas=1;
      columnas=1;
   }

   public Matriz(int f,int c){
      filas=f;
      columnas=c;
      matriz=new int[filas][columnas];
   }

   public void Llenar(int valor,int i,int j){ // Introduce un valor en la matriz en la posicion i,j
      matriz[j]=valor;
   }

   public int[] getFila(int k){ // Muestra los datos de k(fila)
   int[] row=new int[matriz[k].length];
   for(int i=0;i<row.length;i++){
      row=matriz[k];
   }
   return row;
   }
   
   public int[] getColumna(int k){ // Muestra los datos de k(columna)
   int[] column=new int[matriz.length];
   for(int i=0;i<column.length;i++){
      column=matriz[k];
   }
   return column;
   }
   
   public void Mostrar(){ // Muestra los elementos .

   for(int i=0;i<filas;i++){
      for(int j=0;j<columnas;j++){
         System.out.print(matriz[j]+" ");
      }
   System.out.println();
      }
  }
}


import java.io.*;
import java.util.*;


public class Multiplicacion {
   
public Matriz A,B;

   /**
    * Multiplica dos matrices
    * @param int[][] A
    * @param int[][] B
    * @return int[][] producto
    */
   private int[][] producto(int A[][], int B[][]){
      int suma = 0;
      int result[][] = new int[A.length][B.length];
      for(int i = 0; i < A.length; i++){
         for(int j = 0; j < B.length; j++){
            suma = 0;
            for(int k = 0; k < B.length; k++){
               suma += A[k] * B[k][j];
            }
            result[j] = suma;
         }
      }
      return result;
   }
}