Você está na página 1de 19

Teora 8

Estructuras de datos ARREGLO Matrices

Clase 8

Algoritmos, Datos y Programas 2013

Temas que veremos hoy


Concepto de arreglos bidimensionales

Presentacin de situaciones problemticas que justifican su uso


Anlisis de las operaciones mas utilizadas

Clase 8

Algoritmos, Datos y Programas 2013

Matrices: Motivacin
Supongamos que se quieren guardar las temperaturas registradas los 30 das de cada mes del ao 2012.

En qu estructura de datos nos conviene almacenarlos?


Si se piensa almacenar los datos en un VECTOR Cmo resolvemos el problema de conocer la temperatura mxima registrada? Cmo resolvemos el problema de conocer en qu mes se produjo la temperatura mas baja? Cmo resolvemos el problema de saber la temperatura promedio del 3er. mes del ao 2012?
Algoritmos, Datos y Programas 2013

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

Algoritmos, Datos y Programas 2013

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

Matrices: Aspectos a tener en cuenta


Cmo se declara una matriz?
Caractersticas de los ndices de la matriz. Cmo se accede al contenido de la matriz?

Tener en cuenta la dimensin fsica y lgica (de filas y columnas) de la matriz.


Operaciones permitidas para las matrices.

Clase 8

Algoritmos, Datos y Programas 2013

Matrices: Declaracin
Tipos de datos permitidos en Pascal:

Matriz = Array [ fila, columna ] of tipo_elementos;


Es posible indexar los elementos por un ndice que corresponde a cualquier tipo ordinal: Entero Los elementos de un arreglo pueden pertenecer a cualquier tipo de datos: Enteros Reales Caracteres

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:

Cargar una matriz


Recorrer una matriz mostrando sus elementos Suma de matrices

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

M1,M2,M3: matriz; DimFila : rangof; DimCol : rangoc;


Algoritmos, Datos y Programas 2013

Clase 8

Matrices: Carga de datos


Procedure Cargar ( var M:matriz; var DimFila: rangof; var DimCol: rangoc);
var i: rangof; j: rangoc;

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

Analizar soluciones alternativas. Se puede cargar por filas o por columnas


Clase 8 Algoritmos, Datos y Programas 2013

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

Begin For i:=1 to DimFila do For j:= 1 to DimCol do writeln(M[i,j]); End;

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

{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 For i:=1 to DimFila do For j:= 1 to DimCol do M3[i,j] := M1[i,j] + M2[i,j]; end;
Algoritmos, Datos y Programas 2013

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

Algoritmos, Datos y Programas 2013

Matrices: Eliminar una fila


Procedure EliminarFila ( var M: matriz; var DimFila: rangoF; DimCol: rangoC; fila: rangoF; var exito:boolean); var k : rangoC; f : rangoF; begin

{ verifica que el ndice es vlido, para efectuar la operacin}


if fila >0 and fila < DimFila then begin exito := true;

{desplaza todas las filas una posicin arriba}


for f := fila to DimFila-1 do

else

for k := 1 to DimCol do M [f, k] := M [f+1, k]; DimFila := DimFila - 1 end

{desplaza todas las columnas de una fila}

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

M3[1,1] = M1[1,1] * M2[1,1] + M1[1,2] *M2[2,1] + M1[1,3] * M2[3,1]

M3[1,2] = M1[1,1] * M2[2,1] + M1[1,2] *M2[2,2] + M1[1,3] * M2[2,3]


M3[2,1] = M1[2,1] * M2[1,1] + M1[2,2] *M2[2,1] + M1[2,3] * M2[3,1] M3[2,2] = M1[2,1] * M2[1,2] + M1[2,2] *M2[2,2] + M1[2,3] * M2[3,2]

De la misma manera se calculan: M3[3,1], M3[3,1], M3[4,1] M3[4,2]


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

M1,M2,M3: matriz; Dim1F,Dim2F: rangof; Dim1C,Dim2C: rangoc;


Algoritmos, Datos y Programas 2013

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

Você também pode gostar