{ SES_SEZNAM.PAS Copyright (c) Pavel Patak } { Program vytvori jednostranne zretezeny seznam a seradi jmena } { podle abecedy Pro skonceni zadavani dat zadajte ENTER } { } { Datum:28.10.2004 http://www.trsek.com } Program SetrideniSeznamu; type PSeznam = ^TSeznam; TSeznam = record Jmeno : string; Dalsi : PSeznam; end; var Prvni,Soucasny : PSeznam; Seznam : TSeznam; ZJmeno : string; Prohozeni: LongInt; {Udava setridenost seznamu} begin New(Prvni); {Vytvorime novou dynamickou promennou, na kterou bude ukazovat Prvni} Soucasny:=Prvni; {Soucasny ukazuje tamtez} Soucasny^.Dalsi:=nil; {Nic dalsiho zatim neni} Soucasny^.Jmeno:='nikdo'; {Tim bychom meli hotove jakesi drzadlo} repeat Writeln('Jmeno : '); Readln(ZJmeno); if ZJmeno <> '' then begin New(Soucasny^.Dalsi); {Nova dynamicka promenna} Soucasny:=Soucasny^.Dalsi; {Ukazatel soucasny presmerujeme na ni} Soucasny^.Jmeno:=ZJmeno; Soucasny^.Dalsi:=nil; end; until ZJmeno=''; {Setrideni} repeat Prohozeni:=0; Soucasny:=Prvni^.Dalsi; if Soucasny <> nil then While Soucasny^.Dalsi<>nil do {Prohodi vsechny prehozene dvojice} Begin if Soucasny^.Jmeno > Soucasny^.Dalsi^.Jmeno then Begin ZJmeno:=Soucasny^.Jmeno; {Prohrazujeme pouze hodnoty, ne ukazatele!!!} Soucasny^.Jmeno:=Soucasny^.Dalsi^.Jmeno; Soucasny^.Dalsi^.Jmeno:=ZJmeno; Inc(Prohozeni); End; Soucasny:=Soucasny^.Dalsi; End; until Prohozeni=0; {Opakujeme, dokud se meni poradi prvku} {Vypis seznamu} Soucasny:=Prvni^.Dalsi; While Soucasny<>nil do Begin Writeln(Soucasny^.Jmeno); Soucasny:=Soucasny^.Dalsi; End; Readln; end.