Está en la página 1de 7

INSTITUTO SUPERIOR DEL MILAGRO N 8207

PROGRAMACION I

UNIDAD 6 (PARTE 2)

MATRICES

ARRAYS BIDIMENSIONALES
Hasta ahora toda la informacin procesada se manipulaba con una sola columna o lista de
entrada, el llamado vector o array de una dimensin. Sin embargo, en numerosas ocasiones
es necesario trabajar con tablas que tengan diferentes columnas. Por ejemplo la siguiente
tabla:

Un sistema de estructurar los datos podra ser con cuatro arrays paralelos. Sin embargo
puede usarse un array de dos dimensiones que suele ser un mtodo ms eficiente
generalmente. En este caso se puede usar un array e dos dimensiones (dos subndices),
una dimensin para las filas (horizontales) y otra para las columnas (verticales).
Un array bidimensional (tabla o matriz) es un array con dos ndices, al igual que los vectores
que deben ser ordinales o tipo subrango.
Para localizar o almacenar un valor en el array se deben especificar dos posiciones (dos
subndices), uno para la fila y otro para la columna. Los elementos se referencian con el
formato:
T [3, 4]

elemento de la fila 3 y columna 4.

DECLARACIN DE LAS MATRICES


Al igual que en los arrays de una dimensin (los vectores), las matrices se crean con
declaraciones TYPE y VAR cuando un programa se codifica en Pascal:

Lic. Nstor Javier Hurtado

INSTITUTO SUPERIOR DEL MILAGRO N 8207

PROGRAMACION I

Se debe indicar:
Nombre del array.
Tipo del array (recuerde que todos los elementos del array deben ser del mismo tipo.
El rango permitido (primer y ltimo valor posible) por cada subndice.
Ejemplos:
1. Type
Tabla=array[1..25, 1..4] of real;
Var
Grados: Tabla;
2. Type
Matriz=array[1..10, 1..5] of real;
Cuenta=array[1..100, A..Z] of integer;
Dibujo=array[0..4, 0..9] of char;
Var
M:Matriz;
3. Type
Estudiantes=array[1..5, 1..4] of real;
Var
Clase: Estudiantes;
MANIPULACIN DE MATRICES
Asignacin de valores e impresin
program entrada;
type
matriz=array[1..10, 1..10] of byte;
var
mat: matriz;
m, n, i, j: byte;
begin
write(ingrese la cantidad de filas (max.10));
readln(m);
write(ingrese la cantidad de columnas (max.10));
readln(n);
for i:=1 to m do
begin
for j:=1 to n do
begin
write(ingrese un valor de la matriz:);
readln(mat[i, j]);
end;
end;
for i:=1 to m do
begin
for j:=1 to n do
begin
write(mat[i, j]);
end;
writeln;
end;
end.
Lic. Nstor Javier Hurtado

INSTITUTO SUPERIOR DEL MILAGRO N 8207

PROGRAMACION I

Recorrido por filas y columnas


Los elementos de la primera fila se procesan primero, a continuacin los de la segunda fila,
y as sucesivamente. Sea la matriz de 4 filas y 5 columnas:
for i:=1 to 4 do
begin
for j:=1 to 5 do
begin
write(mat[i, j]);
end;
writeln;
end;

Recorrido por filas

for j:=1 to 5 do
begin
for i:=1 to 4 do
begin
write(mat[i, j]);
end;
writeln;
end;

Recorrido por columnas

Diagonal principal y secundaria


Solo se aplica a matrices cuadradas, es decir con igual cantidad de filas y columnas. Sea la
matriz cuadrada de 5 filas y 5 columnas:
Diagonal principal
for i:=1 to 5 do
begin
for j:=1 to 5 do
begin
if i = j then
write(mat[i, j]);
end;
end;

Diagonal secundaria
for i:=1 to 5 do
begin
for j:=1 to 5 do
begin
if (i + j) = 6 then
write(mat[i, j]);
end;
end;

Lic. Nstor Javier Hurtado

INSTITUTO SUPERIOR DEL MILAGRO N 8207

PROGRAMACION I

Triangular superior e inferior con respecto a la diagonal principal


Solo se aplica a matrices cuadradas, es decir con igual cantidad de filas y columnas. Sea la
matriz cuadrada de 5 filas y 5 columnas:
Triangular superior
for i:=1 to 5 do
begin
for j:=1 to 5 do
begin
if i <= j then
write(mat[i, j]);
end;
end;

Triangular inferior
for i:=1 to 5 do
begin
for j:=1 to 5 do
begin
if i >= j then
write(mat[i, j]);
end;
end;

Eliminacin e insercin de una fila


Consiste en eliminar toda una fila de la matriz e insertar una nueva fila, en ambos casos el
usuario elige la fila a procesar. Sea la matriz cuadrada de 4 filas y 5 columnas:
write(Que fila desea eliminar 1 a 4);
readln(fil);
m:=4; n:=5;
for i := fil + 1 to m do
begin
for j:=1 to n do
begin
mat[i-1, j] := mat[i, j];
end;
end;
m:=m-1;

Lic. Nstor Javier Hurtado

Eliminacin de una fila

INSTITUTO SUPERIOR DEL MILAGRO N 8207

write(Que fila desea insertar 1 a 4);


readln(fil);
m:=4; n:=5;
for i := m downto fil do
begin
for j:=1 to n do
begin
mat[i+1, j] := mat[i, j];
end;
end;
m:=m+1;
for j:=1 to n do
begin
write(Ingrese el nuevo valor:);
readln(mat[fil, j]);
end;

PROGRAMACION I

Insercin de una nueva fila

Eliminacin e insercin de una columna


Consiste en eliminar toda una columna de la matriz e insertar una nueva columna, en ambos
casos el usuario elige la columna a procesar. Sea la matriz cuadrada de 4 filas y 5
columnas:
write(Que columna desea eliminar 1 a 5);
readln(col);
m:=4; n:=5;
for j := col + 1 to n do
begin
for i:=1 to m do
begin
mat[i, j-1] := mat[i, j];
end;
end;
n:=n-1;

Eliminacin de una columna

write(Que columna desea insertar 1 a 5);


readln(col);
m:=4; n:=5;
for j := n downto col do
begin
for i:=1 to m do
begin
mat[i, j+1] := mat[i, j];
end;
end;
n:=n+1;
for i:=1 to m do
begin
write(Ingrese el nuevo valor:);
readln(mat[i, col]);
end;

Insercin de una nueva columna

Lic. Nstor Javier Hurtado

INSTITUTO SUPERIOR DEL MILAGRO N 8207

PROGRAMACION I

PROBLEMA
Un instituto desea controlar los resultados de los alumnos en las diferentes asignaturas de
su carrera de Tcnico Superior en Anlisis de Sistemas. El programa debe leer las notas
obtenidas, almacenarlas en una matriz y visualizar en pantalla el promedio de cada alumno
y el promedio de cada asignatura.
Anlisis del problema:
Se necesita una matriz donde las filas representan a los alumnos y las columnas
representan a las asignaturas, un vector (MediaAlumnos) para almacenar las medias de
cada alumno y un vector (MediaAsignaturas) para almacenar las medias de cada
asignatura.

program ejemplo;
type
matriz=array[1..10, 1..5] of byte;
vector=array[1..10] of real;
var
A: matriz;
MediaAlumnos, MediaAsignatura: vector;
m, n, i, j, suma: byte;
begin
{--- Entrada de la matriz ---}
write('Ingrese la cantidad de alumnos (max.10): ');
readln(m);
write('Ingrese la cantidad de asignaturas (max.5): ');
readln(n);
for i:=1 to m do
begin
for j:=1 to n do
begin
write('Ingrese las notas del alumno ',i,': ');
readln(A[i,j]);
end;
end;
{--- Generacin del vector MediaAlumnos ---}
for i:=1 to m do
begin
Lic. Nstor Javier Hurtado

INSTITUTO SUPERIOR DEL MILAGRO N 8207

PROGRAMACION I

suma:=0;
for j:=1 to n do
begin
suma:=suma+A[i,j];
end;
MediaAlumnos[i]:=suma/n;
end;
{--- Generacin del vector MediaAsignaturas ---}
for j:=1 to n do
begin
suma:=0;
for i:=1 to m do
begin
suma:=suma+A[i,j];
end;
MediaAsignatura[j]:=suma/m;
end;
{--- Impresin pantalla de los arrays ---}
writeln; writeln;
for i:=1 to m do
begin
for j:=1 to n do
begin
write(A[i,j]:7);
end;
writeln(MediaAlumnos[i]:10:2);
end;
writeln;
for i:=1 to n do
begin
write(MediaAsignatura[i]:7:2);
end;
writeln; writeln;
readln;
end.

Lic. Nstor Javier Hurtado

También podría gustarte