ejercicios_de_clase.pdf

2
Instituto de Computación – Facultad de Ingeniería – UdelaR – Curso Programación 1 – 2013 Ejercicio para resolver en clase Se desea modelar una realidad consistente en el préstamo de libros de una biblioteca a socios. Una biblioteca posee un conjunto de libros. Cada libro tiene un número único que lo identifica llamado ISBN y su estado puede ser prestado o disponible. Cuando el libro está prestado, se registra el número del socio que lo tiene y si este está atrasado o no. Si el libro está disponible, se almacena la cantidad máxima de días que es posible prestar dicho libro. Se cuenta con las siguientes definiciones: CONST MAX_LIBROS = ...; TYPE EstadoLibro = (prestado, disponible); Libro = RECORD ISBN : Integer; CASE estado : EstadoLibro of prestado : ( nroSocio : Integer; atrasado : Boolean; ); disponible : ( maximoDias : Integer; ) END; Biblioteca = RECORD libros : ARRAY[1..MAX_LIBROS] OF Libro; tope : 0..MAX_LIBROS; END; a) Escriba una función que dados el ISBN de un libro y una biblioteca devuelva TRUE si el libro existe en la biblioteca y está disponible para préstamo. En cualquier otro caso debe devolver FALSE. Recuerde que no hay dos libros con el mismo ISBN. FUNCTION estaDisponibleLibro (ISBN : Integer; bib : Biblioteca) : Boolean; b) Escriba un procedimiento que dados un número de socio nroSocio y una biblioteca devuelva en las variables cantPrestados y cantAtrasados la cantidad de libros prestados al socio nroSocio y cuántos de esos libros están atrasados. PROCEDURE librosPrestadosSocio (nroSocio : Integer; bib : Biblioteca; VAR cantPrestados, cantAtrasados : Integer); Considere la siguiente estructura que representa a los socios de una biblioteca. ListaSocio = ^Socio; Socio = RECORD nroSocio : Integer; sig : ListaSocio; END; 1

Transcript of ejercicios_de_clase.pdf

  • Instituto de Computacin Facultad de Ingeniera UdelaR Curso Programacin 1 2013

    Ejercicio para resolver en clase

    Se desea modelar una realidad consistente en el prstamo de libros de una biblioteca a socios. Una biblioteca posee un conjunto de libros. Cada libro tiene un nmero nico que lo identifica llamado ISBN y su estado puede ser prestado o disponible. Cuando el libro est prestado, se registra el nmero del socio que lo tiene y si este est atrasado o no. Si el libro est disponible, se almacena la cantidad mxima de das que es posible prestar dicho libro.

    Se cuenta con las siguientes definiciones:

    CONST MAX_LIBROS = ...;

    TYPE

    EstadoLibro = (prestado, disponible);

    Libro = RECORD ISBN : Integer; CASE estado : EstadoLibro of prestado : ( nroSocio : Integer; atrasado : Boolean; ); disponible : ( maximoDias : Integer; ) END;

    Biblioteca = RECORD libros : ARRAY[1..MAX_LIBROS] OF Libro; tope : 0..MAX_LIBROS; END;

    a) Escriba una funcin que dados el ISBN de un libro y una biblioteca devuelva TRUE si el libro existe en la biblioteca y est disponible para prstamo. En cualquier otro caso debe devolver FALSE. Recuerde que no hay dos libros con el mismo ISBN.

    FUNCTION estaDisponibleLibro (ISBN : Integer; bib : Biblioteca) : Boolean;

    b) Escriba un procedimiento que dados un nmero de socio nroSocio y una biblioteca devuelva en las variables cantPrestados y cantAtrasados la cantidad de libros prestados al socio nroSocio y cuntos de esos libros estn atrasados.

    PROCEDURE librosPrestadosSocio (nroSocio : Integer; bib : Biblioteca; VAR cantPrestados, cantAtrasados : Integer);

    Considere la siguiente estructura que representa a los socios de una biblioteca.

    ListaSocio = ^Socio; Socio = RECORD

    nroSocio : Integer; sig : ListaSocio;

    END;

    1

  • Instituto de Computacin Facultad de Ingeniera UdelaR Curso Programacin 1 2013

    c) Escriba una funcin que dada una lista de socios devuelve dicha lista invertida. La lista resultado no debe compartir memoria con la lista pasada por parmetro.

    FUNCTION invertirListaSocios ( lis : ListaSocio ) : ListaSocio;

    d) Escriba un procedimiento que, dados un nmero de socio y una lista, borre de dicha lista al socio. Si el socio no est en la lista, el procedimiento deja la lista inalterada.

    PROCEDURE borrarSocio ( nroSocio : Integer; VAR lis : listaSocio);

    2