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)