ich habe ein Problem. Leider bekomme ich die Lösung einer Aufgabe nicht hin. Vielleicht kann mir einer helfen.
Das Programm soll Eingaben in einer Liste aufsteigend sortieren. Anfang und Ende des Programms sind gegeben. Der Mittelteil ist selbst zu erstellen. Hoffentlich kann mir jemand die Syntax vervollständigen.
Code: Alles auswählen
program TesteSortiereListe(input, output);
{ab hier ist das Programm vorgegeben}
type
tNatZahl = 0..maxint;
tRefListe = ^tListe;
tListe = record
info : tNatZahl;
next : tRefListe;
end;
var
RefListe : tRefListe;
procedure SortiereListe (var ioRefListe : tRefListe);
{ sortiert eine lineare Liste aufsteigend }
{ab hier kommt mein Part}
var
philf : tRefListe;
philf2 : tRefListe; {zeigt auf next}
philf3 : tRefListe;
begin
philf := ioRefListe;
if (ioRefListe <> nil) and (ioRefListe^.next <> nil) then
{Schleife über Elemente der Liste}
{1. SF - Element ist größtes Element, dann nichts machen}
{2. SF - kleinstes Element am Anfang einfügen}
{ansonsten in Liste einfügen}
while philf^.next <> nil do
begin
if philf^.next^.info > philf^.info then
philf := philf^.next {SF1}
end
else
begin
if philf^.next^.info < ioRefListe^.info then {SF2}
philf2:=philf^.next; {umstellen}
philf^.next := philf^.next^.next;
philf2^.next:=ioRefListe;
ioRefListe := philf2 {AM Anfang anketten}
end
else
begin
philf3 := ioRefListe;
while philf2^.info > philf3^.next^.info do
philf3 := philf3^.next;
philf2^.next := philf3^.next;{Einketten}
philf3^next:= philf2;
end;
end;
{hier geht der vorgegebene Part weiter}
procedure Anhaengen(var ioListe : tRefListe;
inZahl : tNatZahl);
{ Haengt inZahl an ioListe an }
var Zeiger : tRefListe;
begin
Zeiger := ioListe;
if Zeiger = nil then
begin
new(ioListe);
ioListe^.info := inZahl;
ioListe^.next := nil;
end
else
begin
while Zeiger^.next <> nil do
Zeiger := Zeiger^.next;
{ Jetzt zeigt Zeiger auf das letzte Element }
new(Zeiger^.next);
Zeiger := Zeiger^.next;
Zeiger^.info := inZahl;
Zeiger^.next := nil;
end;
end;
procedure ListeEinlesen(var outListe:tRefListe);
{ liest eine durch Leerzeile abgeschlossene Folge von Integer-
Zahlen ein und speichert diese in der linearen Liste RefListe. }
var
Liste : tRefListe;
Zeile : string;
Zahl, Code : integer;
begin
writeln('Bitte geben Sie die zu sortierenden Zahlen ein.');
writeln('Beenden Sie Ihre Eingabe mit einer Leerzeile.');
Liste := nil;
readln(Zeile);
val(Zeile, Zahl, Code); { val konvertiert String nach Integer }
while Code=0 do
begin
Anhaengen(Liste, Zahl);
readln(Zeile);
val(Zeile, Zahl, Code);
end; { while }
outListe := Liste;
end; { ListeEinlesen }
procedure GibListeAus(inListe : tRefListe);
{ Gibt die Elemente von inListe aus }
var Zeiger : tRefListe;
begin
Zeiger := inListe;
while Zeiger <> nil do
begin
writeln(Zeiger^.info);
Zeiger := Zeiger^.next;
end; { while }
end; { GibListeAus }
begin
ListeEinlesen(RefListe);
SortiereListe(RefListe);
GibListeAus(RefListe)
end.