PROGRAM examanes_anteriores (input,output);
(*Ejercicio 2 del boletín de examenes anteriores, segundo examen práctico 2010-2011*)
CONST
Maxautor = 20;
Maxlibros = 50000;
TYPE
TCadena = string(40);
TRautores = RECORD
Nombre:TCadena;
Papel:TCadena;
END;
TAautores = ARRAY [1..Maxautor] OF TRautores;
TRlibros = RECORD
Titulo:TCadena;
Editorial:TCadena;
Annoedic:integer;
Autores:TAautores;
END;
TRbiblioteca = ARRAY [1..Maxlibros] OF TRlibros;
VAR
Biblioteca:TRbiblioteca;
PROCEDURE menu; (*Procedimiento que saca el menú con todas las opciones*)
VAR
Opcion:char;
PROCEDURE OpcionC;
VAR
i:integer;
j:integer;
librosAmeter:integer;
autoresAmeter:integer;
contador:integer VALUE (0);
BEGIN
REPEAT
Write('¿Cuántos libros vas a meter?: ');
Readln(librosAmeter);
UNTIL (librosAmeter<=Maxlibros) AND (librosAmeter>=0);
i:=1;
librosAmeter:=librosAmeter+contador;
i:=i+contador;
contador:=librosAmeter+contador;
WHILE i<=librosAmeter DO
BEGIN
WITH Biblioteca[i] DO
BEGIN
Write('Titulo: ');
Readln(Titulo);
Write('Editorial: ');
Readln(Editorial);
Write('Año de edición: ');
Readln(Annoedic);
REPEAT
Write('¿Cuántos autores va a meter?: ');
Readln(autoresAmeter);
UNTIL (autoresAmeter<=Maxautor) AND (autoresAmeter>=0);
j:=1;
WHILE j<=autoresAmeter DO
BEGIN
Write('Nombre del autor ',j:0,': ');
Readln(Autores[j].Nombre);
Write('Papel del autor: ');
Readln(Autores[j].Papel);
j:=j+1;
END;
END;(*End del WITH*)
i:=i+1;
END;(*End del WHILE*)
END;(*Del procedimiento*)
PROCEDURE OpcionA;
VAR
i:integer VALUE (1);
tituloAbuscar:TCadena;
encontrado:boolean VALUE (FALSE);
BEGIN
Write('Escribe el título a buscar: ');
Readln(tituloAbuscar);
WHILE i<=Maxlibros DO
BEGIN
IF tituloAbuscar = Biblioteca[i].Titulo THEN
BEGIN
Writeln('El año de edición de ese libro es ',Biblioteca[i].Annoedic:0);
encontrado:=TRUE;
i:=Maxlibros+1;
END
ELSE
BEGIN
encontrado:=FALSE;
i:=i+1;
END;
END;
IF encontrado=FALSE THEN
Writeln('No hay ningún libro en la biblioteca con ese título.');
END;
BEGIN
REPEAT
Writeln('[C] Cargar datos desde el teclado');
Writeln('[A] Averiguar año a partir del título');
Writeln('[S] Salir del programa');
Readln(Opcion);
CASE Opcion OF
'C','c':OpcionC;
'A','a':OpcionA;
'S','s':Writeln('Saliendo del programa.');
OTHERWISE
Writeln('Opción no valida, por favor elija otra vez.');
END;
UNTIL (Opcion='S') OR (Opcion='s');
END;
BEGIN
menu;
END.
Ejemplo de ejecucion:
Suscribirse a:
Enviar comentarios (Atom)
No hay comentarios:
Publicar un comentario