Enunciado
Escribir un procedimiento que dadas dos matrices A y B y sus dimensiones devuelva la matriz producto C = A + B o una indicación de que no pueden multiplicarse.
Código
Python
def MatrixProd ( fa, fb, ca, cb, a, b ):
c = []
for i in range( fa ):
c.append( [0] * cb )
if ca == fb:
for i in range ( fa ):
for j in range ( cb ):
c[i][j] = 0
for k in range ( ca ):
c[i][j] += a[i][k] * b[k][j]
return c
else:
return False
def main():
a = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ]
b = [ [ 5, 6, 8 ], [ 8, 9, 1 ], [ 3, 7, 2 ] ]
c = MatrixProd( 3, 3, 3, 3, a , b )
if not c:
print( "\nNo se puede multiplicar/" )
print( "Cannot be multiplied\n" )
else:
print( "Columnas/columns", end="" )
for j in range ( 3 ):
print( str(j).rjust(10), end="" )
print( "\n" )
for i in range ( 3 ):
print( "Fila/rows: ", end="" )
print( str(i).rjust(5), end="" )
for j in range ( 3 ):
print( str(c[i][j]).rjust(10), end="" )
print( "\n" )
input( "Presionar/Press Enter to exist " )
main()
C++
#include <iostream>
#include <iomanip>
using namespace std ;
#include <conio.h>
void MatrixProd ( int fa, int fb, int ca, int cb,
float a[][10], float b[][10],
bool* error, float c[][10] )
{
int i, j, k ;
*error = !( ca == fb ) ;
if (ca == fb)
for ( i=0; i<fa; i++ )
for ( j=0 ; j<cb ; j++ )
{
c[i][j] = 0 ;
for ( k=0; k<ca; k++ )
c[i][j] += a[i][k] * b[k][j] ;
}
}
int main ()
{
int i, j, fa, fb, ca, cb ;
float m1[10][10], m2[10][10], m3[10][10] ;
bool e ;
cout << "Ingresar dimension matriz 1/" ;
cout << "Enter matrix 1 dimension (max 10): " ;
cin >> fa >> ca ;
cout << "Ingresar elementos/" ;
cout << "Enter elements: " << endl ;
for( i=0; i<fa; i++ )
{
for ( j=0; j<ca; j++ )
cin >> m1[i][j] ;
cout << endl ;
}
cout << endl << endl ;
cout << "Ingresar dimension matriz 2/" ;
cout << "Enter matrix 2 dimension (max 10): " ;
cin >> fb >> cb ;
cout << "Ingresar elementos / Enter elements: " ;
cout << endl ;
for( i=0; i<fb; i++ )
{
for ( j=0; j<cb; j++ )
cin >> m2[i][j] ;
cout << endl ;
}
cout << endl << endl ;
MatrixProd( fa, fb, ca, cb, m1, m2, &e, m3 ) ;
if (e)
{
cout << endl << "No se puede multiplicar/" ;
cout << "Cannot be multiplied" << endl ;
}
else
for (i=0; i<fa; i++)
{
cout << endl ;
for (j=0; j<cb; j++)
cout << setw(5) << m3[i][j] ;
}
cout << endl ;
cout << "Presionar/Press Enter to exit " ;
getch() ;
return 0 ;
}
Pascal
Program Array04 ;
uses CRT ;
const nmax = 10 ;
type
dim = 1 .. nmax ;
matrix = array [ dim , dim ] of real ;
var
i, j, ca, cb, fa, fb : dim ;
a, b, c : matrix ;
error : boolean ;
procedure MatrixProd ( fa, fb, ca, cb: dim ;
var a, b: matrix ;
var error: boolean ;
var c: matrix ) ;
var i, j, k: integer ;
begin
error := not( ca = fb ) ;
if ( ca=fb )
then
for i := 1 to fa do
for j := 1 to cb do
begin
c[i][j] := 0 ;
for k := 1 to ca do
c[i][j] := c[i][j] + a[i][k] * b[k][j] ;
end ;
end ;
begin
ClrScr ;
write( 'Ingresar la dimension 1 : ' ) ;
readln( fa, ca ) ;
writeln( 'Ingresar la matriz 1: ' ) ;
for i := 1 to fa do
for j := 1 to ca do
readln( a[i, j] ) ;
write( 'Ingresar la dimension 2 : ' ) ;
readln( fb, cb ) ;
writeln( 'Ingresar la matriz 2: ' ) ;
for i := 1 to fb do
for j := 1 to cb do
readln( b[i, j] ) ;
MatrixProd( fa, fb, ca, cb, a, b, error, c ) ;
if error
then
begin
write( 'No se puede multiplicar/' ) ;
writeln( 'Cannot be multiplied' )
end
else
for i := 1 to fa do
begin
for j := 1 to cb do
write( c[i, j]:15:2 ) ;
writeln
end ;
writeln ;
writeln( 'Presionar/Press Enter to exit' ) ;
readln ;
end.
Diagramas


