![]() |
Problem mit dem Sortieren
Hi!
Also ich muss für die Schule ein Projekt machen und habe mich für einen ligamanager entschieden. Nun hab ich aber ein Problem, ich möchte mit dem Bubble - Sort sortieren, aber irgendwie klappt dies nicht ganz. Kuzr zur Erklärung: Es gibt 10 Mannschaften mit maximal 14 Spielern. Diese Spieler sollen nach ihrer erreichten Gesamtpunktzahl sortiert werden (Es gibt eine Auswärts- und Heimpunktzahl). Es muss aber nicht sein, dass ein Spieler ein Auswärts- und ein Heimspiel gemacht hat. Mein Problem ist, dass er die Spieler nur innerhalb der Mannschaft sortiert und nicht unter allen 10 Mannschaften. Weiterhin werden die Mitglieder, die mit einer Gesamtzahl von 0 dastehen nicht nach unten gesetzt, sondern stehen mittendrin. Kann mir vielleicht jemand helfen und sagen, was daran falsch ist?
Delphi-Quellcode:
repeat
teta := true; for i := 1 to 139 do begin t1 := spieler[i].Heimspiele + spieler[i].Auswspiele; t2 := spieler[i+1].Heimspiele + spieler[i+1].Auswspiele; if (t1 <> 0) and (t2 <> 0) then if ((spieler[i].Heimpunkte + spieler[i].Auswpunkte) / t1) < ((spieler[i+1].Heimpunkte + spieler[i+1].Auswpunkte) / t2) then begin teta := false; hlp := spieler[i]; spieler[i] := spieler[i+1]; spieler[i+1] := hlp; end else begin if (t1 = 0 ) and (t2 <> 0) then begin teta := false; hlp := spieler[i]; spieler[i] := spieler[i+1]; spieler[i+1] := hlp; end; end; end; until teta; Danke! Gruß Tiny [edit=sakura] [delphi]-Tags gesetzt. Mfg, sakura[/edit] |
Re: Problem mit dem Sortieren
Hallo Tiny,
zunächst erst mal herzlich willkommen in der Delphi-PRAXiS. Ich kann aus Deinem Quelltext nicht entnehmen, wie Du die Unterscheidung nach Mannschaften durchführst. Es wäre also nicht schlecht, wenn Du auch mal Genaueres zu den Deklarationen von spieler schreiben würdest! |
Re: Problem mit dem Sortieren
Danke!
OK, es gibt einen Record, der Rangeintrag heisst : RangEintrag = Record Mannschaft : integer; nummer : integer; Heimpunkte : integer; Auswpunkte : integer; Heimspiele : integer; Auswspiele : integer; und der Spieler: spieler : array[1 .. 140] of Rangeintrag; Ist es das, was du wissen wolltest, reicht das? Tiny |
Re: Problem mit dem Sortieren
Beim Sortieren kommt es drauf an, 2 Dinge zu vergleichen.
Delphi-Quellcode:
Die 2. Operation beim Sortieren ist es, 2 Dinge zu vertauschen:
procedure CompareRangeintrag(const a, b : RangEintrag):integer;
var s1, s2, p1, p2 : integer; begin t1 := a.Heimspiele + a.Auswspiele; p1 := a.Heimpunkte + a.Auswpunkte; t2 := b.Heimspiele + b.Auswspiele; p2 := b.Heimpunkte + b.Auswpunkte; if t1 <> 0 then p1 := p1 / t1; if t2 <> 0 then p2 := p2 / t2; if p1 > p2 then result :=1 // Rang a ist besser als b else if p1 < p2 then result := -1 // Rang b ist besser als a else result := 0; // beide gleich (schlecht) end;
Delphi-Quellcode:
Mit diesen beiden Grundoperationen ist es egal, ob du BubbleSort, Heapsort, Quicksort
procedure SwapRangeintrag(var a, b : RangEintrag);
var tmp : Rangeintrag; begin tmp := a; a := b; b := tmp; end; oder ein anderes Sortierverfahren verwendest. |
Re: Problem mit dem Sortieren
Ich danke dir!
Hab jetzt keine zeit mehr das umzusetzen, aber ich werd es probieren! Wie gesagt, vielen Dank, für deine Hilfe! Bis zu meinem nächsten Problem! :wink: Tiny |
DP-Maintenance
Dieses Thema wurde von "Christian Seehase" von "Fragen / Anregungen zur DP" nach "Sonstige Fragen zu Delphi" verschoben.
Ist keine Frage zum Forum |
Re: Problem mit dem Sortieren
also, trotzdem noch, ich würds so machen:
ich würd das alles in eine zahl tuen also auswärtspunkte, heimpunkte und so alles verrechnen, und dann das ergebnis sortieren oder hab ich das problem nicht(/falsch) verstanden? |
Re: Problem mit dem Sortieren
Nee, du hast das Problem schon richtig verstanden! Ich werds morgen ausprobieren!
Mir fällt da grad noch was ein! Und zwar bekommt die Mannschaft, die bei einem Spiel gewinnt 2 Punkte, die andere 0, bei unentschieden bekommt jeder einen Punkt. Ich will das auch in einer Tabelle ausgeben. Es gibt aber 18 Spieltage,d..h eine Mannschaft kann, wenn es gut läuft, 18 Spiele gewinnen und hat somit 36 Punkte! Problem: Wie rechnet er die Punkte (2 oder 0) für die ganzen 18 Spieltage zusammen? Er gibt, wenn überhaupt, nur die Punkte für den ersten Spieltag aus! Wie macht man das so im allgemeinen? |
Re: Problem mit dem Sortieren
ähm, ich dachte jetzt es gehtb um die einzelnen spieler, aber egal...
da würd ich sagen: mach
Delphi-Quellcode:
14=mannschaften
spiele:array [1..14, 1..18] of integer
18=spiele da tust du rein für jedes spiel und jede mannschaft die anzahl an punkten zB. mannschaft 5 gewinnt spiel 15 gegen mannschaft 7
Delphi-Quellcode:
und so weiter
spiele[5,15]:=2;
spiele[7,15]:=0 und am ende sagst du
Delphi-Quellcode:
das müsste hinhauen
for i:=1 to 18 do punktemannschaft1:=punktemannschaft1+spiele[i];
|
Re: Problem mit dem Sortieren
und dann wie vorher, du hast nen wert, die punkte, und danach musst du die sortieren
dann in härtefällen noch das torverhältnis, aber das kann man erst mal vernachlässigen :-D |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:27 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz