lunes, 19 de diciembre de 2011

Examen Prácticas segundo parcial 2010 - 2011

EXAMEN PRÁCTICAS SEGUNDO PARCIAL 2010-2011
1. Se quiere controlar las películas de un distribuidor de cine. Para cada película se debe
tener información del título, director,  año de producción y del reparto: los
protagonistas. Como máximo se indicarán 20 protagonistas. Y se sabe que no tendrá
nunca más de 5000 películas en el almacén.
Codifique la parte Const,  Type, y VAR del programa.  (3 Puntos)
Codifique un menú con las siguientes opciones:
[S]alir
[C]argar datos desde el teclado.
[A]veriguar año de una película dando el título    (3 Puntos)
[T]rabajado en películas
Codifique el procedimiento para cargar datos del teclado (4 puntos)


PROGRAM videoclub (input,output);
(*Programa que sirve para un videoclub, almacena pelis con sus autores, director, año...*)
CONST
maxpeli=5000;
maxactor=20;

TYPE
Tcadena=string(40);
Tractores=RECORD
Nombre:Tcadena;
Papel:Tcadena;
                 END;
Taactores=ARRAY [1..maxactor] OF TRactores;
Tpeliculas=RECORD
Titulo:Tcadena;
Director:Tcadena;
annoproduc:integer;
actores:Taactores;
      END;
Taalmacen=ARRAY [1..maxpeli] OF Tpeliculas;

VAR
Aalmacen:Taalmacen;
Opcion:char;
Acu:integer VALUE (0);

PROCEDURE menu;
BEGIN
Writeln('[S] Salir');
Writeln('[C] Cargar datos desde teclado');
Writeln('[A] Averiguar año de una película sabiendo el título');
END;

PROCEDURE OpcionA;
VAR
i:integer VALUE (1);
acumulador:integer VALUE (1);
Numero:integer;
Numero_actores:integer;
BEGIN
Write('Cuantas películas va a meter en el registro?: ');
Readln(Numero);
acumulador:=acumulador+Acu;
        Acu:=Acu+Numero;
WHILE acumulador<=Acu DO
BEGIN
WITH Aalmacen[acu] DO
BEGIN
Write('Escribe el título de la película: ');
Readln(Titulo);
Write('Escribe el nombre del director de la película: ');
Readln(Director);
Write('Escribe el año de procucción de la película: ');
Readln(Annoproduc);
Write('¿Cuántos actores tiene la película?: ');
REPEAT
Readln(Numero_actores);
IF Numero_actores>maxactor THEN
Writeln('Cada peli tiene como max 20 actores.');
UNTIL Numero_actores<maxactor;
i:=1;
                WHILE i<=Numero_actores DO
BEGIN
Write('Escribe el nombre del actor número ',i:0,':');
Readln(actores[i].Nombre);
Write('Escribe el papel del actor: ');
Readln(actores[i].Papel);
i:=i+1;
END;(*End del WHILE i<=Numero_acotres DO *)
Acumulador:=Acumulador+1;
   END;(*End del WITH*)
END;
Acu:=Acumulador;
END;

PROCEDURE OpcionB;
VAR
i,j:integer VALUE (1);
Tittulo:Tcadena;
BEGIN
Write('Escribe el título de la película que quieres saber el año: ');
Readln(Tittulo);
WHILE i<= maxpeli DO
BEGIN
IF Aalmacen[i].Titulo=Tittulo THEN
  BEGIN
Writeln('El año de producción es ',Aalmacen[i].Annoproduc:0);
i:=maxpeli + 1;
END
ELSE
   BEGIN
                    IF i<=maxpeli THEN
                       i:=i+1
                    ELSE
                        Writeln('No hay ninguna película en el registro con ese título');
                    END;
END;
END;
BEGIN
     REPEAT
           menu;
           Readln(Opcion);
           CASE Opcion OF
                'C','c':OpcionA;
                'A','a':OpcionB;
           OTHERWISE
                    Writeln('Esa opción no es válida, por favor marque otra opción: ');
           END;
     UNTIL (Opcion='s') OR (Opcion='S');
END.

Ejemplo de ejecucion:

1 comentario:

  1. La segunda opción, la de saber el año también la tengo echa con una función, pero también habría que crear dos variables y cambiar el CASE del programa principal. Dejo aquí el código de la función y el programa principal.

    FUNCTION devuelve_anno (PROTECTED VAR Aalmacen:TAalmacen):integer;
    VAR
    i:integer VALUE (1);
    BEGIN
    i:=1;
    WHILE i<Maxpeli DO
    BEGIN
    IF Aalmacen[i].Titulo=Titulop THEN
    BEGIN
    devuelve_anno:=Aalmacen[i].Annoproduc;
    i:=Maxpeli+1;
    END
    ELSE
    BEGIN
    IF i<Maxpeli THEN
    i:=i+1
    ELSE
    devuelve_anno:=0;
    END;
    END;
    END;
    BEGIN
    REPEAT
    menu;
    Readln(Opcion);
    CASE Opcion OF
    'C','c':OpcionA;
    'A','a':(*OpcionB;*)BEGIN
    Write('Escribe el título de la película que quieras saber el año: ');
    Readln(Titulop);
    annop:=devuelve_anno(Aalmacen);
    IF annop=0 THEN
    Writeln('No se ha encontrado ninguna película con ese título.')
    ELSE
    Writeln('El año de producción de esa película es: ',annop:0);
    END;
    OTHERWISE
    Writeln('Esa opción no es válida, por favor marque otra opción: ');
    END;
    UNTIL (Opcion='s') OR (Opcion='S');
    END.

    ResponderEliminar

Twitter Delicious Facebook Digg Stumbleupon Favorites More

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