[ Foro de Pascal ]
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.
Creo que deberías usar productor[i] en vez de reparto[i], porque este último no está definido en ninguna parte.
Saludos.
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.
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.)