Presento este programa clásico ahora en java. Se pueden encontrar también en este blog las versiones en C: Multiplicación de Matrices en C y en C++:Multiplicación de Matrices en C++. El algoritmo central es el mismo. El problema debe atacarse pensando primero en la multiplicación de dos vectores (un ciclo for), depués en un vector por una matriz (dos ciclos for) y finalmente dos matrices (tres ciclos for). Esto puede verse en el método Multiplicar. Como todos los programas, basta copiar y pegar en un editor de texto el código aquí presentado. Este programa recibe las matrices, las multiplica e imprime el resultado. En realidad el corazón del programa (la multiplicación) son unas cuántas líneas de código. Es más complicado presentar los resultados en pantalla. De todas formas creo que eso es muy útil para el usuario final y por eso lo incluyo.
El siguiente código debe guardarse con el nombre UsaMultiplicacion.java
public class UsaMultiplicacion { // Abre clase UsaMultiplicacion public static void main(String args[]) { // Abre main Multiplicacion miObjeto = new Multiplicacion(); // Llamada a Recibe_Entradas1() miObjeto.Recibe_Entradas1(); // Llamada a Recibe_Entradas2() miObjeto.Recibe_Entradas2(); //Llamada a Multiplicar miObjeto.Multiplicar(); //Llamada a metodo Imprime miObjeto.Imprimir(); } // Cierra main } // Cierra clase UsaMultiplicacionEl siguiente código debe guardarse con el nombre Multiplicacion.java
import java.util.Scanner; public class Multiplicacion { // Abre clase Multiplicacion //Si se quiere multiplicar matrices de distinta dimension //solo hay que cambiar los valores de M, N y P private int M = 3; private int N = 2; private int P = 4; private int Matriz1[][] = new int[N][M]; private int Matriz2[][] = new int[M][P]; private int Matriz3[][] = new int[N][P]; Scanner entrada = new Scanner(System.in); //Metodo Recibe_Entradas1 public void Recibe_Entradas1() { // Abre metodo Recibe_Entradas1 System.out.printf("\nEste programa multiplica una matriz de %d columnas y %d renglones", M, N); System.out.printf(" con una de %d columnas y %d renglones\n\n", P, M); System.out.print("\nAqui se reciben las entradas de la primera matriz " ); System.out.printf("de %d filas y %d columnas.\n", M, N ); for ( int i = 0; i < N; i++ ) for ( int j = 0; j < M; j++ ) { // Abre for System.out.printf("Introduzca el valor de la entrada en el renglon %d y la columna %d: ", i + 1, j + 1 ); Matriz1[i][j] = entrada.nextInt(); } // Cierra for } // Cierra metodo Recibe_Entradas1 public void Recibe_Entradas2( ) { // Abre metodo Recibe_Entradas2 System.out.print("\nAqui se reciben las entradas de la segunda matriz " ); System.out.printf("de %d filas y %d columnas", M, P); for ( int i = 0; i < M; i++ ) for ( int j = 0; j < P; j++ ) { // Abre for System.out.printf("\nIntroduzca el valor en el renglon %d y la columna %d: ", i + 1, j + 1 ); Matriz2[i][j] = entrada.nextInt(); } // Cierra for } // Cierra metodo Recibe_Entradas2 // Metodo Multiplicar public void Multiplicar( ) { // Abre metodo Multiplicar for ( int k = 0; k < N; k++) { // abre primer ciclo for for ( int j = 0; j < P; j++) { // abre el segundo ciclo for for ( int i = 0; i < M; i++ ) Matriz3[ k ][j ] += Matriz1[k][i]*Matriz2[i][j]; } // Cierra el segundo ciclo for } } // Cierra el metodo Multiplicar void Imprimir( ) { // Abre metodo Imprimir // Aqui se imprimen la dos matrices y la matriz producto int i, j, k; System.out.printf("\n\nAQUI SE IMPRIMEN LAS DOS MATRICES Y EL PRODUCTO: \n\n"); for ( i = 0; i < N; i++ ) { // abre for que controla numero de renglones // Este ciclo imprime la primera matriz // No hay ningun problema para imprimir la primera matriz, ya que se // trata de un par de ciclos for. Sin embargo se quiere imprimir las // tres matrices, lo cual hace un poquito mas complicado el asunto. // De todas formas la primera se imprime renglon por renglon // solo que antes de pasar al siguiente renglon, se escriben las entradas // correspondientes de la segunda y tercera matrices. for ( k = 0; k < M; k++) { // Abre ciclo for System.out.printf("%3d", Matriz1[i][k]); // Se imprime el renglon i de la matriz 1 } //Cierra ciclo for System.out.printf("\t\t"); // Esta instruccion separa una matriz de otra // Este ciclo imprime la segunda matriz for ( j = 0; j < P; j++) { // abre for if ( i <= (N - 1)) // El numero de columnas de la segunda matriz puede ser // menor o mayor que el numero de filas de la primera // Si es mayor no pasa nada, pero si es menor se estara // haciendo referencia a un elemento inexistente en el arreglo // El caso en el que N > M se trata fuera del ciclo controlado por i // El -1 es debido a que i empieza a correr en cero System.out.printf("%3d", Matriz2[i][j]); // se imprime el renglon i de la matriz 2 else // De lo contrario solo se imprimen 3 espacios en blanco // correspondientes con 3d System.out.printf(" "); } // Cierra for System.out.printf ("\t\t"); // Esta instruccion separa la matriz 2 de la matriz // producto // Este es el ciclo que imprime la matriz producto for ( j = 0; j < P; j++ ) { // abre for System.out.printf("%3d", Matriz3[i][j]); // se imprime el renglon i de la matriz producto } // Cierra for System.out.printf("\n"); // Aqui se cambia de renglon } // Cierra for que controla numero de renglones // Es probable que N > M, por lo cual en el ciclo anterior no se // imprimiria la segunda matriz en su totalidad // Con el siguiente bloque se imprime lo que falta if ( M > N) { // Abre if int l = N; while ( l < M ) { // Abre while for ( i = 0; i < M; i++) System.out.printf(" "); System.out.printf("\t\t\t"); for ( j = 0; j < P; j++ ) System.out.printf("%3d", Matriz2[l][j]); System.out.printf("\n"); // Aqui se cambia de linea l++; // Se incrementa el numero de linea } // Cierra while } // Cierra if } // Cierra metodo Imprimir } // Cierra clase Multiplicacion
Muy buena aportacion!! =) me fue de mucha utilidad
ResponderEliminargracias!! =D
Gracias a ti, qué bueno que te sirvió. ¡Saludos!
ResponderEliminarSabras hacer una multiplicacion de un vector por una matriz y una matriz por un escalar? Me esta volviendo loco xD
ResponderEliminarEn realidad las dos cosas son bastante fáciles. Para lo primero simplemente establece la variable global N = 1 en este programa. Y ya está. Lo segundo es todavía más fácil.
Eliminar1) Define el tamaño de tu matriz (recuerda que en Java el primer subíndice de un arreglo bidimensional representa a los renglones y el segundo a las columnas)
2) Recibe los elementos de la matriz. En el programa de arriba viene cómo recibir los valores. También los puedes poner en la declaración del arreglo, según prefieras.
3) Recibes un número de parte del usuario (recuerda que lo tienes que declarar primero)
4) Haces un par de ciclos for anidados. El primero que corra sobre las columnas y el segundo sobre las filas. En el cuerpo de los dos ciclos vas a poner simplemente una instrucción del tipo
A[fila][columna] *= c;
y ya está.
Puedes imprimir la matriz si quieres para verla. Eso también es fácil e incluye un par de ciclos for.
sw
ResponderEliminarme gustaría que me ayuden.
ResponderEliminar2012/5/12 Starlin Guevara
import java.util.*;
import javax.swing.JOptionPane;
public class Vectores {
public static void main(String [] args){
int i;
int num=0;
int numero;
int suma;
int sumapares=0;
Vector pares = new Vector();
Vector impares = new Vector();
Vector v3 = new Vector(pares);
Vector v4 = new Vector(impares);
Scanner leer = new Scanner(System.in);
String input = JOptionPane.showInputDialog("Entre la cantidad de elementos del vector");
num = Integer.parseInt(input);
for( i=0; i<num; i++){
String entrada = JOptionPane.showInputDialog("Entre Un Numero");
numero = Integer.parseInt(entrada);
if(numero%2==0){
pares.add(numero);
}
else if(numero%2!=0){
impares.add(numero);
}
}
for(int j=0; j<pares.size(); j++){
JOptionPane.showMessageDialog(null,"Pares :"+pares.get(j));
}
for(int k=0; k<impares.size(); k++){
JOptionPane.showMessageDialog(null,"Impares :"+impares.get(k));
}
}
}
necesito que me multiplica los números pares y impares.
silos números pares son 4 6 2
ResponderEliminary los impares son 3 1 5
el resultado sera 36 54 18
Hola. No me queda claro lo que pides. Por la forma en la cual de
ResponderEliminar4, 6, 2
3, 1, 5
obtienes
36, 54, 18
Y hasta donde puedo ver, lo que hace tu código es recibir números y ponerlos en el vector de pares si son divisibles entre 2 y en el de impares si no lo son. Posteriormente con un par de ciclos for imprimes los valores de cada vector. Lo que quieres es que tu programa multiplique cada par por cada uno de los impares.
Para hacer esto necesitas definir un vector Producto de tamaño n e inicializarlo a 0 y un par de ciclos for:
for ( n = 0; n < pares.size(); n++)
for ( m = 0; m < impares.size(); m++)
{ /*Abre for anidado*/
Producto.add(n) += pares.get(n)*impares.get(m);
} /*Cierra for anidado*/
Espero que te sirva. Estoy tratando de seguir lo que escribiste, porque yo no conozco el uso de vectores en java, yo lo habría resuelto con arreglos. Tal vez tengas que corregir la sintaxis.
Me podrian colaborar con una matriz, de 4 filas y el usuario ingresa el numero de columnas de 1 hasta 200. En la primera fila va el factorial del numero de acuerdo al numero de columnas ingresados por el usuario. En la segunda fila la serie fibonacci. En la tercera fila va el area de un rectangulo, el numero de la columna por 2 es la base y la altura es el numero de la fila por 5, se suman todas la areas hasta el numero ingresado inicialmente el usuario. La cuarta fila va el volumen de una piramide con base cuadrada, en donde el area del cuadrado es el valor factorial de esa columna y la altura es la columna, luego se suman los volumenes hasta el numero ingresado inicialmente por el usuario.
ResponderEliminar¡Hola, Jorge! Estos días estoy bastante ocupado para escribir el código, sin embargo, creo que debes hacer una serie de métodos que hagan lo siguiente:
ResponderEliminarLe envíes el número de columna y te regrese el factorial.Puedes tomar el código de Este programa
Envíes el número de columna y te regrese el número de Fibonacci. Aquí tienes el código en java. También puedes ver Esta entrada.
No entiendo muy bien qué pides en las otras filas, pero se puede hacer con los códigos de arriba.
200 es un número muy grande para calcular factoriales y números de Fibonacci. Vas a tener problemas con la memoria en esos casos.
Saludos.
el metodo multiplicar esta mal solo se hace con 2 for y ya.
ResponderEliminarpublic static void sumatrix() throws Exception {
for ( int j = 0 ; j < 2 ; j++ )
{
for ( int i = 0 ; i < 2 ; i++ )
{
matrizsuma[i][j] = matriz1[i][j] + matriz2[i][j];
}
}
Creo que no sabes multiplicar matrices.
Eliminar¡Hola! Decir que está mal es, por lo menos, una exageración. No entiendo el segmento de código que escribiste, por lo cual no puedo comentarlo, pero el código de la entrada está bien. Saludos.
ResponderEliminarhola, hay forma que este ejercicio adicione que siga multiplicando hasta que llegue a 0 toda la matriz resultante? y que muestre todas las multiplicaciones que hizo? ademas que me grafique la matriz inicial, estoy viendo grafos, las matrices se componen por solos 1 y 0
ResponderEliminarÉste programa imprime las matrices que se multiplican. Lo otro que dices no lo entiendo, Las multiplicaciones renglón por columna se presentan en la matriz producto. "Hasta que llegue a 0 toda la matriz" es algo que no entiendo. No hay razón para ésto, a menos de que multipliques sucesivamente matrices cuyas entradas sean menores que cero. Creo que estás confundiendo la multiplicación de matrices con alguna otra cosa.
EliminarSaludos.
buenas noches me colaboran con este programa..no me funciona.. 2 vectores que lleno A y B con x datos(con igual tamaño de vector) y los almaceno en un vector C(tamaño de Vect A + Vect B) y lo imprimo..ejemplo A 1235 B 4562
ResponderEliminarC 12354562.
Muchas gracias...te envio el programa que le estoy trabajando
// vector que lea N posiciones y genere numeros O random para llenar las posiciones de los vectores A y B
// imprime vector A y B verticalmente y C y D horizontalmente
//funciona ok.
public class ejercicio3 {
public static void main(String[]args) {
int i,j,N,M,O;
N=LeerVariable.leerEntero ("cant de posiciones VECTOR ");
M=N+N;
O=LeerVariable.leerEntero("Digite el rango de numeros aleatorios ");
int A[]=new int[N];
int B[]=new int[N];
int C[]=new int[M];
for(i=0;i<M;i++) {
for (i=0;i<N;i++) {
A[i]=(int)(Math.random()*(O));
C[i]=A[i];
}
for (i=0;i<N;i++) {
B[i]=(int)(Math.random()*(O));
C[i]=B[i];
}
}
System.out.println ();
System.out.println ("vector A");
for(i=0;i<N;i++) {
System.out.println( A[i]);
}
System.out.println ("vector B");
for(i=0;i<N;i++) {
System.out.println(B[i]);
}
System.out.println ("vector C ");
for(i=0;i<M;i++) {
System.out.print(C[i]+" ");
}
}
}
Hola, Alex. He tratado de corregir tu programa pero la verdad es ilegible. Necesito que me digas qué exactamente quieres que haga tu código. Por favor ponlo como comentario al principio. Así como está me parece que es parte de un programa más grande y que lo (mal) copiaste en una clase. También hay varios problemas lógicos y de sintaxis, más allá de que no queda claro qué quieres hacer. Aquí algunos (puede haber más):
Eliminar1) Si vas a recibir números, necesitas poner al principio la leyenda
import java.util.Scanner;
y luego declarar un tipo Scanner (como el tipo entrada de el programa de multiplicación de matrices)
2) En tus comentarios dices que se imprimirá el arreglo D, pero ese arreglo nunca se define.
3) En el doble ciclo for modificas la variable contador i del primer ciclo en el segundo ciclo, de tal manera que nunca se cumple la condición de término. Creo que alguno de esos índices debe ser j, que la declaras tipo int.
Te escribo un código que funciona y que hace algo que tal vez es parecido a lo que quieres:
// vector que lea N posiciones y genere numeros O random para llenar las posiciones de los vectores A y B
// imprime vector A y B verticalmente y C y D horizontalmente
//funciona ok.
import java.util.Scanner; //Linea agregada
public class ejercicio3 {
public static void main(String[]args) {
int i,j,N,M,O;
Scanner entrada = new Scanner(System.in);
//N=LeerVariable.leerEntero ("cant de posiciones VECTOR ");
System.out.println("\nIntroduzca la cantidad de posiciones VECTOR: ");
N = entrada.nextInt();
M=N+N;
//O=LeerVariable.leerEntero("Digite el rango de numeros aleatorios ");
System.out.println("\nDigite el rango de numeros aleatorios: ");
O = entrada.nextInt();
int A[]=new int[N];
int B[]=new int[N];
int C[]=new int[M];
for(i=0;i<N;i++)
A[i]=(int)(Math.random()*(O));
System.out.println ();
System.out.println ("vector A");
for(i=0;i<N;i++)
System.out.println( A[i]);
}
}
me podrias ayudar a multiplicar dos matrices? tu codigo de inicio esta muy complejo, no quiero utilizar la entrada de datos.
ResponderEliminartengo las siguientes matrices:
matriz a
5 8 4
1 -4 2
10 7 9
matriz b
45 -5
2 6
14 8
y la matriz resultante seria:
297 55
65 -13
590 64
Hola, Diego. Si no quieres usar la entrada de datos, sólo no llames a esos métodos, y los puedes borrar. En la declaración de los arreglos, puedes inicializarlos con los valores que tú quieras, y ya está. Lo importante realmente es el método multiplicar. Una vez que tengas las matrices que quieras, envíalas a ese método y ya está. Si las quieres imprimir, las imprimes.
EliminarMuchos saludos. Si no sabes cómo inicializar el arreglo, me dices.
ola y si solo kiero multiplicar una matriz x un mismo numero como seria?
ResponderEliminarPues ahí básicamente tienes que hacer un doble ciclo for, recorriendo cada entrada de la matriz, y multiplicas por el escalar:
Eliminarfor( i = 1; i <= X; i++ )
for( j = 1; j <= Y; j++ )
c[i][j] *= c;
donde c es el escalar.
que pena ... ensaye tu codigo (Multiplicación de Matrices en Java) y la matriz resultado se llenan de ceros, por que puede ser ??
ResponderEliminarHola, Mauricio. La verdad no se que pueda estar pasando. ¿Ya revisaste si multiplicas por 0 en algún lado?
EliminarHola buenas noches... quisiera que me ayudaran con un arreglo donde se puedan introducir 2 arreglos y el tercer arreglo lo muestre en pantalla con la suma de 2 arreglos D: la verdad ya me harte de esa tarea :(
ResponderEliminarhola que tal,tengo una pregunta con un ejercicio bastante bobo ,pero no me sale....
ResponderEliminarcrear dos arreglos enteros,generar e imprimir por pantalla un tercer array que contenga los elementos impares del primer arreglo, y elementos pares del segundo arreglo. en java
hola
ResponderEliminaren la escuela un profesor me pide sobrecarcar un metodo que contenga(tablas, vectores y cubos) ademas esto debe tener tipo de datos(float,entero y double).
los metodos que me pide es para hacer un arreglo tridimensional pero ke me retorne uno bidimensional???? me puedes ayudar
Hola oye me podrias ayudar a realizar este programa.Ingresar el sueldo de un trabajador, Categoría, condición(Estable, contratado) y reportar el pago total que se le debe hacer de acuerdo a lo siguiente: El porcentaje de Bonificación (respecto al sueldo) se calcula de acuerdo a la siguiente tabla:
ResponderEliminarCategoría Estable No Estable
A 20% 17%
B 18% 15%
C 15% 14%
D 12% 10%
El cálculo del descuento es respecto al (Sueldo + Bonificación) Estable: 6% No estable: 4%
//metodo en java para multiplicar dos matrices
ResponderEliminarpublic static void Multiplicacion(int[][] m1,int [][] m2){
if (m1[0].length!=m2.length)
{JOptionPane.showMessageDialog(null,"no se pude multiplicar la matriz");}
else{
int m3[][]=new int [m1.length][m1.length];
for(int i=0;i<m1.length;i++){
for(int j=0;j<m1.length;j++){
int sum=0;
for (int k=0;k<m1[0].length;k++){
sum=m1[i][k]*m2[k][j];
}
m3 [i] [j] =sum;
}
Mostrar(m3);
}
}
}
Como cargo n una matris numeros primos
ResponderEliminarcomo hago una matriz con suma resta y multiplicacion :3
ResponderEliminarHola, me podrías ayudar a realizar esta multiplicación de 2 matrices:
ResponderEliminarmatriz A
2 5 2
3 6 3
matriz B
2 1
4 3
2 2
como genero esta matriz
ResponderEliminar1-3-4-10-11
2-5-9-12-19
6-8-13-18-20
7-14-17-21-24
15-16-22-23-25
HOLA buenas tardes como puedo elaborar una resta de matricez 3*3 ????
ResponderEliminar