[ Foro de Pascal ]

Insertar elementos de forma ordenada a una lista

07-Nov-2017 23:53
Invitado (Juan)
1 Respuestas

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;


08-Nov-2017 19:51
Nacho Cabanes (+84)

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.)