Professional Documents
Culture Documents
Estructura de Datos
Ing. Lourdes Roxana Daz Amaya
lulixa2000@yahoo.es
Matrices
Una matriz o arreglo bidimensional es un conjunto de
nmeros dispuestos en f filas (lneas horizontales) y c
columnas (lneas verticales).
Se dice que la matriz es de orden fxc, mientras que si
tuviera igual cantidad de filas y columnas sera una matriz
cuadrada.
A=
a 0, 0 a 0, 1 a 0, 2 . . . a 0, c-1
a 1, 0 a 1, 1 a 1, 2 . . . a 1, c-1
a 2, 0 a 2, 1 a 2, 2 . . . a 2, c-1
.
.
.
af-1,0 af-1,1 af-1,2 . . . af-1,c-1
fxc
Tipos de Matrices
Matriz Transpuesta
5
2
1
5
0
0
7
2
3x2
2
7
1
2
2x3
Matriz Identidad
Una matriz identidad tambin llamada unidad o unitaria,
es aquella cuyos elementos son todos ceros excepto
aquellos que pertenecen a la diagonal principal que son
unos.
A=
a 0, 0 a 0, 1 a 0, 2 . . . a 0, n-1
a 1, 0 a 1, 1 a 1, 2 . . . a 1, n-1
a 2, 0 a 2, 1 a 2, 2 . . . a 2, n-1
.
.
.
.
an-1,0 an-1,1 an-1,2. . . an-1,n-1
1
0
0
0
nxn
0
1
0
0
0
0
1
0
0
0
0
1
4x4
a
A=
0, 0
0
0
.
0
a 0, 1 a 0, 2 . . . a 0, n-1
a 1,1 a 1, 2 . . . a 1, n-1
0 a 2, 2 . . . a 2, n-1
.
.
.
0
0 . . . an-1,n-1
nxn
Problema:
Se tiene un grupo de fbricas y sus producciones
mensuales, cul es la produccin mensual del
conjunto?
Mes 0
Mes 1
...
Mes COL-1
Fabrica 0
100
200
120
350
770
Fabrica 1
150
100
260
360
870
Fabrica 2
350
240
400
130
Total x Mes
600
540
780
840
1120
2760
= 350; i=2;
= en el mes j=2;
Total x Fabrica
Programa:
# include <iostream.h>
# define FIL 20
# define COL 12
void leerMatriz( float [ ][COL], int, int );
void impMatriz ( float [ ][COL], int, int );
void sumaColumnas(float [ ][COL], int, int );
void main(void)
{ float prod[FIL][COL];
int nroFabricas, nroMeses;
cout<<"Ingrese Matriz"<<endl;
cout<<"Nro de Fabricas? "; cin>>nroFabricas;
cout<<"Nro de Meses? "; cin>>nroMeses;
cout<<"Ingrese produccin mensual"<<endl;
leerMatriz(prod, nroFabricas, nroMeses);
impMatriz(prod, nroFabricas, nroMeses);
sumaColumnas(prod, nroFabricas, nroMeses);
} // fin de main
Programa:
void leerMatriz( float m[ ][COL], int f, int c)
{ for (int i=0; i<f; i++)
{ cout<<"Fabrica "<< i<<endl;
for (int j=0; j<c; j++)
{ cout<< m[ "<< i << ] [ << j << ]= ";
cin>> m[i][j];
}
}
}
Programa:
void sumaColumnas( float m[ ][COL], int f, int c )
{ int i, j;
float sumaCol;
for (j=0; j<c; j++)
{ sumaCol = 0;
for (i=0; i<f; i++)
sumaCol += m [ I ] [ j ];
cout <<"Mes "<< j <<" se ha producido "<<
sumaCol<<endl;
}
}
Problema:
k=c1-1
pij =
Obtenga el producto
de dos matrices
12
34
56
1x1+2x5
3x1+4x5
5x1+6x5
1234
5678
1x2+2x6
3x2+4x6
5x2+6x6
aik bkj
k=0
1x3+2x7
3x3+4x7
5x3+6x7
11 14 17 20
1x4+2x8
3x4+4x8 = 23 30 37 44
35 46 57 68
5x4+6x8
Programa:
# include <iostream.h>
# define FIL 50
# define COL 50
void leerMatriz( float [ ][COL], int, int);
void impMatriz (float [ ][COL], int, int);
void multMatrices( float [ ][COL], float [ ][COL], float [ ][COL], int, int, int );
void main(void)
{ float a[FIL][COL], b[FIL][COL], p[FIL][COL];
int f1, c1, f2, c2;
cout<<"Primera Matriz"<<endl;
cout<<"Nro de Filas?: ";
cin>>f1;
cout<<"Nro de Columnas?: "; cin>>c1;
leerMatriz(a, f1, c1);
cout<<endl<<"Segunda Matriz"<<endl;
cout<<"Nro de filas?: ";
cin>>f2;
cout<<"Nro de columnas?: "; cin>>c2;
leerMatriz(b, f2, c2);
if (c1 == f2 )
{ cout<<La matriz<<endl;
impMatriz(a, f1, c1);
cout<<"Multiplicada con"<<endl; impMatriz(b, f2, c2);
cout<<"Resulta"<<endl;
multMatrices(a, b, p, f1, c1, c2);
impMatriz(p, f1, c2);
}
else cout <<"Nmero de columnas de la primera matriz"
<<"debe ser igual al nmero de filas de la segunda";
}
Programa:
void leerMatriz(float m[ ][COL], int f, int c)
{ int i, j;
for (i=0; i<f; i++)
for (j=0; j<c; j++)
{ cout<<"m["<<i<<"]["<<j<<"]= ";
cin>> m[i][j];
}
}
void impMatriz(float m[ ][COL], int f, int c)
{ int i, j;
for (i=0; i<f; i++)
{ for (j=0; j<c; j++)
cout <<m[i][j] << "\t";
cout<<endl;
}
}
Programa:
void multMatrices(float a[ ][COL], float b[ ][COL],
float p[ ][COL], int f1, int c1, int c2)
{ int i, j, k;
for (i=0; i<f1; i++)
for (j=0; j<c2; j++)
{ p[i][j] = 0;
for (k=0; k<c1; k++)
p[i][j] = p[i][j] + a[i][k]*b[k][j];
}
}