Einzelnen Beitrag anzeigen

boozzz

Registriert seit: 14. Feb 2005
13 Beiträge
 
#3

Re: Sortierverfahren in einer txt-Datei

  Alt 6. Jan 2006, 15:45
Das Problem mit dem Stack-Überlauf wäre gelöst. Das Problem war, dass der Inhalt der Variablen "ende" ungerade war. Daraus ergab sich eine Endlosschleife.

Jetzt hab ich aber ein neues Problem. Es soll nun von unten nach oben sortiert werden (wertniedrigste Zahl zuerst).

Problem: In der Bestenliste wird nur die niedrigste Zahl gespeichert. Das heißt: platz[1], platz[2], platz[3],... haben alle den selben (niedrigsten) Wert.
Delphi-Quellcode:
procedure TForm1.bestenlistebuttonClick(Sender: TObject);
var ende,zwischenspeicher,lauefer,x:integer;
    platz: array[1..10000] of integer;
begin
  bestenliste.Show;

  highscore:=TStringList.Create;
  if FileExists ('memory.txt') then
    highscore.LoadFromFile('memory.txt');

  ende:=highscore.Count;

  lauefer:=0;

  for x:=1 to 10 do
  begin
    platz[x]:=StrToInt(highscore[lauefer]);
    lauefer:=lauefer+2;
  end;

  for x:=1 to 10 do
  begin
    lauefer:=2;
    repeat
      zwischenspeicher:=StrToInt(highscore[lauefer]);
      if zwischenspeicher<platz[x] then
      begin
        platz[x+9]:=platz[x+8];
        platz[x+8]:=platz[x+7];
        platz[x+7]:=platz[x+6];
        platz[x+6]:=platz[x+5];
        platz[x+5]:=platz[x+4];
        platz[x+4]:=platz[x+3];
        platz[x+3]:=platz[x+2];
        platz[x+2]:=platz[x+1];
        platz[x+1]:=platz[x];
        platz[x]:=zwischenspeicher;
      end else
      if zwischenspeicher<platz[x+1] then
      begin
        platz[x+9]:=platz[x+8];
        platz[x+8]:=platz[x+7];
        platz[x+7]:=platz[x+6];
        platz[x+6]:=platz[x+5];
        platz[x+5]:=platz[x+4];
        platz[x+4]:=platz[x+3];
        platz[x+3]:=platz[x+2];
        platz[x+2]:=platz[x+1];
        platz[x+1]:=zwischenspeicher;
      end else
      if zwischenspeicher<platz[x+2] then
      begin
        platz[x+9]:=platz[x+8];
        platz[x+8]:=platz[x+7];
        platz[x+7]:=platz[x+6];
        platz[x+6]:=platz[x+5];
        platz[x+5]:=platz[x+4];
        platz[x+4]:=platz[x+3];
        platz[x+3]:=platz[x+2];
        platz[x+2]:=zwischenspeicher;
      end else
      if zwischenspeicher<platz[x+3] then
      begin
        platz[x+9]:=platz[x+8];
        platz[x+8]:=platz[x+7];
        platz[x+7]:=platz[x+6];
        platz[x+6]:=platz[x+5];
        platz[x+5]:=platz[x+4];
        platz[x+4]:=platz[x+3];
        platz[x+3]:=zwischenspeicher;
      end else
      if zwischenspeicher<platz[x+4] then
      begin
        platz[x+9]:=platz[x+8];
        platz[x+8]:=platz[x+7];
        platz[x+7]:=platz[x+6];
        platz[x+6]:=platz[x+5];
        platz[x+5]:=platz[x+4];
        platz[x+4]:=zwischenspeicher;
      end else
      if zwischenspeicher<platz[x+5] then
      begin
        platz[x+9]:=platz[x+8];
        platz[x+8]:=platz[x+7];
        platz[x+7]:=platz[x+6];
        platz[x+6]:=platz[x+5];
        platz[x+5]:=zwischenspeicher;
      end else
      if zwischenspeicher<platz[x+6] then
      begin
        platz[x+9]:=platz[x+8];
        platz[x+8]:=platz[x+7];
        platz[x+7]:=platz[x+6];
        platz[x+6]:=zwischenspeicher;
      end else
      if zwischenspeicher<platz[x+7] then
      begin
        platz[x+9]:=platz[x+8];
        platz[x+8]:=platz[x+7];
        platz[x+7]:=zwischenspeicher;
      end else
      if zwischenspeicher<platz[x+8] then
      begin
        platz[x+9]:=platz[x+8];
        platz[x+8]:=zwischenspeicher;
      end else
      if zwischenspeicher<platz[x+9] then
      begin
        platz[x+9]:=zwischenspeicher;
      end;

      lauefer:=lauefer+2;
    until (lauefer=ende) or (lauefer+1=ende);
  end;
  Form1.Edit1.Text:=IntToStr(zwischenspeicher);
  bestenliste.Label1.Caption:=IntToStr(platz[1]);
  bestenliste.Label2.Caption:=IntToStr(platz[2]);
  bestenliste.Label3.Caption:=IntToStr(platz[3]);
  bestenliste.Label4.Caption:=IntToStr(platz[4]);
  bestenliste.Label5.Caption:=IntToStr(platz[5]);
  bestenliste.Label6.Caption:=IntToStr(platz[6]);
  bestenliste.Label7.Caption:=IntToStr(platz[7]);
  bestenliste.Label8.Caption:=IntToStr(platz[8]);
  bestenliste.Label9.Caption:=IntToStr(platz[9]);
  bestenliste.Label10.Caption:=IntToStr(platz[10]);

  highscore.Free;
end;
  Mit Zitat antworten Zitat