Ebbi19 - Di 19.04.05 21:40
Titel: Wie sortiere sich Fußballtabelle nach der Tordifferenz???
Hallo!!
Habe in Delphi eine Programm programmiert wo ich Ergebnisse von Spieltagen eingebe und aus diesen wird eine Tabelle erzeugt. Diese wird nach Punkten und Toren sortiert.
Aber leider klappt nur die Sortierung nach Punkten.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| for i:= 1 to 18 do Begin Max := VereinA[i].Punkte; Pos := i; VereinB := VereinA[i]; for j := i+1 to 18 do If VereinA[j].Punkte > Max Then Begin Max := VereinA[j].Punkte; Pos := j; VereinB:=VereinA[j];
VereinA[pos] := VereinA[i]; VereinA[i] := VereinB; TordifTA[x] := VereinA[i].Tordifferenz; end; end; |
--> Hier findet die Sortierung nach Punkten statt dafür habe ich ein Array vom Typ Record erstellt für 18 Mannschften.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53:
| If VereinA[1].Punkte = VereinA[2].Punkte Then begin Anzahl := 2; Anfang := 1; Ende := 4;
for x:= Anfang to Ende do Begin TordifTA[x] := VereinA[i].Tordifferenz; Max2 := TordifTA[x]; Pos2 := x; TordifTB := TordifTA[x]; for y := Anfang+1 to Ende do If TordifTA[y] > Max Then Begin Max2 := TordifTA[y]; Pos2 := y; TordifTB:= TordifTA[y];
TordifTA[pos2] := TordifTA[x]; TordifTA[x] := TordifTB; VereinA[i].Tordifferenz := TordifTB; end;
end; end
else begin VereinA[pos] := VereinA[i]; VereinA[i] := VereinB; end; If VereinA[1].Punkte = VereinA[3].Punkte Then begin Anzahl := 3; Anfang := 1; Ende := 3;
for x:= Anfang to Ende do Begin TordifTA[x] := VereinA[i].Tordifferenz; Max2 := TordifTA[x]; Pos2 := x; TordifTB := TordifTA[x]; for y := Anfang+1 to Ende do If TordifTA[y] > Max Then Begin Max2 := TordifTA[y]; Pos2 := y; TordifTB:= TordifTA[y];
TordifTA[pos2] := TordifTA[x]; TordifTA[x] := TordifTB; VereinA[i].Tordifferenz := TordifTB; end;
end; end else begin TordifTA[pos2] := TordifTA[x]; TordifTA[x] := TordifTB; end; |
--> Hier ist mein Ansatz für die Sortierung nach der Tordifferenz
wobei dies von den Punkten abhänig ist. Nur bei Punktgleichheit soll nach der Tordifferenz sortiert werden. Habe dies nür für erste 3 Mannschaften gemacht. Dafür habe ich ein Array vom Type integer erstellt. Aber leider funktioniert es nicht.
Ich hoffe ihr könnt mir helfen oder mir eine einfachere variante der Sortierung nennen.
Danke, Danke !!
jetzt noch zwei Sorry:
- einmal dafür das text nicht formatiert ist
--> Fehlermeldung bei Formations Versuch (Laufzeitfehler)
- zweites falls ich frage in flasches Forum
geschrieben habe
MfG
Ebbi
astaria - Do 12.05.05 12:46
Hmm, da haste ja was ganz schön kompliziertes hingebastelt ;) Is zwar nu schon lange her, aber ich antworte trotzdem mal. Mein Vorschlag zur Lösung des Problems:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33:
| var sortcomplete:Boolean; i:Integer; tempVerein:TVerein;
sortcomplete:=False; while not sortcomplete do begin sortcomplete:=True; for i:=1 to 17 do begin if VereinA[i].Punkte<VereinA[i+1].Punkte then begin tempVerein:=VereinA[i]; VereinA[i]:=VereinA[i+1]; VereinA[i+1]:=tempVerein; sortComplete:=False; end else if VereinA[i].Punkte=VereinA[i+1].Punkte then begin if VereinA[i].Tordifferenz<VereinA[i+1].Tordifferenz then begin tempVerein:=VereinA[i]; VereinA[i]:=VereinA[i+1]; VereinA[i+1]:=tempVerein; sortComplete:=False; end; end; end; end; |
Ich hab das zwar nicht probiert, sollte aber im großen und ganzen so gehen. Basis des ganzen ist ein simples Bubble-Sort (bei 18 Einträgen mehr als vertretbar). Dabei wird immer wieder überprüft, ob ein Verein weniger Punkte erzielt hat, als der Nächste in der Liste. Ist das der Fall, werden die Positionen getauscht. Sind die Punktestände gleich, wird zusätzlich die Tordifferenz zum Vgl. herangezogen und bei Bedarf wiederum getauscht. Nach und nach wandert nun das beste Team nach oben, das schlechteste nach unten. Wenn kein Austausch mehr vorgenommen wurde, ist sortcomplete=true und unsere Liste ist sortiert (Index 1 ist das Beste Team).
Viele Grüße aus Graz nach Dresden ;)
Moderiert von
raziel: Code- durch Delphi-Tags ersetzt.