combinados

15
Elementos de Programación / Prof. Carlos Iván Chesñevar / UNS, 1999 Pág.1 EJERCICIOS RESUELTOS DE ELEMENTOS DE PROGRAMACIÓN TEMA: CONSTRUCTORES ARRAY, RECORD, SET Y FILE Los ejercicios aquí presentados requieren para su resolución el uso de uno o más constructores combinados. Es conveniente primeramente intentar resolver los enunciados sin mirar las soluciones propuestas. Las soluciones que se indican son tentativas; cualquier error o comentario al respecto se recomienda dirigirse a la Cátedra. Ejercicio 1 (Sedería): Una sedería fabrica cuatro tipos de telas (lino, seda, algodon, poliester), cada una de ellas en diferentes colores (rojo, azul o verde). Para cada tipo de tela de un color determinado, la sedería guarda la información de cuántos rollos de tela hay disponibles, y cuál es el precio unitario de cada rollo. Ejemplo: para tela de lino, color rojo, hay 55 rollos disponibles, y su precio unitario es $10,50 Se pide: a) Defina un tipo de dato TStockSederia para representar la información anterior b) Escriba una función TelaConMayorExistencia, que devuelva el nombre de la tela para la cual hay más cantidad de rollos disponibles (ej: si hay 40 rollos de lino, 30 de seda, 50 de algodon y 85 de poliéster, la tela con mayor existencia será poliester). Note que no importa el color, sino el tipo de tela. c) Escriba un procedimiento ColoresAbundantes, que dado el stock de la sedería determine qué colores son abundantes (sin importar el tipo de tela). Un color se dice abundante si hay con más de 100 rollos disponibles de ese color. d) Escriba un procedimiento MostrarStock que muestre en pantalla el stock disponible, de la manera en que se muestra en el ejemplo de abajo. Stock de telas disponible Tela: Lino Color : Rojo Cant.Rollos: 55 Prec.Unit: 1,30 Tela: Lino Color: Azul Cant.Rollos: 30 Prec.Unit: 1,50 Tela : Poliester Color: Verde Cant.Rollos: 1 Prec.Unit: 5,30 Desarrollo de soluciones tentativas a) TYPE TColores = (rojo, azul, verde); TTelas = (lino, seda, algodon, poliester); TPrecio = real; TInfoTela = RECORD PrecioUnit: TPrecio; Cantidad: TCantidad; END; TStock = ARRAY [TColores, TTelas] OF TInfoTela; VAR

description

ejercicios combinados

Transcript of combinados

  • Elementos de Programacin / Prof. Carlos Ivn Chesevar / UNS, 1999 Pg.1

    EJERCICIOS RESUELTOS DE ELEMENTOS DE PROGRAMACIN

    TEMA: CONSTRUCTORES ARRAY, RECORD, SET Y FILE

    Los ejercicios aqu presentados requieren para su resolucin el uso de uno o ms constructores combinados. Es conveniente primeramente intentar resolver los enunciados sin mirar las soluciones propuestas. Las soluciones que se indican son tentativas; cualquier error o comentario al respecto se recomienda dirigirse a la Ctedra.

    Ejercicio 1 (Sedera): Una sedera fabrica cuatro tipos de telas (lino, seda, algodon, poliester), cada una de ellas en diferentes colores (rojo, azul o verde). Para cada tipo de tela de un color determinado, la sedera guarda la informacin de cuntos rollos de tela hay disponibles, y cul es el precio unitario de cada rollo. Ejemplo: para tela de lino, color rojo, hay 55 rollos disponibles, y su precio unitario es $10,50

    Se pide:

    a) Defina un tipo de dato TStockSederia para representar la informacin anterior b) Escriba una funcin TelaConMayorExistencia, que devuelva el nombre de la tela para la

    cual hay ms cantidad de rollos disponibles (ej: si hay 40 rollos de lino, 30 de seda, 50 de algodon y 85 de polister, la tela con mayor existencia ser poliester). Note que no importa el color, sino el tipo de tela.

    c) Escriba un procedimiento ColoresAbundantes, que dado el stock de la sedera determine qu colores son abundantes (sin importar el tipo de tela). Un color se dice abundante si hay con ms de 100 rollos disponibles de ese color.

    d) Escriba un procedimiento MostrarStock que muestre en pantalla el stock disponible, de la manera en que se muestra en el ejemplo de abajo.

    Stock de telas disponible

    Tela: Lino Color : Rojo Cant.Rollos: 55 Prec.Unit: 1,30 Tela: Lino Color: Azul Cant.Rollos: 30 Prec.Unit: 1,50

    Tela : Poliester Color: Verde Cant.Rollos: 1 Prec.Unit: 5,30

    Desarrollo de soluciones tentativas

    a) TYPE TColores = (rojo, azul, verde); TTelas = (lino, seda, algodon, poliester); TPrecio = real; TInfoTela = RECORD PrecioUnit: TPrecio; Cantidad: TCantidad; END; TStock = ARRAY [TColores, TTelas] OF TInfoTela; VAR

  • Elementos de Programacin / Prof. Carlos Ivn Chesevar / UNS, 1999 Pg.2

    S:TStock;

    b)

    FUNCTION TelaConMayorExistencia( VAR S:TStock ): TTelas; Var Tela: TTelas; CantidadRollosTela:TCantidad; BEGIN CantRollosMaxima := 0; FOR Tela:=lino TO poliester DO BEGIN CantidadRollosTela := ContarRollos( S, Tela) IF CantidadRollosTela > CantRollosMaxima THEN BEGIN TelaConMayorExistencia:= i; CantRollosMaxima := CantidadRollosTela; END; {if} END {for} END: {function}

    la funcion auxiliar ContarRollos seria

    FUNCTION ContarRollos ( VAR S:TStock; Tela:TTelas): TCantidad; Var Color:TColores; Suma:TCantidad; BEGIN Suma:=0; FOR Color:=rojo TO verde DO Suma:=Suma + S[Tela,Color].Cantidad; ContarRollos:=Suma; END: {function}

    c) definimos inicialmente una funcin auxiliar ContarRollosPorColor, que nos permitir determinar cuntos rollos hay en existencia de un color determinado.

    FUNCTION ContarRollosPorColor(VAR S:TStock; C:TColores):TCantidad; VAR ContarRollosPorColor:TCantidad; BEGIN Suma:=0; FOR Tela:=lino TO poliester DO Suma:=Suma + S[Tela,C].Cantidad; ContarRollosPorColor:=Suma; END; {function}

    para nuestro procedimiento, deberemos ademas contar con una declaracion adicional en la seccion TYPE

    TCjtoColores = SET OF TColores;

    PROCEDURE ColoresAbundantes( VAR S:TStock; VAR CjtoColores: TCjtoColores); VAR BEGIN

  • Elementos de Programacin / Prof. Carlos Ivn Chesevar / UNS, 1999 Pg.3

    CjtoColores:= [ ]; FOR c:= rojo TO verde DO IF ContarRollosPorColor(S, c ) > 100 THEN CjtoColores:= CjtoColores + [ c]; END;

    d) Veamos como mostrar el stock pedido. Dado que se trata de una matriz, y debemos mostrar todos sus elementos sin excepcin, lo ms sencillo en este caso es trabajar con dos bucles FOR anidados.

    PROCEDURE MostrarStock( VAR S:TSTock); BEGIN writeln( Stock de Telas Disponibles ); FOR i:= lino TO poliester DO BEGIN FOR j:= rojo TO verde DO BEGIN write( Tela: ); MostrarTela(i); write( ); write( Color: ); MostrarColor(j); write( ); write(Cantidad de rollos:); write(S[ i, j ].Cantidad : 5);

    write(Precio unitario:); write(S[ i, j ].PrecioUnit: 10:5);

    END; writeln; END; END;

    Ntese que debern escribirse procedimientos auxiliares para mostrar colores y telas, dado que stos son tipos enumerados definidos por el usuario. Como ejemplo indicamos cmo sera MostrarTela

    PROCEDURE MostrarTela( i : TTelas); BEGIN CASE i OF lino: write( lino ); algodon: write(algodon); seda: write (seda); poliester: write( poliester); END;

  • Elementos de Programacin / Prof. Carlos Ivn Chesevar / UNS, 1999 Pg.4

    Ejercicio 2 (Automviles): Un concesionario automotor maneja compra y venta de automviles, cada uno de los cuales tiene las siguientes caractersticas: a) un color (rojo, azul o verde). b) un modelo (de 1900 a 2100) c) una patente (3 letras y 3 dgitos) d) una marca, que tiene como mximo 20 caracteres (ej: Ford , Renault, etc.). e) un nombre de fantasia que tiene como mximo 20 caracteres (ej: Fiesta, Clio , etc.).

    El concesionario cuenta con un archivo AutosDisponibles, que guarda informacin sobre todos los autos que se encuentran disponibles a la venta.

    Cada persona que quiere comprar un automovil le indica al concesionario una marca y un nombre de fantasa determinados (ej: Ford y Fiesta), y un conjunto de colores que considera aceptables (ej: rojo y azul).

    a) Defina un tipo de dato TAutomovil para representar la informacin correspondiente a un automvil.

    b) Defina un tipo de dato TArchivoAutos para representar el archivo que almacena la informacin de los autos que el concesionario tiene para la venta.

    c) Escriba un procedimiento ContarSegunMarca, que dada una marca determinada (ej Ford) determine cuntos autos existen de esa marca en el stock.

    d) Suponga que un cliente desea comprar un auto. Para indicar sus preferencias, el cliente indica un conjunto de modelos posibles (ej: 1990, 1991 y 1992), y un conjunto de colores posibles (ej: rojo y azul). Escriba un procedimiento MostrarSegunPreferencias que muestre por pantalla todos los automoviles disponibles que pudieran satisfacer las expectativas del cliente. Ejemplo:

    Ford Fiesta, azul, modelo 1990 Renault Clio, rojo, modelo 1992 .

    Desarrollo de soluciones tentativas

    a)

    TYPE TColores = (rojo, azul, verde); TModelo = 1900..2100; TPatente = STRING [6]; TCadena = STRING [20]; TInfoAuto = RECORD Color:TColores; Modelo:TModelo; Patente:TPatente; Marca:TCadena; NombreFantasia: TCadena; END;

  • Elementos de Programacin / Prof. Carlos Ivn Chesevar / UNS, 1999 Pg.5

    b) Hay que agregar a la declaracion de tipos

    TYPE TArchivoAutos= FILE OF TInfoAuto

    y declarar la variable VAR AutosDisponibles:TArchivoAutos;

    c)

    FUNCTION ContarSegunMarca(VAR AutosDisponibles:TArchivoAutos; MarcaBuscada:TMarca): TCantidad; BEGIN reset(AutosDisponibles); Contador:=0; WHILE NOT EOF (AutosDisponibles) DO BEGIN read(AutosDisponibles, Auto); IF Auto.Marca = MarcaBuscada THEN Contador:=Contador+1; END; ContarSegunMarca:=Contador; close(AutosDisponibles); {requerido por Turbo Pascal} END;

    d)

    Deberemos asumir que contamos con los tipos TCjtoColores = SET OF TColores; TCjtoModelos = SET OF TModelos;

    PROCEDURE MostrarSegunPreferencias(VAR AutosDisponibles:TArchivoAutos; CjtoPosibleColores: TCjtoColores;

    CjtoPosibleModelos: TCjtoModelos); VAR Auto:TInfoAuto; BEGIN reset(AutosDisponibles); WHILE NOT EOF(AutosDisponibles) DO BEGIN read(AutosDisponibles,Auto); IF (Auto.Color IN CjtoPosiblesColores) OR (Auto.Modelo IN CjtoPosibleModelos) THEN MostrarAuto(Auto); END END;

    donde el procedimiento MostrarAuto sera como el siguiente:

  • Elementos de Programacin / Prof. Carlos Ivn Chesevar / UNS, 1999 Pg.6

    PROCEDURE MostrarAuto(Auto: TInfoAuto); BEGIN WITH Auto DO BEGIN

    write(Marca, , NombreFantasia,); write( ); MostrarColor(Color); write( ,Modelo); END

    writeln; END;

    donde MostrarColor sera un procedimiento anlogo a MostrarTela en el ejercicio 1. Ejercicio 3 (Florera): La florera ArcoIris prepara ramos de flores, utilizando rosas, claveles, lilas, azucenas y violetas. Se reciben pedidos y se realizan envos para todo el pas. Para cada ramo que se prepara, la florera conserva los siguientes datos: a)

    Variedades de flores que contiene el ramo. Obs: un ramo puede tener distintas variedades de flores (ej: azucenas, violetas y lilas). b)

    Cantidad total de flores del ramo (entre 12 y 60). c)

    Remitente (persona que realiza el pedido de un ramo): Se guarda nombre, apellido, y domicilio. Si el remitente reside en Baha Blanca, se guarda adems su telfono (si no tiene telfono, se guarda 0). Si reside en otro lugar del pas, se guarda la ciudad de residencia y su cdigo postal. d)

    Destinatario (persona a la que est destinado el ramo): la informacin que se guarda es anloga a la del remitente.

    Cada ramo de flores preparado durante el transcurso de un da tiene asociado un nmero (1,2,3,etc.) correspondiente al orden en que fue realizado el pedido. La cantidad mxima de ramos que se preparan diariamente es 50.

    3.1) Defina un tipo TRamo, para guardar los datos anteriores correspondientes a un ramo de flores.

    3.2) Defina un tipo TRamosDelDia, para representar la informacin de todos los ramos de flores que fueron enviados en el transcurso de un da.

    3.3) Escriba un procedimiento MostrarCaracteristicasRamo, que dada una variable R de tipo TRamo, permita mostrar en pantalla los tipos de flores que conforman el ramo, y su cantidad. Ej: tras invocar este procedimiento para un cierto ramo R, podra aparecer en pantalla el texto:

    Variedades de flores del ramo: claveles, lilas. Cantidad total de flores: 15

    3.4) Suponga que en la variable T de tipo TRamosDelDia ya se ha almacenado la informacin de todos los ramos lorales preparados durante un da. Escriba un procedimiento ListarDestinatariosTel, que reciba T como dato de entrada, e imprima en pantalla toda la informacin correspondiente a todos los destinatarios residentes en B.Blanca que tienen telfono.

    Desarrollo de una solucin tentativa:

  • Elementos de Programacin / Prof. Carlos Ivn Chesevar / UNS, 1999 Pg.7

    3.1) TFlores = (rosas, claveles, lilas, azucenas, violetas); TCjtoFlores = set of TFlores; TLugar = (BahiaBlanca,OtroLugar); TCadena = packed array [1..50] of char; TNatural = 0..MaxInt; TPersona = Record

    Nombre,Apellido,Domicilio:TCadena; Case LugarOrigen:TLugar of

    BahiaBlanca: (Telefono: TNatural); OtroLugar: (Ciudad:TCadena;

    CodPostal:TNatural); End;

    TRamo = Record Flores:TCjtoFlores; CantFlores:12..50; Remitente: TPersona; Destinatario: TPersona; End;

    3.2)

    TRamosDelDia = RECORD UltimoRamo: 0..TopeRamosDia; Eltos: ARRAY [1..TopeRamosDia] OF Tramo; END;

    3.3)

    PROCEDURE MostrarCaracteristicasRamo(VAR R:TRamo);

    PROCEDURE MostrarFlor(i:TFlores); BEGIN CASE i OF claveles: write('claveles'); lilas: write('lilas'); ....

    END; END;

    PROCEDURE MostrarCjto(C:TCjtoFlores); BEGIN FOR i:=claveles TO lilas DO IF i IN C THEN MostrarFlor(i) END;

    BEGIN write('Datos del ramo:'); write('Flores que lo forman:'); MostrarCjto(R.Flores); writeln; writeln('Cant. de flores:',R.CantFlores);

  • Elementos de Programacin / Prof. Carlos Ivn Chesevar / UNS, 1999 Pg.8

    END;

    3.4)

    PROCEDURE ListarDestinatariosTel (VAR T:TRamosDelDia); VAR i:TIndice; BEGIN FOR i:=1 TO T.UltimoElto DO WITH T[i] DO IF LugarDeOrigen=BahiaBlanca THEN IF Telefono0 THEN writeln(Nombre,Apellido,Domicilio,Telefono)

    Ejercicio 4 (Archivos): Se dispone de dos archivos F:TArchivoCaracteres y G:TArchivoCadenas, definidos como sigue:

    CONST TopeCad = 20; TYPE TArchivoCaracteres = file of char; TCadena = packed array [1..TopeCad] of char; TArchivoCadenas = file of TCadena;

    El archivo F contiene nicamente caracteres entre la A y la Z, y el caracter !. Se asume que el caracter `!separa cadenas de caracteres entre s, y que todas las cadenas tienen longitud menor o igual a TopeCad. Ejemplo: el contenido de F podra ser

    F ELLA!LA!CASA!COMPUTADORA!ALA!APERO!JOSE!LAERTES!

    Generar un archivo G que contenga todas las palabras almacenadas en F que tengan entre sus letras las vocales A y E. Para el ejemplo dado debera almacenarse en G: ELLA APERO LAERTES

    Desarrollo de una solucin tentativa:

    Nuestra idea consisitir en recorrer cada componente del archivo F, e ir armando palabras que sern almacenadas en una variable auxiliar Cad:TCadena. Si las letras A y E estn presentes en Cad, entonces dicha cadena ser guardada como componente en el archivo G.

    PROCEDURE GenerarArchivo( F:TArchivoCaracteres; VAR G:TArchivoCadenas); Var Cad: TCadena; ConjuntoLetrasEnCadena: SET OF Char; BEGIN reset(F); rewrite(G); read(F, Caracter);

  • Elementos de Programacin / Prof. Carlos Ivn Chesevar / UNS, 1999 Pg.9

    WHILE NOT EOF(F) DO BEGIN Posicion:=1; ConjuntoLetrasCadena:=[ ]; Cad := ; {Cad se inicializa en 20 blancos} WHILE Caracter! DO {el caracter forma parte de palabra? } BEGIN Cad[ Posicion] := Caracter; {se guarda el caracter en posicion Posicion} read(F, Caracter); {se lee otro caracter } Posicion:= Posicion + 1; {se pasa a otra posicion } ConjuntoLetrasCadena := ConjuntoLetrasCadena + [Caracter]; END; {se va guardando el conjunto de letras usadas } read(F,Caracter); IF [A, E] < ConjuntoLetrasCadena {si la A y la E estan en ese conjunto } THEN

    write(G, A); END; close(F); {close es requerido por Turbo Pascal } close(G); END;

    Ejercicio 5 (Librera): Una librera mantiene el stock de sus artculos en un archivo Stock. Por cada artculo mantiene la siguiente informacin:

    * Cdigo art. : Un nmero de 4 dgitos (ej: 8321) * Nombre: El nombre del artculo. (ej: Lanzaminas) * Precio de venta : Un nmero de 3 dgitos enteros y 2 decimales (ej: 32.1) * Cantidad en existencia: Cantidad existente (en unidades) del artculo (ej: 300). * Rubro: El rubro al que pertenece el artculo. Esta librera maneja los siguientes rubros: Utiles, papelera comercial, papelera escolar, textos. Para los artculos pertenecientes al rubro textos se almacena adems: nombre del autor y editorial. Para los artculos pertenecientes al rubro

    papelera comercial se almacena adems el nombre de la imprenta que lo fabrica.

    5.1) Defina las estructuras de datos que considere convenientes para representar esta informacin.

    Desarrollo de una solucin tentativa:

    5.1)

    TYPE TCodigo = 10009999; TCadena = string[ 20 ]; TPrecio = real; TCantidad = 0..MaxInt; TRubro = (utiles, pap_comercial, pap_escolar, textos);

    TArticulo = RECORD Codigo: TCodigo; Precio: TPrecio;

  • Elementos de Programacin / Prof. Carlos Ivn Chesevar / UNS, 1999 Pg.10

    Nombre: TCadena; Cant: TCantidad; CASE Rubro:TRubro OF

    textos : ( autor: TCadena; editorial: TCadena ); pap_comercial: ( imprenta: TCadena); utiles, pap_escolar: (); END; END;

    TArchivoArticulos = FILE OF TArticulo;

    Ejercicio 6 (Restaurant) El restaurant Tallarines Al Dente, ubicado en Lavalle 333, posee las siguientes caractersticas:

    - 60 mesas, distinguidas con nmeros del 1 al 60. Cada mesa est fabricada en alguna de las siguientes maderas: nogal, cedro o pino. Cada mesa tiene entre 3 y 6 sillas.

    - Cierta cantidad de empleados (cantidad inferior a 20). Cada empleado est identificado con un nmero de legajo (1,2,3, etc.) Cada empleado puede ser o bien cocinero, o bien mozo o bien un integrante del personal de limpieza. Para todos los empleados se desea almacenar nombre y DNI. Si el empleado es un cocinero, se desea almacenar adems cules son sus especialidades en la cocina (carnes, pastas, embutidos, y/o ensaladas). Si el empleado es un mozo, se desea almacenar tambin cules son los idiomas extranjeros que habla (ingls, francs y/o alemn).

    a) Defina una estructura de dato TEmpleado para representar los datos de un empleado del restaurant. b) Defina una estructura de dato TMesa para representar los datos de una mesa del restaurant. c) Defina una estructura TDatosEmpleados para representar los datos de todos los empleados del restaurant. d) Defina una estructura TDatosMesas para representar los datos de todas las mesas del restaurant. e) Escriba un procedimiento ListarMozosAngloParlantes que reciba como dato de entrada una variable T:TDatosEmpleados, y genere un listado de todos los mozos que hablan ingls (includos aquellos mozos que tambin hablen otros idiomas extranjeros). Ej:

    Legajo: 5 Nombre: Jose Rodriguez Idiomas que habla: ingles

    Legajo: 8 Nombre: Juan Perez Idiomas que habla: ingles, frances, alemn ....

    y as para todos los mozos restantes que verifiquen las condiciones pedidas.

    f) Escriba un procedimiento IngresarDatosMesa, que permita ingresar las caractersticas de una variable M de tipo TMesa (el procedimiento deber permitir ingresar el material con que est hecha la mesa, y la cantidad de sillas que posee).

  • Elementos de Programacin / Prof. Carlos Ivn Chesevar / UNS, 1999 Pg.11

    Desarrollo de una solucin tentativa:

    a), b), c) y d) CONST TopeLegajo = 20; TYPE TLegajo = 1.. TopeLegajo; TClaseEmpleado = (cocinero, mozo, limpieza); TClaseMesa = (nogal, cedro,pino); TEspecialidades = (carnes, pastas, embutidos, ensaladas); TCjtoEspecialidades = SET OF TEspecialidades; TIdiomas = (ingles, frances, aleman); TCjtoIdiomas = SET OF TIdiomas; TCadena = string[20]; TNombre = TCadena; TDNI = TCadena;

    TEmpleado = RECORD EmpleadoExistente: boolean; {true si el empleado existe, false caso contrario} Nombre:TCadena; DNI: TCadena; CASE ClaseEmpleado:TClaseEmpleado OF cocinero: ( Especialidades: TCjtoEspecialidades) ; mozo: ( Idiomas: TCjtoIdiomas ); limpieza:(); END;

    TMesa = RECORD ClaseMesa: TClaseMesa; CantSillas: 3..6; END;

    TDatosMesas= ARRAY [ 1..60] OF TMesa; TDatosEmpleados = RECORD

    Empleados: ARRAY [TLegajo] OF TEmpleado; UltimoEmpleado: 0..20; END;

    VAR T:TDatosEmpleados;

    e)

    PROCEDURE ListarMozosAngloParlantes(VAR T:TDatosEmpleados); Var i:TLegajo; BEGIN FOR i := 1 TO TopeEmpleados DO WITH T[i] DO IF EmpleadoExistente

    THEN IF ClaseEmpleado=Mozo THEN

  • Elementos de Programacin / Prof. Carlos Ivn Chesevar / UNS, 1999 Pg.12

    IF ingles IN Idiomas THEN BEGIN writeln( Mozo con Legajo ,i );

    MostrarDatosMozo(T[i]); END;

    END;

    donde MostrarDatosMozo podria resolverse como sigue:

    PROCEDURE MostrarIdioma(i:TIdioma); BEGIN CASE i OF ingles: write(ingles); . etc. END; END;

    PROCEDURE MostarrConjuntoIdiomas(S:TCjtoIdiomas); VAR idioma:TIdioma; BEGIN FOR idioma:=ingles TO aleman DO IF idioma in S then MostrarIdioma(i); END;

    PROCEDURE MostrarDatosMozo( E: TEmpleado ); BEGIN writeln(Nombre:, E.Nombre); writeln(DNI: , E.Dni); writeln(Idiomas que habla:); MostrarConjuntoIdiomas(E.Idiomas); writeln; END;

    Por ltimo, veamos cmo sera un procedimiento para ingresar los datos correspondientes a una mesa determinada. Recordemos que hemos adoptado en nuestra solucin un arreglo de 60 componentes para representar las 60 mesas. El enunciado nos pide nicamente ingresar los datos de UNA mesa.

    PROCEDURE IngresarMesa ( VAR M:TMesa); VAR V:integer;

    FUNCTION PasarNroAMaterial(N:integer):TClaseMesa; BEGIN CASE N OF 0: PasarNroAMaterial:=nogal; 1: etc. cedro; 2: .etc pino; END; BEGIN

  • Elementos de Programacin / Prof. Carlos Ivn Chesevar / UNS, 1999 Pg.13

    writeln(Ingreso de datos de mesa:); REPEAT

    write( Cant. sillas (3 a 6):); readln(M.CantSillas);

    UNTIL M.CantSillas IN [3..6]; REPEAT

    write(Ingrese el material de fabricacion (0=nogal, 1=cedro, 2= pino):); readln(V);

    UNTIL V IN [0..2]; M.ClaseMesa := PasarNroAMaterial(V); END;

    Si quisieramos ahora cargar los datos de todas las mesas del restaurant, podramos escribir PROCEDURE CargarDatosMesas(VAR T:TDatosMesas); VAR i:integer; BEGIN FOR i:=1 TO 60 DO

    BEGIN writeln(Cargando datos de mesa , i); IngresarMesa(T[i]); END;

    END; Ejercicio 7 (Matrices): a) Defina un tipo de dato TMatriz para representar una matriz de m filas por n columnas cuyos elementos son letras maysculas. b) Escriba un procedimiento en Pascal GenerarTabla, que teniendo como entrada la matriz A devuelva una tabla T, que contendr informacin sobre cada fila de A. Por cada fila f de A deber almacenarse en T: i) cul es el menor de los elementos de la fila f, ii) el nmero de columna en el que dicho elemento aparece, y iii) un conjunto con todos los caracteres que figuran en esa fila f. c) Escriba un procedimiento SoloPresentesEnPares que dada la matriz A, muestre en pantalla todos los caracteres que aparecen en las filas pares y no en las impares.

    NOTA: Defina todas los tipos de datos auxiliares y estructuras de datos que considere necesarias. Si le resulta conveniente, para resolver el inciso c) puede invocar al procedimiento definido en el inciso b).

    Ejemplo: Sea A la matriz S R M Luego la salida de a) es M 1 [ S, R, M] M E E E 2 [M, E] N M B B 3 [N, M, B] B B M B 1 [B, M] Mni

    mo Col Conjunto

    En el inciso b) debera mostrarse: E, pues la M y la B aparecen en las filas 1 y 3

    Desarrollo de una solucin tentativa:

    a)

  • Elementos de Programacin / Prof. Carlos Ivn Chesevar / UNS, 1999 Pg.14

    CONST TopeFil = 20; TopeCol = 20; TYPE TIndiceFil = 1..TopeFil; TIndiceCol = 1.. TopeCol; TComponente = A..Z; TMatriz = RECORD Eltos: ARRAY [TIndiceFil, TIndiceCol] OF TComponente; UltFil: 0..TopeFil; UltCol: 0..TopeCol; END;

    b)

    TYPE TCjtoLetras = SET OF TComponente; TCompoTabla = RECORD Menor: TComponente; Posicion: TIndiceCol; Cjto: TCjtoLetras; END; TTabla = RECORD EltosTabla: ARRAY [1..TopeFil] OF TCompoTabla; UltElto: 0..TopeFil; END;

    PROCEDURE BuscarMenorEnFila(VAR M:TMatriz; i:TIndiceFil; VAR Menor:TComponente; VAR PosicionMenor:TIndiceCol); VAR j:TIndiceCol; BEGIN Menor:=M[i, 1]; PoscionMenor:=1; FOR j:=2 TO M.UltCol DO IF M[i,j] < Menor THEN BEGIN Menor:=M[i,j]; PosicionMenor:=j; END

    END;

    PROCEDURE ArmarConjuntoLetrasFila(VAR M:TMatriz; i:TIndiceFil; VAR CjtoLetras: TCjtoLetras); VAR j:TIndiceCol; BEGIN CjtoLetras:= [ ]; FOR j:=1 TO M.UltCol DO CjtoLetras:= CjtoLetras + [ M[i,j] ];

    END;

  • Elementos de Programacin / Prof. Carlos Ivn Chesevar / UNS, 1999 Pg.15

    PROCEDURE GenerarTabla ( M : TMatriz; VAR T: TTabla); VAR i:TIndiceFil; BEGIN FOR i:=1 TO M.UltFil DO BEGIN BuscarMenorEnFila(M, i, Menor, PosicionMenor); ArmarConjuntoLetrasfila(M, i, CjtoLetras); T[i].Menor := Menor; T[i].Posicion:=PosicionMenor; T[i].Cjto:=CjtoLetras; END; T.UltElto:=M.UltFil; END;

    c) PROCEDURE SoloPresentesEnPares( VAR M:TMatriz); VAR T:TTabla; CjtoFilasPares, CjtoFilasImpares, CjtoLetras: TCjtoLetras; i:TIndiceFil; BEGIN GenerarTabla(M,T); CjtoFilasPares:=[]; i:=2; WHILE i