program lexi;
 
const k=5;
      zero='0';
      nine='9';
 
type blok=record
        next:^blok;
        number:string[k];
     end;
 
type entry=record
        first:^blok;
        last:^blok;
     end;
 
type uk=^blok;
 
var pole: array[zero..nine] of entry;
    seznam: entry;
 
procedure vynuluj;
var a:char;
begin
for a:=zero to nine do
  with pole[a] do
  begin
    first:=nil;
    last:=nil;
  end;
end;
 
procedure vloznakonec(var r:entry; u:uk);
begin
     if r.first<>nil then
        r.last^.next:=u
     else
        r.first:=u;
     r.last:=u;
     u^.next:=nil;
end;
 
procedure insert(s:string);
var b:^blok;
begin
  while length(s)<k do
     s:='0'+s;
  new(b);
  b^.next:=nil;
  b^.number:=s;
  vloznakonec(seznam,b);
end;
 
procedure pridej(var e: entry);
begin
     if e.first<>nil then begin
        if seznam.first = nil then
           seznam.first := e.first
        else
           seznam.last^.next := e.first;
 
        seznam.last:=e.last;
    end;
end;
 
procedure trid (j:integer);
var p,g:^blok;
    a:char;
begin
     vynuluj;
 
     p:=seznam.first;
     while p<>nil do begin
        g:=p^.next;
        vloznakonec (pole[p^.number[j]], p);
        p:=g;
     end;
 
     seznam.first:=nil;
     seznam.last:=nil;
 
     for a := zero to nine do
        pridej (pole[a]);
end;
 
procedure sort;
var i:integer;
begin
      for i:= k downto 1 do
         trid(i);
end;
 
procedure vypis;
var p: uk;
begin
     p:=seznam.first;
     while p<>nil do begin
        writeln(p^.number);
        p:=p^.next;
     end;
end;
 
begin
  seznam.first:=nil;
  seznam.last:=nil;
  insert('5');
  insert('9726');
  insert('7');
  insert('16');
  insert('792');
  sort;
  vypis;
  readln;
end.
 
prihradky.txt · Last modified: 2014/05/15 15:09 by 147.32.8.115
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki