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:
Suscribirse a:
Enviar comentarios (Atom)
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.
ResponderEliminarFUNCTION 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.