Sie sind auf Seite 1von 5

Facultad de Ciencias Exactas, Ingeniera y Agrimensura (U.N.R.

)
Escuela de Ciencias Exactas y Naturales
Departamento de Matemtica
Ctedra: Computacin (L.M. - P.M.)
Prof. responsable: Mgr. Mara del Carmen Varaldo

----------------------------------------------------------------------------------------------------------------------

APUNTES DE CTEDRA: ARREGLOS MULTIDIMENSIONALES


Extenderemos el uso de arreglos para facilitar la organizacin conveniente de datos relacionados
entre s en tablas y en listas de ms de una dimensin. Por ejemplo, veremos cmo se puede utilizar
un arreglo bidimensional de tres renglones y tres columnas para representar un juego de TA-TE-TI.
Este arreglo tiene nueve elementos, cada uno de los cuales puede llamarse especificando el subndice
del rengln (1,2 3) y el subndice de la columna (1,2 3).

TIPO DE ARREGLO (Multidimensional)


ARRAY [subndice 1

OF ARRAY [subndice 2

o ARRAY [subndice1, subndice2, , subndicen

OF... ARRAY[subndice n OF tipo-elemento


OF tipo-elemento

Subndice i representa el tipo de subndice de dimensin i de un arreglo multidimesional. Se puede


especificar cualquier tipo escalar finito o subintervalo. El tipo-elemento puede ser cualquier tipo de
datos estndar o previamente definido.
EJEMPLO: Las declaraciones
var
TATETI: array [1..3,1..3 of char;
TABLA: array [1..7, 1..5, 1..6 of real;
definen el arreglo TATETI como un arreglo dimensional de 9 elementos. Ambos subndices pueden
tomar los valores 1.2 3. El arreglo TABLA consiste en tres dimensiones: el primer subndice puede
tomar los valores de 1 a 7; el segundo, de 1 a 5; y el tercero, de 1 a 6. Hay un total de 7x5x6, o sea
210 elementos en el arreglo TABLA.

MANEJO DE ELEMENTOS INDIVIDUALES DEL ARREGLO


nombre-arreglo [s1, s2,..., sn
Cada una de las si es una expresin con subndice que corresponde al tipo de subndice de
dimensin i. El valor de cada expresin determina qu elemento de nombre-arreglo se est
manejando.

EJEMPLOS:
1) TATETI [2, 3 selecciona el elemento del rengln 2, columna 3 del arreglo TATETI
(estamos pensando en MATRICES).
2) Una universidad ofrece 50 cursos en cada uno de sus 5 planteles. Podemos almacenar las
inscripciones a estos cursos en el arreglo INSCRIPCIN:
TYPE
PLANTEL= (Norte, Sur, Centro, Oriente, Poniente);
VAR
INSCRIPCION: array [1..50, PLANTEL of integer;
HOJA 1 - Arr.Multidim.

Este arreglo consiste en 250 elementos, INSCRIPCION [I, Centro


estudiantes en el curso I del plantel Centro.

representa el nmero de

3) Si deseamos tener una informacin de inscripcin dividida segn el grado que cursa cada
estudiante de la clase, necesitaramos un arreglo tridimensional con 1000 elementos:
TYPE
PLANTEL= (Norte, Sur, Centro, Oriente, Poniente);
CLASE = (Primero, Segundo, Tercero, Cuarto);
VAR
ENORDEN: array [1..50, PLANTEL, CLASE
of integer;
La referencia con subndice al arreglo ENORDEN [I, Norte, Tercero
representara el
nmero de estudiantes de tercer grado que toman el curso I en el plantel Norte.
4) El segmento de programa
sumaclase:=0;
for orden:= Primero to Cuarto do
sumaclase:= sumaclase + enorden [1, Centro, Orden ;
calcula el nmero total de estudiantes de todos los grados en el curso 1 del plantel Centro.

EJERCICIOS:
Dado el arreglo ENORDEN escriba segmentos de programa para llevar a cabo las siguientes
operaciones:
a) Encuentre el nmero de estudiantes de tercer grado en todas las clases del plantel Sur. Los
estudiantes se contarn una vez en cada curso en el cual estn inscriptos.
b) Calcule e imprima el nmero de estudiantes avanzados en todos los cursos de cada plantel,
as como el nmero total de estudiantes avanzados inscriptos. (Los estudiantes avanzados son los de
tercer y cuarto grados). Nuevamente los estudiantes se contarn una vez en cada curso en el cual estn
inscriptos.

EJEMPLO
Este segmento de programa muestra el ingreso de datos en el arreglo TATETI y una impresin del
tablero correspondiente.
writeln (lst, ------------);
for renglon := 1 to 3 do
begin
{lee el rengln corriente}
for columna:= 1 to 3 do
begin
readln (TATETI [renglon, columna );
write (lst, TATETI [renglon, columna :3);
end,
writeln (lst);
writeln (lst, ------------);
end;

HOJA 2 - Arr.Multidim.

EJEMPLO SOBRE ARREGLOS Y PROCEDIMIENTOS


PROBLEMA: PROGRAMACION DE SALONES
Un edificio de una escuela secundaria tiene tres pisos, cada uno con cinco salones de varios
tamaos. Cada semestre la escuela secundaria debe asignar grupos a los salones del edificio.
Escribiremos un programa que, dada la capacidad de cada saln del edificio y el tamao de cada
grupo, trate de encontrar una asignacin de salones satisfactoria que acomodar a todos los grupos en
el edificio. Para aquellos grupos que no puedan ubicarse, el programa imprimir el mensaje
NO HAY SALN DISPONIBLE
Representaremos la capacidad del edificio con un arreglo bidimensional de 3 x 5. Proponemos el
siguiente programa principal:
program ASIGNADOR;
{Acomoda grupos utilizando capacidad de salones y requerimientos del grupo}
const
cuentapisos=3;
cuentasal=5;
type
edificio=array [1..cuentapisos, 1..cuentasal] of integer;
var
capacidad: edificio;
piso, saln: integer;
{Insertar aqu los procedimientos IMPRECAP, PROCSAL, NOASIGNADO}
begin
{Introduce la tabla de capacidad de salones}
for piso:= 1 to cuentapisos do
begin
for saln:= 1 to cuentasal do
begin
write (capacidad [ , piso, , , saln , ]=);
readln (capacidad [piso, saln]);
end;
writeln;
end;
{Imprime la tabla de capacidad de salones}
IMPRECAP(capacidad);
{Hace las asignaciones de grupos}
PROCSAL(capacidad);
{Lista los salones no asignados y sus capacidades}
NOASIGNADO(capacidad);
end.
El procedimiento IMPRECAP imprime el contenido de la tabla de capacidades de salones.
El procedimiento PROCSAL lee y procesa cada requerimiento de saln, el cual consiste en un
nmero de identificacin del grupo y del tamao del mismo, determina el nmero de saln que va a
HOJA 3 - Arr.Multidim.

ser asignado (si hay alguno disponible) e imprime el nmero de saln.


El procedimiento NOASIGNADO imprime el nmero y la capacidad de cada saln no asignado.
Describiremos el procedimiento PROCSAL. Se pide al alumno que complete el programa
escribiendo los procedimientos IMPRECAP y NOASIGNADO.
procedure PROCSAL ( var capacidad: edificio);
{ lee y procesa cada requerimiento de saln}
{ parmetro de actualizacin}
{ capacidad - tabla de capacidades de salones }
var
idgpo = string[10 ;
grupo, tamao, numsal :integer;
encuentra : boolean;
piso , saln, j : integer;
{procedimiento ASIGNA : asigna el saln ms adecuado}
procedimiento ASIGNA(capacidad:edificio;tamao : integer; var piso, saln: integer;
var encuentra :boolean);
{parmetros de entrada
capacidad - arreglo por explorar
tamao - tamao del grupo que se va a colocar
parmetros de salida
piso - piso del saln asignado
saln - nmero del saln en el piso del saln asignado
encuentra - indica xito (true) o fracaso (false)

var
rengln, columna :integer;
begin
encuentra:=false;
{explora cada piso para el mejor saln}
for rengln:=1 to cuentapisos do
for columna:=1 to cuentasal do
if capacidad [rengln, columna >= tamao then
if not encuentra then
{primer saln adecuado - hace la asignacin inicial}
begin
piso:=rengln;
saln:=columna;
encuentra:= true;
end
else if capacidad[rengln,columna] < capacidad [piso,saln] then
{saln ms adecuado - cambia la asignacin de saln}
begin
piso:=rengln;
saln:=columna;
end; {if}
end; {ASIGNA}

HOJA 4 - Arr.Multidim.

begin

{PROCSAL}

{procesa cada requerimiento de saln}


writeln(TABLA DE ASIGNACION DE SALONES);
wtiteln(ID GPO:11, TAMAO:10,SALN NO.:10,CAPACIDAD:10);
repeat
{lee cada clave de grupo y su tamao}
write(Clave (XX para finalizar la bsqueda de salones): );
readln(idgpo);
write(Tamao ( 0 para finalizar): );
readln (tamao),
if (idgpo<>XX) then
{asigna un saln si es posible}
ASIGNA(capacidad, tamao, piso, saln, encuentra);
{imprime el saln asignado o el mensaje NO DISPONIBLE}
if encuentra then
begin
{calcula el nmero del saln y lo aparta}
numsal:= piso * 100 + saln;
writeln(idgpo:11,tamao:10,numsal:10,capacidad[piso,saln] :10);
capacidad[piso,saln]:= - capacidad[piso,saln];
end
else writeln (idgpo: 11, tamao: 10, :7, NO HAY SALN DISPONIBLE);
until (idgpo=XX);
end; {PROCSAL}

Bibliografa:
E. Koffman et al. , PASCAL. Introduccin al lenguaje y resolucin de problemas con programacin
estructurada, Ed. Addison-Wesley Iberoamaericana.

HOJA 5 - Arr.Multidim.

Das könnte Ihnen auch gefallen