arreglo multidimensionales

5
HOJA 1 - Arr.Multidim. Facultad de Ciencias Exactas, Ingeniería y Agrimensura (U.N.R.) Escuela de Ciencias Exactas y Naturales Departamento de Matemática Cátedra: Computación (L.M. - P.M.) Prof. responsable: Mgr. María del Carmen Varaldo ---------------------------------------------------------------------------------------------------------------------- APUNTES DE CÁTEDRA : ARREGLOS MULTIDIMENSIONALES Extenderemos el uso de arreglos para facilitar la organización conveniente de datos relacionados entre sí en tablas y en listas de más de una dimensión. Por ejemplo, veremos cómo 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 subíndice del renglón (1,2 ó 3) y el subíndice de la columna (1,2 ó 3). TIPO DE ARREGLO (Multidimensional) ARRAY [subíndice 1 OF ARRAY [subíndice 2 OF... ARRAY[subíndice n OF tipo-elemento o ARRAY [subíndice 1 , subíndice 2 , , subíndice n OF tipo-elemento Subíndice i representa el tipo de subíndice de dimensión i de un arreglo multidimesional. Se puede especificar cualquier tipo escalar finito o subintervalo. El tipo-elemento puede ser cualquier tipo de datos estándar 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 subíndices pueden tomar los valores 1.2 ó 3. El arreglo TABLA consiste en tres dimensiones: el primer subíndice 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 [s 1, s 2, ..., s n Cada una de las s i es una expresión con subíndice que corresponde al tipo de subíndice de dimensión i. El valor de cada expresión determina qué elemento de nombre-arreglo se está manejando. EJEMPLOS : 1) TATETI [2, 3 selecciona el elemento del renglón 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 INSCRIPCIÓN: TYPE PLANTEL= (Norte, Sur, Centro, Oriente, Poniente); VAR INSCRIPCION: array [1..50, PLANTEL of integer;

Upload: el-elegido

Post on 07-Sep-2015

221 views

Category:

Documents


7 download

DESCRIPTION

arreglos en java

TRANSCRIPT

  • HOJA 1 - Arr.Multidim.

    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 OF... ARRAY[subndice n OF tipo-elemento

    o ARRAY [subndice1, subndice2, , subndicen 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 2 - Arr.Multidim.

    Este arreglo consiste en 250 elementos, INSCRIPCION [I, Centro representa el nmero de

    estudiantes en el curso I del plantel Centro.

    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 3 - 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 4 - 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 5 - 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 (idgpoXX) 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.