unit highscor;
interface
{ A }
type
     spieler = record
         name:string[12];
         punkte:longint;
         end;
     spielertyp=array[1..10] of spieler;
var
     sp:spielertyp;i,fehler:integer;

procedure sort_feld(var sort:spielertyp;links,rechts:integer);
procedure score_schreiben;
procedure score_lesen;

implementation
{ B }
procedure sort_feld(var sort:spielertyp;links,rechts:integer);
var
  x,y,index:integer;
  temp1,temp2:longint;
  tempn:string[12];
begin
  if links < rechts then
  begin
  x:=links;y:=rechts;
  index:=(links + rechts) div 2;
  temp1:=sort[index].punkte; { Sortierlelement }
   while x <= y do
      begin
       while sort[x].punkte > temp1 do x:=x+1;
       while sort[y].punkte < temp1 do y:=y-1;
       if x <= y then
          begin         { Vertauschen }
           temp2:=sort[x].punkte;
           tempn:=sort[x].name;
           sort[x].punkte:=sort[y].punkte;
           sort[x].name:=sort[y].name;
           sort[y].punkte:=temp2;
           sort[y].name:=tempn;
           x:=x+1;
           y:=y-1;
          end;
        end;
       sort_feld(sort,links,y);   { 1.neues Teilfeld }
       sort_feld(sort,x,rechts);  { 2.neues Teilfeld }
    end;
end;
{ C }
procedure score_schreiben;
var
   i:integer;
   datei:file of spieler;
begin
assign(datei,'score.dat');
rewrite(datei);
for i:=1 to 10 do
begin
 write(datei,sp[i]);
end;
close(datei);
end;
{ D }
procedure score_lesen;
var
   i:integer;
   daten:file of spieler;
begin
assign(daten,'score.dat');
{$I-} reset(daten); {$I+}
fehler:=ioresult;
if fehler <> 0 then
  begin
   score_schreiben;
   exit;
  end;
 for i:=1 to 10 do
  read(daten,sp[i]);
  close(daten);
end;
{ E }
begin
for  i:=1 to 10 do
  begin
  sp[i].name:='............';
  sp[i].punkte:=0;
  end;
end.
