Título: Ayuda con este programa para multiplicar matrices!!
Publicado por: Berman 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: import java.util.Scanner; public class Matriz { public static void main (String[] args ) { System. out. println("Matriz 1"); System. out. println("Numero de filas"); int fila; Scanner sc =new Scanner (System. in); fila=sc.nextInt(); System. out. println("Numero de columnas"); int columna; Scanner sccol =new Scanner (System. in); columna=sccol.nextInt(); System. out. println("Numeros de la matriz 1:"); int matriz[][]=new int [fila][columna]; for(int j=(columna-1);j>=0;j--){ for(int i=0;i<fila;i++){ int numeros; Scanner scnum =new Scanner (System. in); numeros=scnum.nextInt(); matriz[i][j]=numeros; } } System. out. println("Matriz 2"); System. out. println("Numero de filas"); int fila2; Scanner sc2 =new Scanner (System. in); fila2=sc2.nextInt(); while(columna!=fila2){ System. out. println("Error.Vuelve a introducir las filas de la matriz"); int filaexp; Scanner scexp =new Scanner (System. in); filaexp=scexp.nextInt(); fila2=filaexp; } System. out. println("Numero de columnas:"); int columna2; Scanner sccol2 =new Scanner (System. in); columna2=sccol2.nextInt(); System. out. println("Numeros de la matriz 2:"); int matriz2[][]=new int [fila2][columna2]; for(int j=(columna2-1);j>=0;j--){ for(int i=0;i<fila2;i++){ int numeros2; Scanner scnum2 =new Scanner (System. in); numeros2=scnum2.nextInt(); matriz2[i][j]=numeros2; } } System. out. println("Matriz 1:"); for(int j=(columna-1);j>=0;j--){ for(int i=0;i<fila;i++){ System. out. print(" "+matriz [i ][j ]+" "); } System. out. println("Matriz 2:"); for(int j=(columna2-1);j>=0;j--){ for(int i=0;i<fila2;i++){ System. out. print(" "+matriz2 [i ][j ]+" "); } System. out. println("Resultado"); int matriz3[][]=new int [fila][columna2]; for(int i=0;i<fila;i++){ for(int j=0;j<columna2;j++){ for(int k=(columna-1);k>=0;k--){ matriz3[i][j]+=matriz[k][j]*matriz2[i][k]; } } } for(int j=(columna2-1);j>=0;j--){ for(int i=0;i<fila;i++){ System. out. print(" "+matriz3 [i ][j ]+" "); } } }
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!!
Título: Re: Ayuda con este programa para multiplicar matrices!!
Publicado por: + 1 Oculto(s) 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
Título: Re: Ayuda con este programa para multiplicar matrices!!
Publicado por: Berman 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.
Título: Re: Ayuda con este programa para multiplicar matrices!!
Publicado por: + 1 Oculto(s) 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
Título: Re: Ayuda con este programa para multiplicar matrices!!
Publicado por: hectornunezrivas en 25 Junio 2016, 08:14 am
Buenas noches. Te paso el codigo que siempre eh utilizado para la multiplicacion de matrices. class MultiplicacionMatrices{ //Me extrae una fila dada de una matriz en forma de vector (arreglo) public static int []filaMatriz(int [][]matriz, int fila){ int []arregloAuxiliar = new int[matriz[fila].length]; for(int i = 0; i < arregloAuxiliar.length; i++){ arregloAuxiliar[i] = matriz[fila][i]; } return arregloAuxiliar; } //Me extrae una columna dada de una matriz en forma de vector (arreglo) public static int []columnaMatriz(int [][]matriz, int columna){ int []arregloAuxiliar = new int[matriz.length]; for(int i = 0; i < arregloAuxiliar.length; i++){ arregloAuxiliar[i] = matriz[i][columna]; } return arregloAuxiliar; } //Me devuelve el valor de una celda segun la multiplicacion de dos matrices public static int valorCelda(int [][]matrizA, int [][]matrizB, int fila, int columna){ int suma = 0; /* Tomo la fila de la primera matriz y la columna de la segunda matriz, para posteriormente multiplicar celda por celda */ int []filaMatrizA = filaMatriz(matrizA, fila); int []columnaMatrizB = columnaMatriz(matrizB, columna); for(int i = 0; i < filaMatrizA.length; i++){ /* * Aqui valido que la longitud de ambos vectores sean iguales, * en terminos mas acordes, que el numero de columnas de la primera matriz, * sea igual al numero de filas de la segunda matriz */ if(filaMatrizA.length == columnaMatrizB.length){ suma += filaMatrizA[i] * columnaMatrizB[i]; }else{ System. out. println("El numero de columnas de la primera matriz es diferente al numero de filas de la segunda matriz"); break; } } return suma; } //Me devuelve una matriz, producto de la multiplicacion de dos matrices public static int [][]multiplicacionMatriz(int [][]matrizA, int [][]matrizB){ int [][]matrizAuxiliar = new int[matrizA.length][matrizA[0].length]; for(int i = 0; i < matrizA.length; i++){ for(int j = 0; j < matrizA[i].length; j++){ matrizAuxiliar[i][j] = valorCelda(matrizA, matrizB, i, j); } } return matrizAuxiliar; } //imprime los valores de una matriz public static void imprimirMatriz(int [][]matriz){ System. out. println("-------------------------------"); for(int i = 0; i < matriz.length; i++){ for(int j = 0; j < matriz[i].length; j++){ System. out. print(matriz [i ][j ]+"\t"); } } System. out. println("-------------------------------"); } //imprime el procedimiendo de la 'matriz de recorrido' de una matriz public static void main (String []args ){ /* Nota importante: - Sean las matrices A y B; A tenga el mismo número de columnas que B de filas para que exista A*B - Sean las matrices B y A; B tenga el mismo número de columnas que A de filas para que exista A*B */ int [][]matrizA ={{1,0,0,1}, {1,4,0,1}, {1,9,0,11}, {1,5,6,0}}; int [][]matrizB ={{11,0,0,1}, {1,8,0,1}, {0,9,0,5}, {1,7,6,0}}; System. out. println("Matriz A"); imprimirMatriz(matrizA); System. out. println("Matriz B"); imprimirMatriz(matrizB); System. out. println("Matriz A * Matriz B"); imprimirMatriz(multiplicacionMatriz(matrizA,matrizB)); //Note que si A y B son diferentes A*B diferente de B*A (A*B <> B*A) System. out. println("Matriz B * Matriz A"); imprimirMatriz(multiplicacionMatriz(matrizB,matrizA)); } }
Espero te sirva! Mod: Los códigos deben ir en etiquetas GeSHi
|