[ Foro de Pascal ]
Necesito hacer una funcion para usar en un programa que al darle un entero entre 1 y 25 lo agregue a una lista de forma ordenada.
Por esto me refiero a que si la lista actualmente tiene L->[4]->[6]->[7]->//
y quiero agregar el elemento [5] la lista quede de esta forma L->[4]->[5]->[6]->[7]->//
Tambien que si intento agregar un numero que ya esta en la lista, el mismo no se agregue.
Con eso en mente logre escribir este codigo pero no funciona y no me da ningun error, simplemente nunca agrega nada:
function pertenece(elem:TipoClave; l: listaClaves): boolean;
var
p: listaClaves;
begin
p:= l;
while (p <> nil) and (p^.clave <> elem) do
p:= p^.sig;
pertenece:= (p <> nil);
end;
(*---------------------------------------------------------------------------------*)
(*---------------------------------------------------------------------------------*)
procedure meterord(l:listaClaves;elem:TipoClave);
var e,g,p:listaClaves;
begin
p:=l;
if p<>nil then begin
while (p^.sig<>nil)and(elem>p^.clave) do begin
e:=p;
p:=p^.sig;
end;
if p^.sig=nil then begin
new(g);
g^.clave:=elem;
g^.sig:=nil;
p^.sig:=g;
end
else begin
new(g);
g^.sig:=p;
g^.clave:=elem;
e^.sig:=g;
end;
end
else begin
new(p);
p^.clave:=elem;
p^.sig:=nil;
end;
end;
(*luego en el programa principal*)
if t=0 then begin
if not(pertenece(c-p,l)) then begin
meterord(l,c-p);
p:=p+1;
end;
end
else
begin
if texto.texto[i]<>' ' then
begin
while(texto.tope>=i) and (texto.texto[i]<>' ') do
begin
i:=i+1;
end;
p:=p+1;
end
else p:=p+1;
end;
Los programas con memoria dinámica son difíciles de seguir "a ojo". Lo ideal sería que incluyeras un fragmento capaz de compilar por sí mismo, para que se pudiera probar e incluso depurar.
(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.)