Witam, natknąłem się na problem w liście kierunkowej pisanej w Pascalu. Program nie działa poprawnie, podejrzewam, że błąd jest w linii:
aktualny^.nastepny^.poprzedni:=nowy;
. Poniżej przedstawiam listę w dużym uproszczeniu. Na razie chodzi mi tylko o to, by możliwe było dodawanie elementów po aktualnym wskaźniku.
program Lista_dwukierunkowa;
uses crt;
type
wskaznik=^element;
element=record
nastepny, poprzedni: wskaznik;
zawartosc: string;
liczba: integer;
end;
var
{poczatek,koniec,}aktualny: wskaznik;
znak: char;
procedure Create;
begin
//poczatek:=NIL;
//koniec:=NIL;
aktualny:=NIL;
end;
procedure Add;
var nowy: wskaznik;
begin
new(nowy);
if aktualny <> NIL then
begin
nowy^.priorytet:=6;
nowy^.nastepny:=aktualny^.nastepny;
nowy^.poprzedni:=aktualny;
aktualny^.nastepny^.poprzedni:=nowy; // nie dziala chyba przez ta linie
aktualny^.nastepny:=nowy;
writeln(nowy^.liczba);
end
else
begin
nowy^.nastepny:=NIL;
nowy^.poprzedni:=NIL;
aktualny:=nowy;
aktualny^.priorytet:=7;
writeln(aktualny^.liczba);
end;
end;
begin
clrscr;
writeln('Lista dwukierunkowa');
Create;
repeat
writeln('Podaj znak d');
readln(znak);
case znak of
'd': Add;
'j': writeln('Zly znak');
end;
until znak='q';
readln;
end.
Edit ) Oczywiście kazde słowo priorytet w kodzie u góry powinno być zastąpione słowem liczba, ale mniejsza o to.