Escolar Documentos
Profissional Documentos
Cultura Documentos
Clase 8
Clase 8
Matrices: Motivacin
Supongamos que se quieren guardar las temperaturas registradas los 30 das de cada mes del ao 2012.
Clase 8
Matrices: Declaracin
Se puede definir una estructura que permita almacenar las temperaturas registradas durante los 12 meses de 2012
Type dias = 1..30; meses = 1..12; temperaturas = Array [ meses, dias] of real; Cmo se organiza la informacin de acuerdo a esta definicin? Cmo se resolveran ahora las situaciones anteriores?
Clase 8
Matrices: Declaracin
Para resolver estos problemas podemos utilizar una estructura de datos ARREGLO denominada MATRIZ.
Una matriz es una estructura de datos compuesta que permite acceder a cada componente utilizando dos ndices (fila y columna).
Estos ndices permiten ubicar un elemento dentro de la estructura. El primer ndice indica la fila y el segundo ndice indica la columna Un tipo de dato Matriz es una coleccin ordenada e indexada de elementos. Caractersticas importantes: Homognea Esttica
Indizada
Lineal
Clase 8 Algoritmos, Datos y Programas 2013
Clase 8
Matrices: Declaracin
Tipos de datos permitidos en Pascal:
Carcter
Enumerativo
Registros
String
Algoritmos, Datos y Programas 2013
Otro arreglo
Clase 8
Matrices: Ejemplos
Analizar otras situaciones
Batalla Naval Calendario escolar Ciudad del robot (Visual Da Vinci) Cartn de Lotera Mapa de butacas de un teatro Cul sera una declaracin posible en cada caso? Analicemos para cada situacin las dimensiones de la matriz, tipo de ndices y elementos...
Algoritmos, Datos y Programas 2013
Clase 8
Matrices: Operaciones
Entre otras operaciones se pueden mencionar:
Producto de matrices
Eliminar una fila/columna en una matriz Insertar una fila/columna en una matriz Analicemos en todos los casos: cules son las validaciones necesarias? Pensemos en las validaciones para VECTORES
Clase 8 Algoritmos, Datos y Programas 2013
Matrices: Declaracin
{trabajaremos con las siguientes declaraciones...}
Const maxfil=50; maxcol=40; Type rangof = 0..maxfil; rangoc = 0..maxcol; matriz = array [1..maxfil, 1..maxcol] of integer;
Var
Clase 8
1 3 2 4 7 6 8 9 15 10 11 5
Begin readln(DimFila); readln(DimCol); if Validar(DimFila, DimCol) then For i:=1 to DimFila do For j:= 1 to DimCol do readln(M[i,j]); End;
1 4 8
3 7 9
2 6 15
10
11
Matrices: Imprimir
1 3 2 4 7
1 4 8 10 3 7 9 11 2 6 15 5
Procedure Imprimir (var M: matriz; DimFila: rangof; DimCol: rangoc); var i: rangof; j: rangoc;
6 8 9
15
10 11
5
Clase 8 Algoritmos, Datos y Programas 2013
Matrices: Suma
M1
1 4 8 10
3 7 9 11 +
2 6 15 5
M2
1 1 2 5
1 2 3 5 =
2 4 4 5
M3
2
5 10 15
4
9 12 16
4
10 19 10
Clase 8
Matrices: Suma
Se pide calcular la suma de dos matrices dadas.
{solo se pueden sumar matrices de igual dimensin}
Procedure Sumar (var M1, M2: matriz; var M3: matriz; DimFila: rangof; DimCol: rangoc); var i: rangof; j: rangoc; Begin Cargar(M1, DimFila1, DimCol1); Cargar(M2, DimFila2, DimCol2); if (DimFila1=DimFila2) and (DimCol1=DimCol2) then Begin Sumar(M1,M2,M3,DimFila1,DimCol1); Imprimir(M3,DimFila1,DimCol1); end else writeln(No se pueden sumar'); end.
Begin For i:=1 to DimFila do For j:= 1 to DimCol do M3[i,j] := M1[i,j] + M2[i,j]; end;
Clase 8
else
end; Clase 8
if fila = DimFila then begin DimFila := DimFila 1; exito := true; end else exito := false; Algoritmos, Datos y Programas
2013
Matrices: Producto
M1 1 4 8 10 3 7 9 11 2 6 15 5 *
cantidad de columnas de la 1er matriz coincide con la cantidad de filas de la 2da matriz la matriz producto tendr la cantidad de filas de la 1er matriz y la cantidad de columnas de la 2da matriz
M2
1 2 3
2 2 1
M3
13
10
Matrices: Declaracin
{trabajaremos con las siguientes declaraciones...}
Const maxfil=50; maxcol=40; Type rangof = 0..maxfil; rangoc = 0..maxcol; matriz = array [1..maxfil, 1..maxcol] of integer;
Var
Clase 8
Matrices: Producto
Se pide calcular el producto de dos matrices dadas.
{es posible si la cantidad de columnas de la 1er matriz coincide con la cantidad de filas de la 2da matriz} {la matriz producto tendr la cantidad de filas de la 1er matriz y la cantidad de columnas de la 2da matriz}
Begin Cargar(M1,Dim1F,Dim1C); Cargar(M2,Dim2F,Dim2C); if (Dim1C=Dim2F) then Begin Producto(M1,M2,M3,Dim1F,Dim2C,Dim1C); Imprimir(M3,Dim1F,Dim2C); end else writeln('Estas matrices no se pueden multiplicar'); end.
Clase 8 Algoritmos, Datos y Programas 2013
Matrices: Producto
M1 1 4 8 10 3 7 9 11 2 6 15 5 M2 1 2 2 2 1 = M3 13 10
Procedure Producto ( Var M1, M2: matriz; var M3: matriz; DimF: rangoF; DimC: rangoC; Dim1C: rangoC); var fil, k : rangoF; col : rangoC; begin for fil := 1 to DimF do for col := 1 to DimC do begin M3[fil,col] := 0; {inicializa valor a resolver} for k := 1 to Dim1C do M3[fil,col] := M3[fil,col] + M1 [fil,k] * M2 [k,col]; end.
Clase 8 Algoritmos, Datos y Programas 2013