You are on page 1of 2

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;

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);

You might also like