Autor
|
Tema: Multiplicacion de matrices Anxk y Bkxm (Leído 5,702 veces)
|
chicainge
Desconectado
Mensajes: 15
|
Tengo un pequeño problema al almacenar la matriz o al calcular el resultado en el subalgoritmo MulMatrizAB(...), podrian ayudarme ha encontrar el problema?? Graciass El enunciado decia lo siguiente: Hacer un subalgoritmo que calcule el producto de dos matrices ANxK x B KxM, y lo almacene en una matriz CNxM. Aqui les dejo mi codigo: #include<iostream>
using namespace std;
const int N=2; const int M=3; const int K=2;
typedef int MatrizA[N][K]; typedef int MatrizB[K][M]; typedef int MatrizC[N][M];
void mostarResul(MatrizC ); void MulMatrizAB(MatrizA ,MatrizB ,MatrizC &);
int main(){ MatrizA A; MatrizB B; MatrizC C;
cout<<"Introduce una matriz A 2x2, por filas " ; for(int i=0;i<N;i++){ for(int j=0;j<K; j++){ cin>>A[i][j]; } } cout<<"introduce una matriz B 2x3, por filas " ; for(int i=0;i<K;i++){ for(int j=0;j<M; j++){ cin>>B[i][j]; C[i][j]=0; } } MulMatrizAB(A,B,C); mostarResul(C); } void MulMatrizAB(MatrizA a,MatrizB b,MatrizC &c){ int z=0; for(int i=0 ; i<N ; i++){ for(int j=0 ; j<M ; j++){ for(int h=0 ; h<K ; h++){ z=(a[i][h]*b[h][j])+z; if(h==1){ c[j][i]=z; z=0; } } } } } void mostarResul(MatrizC c){ for(int i=0; i<N ; i++){ for(int j=0; j<M ;j++){ cout<<c[i][j]<<" "; } cout<<endl; } }
|
|
|
En línea
|
|
|
|
kutcher
Desconectado
Mensajes: 53
|
Tengo un pequeño problema al almacenar la matriz o al calcular el resultado en el subalgoritmo MulMatrizAB(...), podrian ayudarme ha encontrar el problema??
Creo que debería quedar algo así: void MulMatrizAB( MatrizA a, MatrizB b, MatrizC &c ) { for(int i = 0 ; i < N ; i++){ for(int j = 0 ; j < M ; j++){ for(int h = 0 ; h < K ; h++) c[i][j] += a[i][h] * b[h][j]; } } }
|
|
|
En línea
|
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
Yo "creo" que más bien: void MulMatrizAB ( MatrizA a , MatrizB b , MatrizC c ) { for ( int i = 0 ; i < N ; i++ ) for ( int j = 0 ; j < M ; j++ ) { c[ i ][ j ] = 0 ; for ( int h = 0 ; h < K ; h++ ) c[ i ][ j ] += ( a[ i ][ h ] * b[ h ][ j ] ) ; } }
Sobra el operador & de c. ¡¡¡¡ Saluditos! ..... !!!!
|
|
« Última modificación: 7 Agosto 2014, 17:09 pm por leosansan »
|
En línea
|
|
|
|
kutcher
Desconectado
Mensajes: 53
|
Yo "creo" que más bien: Sobra el operador "&" con la variable c.
Lo de & es verdad, pero el: c[ i ][ j ] = 0 ;
No le veo la utilidad creo que es innecesario
|
|
|
En línea
|
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
Lo de & es verdad, pero el: c[ i ][ j ] = 0 ;
No le veo la utilidad creo que es innecesario Como es una variable acumulador si no está inicializada, "creo, ¡eh!", puede contener basura a la que se irían añadiendo los valores que va sumando. Lo veo como hacer: int num ; num += 5 ; printf ( "%d" , num ) ;
Como num no está inicializado su valor es impredecible, aunque hay algunos compiladores que por defecto inician las variables a cero, y al sumar 5 el resultado es "rarito". ¡¡¡¡ Saluditos! ..... !!!!
|
|
|
En línea
|
|
|
|
kutcher
Desconectado
Mensajes: 53
|
Como es una variable acumulador si no está inicializada, "creo, ¡eh!", puede contener basura a la que se irían añadiendo los valores que va sumando.
Ya se habia inicializado previamente todos sus elementos a cero en el main
|
|
|
En línea
|
|
|
|
eferion
Desconectado
Mensajes: 1.248
|
Ya se habia inicializado previamente todos sus elementos a cero en el main
Se inicializa... pero mal. Fíjate que se aprovecha la inicialización de B... si cambias los datos y haces que A deje de ser cuadrada tienes un problema.
|
|
|
En línea
|
|
|
|
kutcher
Desconectado
Mensajes: 53
|
Se inicializa... pero mal. Fíjate que se aprovecha la inicialización de B... si cambias los datos y haces que A deje de ser cuadrada tienes un problema.
Entiendo.. pero eso seria otro caso, es de esperar que se harían las modificaciones convenientes
|
|
|
En línea
|
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
Es curioso, pero todos tenéis razón En cualquier caso, hacer 3 typedef para 3 matrices no me parece para nada acertado. 1: el tamaño de C se saca del tamaño de A y B. 2: si quieres multiplicar dos matrices en orden contrario, tendrías que cambiarles el 'tipo' de MatrizA a MatrizB y etc. Lo normal sería hacer una clase para matriz, o simplemente olvidar los typedef.
|
|
|
En línea
|
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
Ya se habia inicializado previamente todos sus elementos a cero en el main
Cierto, ni había mirado la función main. Sorry¡. Y totalmente de auerdo con lo expuesto por ivancea96 y eferion. ¡¡¡¡ Saluditos! ..... !!!!
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Multiplicación de matrices
Programación C/C++
|
ALONSOQ
|
4
|
4,597
|
5 Septiembre 2012, 18:03 pm
por ALONSOQ
|
|
|
Ayuda: Multiplicación de matrices - Python
Ejercicios
|
Itzhack
|
1
|
12,401
|
4 Noviembre 2014, 01:29 am
por Minusfour_cierralo_o_baneamefull
|
|
|
[C] Multiplicación de matrices sparse por vectores
Programación C/C++
|
Regexp
|
0
|
2,121
|
12 Junio 2015, 19:00 pm
por Regexp
|
|
|
multiplicacion de matrices rectangulares con pthreads
Programación C/C++
|
eberfalu2
|
2
|
4,414
|
25 Septiembre 2015, 19:37 pm
por eberfalu2
|
|
|
Multiplicacion de matrices con malloc y realloc
Programación C/C++
|
mc275
|
2
|
3,127
|
29 Mayo 2017, 05:56 am
por mc275
|
|