Programación I - 2011 Arreglos II- Matrices. Un arreglo (matriz) es una estructura de datos...

Post on 28-Jan-2016

219 views 0 download

Transcript of Programación I - 2011 Arreglos II- Matrices. Un arreglo (matriz) es una estructura de datos...

Programación I - 2011Programación I - 2011

Arreglos II- Matrices

Un arreglo (matriz) es una estructura de datos compuesta que permite acceder a cada componente por dos variables índice, que da la posición en la estructura (fila,columna) para acceder al componente.

MatrizMatriz

Un tipo de dato Matriz es una colección ordenada e indexada de elementos.

MatrizMatrizEstructura homogénea: los datos que almacena son del mismo tipo.

Estructura estática: su tamaño no varía al agregar o sacar elementos de la misma.

Estructura indizada: permite recuperar cualquier elemento del arreglo indicando su posición (fila,columna).

DeclaraciónDeclaración

Program uno; type ventas= array[rango,rango] of tipo;

integercharbooleanenumerativo

integercharbooleanenumerativorealregistros

Ejemplo:type ventas= array [1..12,1..31] of integer;

OperacionesOperaciones

m1:= m2;

Comparar dos matrices de manera directa

If (m1 = m2) then … NO!

Lectura de una matriz read(m1); NO!

Escritura de una matriz write(m1); NO!

Asignar una matriz a otra

EjercicioEjercicio

Dada una Matriz A de N x M de números enteros (N y M deben ser constantes definidas en el programa), se pide realizar: a)Realizar un módulo que reciba la matriz A, un valor V y que retorne dicha matriz en la que se ha eliminado la V-ésima fila.

a)Realizar un módulo que reciba la matriz A, un vector B, un valor V y que inserte el vector B como columna V-ésima de la matriz A.

Entendiendo el enunciadoEntendiendo el enunciadoInciso a)a)Realizar un módulo que reciba la matriz A, un valor V y que retorne dicha matriz en la que se ha eliminado la V-ésima fila.

El módulo recibe una matriz, con lo cual deberá recibir la dimensión lógica de filas ó columnas.

Asumimos que la matriz que hemos de tratar está cargada con “filas completas”, con lo cual sólo recibiremos la matriz y la dimensión lógica de filas (pues las columnas por filas estarán completas).

X x x x x x x

X x x x x x x

X x x x x x x

Entendiendo el enunciadoEntendiendo el enunciadoTambién recibirá un valor V como dato, para eliminar la fila V de la matriz.

Sólo deberíamos controlar la dimensión lógica por filas. Para tal fin utilizaremos una variable:

VAR dimLogFila: Integer;

A B C D E F G

H I J K L M N

Ñ O P Q R S T

U V W X Y Z @

A B C D E F G

H I J K L M N

U V W X Y Z @

dimLogFila = 4 dimLogFila = 3

V

Entendiendo el enunciadoEntendiendo el enunciado

X

X

X

X

X

X

X

X

X

X

X

X

X

X

X

Inciso b) Realizar un módulo que reciba la matriz A, un vector B, un valor V y que inserte el vector B como columna V-ésima de la matriz A.

Se debe implementar un módulo que reciba una matriz, la dimensión lógica de columnas, un vector B, y un valor N que representa el número de fila en donde debemos insertar dicho vector. Debemos comprender que la matriz que hemos de tratar está cargada con “columnas completas”.

Entendiendo el enunciadoEntendiendo el enunciado

También recibirá un valor V y un vector B, para insertar B en la posición V.

Sólo deberíamos controlar la dimensión lógica por columnas.Para tal fin utilizaremos una variable:

VAR dimLogColumna: Integer;

A F K

B G L

C H M

D I N

E J Ñ

A F O K

B G P L

C H Q M

D I R N

E J S Ñ

dimLogColumna = 3 dimLogColumna = 4

VO

P

Q

R

S

B V

Resolviendo el ejercicioResolviendo el ejercicio

Program ejercicio;const N = 100; M = 100;type

matriz = array [1..N, 1..M] of integer;vector = array [1..N] of Integer;

varA: matriz;

B: vector;dimLogFila, dimLogColumna: integer;

procedure eliminar (var A: matriz; var dimLogFila: integer; V: integer);var

i,j: integer;begin if ( V > 0 ) and ( V <= dimLogFila) then begin if ( V < dimLogFila ) then for i:= V to (dimLogFila - 1) do for j:= 1 to M do A[i,j]:= A[i+1,j]; dimLogFila:= dimLogFila - 1; end;end;

Módulo para eliminar filaMódulo para eliminar fila

Solución inciso a)

procedure insertar (var A: matriz; var dimLogColumna: integer; B: vector; dimLogVector: integer; V: integer);var

i, j, m : integer;begin

if ( dimLogColumna < M ) and ( V > 0 ) and ( V <= DimLogColumna ) and (dimLogVector = N) then begin dimLogColumna := dimLogColumna + 1; for i:= (dimLogColumna - 1) downto V do for j:= 1 to dimLogVector do A[j,i + 1]:= A[j, i]; for m:= 1 to DimLogVector do A[m, V] := B[m]; end;end;

Módulo para insertar columnaMódulo para insertar columna

Solución inciso b)