Seite 1 von 2
Sortieren von Tabellen
Verfasst: 16.02.2006 10:57
von Oli
Hallo!
Wie kann ich folgendes Beispiel sortiert in einer Tabelle ausgeben?
Structure Spieler
Name.s
Alter.w
Groesse.w
Endstructure
Dim Teilnehmer.Spieler(10)
damit sowas rauskommt:
Name _ _ Punkte _ _ Sätze
1. Klaus _ 54 _ _ _ 22
2. Peter _ 38 _ _ _ 36
3. Tim _ _ 38 _ _ _ 27
4. Paul _ _ 22_ _ _ 17
Entscheidendes Kriterium sollen natürlich die meisten Punkte sein. Bei Punktegleichstand soll die höhere Anzahl an Sätzen gelten.
Mit Sortarray fluppt das irgendwie nicht.
Vielen Dank
Oli
Verfasst: 16.02.2006 11:22
von ts-soft
Vielleicht so?
Code: Alles auswählen
Structure Spieler
Name.s
Alter.w
Groesse.w
Punkte.l
Saetze.l
EndStructure
Dim Teilnehmer.Spieler(10)
Teilnehmer(0)\Name = "Pedro"
Teilnehmer(0)\Punkte = 10
Teilnehmer(1)\Name = "Miguel"
Teilnehmer(1)\Punkte = 50
Teilnehmer(2)\Name = "Sanchez"
Teilnehmer(2)\Punkte = 20
SortStructuredArray(Teilnehmer(), 1, OffsetOf(Spieler\Punkte), #PB_Sort_Long)
For I = 0 To 2
Debug Teilnehmer(I)\Name + ": " + Str(Teilnehmer(I)\Punkte)
Next
Verfasst: 16.02.2006 11:44
von Oli
Hallo ts-soft,
vielen Dank für deine Antwort.
Das Problem ist allerdings, dass ich nicht weiß, wie ich es bei Punktegleichstand schaffe, dass er dann den mit den meisten Sätzen zuerst ausgibt.
Ich brauche also sozusagen eine verschachtelte Sortierfunktion. Gibt es sowas?
Viele Grüße
Oli
Verfasst: 16.02.2006 11:49
von ts-soft
Versuch doch 2 Sortierungen, erst nach dem Zweirangigem und danach nach
dem Erstrangigem. Habs nicht getestet, sollte aber gehen.
Verfasst: 16.02.2006 12:14
von Oli
Oh man!
Da wär ich nie drauf gekommen!
Vielen Dank, es scheint zu funktionieren!
Verfasst: 16.02.2006 13:39
von Oli
Hallo nochmal!
Klappt leider doch noch nicht richtig mit der Tabelle ...
Habe mal diese kleine Tabellen-Übung geschrieben.
Wie gesagt, erster soll der mit den meisten Punkten sein, bei Punktgleichheit soll die bessere Tordifferenz entscheiden (wie in Sportligen).
Doch beim zweiten Sortstructuredarray bringt er die Tordifferenz wieder durcheinander.
Structure Mannschaft
Name$
Punkte.w
Tore.w
Gegentore.w
Tordifferenz.w
EndStructure
Dim Team.Mannschaft(10)
Procedure Ausgabe_Tabelle()
If OpenWindow(0, 100, 100, 500, 400, #PB_Window_SystemMenu , "Tabelle")
If CreateGadgetList(WindowID())
ListIconGadget(0, 5, 5, 490, 390, "Platz", 40)
AddGadgetColumn(0, 1, "Mannschaft", 200)
AddGadgetColumn(0, 2, "Punkte", 50)
AddGadgetColumn(0, 3, "Tore", 50)
AddGadgetColumn(0, 4, "Dif.", 50)
EndIf
For i = 1 To 5
AddGadgetItem(0, -1, Str(i) + "." + Chr(10) + team(i)\Name$ + Chr(10) + Str(team(i)\Punkte) + Chr(10) + Str(team(i)\Tore) + " : " + Str(team(i)\gegentore) + Chr(10) + Str(team(i)\Tordifferenz) )
Next
EndIf
Repeat
EventID = WaitWindowEvent()
If EventID = #PB_Event_CloseWindow
Quit = 1
EndIf
Until Quit=1
EndProcedure
team(1)\name$ = "Team 1"
team(1)\punkte = 12
team(1)\Tore = 22
team(1)\Gegentore = 18
team(1)\Tordifferenz = team(1)\Tore - team(1)\gegentore
team(2)\name$ = "Team 2"
team(2)\punkte = 11
team(2)\Tore = 26
team(2)\Gegentore = 12
team(2)\Tordifferenz = team(2)\Tore - team(2)\gegentore
team(3)\name$ = "Team 3"
team(3)\punkte = 11
team(3)\Tore = 21
team(3)\Gegentore = 13
team(3)\Tordifferenz = team(3)\Tore - team(3)\gegentore
team(4)\name$ = "Team 4"
team(4)\punkte = 10
team(4)\Tore = 17
team(4)\Gegentore = 19
team(4)\Tordifferenz = team(4)\Tore - team(4)\gegentore
team(5)\name$ = "Team 5"
team(5)\punkte = 11
team(5)\Tore = 18
team(5)\Gegentore = 10
team(5)\Tordifferenz = team(5)\Tore - team(5)\gegentore
SortStructuredArray(Team(), 1, OffsetOf(Mannschaft\Tordifferenz), #PB_Sort_Word, 1, 5 )
SortStructuredArray(Team(), 1, OffsetOf(Mannschaft\Punkte), #PB_Sort_Word, 1, 5 )
Ausgabe_Tabelle()
Hat jemand vielleicht eine Idee, wie ich das Problem lösen kann oder wo mein Denkfehler ist?
Vielen Dank und viele Grüße
Oli
Verfasst: 16.02.2006 14:02
von ts-soft
Das wird kompliziert. Am besten legste zusätzlich eine structurierte Linkliste
an, die nur ein Identifiezierungsfeld, sowie die Tordifferenz enthält. Jetzt
mußte vor der Anzeige noch durch die 2 Liste iterieren um den besseren zu
finden, diesen entfernste dann gleich aus der linklist.
Ist etwas komplizierter, deswegen hab ich im Moment auch keine Lust, ein
Beispiel zu proggen, sry.
Verfasst: 16.02.2006 14:12
von Oli
Hallo TS-SOft,
kein Problem
Wenigstens weiß ich jetzt schon, wo ich suchen muss.
Vielen Dank und viele Grüße
Oli
Verfasst: 16.02.2006 14:13
von freedimension
Mach dich mal schlau darüber was ein stabiler und ein unstabiler Sortieralgorithmus ist und bring das dann Fred (dem PB-Chefentwickler) bei

Verfasst: 16.02.2006 14:15
von HeX0R
Du kannst auch mit SwapElements() arbeiten, und dir damit deine eigene Sortier-Funktion basteln.
Das wäre vermutlich einfacher