Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Problem mit dem Sortieren (https://www.delphipraxis.net/20289-problem-mit-dem-sortieren.html)

Tiny 15. Apr 2004 16:53


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]

r_kerber 15. Apr 2004 17:03

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!

Tiny 15. Apr 2004 17:11

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

shmia 15. Apr 2004 17:40

Re: Problem mit dem Sortieren
 
Beim Sortieren kommt es drauf an, 2 Dinge zu vergleichen.
Delphi-Quellcode:
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;
Die 2. Operation beim Sortieren ist es, 2 Dinge zu vertauschen:
Delphi-Quellcode:
procedure SwapRangeintrag(var a, b : RangEintrag);
var
   tmp : Rangeintrag;
begin
   tmp := a;
   a := b;
   b := tmp;
end;
Mit diesen beiden Grundoperationen ist es egal, ob du BubbleSort, Heapsort, Quicksort
oder ein anderes Sortierverfahren verwendest.

Tiny 15. Apr 2004 19:29

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 15. Apr 2004 19:53

DP-Maintenance
 
Dieses Thema wurde von "Christian Seehase" von "Fragen / Anregungen zur DP" nach "Sonstige Fragen zu Delphi" verschoben.
Ist keine Frage zum Forum

glkgereon 15. Apr 2004 20:55

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?

Tiny 15. Apr 2004 21:12

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?

glkgereon 15. Apr 2004 21:19

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:
spiele:array [1..14, 1..18] of integer
14=mannschaften
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:
spiele[5,15]:=2;
spiele[7,15]:=0
und so weiter

und am ende sagst du

Delphi-Quellcode:
for i:=1 to 18 do punktemannschaft1:=punktemannschaft1+spiele[i];
das müsste hinhauen

glkgereon 15. Apr 2004 21:21

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 09:28 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz