martes, 20 de diciembre de 2011

Examen Prácticas segundo parcial 2010 - 2011 -2

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:

No hay comentarios:

Publicar un comentario

Twitter Delicious Facebook Digg Stumbleupon Favorites More

 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | GreenGeeks Review