elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: (TUTORIAL) Aprende a emular Sentinel Dongle By Yapis


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Ayuda con este programa para multiplicar matrices!!
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con este programa para multiplicar matrices!!  (Leído 2,682 veces)
Berman

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Ayuda con este programa para multiplicar matrices!!
« en: 30 Abril 2016, 18:00 pm »

Buenas. He estado intentado hacer un programa que multiplique matrices ya sean 3x3,2x2...etc pero no consigo hacer que funcione.

Este es mi código:
Código
  1. import java.util.Scanner;
  2. public class Matriz {
  3.  
  4.    public static void main(String[] args) {
  5.        System.out.println("Matriz 1");
  6.        System.out.println("Numero de filas");
  7.        int fila;
  8.        Scanner sc=new Scanner(System.in);
  9.        fila=sc.nextInt();
  10.        System.out.println("Numero de columnas");
  11.        int columna;
  12.        Scanner sccol=new Scanner(System.in);
  13.        columna=sccol.nextInt();
  14.        System.out.println("Numeros de la matriz 1:");
  15.        int matriz[][]=new int [fila][columna];
  16.        for(int j=(columna-1);j>=0;j--){
  17.            for(int i=0;i<fila;i++){
  18.                int numeros;
  19.                Scanner scnum=new Scanner(System.in);
  20.                numeros=scnum.nextInt();
  21.                matriz[i][j]=numeros;
  22.            }
  23.        }
  24.        System.out.println("Matriz 2");
  25.        System.out.println("Numero de filas");
  26.        int fila2;
  27.        Scanner sc2=new Scanner(System.in);
  28.        fila2=sc2.nextInt();
  29.        while(columna!=fila2){
  30.            System.out.println("Error.Vuelve a introducir las filas de la matriz");
  31.            int filaexp;
  32.            Scanner scexp=new Scanner(System.in);
  33.            filaexp=scexp.nextInt();
  34.            fila2=filaexp;
  35.        }
  36.        System.out.println("Numero de columnas:");
  37.        int columna2;
  38.        Scanner sccol2=new Scanner(System.in);
  39.        columna2=sccol2.nextInt();
  40.        System.out.println("Numeros de la matriz 2:");
  41.        int matriz2[][]=new int [fila2][columna2];
  42.        for(int j=(columna2-1);j>=0;j--){
  43.            for(int i=0;i<fila2;i++){
  44.                int numeros2;
  45.                Scanner scnum2=new Scanner(System.in);
  46.                numeros2=scnum2.nextInt();
  47.                matriz2[i][j]=numeros2;
  48.            }
  49.        }
  50.        System.out.println("Matriz 1:");
  51.        for(int j=(columna-1);j>=0;j--){
  52.            for(int i=0;i<fila;i++){
  53.                System.out.print(" "+matriz[i][j]+" ");
  54.            }System.out.println("");
  55.        }
  56.        System.out.println("Matriz 2:");
  57.        for(int j=(columna2-1);j>=0;j--){
  58.            for(int i=0;i<fila2;i++){
  59.                System.out.print(" "+matriz2[i][j]+" ");
  60.            }System.out.println("");
  61.        }
  62.        System.out.println("Resultado");
  63.        int matriz3[][]=new int [fila][columna2];
  64.        for(int i=0;i<fila;i++){
  65.            for(int j=0;j<columna2;j++){
  66.                for(int k=(columna-1);k>=0;k--){
  67.                    matriz3[i][j]+=matriz[k][j]*matriz2[i][k];
  68.                }
  69.            }
  70.        }
  71.        for(int j=(columna2-1);j>=0;j--){
  72.            for(int i=0;i<fila;i++){
  73.                System.out.print(" "+matriz3[i][j]+" ");  
  74.            }System.out.println(" ");
  75.        }
  76.    }
  77. }
  78.  

El problema debe estar en los 3 for, en la parte de resultado, pero por mas que lo intento no lo consigo. Gracias de antemano!!


En línea

+ 1 Oculto(s)

Desconectado Desconectado

Mensajes: 298


un defecto se puede convertir en una virtud


Ver Perfil WWW
Re: Ayuda con este programa para multiplicar matrices!!
« Respuesta #1 en: 2 Mayo 2016, 04:32 am »

lo primero es que siempre te concentres sobre la logica del programa
en tu caso es multiplicar matrices asi que borra el scanner y crea 2 matrices estaticas

saludos


En línea

Berman

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: Ayuda con este programa para multiplicar matrices!!
« Respuesta #2 en: 2 Mayo 2016, 18:07 pm »

El Scanner lo uso para que el usuario pueda poner los números que quiera en la matriz, al final después de muchos intentos he conseguido que funcione!! Gracias y cierro tema.
En línea

+ 1 Oculto(s)

Desconectado Desconectado

Mensajes: 298


un defecto se puede convertir en una virtud


Ver Perfil WWW
Re: Ayuda con este programa para multiplicar matrices!!
« Respuesta #3 en: 3 Mayo 2016, 17:53 pm »

una vez que funcione con esas 2 matrices estaticas como siguiente paso puedes poner scanner

bueno solo es un consejo ...
saludos
En línea

hectornunezrivas

Desconectado Desconectado

Mensajes: 28


Ver Perfil
Re: Ayuda con este programa para multiplicar matrices!!
« Respuesta #4 en: 25 Junio 2016, 08:14 am »

Buenas noches.
Te paso el codigo que siempre eh utilizado para la multiplicacion de matrices.

Código
  1. class MultiplicacionMatrices{
  2.  
  3. //Me extrae una fila dada de una matriz en forma de vector (arreglo)
  4. public static int []filaMatriz(int [][]matriz, int fila){
  5.  int []arregloAuxiliar = new int[matriz[fila].length];
  6.  for(int i = 0; i < arregloAuxiliar.length; i++){
  7.   arregloAuxiliar[i] = matriz[fila][i];
  8.  }
  9.  return arregloAuxiliar;
  10. }
  11.  
  12. //Me extrae una columna dada de una matriz en forma de vector (arreglo)
  13. public static int []columnaMatriz(int [][]matriz, int columna){
  14.  int []arregloAuxiliar = new int[matriz.length];
  15.  for(int i = 0; i < arregloAuxiliar.length; i++){
  16.   arregloAuxiliar[i] = matriz[i][columna];
  17.  }
  18.  return arregloAuxiliar;
  19. }
  20.  
  21. //Me devuelve el valor de una celda segun la multiplicacion de dos matrices
  22. public static int valorCelda(int [][]matrizA, int [][]matrizB, int fila, int columna){
  23.  int suma = 0;
  24.  /*
  25.   Tomo la fila de la primera matriz y la columna de la segunda matriz,
  26.   para posteriormente multiplicar celda por celda
  27.    */
  28.  int []filaMatrizA = filaMatriz(matrizA, fila);
  29.  int []columnaMatrizB = columnaMatriz(matrizB, columna);  
  30.  
  31.   for(int i = 0; i < filaMatrizA.length; i++){
  32.  
  33.    /*
  34.      * Aqui valido que la longitud de ambos vectores sean iguales,
  35.      * en terminos mas acordes, que el numero de columnas de la primera matriz,
  36.      * sea igual al numero de filas de la segunda matriz    
  37.     */
  38.  
  39.    if(filaMatrizA.length == columnaMatrizB.length){
  40.    suma += filaMatrizA[i] * columnaMatrizB[i];
  41.    }else{
  42.     System.out.println("El numero de columnas de la primera matriz es diferente al numero de filas de la segunda matriz");
  43.     break;  
  44.    }      
  45.   }  
  46.  
  47.  return suma;
  48.   }
  49.  
  50.   //Me devuelve una matriz, producto de la multiplicacion de dos matrices
  51. public static int [][]multiplicacionMatriz(int [][]matrizA, int [][]matrizB){
  52.  int [][]matrizAuxiliar = new int[matrizA.length][matrizA[0].length];
  53.  for(int i = 0; i < matrizA.length; i++){
  54.   for(int j = 0; j < matrizA[i].length; j++){
  55.    matrizAuxiliar[i][j] = valorCelda(matrizA, matrizB, i, j);    
  56.   }
  57.  }
  58.  return matrizAuxiliar;
  59. }
  60. //imprime los valores de una matriz
  61. public static void imprimirMatriz(int [][]matriz){
  62.  System.out.println("-------------------------------");
  63.  for(int i = 0; i < matriz.length; i++){
  64.   for(int j = 0; j < matriz[i].length; j++){
  65.    System.out.print(matriz[i][j]+"\t");
  66.   }
  67.   System.out.println();
  68.  }
  69.  System.out.println("-------------------------------");
  70. }
  71.  
  72. //imprime el procedimiendo de la 'matriz de recorrido' de una matriz
  73. public static void main(String []args){
  74.  /*
  75.   Nota importante:
  76.   - Sean las matrices A y B; A tenga el mismo número de columnas que B de filas para que  exista A*B
  77.   - Sean las matrices B y A; B tenga el mismo número de columnas que A de filas para que  exista A*B
  78.   */
  79.  int [][]matrizA ={{1,0,0,1},
  80.        {1,4,0,1},
  81.        {1,9,0,11},
  82.        {1,5,6,0}};
  83.  
  84.  int [][]matrizB ={{11,0,0,1},
  85.        {1,8,0,1},
  86.        {0,9,0,5},
  87.        {1,7,6,0}};
  88.  
  89.  System.out.println("Matriz A");      
  90.  imprimirMatriz(matrizA);
  91.  
  92.  System.out.println("Matriz B");      
  93.  imprimirMatriz(matrizB);
  94.  
  95.  System.out.println("Matriz A * Matriz B");  
  96.  imprimirMatriz(multiplicacionMatriz(matrizA,matrizB));
  97.  
  98.  
  99.  //Note que si A y B son diferentes A*B diferente de B*A (A*B <> B*A)
  100.  System.out.println("Matriz B * Matriz A");  
  101.  imprimirMatriz(multiplicacionMatriz(matrizB,matrizA));
  102. }
  103.  
  104. }

Espero te sirva!


Mod: Los códigos deben ir en etiquetas GeSHi
« Última modificación: 25 Junio 2016, 08:19 am por engel lex » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Multiplicar matrices n*n
PHP
Vampersy 6 12,157 Último mensaje 14 Octubre 2008, 23:07 pm
por Vampersy
Ayuda con este problema de matrices. « 1 2 »
Java
robertoht 13 6,195 Último mensaje 4 Julio 2015, 01:11 am
por robertoht
ayuda con este ejercicio visual c# matrices
.NET (C#, VB.NET, ASP)
xandyx2008 1 1,853 Último mensaje 2 Diciembre 2016, 08:30 am
por Eleкtro
Ayuda operadores y ciclo For (Primer programa - Tablas de multiplicar)
Scripting
RG4L 0 2,272 Último mensaje 26 Febrero 2017, 16:01 pm
por RG4L
Multiplicar llaves usb por cable o programa.
Ingeniería Inversa
Wasqueao 5 3,223 Último mensaje 18 Enero 2019, 18:26 pm
por Geovane
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines