[Pascal] Sortowanie listy jednokierunkowej- gdzie błąd

0

Witam! Mam problem związany z sortowaniem bąbelkowym. Tworze listę jednokierunkową procedurą:

TYPE
TWsk = ^TZadanie;

TZadanie = RECORD
        numer     :       byte;
        tresc     :       string[128];
        priorytet :       byte;
        nastepne  :       TWsk;
        end;
VAR
menu,nr         : integer;
poczatek,
koniec,
pierwsze,
zadanie         : TWsk;

Dodawanie elementów:

PROCEDURE Dodaj();
begin
IF poczatek=NIL THEN
        begin
        New(pierwsze);
        Inc(nr);
        pierwsze^.numer:=nr;
        writeln('Podaj nowe zadanie: ');
        readln(pierwsze^.tresc);
        pierwsze^.priorytet:=0;
        pierwsze^.nastepne:=NIL;
        poczatek:=pierwsze;
        koniec:=pierwsze;
        end
        ELSE
                begin
                New(zadanie);
                Inc(nr);
                zadanie^.numer:=nr;
                writeln('Podaj nowe zadanie: ');
                readln(zadanie^.tresc);
                zadanie^.priorytet:=0;
                koniec^.nastepne:=zadanie;
                zadanie^.nastepne:=NIL;
                koniec:=zadanie;
                end;
end;

Użytkownik ma w programie możliwość zmiany priorytetów jakiegoś zadania i wtedy lista musi zostać posortowana malejąco według priorytetów.
Moja procedura:

PROCEDURE Sortuj();
var
element:TWsk;
temp:TWsk;
begin
pierwsze:=poczatek;
WHILE pierwsze^.nastepne<>NIL DO
        element:=pierwsze;            
        begin
        WHILE element^.nastepne<>NIL DO
                begin
                IF element^.priorytet<element^.nastepne^.priorytet THEN
                        begin
                        temp^.tresc:=element^.tresc;
                        temp^.priorytet:=element^.priorytet;
                        temp^.nastepne:=element^.nastepne^.nastepne;
                        element^.nastepne^.nastepne:=temp;
                        end;
                element:=element^.nastepne;
                end;
        pierwsze:=pierwsze^.nastepne;
        end;
writeln('Lista posortowana wedlug priorytetow zadan');
delay(500);
end;

Niestety to pętla nieskończona (nie wychodzi z pętli zagnieżdżonej) i nie wiem dlaczego ani jak to poprawić. Możecie pomóc?

0

nie chce mi sie analizowac teraz (moze rano, jak sie wyspie...) ale jedno mi sie rzucilo w oczy:

WHILE pierwsze^.nastepne<>NIL DO
        element:=pierwsze;            
        begin

czy tak ma byc, czy to co w begin tez ma sie wykonywac w petli?

0

tak właśnie też to zauważyłem i zmieniłem, ale niestety nic to nie daje :(

1 użytkowników online, w tym zalogowanych: 0, gości: 1