Ayuda con listas-->borrar
Publicado por Tamara (5 intervenciones) el 29/08/2008 12:01:36
Hola, estoy haciendo un programa en el que tengo que recorrer una lista compuesta a su vez por otra lista de registros. Una de las cosas que tengo que hacer es borrar de la segunda lista las palabras que aparezcan un determinado numero de veces que nos dirá el usuario. Llevo un tiempo mirando el código y exáctamente no se donde falla. ¿Me podrían ayudar? Les dejo el código para que me lo miren. Gracias.
function borrar_rec(lista:ppal;var fich:file of string;apar:integer):ppal;
var aux,rec:ppal;
begin
if (lista<>nil) and (lista^.apariciones<=apar)
then rec:=borrar_rec(lista^.siguiente,fich,apar);
if (lista=nil)
then rec:=lista
else if (lista^.apariciones=apar)
then begin
write(fich,lista^.palabra);
aux:=lista^.siguiente;
dispose(lista);
rec:=borrar_rec(aux,fich,apar);
end;
borrar_rec:=rec;
end;
procedure borrar(lista:plong);
var aux,cab:plong;
fich:file of string;
apar:integer;
begin
aux:=lista;
cab:=lista;
assign(fich,'I:palabras_borradas.dat');
rewrite(fich);
writeln('Indique el numero de aparciones por el que desea borrar las palabras');
read(apar);
while (aux<>nil) do
begin
aux^.puntero:=borrar_rec(aux^.puntero,fich,apar);
if (aux^.puntero=nil)
then begin
cab^.siguiente:=aux^.siguiente;
dispose(aux);
aux:=cab
end;
cab:=aux;
aux:=aux^.siguiente
end;
close(fich);
end;
function borrar_rec(lista:ppal;var fich:file of string;apar:integer):ppal;
var aux,rec:ppal;
begin
if (lista<>nil) and (lista^.apariciones<=apar)
then rec:=borrar_rec(lista^.siguiente,fich,apar);
if (lista=nil)
then rec:=lista
else if (lista^.apariciones=apar)
then begin
write(fich,lista^.palabra);
aux:=lista^.siguiente;
dispose(lista);
rec:=borrar_rec(aux,fich,apar);
end;
borrar_rec:=rec;
end;
procedure borrar(lista:plong);
var aux,cab:plong;
fich:file of string;
apar:integer;
begin
aux:=lista;
cab:=lista;
assign(fich,'I:palabras_borradas.dat');
rewrite(fich);
writeln('Indique el numero de aparciones por el que desea borrar las palabras');
read(apar);
while (aux<>nil) do
begin
aux^.puntero:=borrar_rec(aux^.puntero,fich,apar);
if (aux^.puntero=nil)
then begin
cab^.siguiente:=aux^.siguiente;
dispose(aux);
aux:=cab
end;
cab:=aux;
aux:=aux^.siguiente
end;
close(fich);
end;
Valora esta pregunta


0