Pascal/Turbo Pascal - Problema con listas

 
Vista:

Problema con listas

Publicado por javier (1 intervención) el 02/12/2008 04:02:41
Aca dejo una parte del codigo, con el cual tengo problema.
En el procedimiento "casar", lo que deberia hacer es casar a 2 personas de diferentes sexos con cualidades iguales. donde anteriormente hay un procedimiento q los carga.
lo que no funciona en el procedimiento casar, es que los casa una vez y despues el programa se queda tildado.
Primeramente hay un procedimiento "Busqueda" el cual busca a la persona q deseo casar, y guarda el puntero para que en el procedimiento casar, lo compare con las personas restante de la lista.
Supongo que debe haber algun problema con los punteros pero no lo puedo resolver, si alguien me puede ayudar se lo agradeceria muchisimoo sino tengo q hacer la materia nuevamente :(

procedure busqueda (var l:lista;var pun:lista;var puna:lista; nombr:string);
var
aux,aux2:lista;

begin
aux:=l;
aux2:=l;
while (aux<>nil)and(aux^.nombre<>nombr) do
begin
aux2:=aux;
aux:=aux^.sig;
end;
if aux^.nombre=nombr then
begin
writeln('persona encontrada');
pun:=aux;
puna:=aux2;
end
else
write('la persona buscada no se encontro');
end;

procedure eliminar (var l:lista);
var
nom:string;
aux,sig:lista;

begin
write('ingrese el nombre de la persona que desea eliminar');
readln (nom);
aux:=l;
sig:=l;
while (sig<>nil)and(sig^.nombre<>nom) do
begin
aux:=sig;
sig:=sig^.sig;
end;

if sig^.nombre = nom then
begin
aux^.sig:=sig^.sig;
dispose(sig);
write('la persona ha sido eliminada');
end
else
write ('no se encontro la persona que desea borrar');
end;


procedure casar (var l:lista);
var
para,punt,pun,puna:lista;
nom:string;
cas:boolean;
i:integer;

begin
writeln('ingrese el nombre de la persona que desea casar');
read(nom);
busqueda(l,pun,puna,nom);
punt:=l;
cas:=false;
while (punt^.sig<>nil)and(cas=false) do
begin
cas:=true;
while (punt^.sexo<>pun^.sexo)and (cas=true) do
begin
i:=1;
cas:=true;
while (i<=8)and(cas=true)do
begin
if pun^.afi[i] = punt^.afi[i] then
begin
cas:=true;
i:=i+1;
end
else
cas:= false;
end;
end;

para:=punt;
punt:=punt^.sig;

end;
if cas=true then
begin
para^.sig:=punt^.sig;
puna^.sig:=pun^.sig;
dispose(punt);
dispose(pun);
writeln (nom, 'se caso');
end
else
writeln('no se encontro nadie afin');
end;
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder