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