[ Foro de Pascal ]

ej Peliculas

28-Dec-2014 17:45
Alberto Rilo Mosteiro
3 Respuestas

Buenas , lo primero a ver si me podeis decir porque me da error al usar el with en el registro anidado.
Lo segundo, a ver si me podeis dar una idea de como hacer una funcion que dado el nombre del protgonista, devuelva las peliculas donde ha trabajo. Muchas gracias


(*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 basico(input,output);
CONST 
 maxpeliculas=5000;
 maxprotas=20;
 
TYPE
 ttitulo=string(30);
 tnombre=string(40);
 tanho=1900..2014;
 tpelicula=record 
           titulo:ttitulo;
           director:tnombre;
           anhopubli:tanho;
           protas:record
                  numero:1..maxprotas;
                  nombreprotas:tnombre; 
                   end;
                   
            end;
 tproductor=array [1..maxpeliculas] of tpelicula;          
 
  var productor:tproductor;           
(****************************************************)
PROCEDURE Cargar(var productor:tproductor);
 var i:integer;
 BEGIN
 FOR i:=1 to maxpeliculas DO BEGIN
  WITH reparto[i] do begin
   writeln('Introduzca el titulo de la pelicula');readln(titulo);
   writeln('Introduzca el nombre del director');readln(director);
   writeln('Introduzca el año de publicacion');readln(anhopubli);
    with productor[i] do begin
   writeln('Introduzca el numero de  protragonistas');readln(numero);
   writeln('Introduzca el nombre de los protagonistas');readln(nombreprotas);  
   
   end;
   end;
   end;
     end;

begin
end.                   





28-Dec-2014 21:08
Luis Torres (+18)

Creo que deberías usar productor[i] en vez de reparto[i], porque este último no está definido en ninguna parte.

Saludos.


03-Jan-2015 13:12
Alberto Rilo Mosteiro

el problema es el siguiente , lo he vuelto a redifinir todo, y no se como acceder al registro anidado,


PROGRAM basico(input,output);
CONST
 maxpelis=5000;
 maxprotagonistas=20;
 
 type
 ttitulo=string(50);
 tnombre=string(30);
 tanho=1900..2014;
 numprotas=1..maxprotagonistas;
 pelicula= record
           titulo:ttitulo;
           director:tnombre;
           anhoprod:tanho;
           reparto: record
                    nombre:tnombre;
                    numeroprotas:numprotas;
                    end;
           end;

 tpelicula=array[1..maxpelis] of pelicula;
 
 
 var
  distribuidor:tpelicula;

(******************************************************)
PROCEDURE Carga(var distribuidor:tpelicula);
 var i:integer;
 begin
 FOR i:=1 to maxpelis do begin
  write('Introduzca los datos de la pelicula: ',i);
  writeln;
  with distribuidor[i] do begin
   writeln('Introduzca el titulo de la pelicula');readln(titulo);
   writeln('Introduzca el nombre del director'); readln(director);
   writeln('Introduzca el año de produccion'); readln(anhoprod);
   with distribuidor[i] do begin
   writeln('Introduzca el numero de protagonistas'); readln(numeroprotas);
   writeln('Introduzca el nombre de el/los protagonista/s'); readln(nombre);
   
  end;
 end;
end;  
   

begin
end.




03-Jan-2015 14:20
Nacho Cabanes (+84)

Debería bastar con que escribas "reparto." antes de los campo del registro anidado:


writeln('Introduzca el numero de protagonistas'); readln(reparto.numeroprotas);








(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)