[ Foro de Pascal ]
en este programa tengo que hacer que se pueda introducir tanto animales encontrados con sus respectivos campos y los perdidos. A su vez también tiene que tiene la opción de mostrar las respectivas listas de los animales perdidos y encontrados que se han añadido,(e listas separadas). sin embargo al introducir mas de un animal en cada una delas lisas al darle para que aparezca la lista no se guarda y aparece en ambas listas e ultimo animal metido. ¿Podrían ayudarme? Muchas gracias de antemano.
PROGRAM Animales ;
USES
crt , sysutils;
CONST
MAX_DATOS = 10 ;
TYPE
ts16 = string[16] ;
tsNombres = string[32] ;
{trgAnimal = RECORD
lCodigo : longint ;
sTipo : ts16 ;
sRaza : ts16 ;
iTamanio : integer ;
END;
trgPersona = RECORD
sNombre : tsNombres ;
sTelefono : ts16 ;
END;}
trgEncontradosPerdidos = RECORD
lCodigo : longint ;
sTipo : ts16 ;
sRaza : ts16 ;
iTamanio : integer ;
sNombre : tsNombres ;
sTelefono : ts16 ;
rFecha : real ;
END;
trgLocalizados = RECORD
rAanimal :trgEncontradosPerdidos ;
rgPersonaEncotro :trgEncontradosPerdidos ;
rgPersonaPerdio :trgEncontradosPerdidos ;
rFecha :real ;
END;
{encontrados = ARRAY [1..MAX_DATOS] OF trgEncontradosPerdidos ;
perdidos = ARRAY [1..MAX_DATOS] OF trgEncontradosPerdidos ;
localizados = ARRAY [1..MAX_DATOS] OF trgLocalizados ;}
VAR
encontrados : ARRAY [1..MAX_DATOS] OF trgEncontradosPerdidos ;
perdidos : ARRAY [1..MAX_DATOS] OF trgEncontradosPerdidos ;
localizados : ARRAY [1..MAX_DATOS] OF trgLocalizados ;
{ animal : ARRAY [1..MAX_DATOS] OF trgAnimal ;
persona : ARRAY [1..MAX_DATOS] OF trgPersona ;}
{argEncontrados : targEncontrados ;
argPerdidos : targPerdidos ;
argLozalizados : targLocalizados ;}
cOpcion : Char ;
cantidadencontrados: Integer ;
cantidadperdidos:integer;
terminado : Boolean ;
function MostrarMenu: char;
var
cOpcion: char;
begin
WriteLn('REGISTRO');
WriteLn;
WriteLn('1- Añadir animal encontrado');
WriteLn('2- Lista animales encontrados');
WriteLn('3- Añadir animal perdido');
WriteLn('4- Lista animales perdidos');
WriteLn('5- Lista animales localzados');
WriteLn('6- Buscar datos de un animal localizado');
WriteLn('0- Terminar');
writeln;
write ('pulsa la tecla de la opcion pertinente: ');
repeat
cOpcion:=ReadKey
until ('0'<=cOpcion)and (cOpcion<='6');
writeln (cOpcion);
writeln;
mostrarmenu:=copcion;
end;
PROCEDURE AnimalEncontrado ;
BEGIN
IF (cantidadencontrados < MAX_DATOS) THEN
BEGIN
inc (cantidadencontrados) ;
WriteLn ('Introduciendo el animal' , cantidadencontrados) ;
Write ('Codigo: ':10) ;
Readln (encontrados[cantidadencontrados].lCodigo) ;
Write ('Tipo: ':10) ;
Readln (encontrados[cantidadencontrados].sTipo) ;
Write ('Raza: ':10) ;
Readln (encontrados[cantidadencontrados].sRaza) ;
Write ('Tamanyo: ':10) ;
Readln (encontrados[cantidadencontrados].iTamanio) ;
Write ('Nombre de la persona que lo encontro: ':10) ;
Readln (encontrados[cantidadencontrados].sNombre) ;
Write ('Telefono: ':10) ;
ReadLn (encontrados[cantidadencontrados].sTelefono) ;
Write ('Fecha: ':10) ;
ReadLn (encontrados[cantidadencontrados].rFecha) ;
writeln;
writeln;
END
ELSE
WriteLn ('Base de datos llena':20) ;
END;
PROCEDURE MostrarListaEncontrados ;
VAR
i : Integer ;
BEGIN
IF cantidadencontrados = 0 THEN
WriteLn ('No hay datos':20)
ELSE
FOR i := 1 TO cantidadencontrados DO
WriteLn (i, ' ', encontrados[i].lCodigo);
WriteLn (i, ' ', encontrados[i].stipo);
WriteLn (i, ' ', encontrados[i].sraza);
WriteLn (i, ' ', encontrados[i].itamanio);
WriteLn (i, ' ', encontrados[i].snombre);
WriteLn (i, ' ', encontrados[i].stelefono);
WriteLn (i, ' ', encontrados[i].rfecha);
WriteLn ;
END;
PROCEDURE AnimalPerdido ;
BEGIN
IF (cantidadperdidos < MAX_DATOS) THEN
BEGIN
inc (cantidadperdidos) ;
WriteLn ('Introduciendo el animal':10 , cantidadperdidos) ;
Write ('Codigo: ':10) ;
Readln (perdidos[cantidadperdidos].lCodigo) ;
Write ('Tipo: ':10) ;
Readln (perdidos[cantidadperdidos].sTipo) ;
Write ('Raza: ':10) ;
Readln (perdidos[cantidadperdidos].sRaza) ;
Write ('Tamanyo: ':10) ;
Readln (perdidos[cantidadperdidos].iTamanio) ;
Write ('Nombre de la persona que lo encontro: ':10) ;
Readln (perdidos[cantidadperdidos].sNombre) ;
Write ('Telefono: ':10) ;
ReadLn (perdidos[cantidadperdidos].sTelefono) ;
Write ('Fecha: ':10) ;
ReadLn (perdidos[cantidadperdidos].rFecha) ;
writeln;
writeln;
END
ELSE
WriteLn ('Base de datos llena':20) ;
END;
PROCEDURE MostrarListaPerdidos ;
VAR
i : Integer ;
BEGIN
IF cantidadperdidos = 0 THEN
WriteLn ('No hay datos':20)
ELSE
FOR i := 1 TO cantidadperdidos DO
WriteLn (i, ' ', perdidos[i].lCodigo);
WriteLn (i, ' ', perdidos[i].stipo);
WriteLn (i, ' ', perdidos[i].sraza);
WriteLn (i, ' ', perdidos[i].itamanio);
WriteLn (i, ' ', perdidos[i].snombre);
WriteLn (i, ' ', perdidos[i].stelefono);
WriteLn (i, ' ', perdidos[i].rfecha);
WriteLn ;
END;
BEGIN
terminado := false;
cantidadperdidos := 0;
cantidadencontrados:=0;
repeat
cOpcion := MostrarMenu;
case cOpcion of
'1': AnimalEncontrado ;
'2': MostrarListaEncontrados ;
'3': AnimalPerdido ;
'4': MostrarListaPerdidos ;
'0': { Salir de la aplicación }
begin
WriteLn;
WriteLn('Saliendo...');
WriteLn;
end;
else
begin
WriteLn;
WriteLn('Opción incorrecta!');
WriteLn;
end;
end; { Fin de "case" }
until terminado ;
END. { PROGRAMAREN BUKAERA - FIN del PROGRAMA }
En los "for" de mostrar te faltan crear un bloque begin - end, so que sólo repites para el código.
Por cierto, has puesto la consulta tres veces, y una de ellas en el foro de Java. Doy por sentado que tengo tu permiso para borrar las dos anteriores.
(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.)