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