Program vytvoří jednostranne zřetezený seznam a seřadi jména podle abecedy

Delphi & Pascal (česká wiki)
Přejít na: navigace, hledání
Category: KMP (Club of young programmers)

Author: Pavel Paták
web: www.webpark.cz/programar

Program: Ses_seznam.pas
File exe: Ses_seznam.exe

Program vytvoří jednostranne zřetezený seznam a seřadi jména podle abecedy. Pro skončení zadávaní dat zadajte ENTER.
{ 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.