Forum | | | | - Seite 1 - |
| | Hallo Leute, ich bin noch ein ziemlicher Anfänger, was diese Sprache angeht. Ich bitte deshalb um Verständnis, wenn meine Frage iwie dumm ist oder so.
Mein Problem ist: Ich habe eine Software programmiert, die ein Tanztunier auswerten soll. Eigentlich hat das bis jetzt alles ganz gut geklappt, nur jetz bin ich leider Hängen geblieben: Jedes Tanzpaar bekommt eine Gesamtpunktzahl, die das Programm auch schon errechnet. Aber jetzt muss ich dafür Plätze vergeben, d.h. ich muss es irgendwie hinkriegen, dass die Platzierungen an die Paare vergeben werden, je nachdem, wie viele Punkte sie haben. Jetzt ist das nur nicht so wie ihr denkt: Den ersten Platz Beispielsweise hat das Paar, das am wenigsten Punkte hat.
Ich hoffe, mir kann jemand helfen, diese Platzierungen einfach zu errechnen. Aber das Programm muss damit rechnen, dass 2 Paare gleichviele Punkte haben und deswegen müssen sie auch die gleiche Platzierung bekommen.
Bitte erklärt mir das anschaulich, wenn möglich. Vielen Dank im Voraus!! tecnologymaster |
| | | | |
| | « Dieser Beitrag wurde als Lösung gekennzeichnet. » | | Thomas Freier | @Jörg, warum soll er von unten anfangen? Denn
Den ersten Platz Beispielsweise hat das Paar, das am wenigsten Punkte hat.
Declare Listbox%,Ende%, Platz%, x!, y%, z! ,Text$
SetTrueColor 1
Cls @RGB(255,255,255)
ListBox%=@CreateSortedListBox(%hWnd,"",20,20,200,200)
' kann auch eine unsichtbare Listbox sein....Box(%hWnd,"",0,0,0,0)
@AddString(ListBox%,Format$("000.00",10.20)+" | "+"Müller")
@AddString(ListBox%,Format$("000.00",5.40)+" | "+"Meier")
@AddString(ListBox%,Format$("000.00",1.2)+" | "+"Karl")
@AddString(ListBox%,Format$("000.00",8.00)+" | "+"Wert")
@AddString(ListBox%,Format$("000.00",1.2)+" | "+"Hansen")
Platz%=0
x!=0
y%=20
z!= -1
Decimals 2
WhileLoop @GetCount(ListBox%)
'WhileLoop beginnt mit 1, 1.Zeile Liste = 0, d.h. Index Liste= &Loop-1
x!=val(Translate$(Substr$(@GetString$(ListBox%,(&Loop-1)),1,"|"),",","."))
case x! > z! : inc Platz%' Platz% nur erhöhen, wenn nächster Wert größer
Text$=str$(Platz%)+".Platz "+Substr$(@GetString$(ListBox%,(&Loop-1)),2,"|")
DrawText 300,y%,Text$
Text$="mit "+ str$(x!)+" Punkten"
DrawText 480,y%,Text$
y%=y%+20
z!= x!
EndWhile
WaitKey
End
|
| | | | | |
| | Jörg Sellmeyer | Hallo,
Ich würde die Punktzahlen mit Format$() in Strings umwandeln. Und zwar so, daß alle Zahlenstrings die gleiche Länge haben - also mit Vornullen auffüllen. Wenn die Anzahl maximal dreistellig ist, lautet die Formel so:
Punkte$ = Format$("000",Punkte%) + "|" + Teilnehmer$
Dann alle Strings in eine sortierte Listbox. Dann hast Du schonmal die Reihenfolge. Jetzt kannst Du von unten anfangen die Plätze zu vergeben. Der letzte Eintrag bekommt schonmal den 1. Platz. Du mußt jetzt nur noch zum jeweils nächsthöheren Listenplatz die Punktzahl vergleichen um gleichen Punkteständen den gleichen Platz zuzuweisen. Noch eleganter geht das mit einem Listview aber ich weiß nicht, welche Profanversion Du hast.
Gruß Jörg |
| | | Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 21.12.2010 ▲ |
| |
| | | [offtopic]Thema aus der Hilfe zur Webseite ^^ nach XProfan-Forum verschoben. [/offtopic] |
| | | | |
| | Thomas Freier | @Jörg, warum soll er von unten anfangen? Denn
Den ersten Platz Beispielsweise hat das Paar, das am wenigsten Punkte hat.
Declare Listbox%,Ende%, Platz%, x!, y%, z! ,Text$
SetTrueColor 1
Cls @RGB(255,255,255)
ListBox%=@CreateSortedListBox(%hWnd,"",20,20,200,200)
' kann auch eine unsichtbare Listbox sein....Box(%hWnd,"",0,0,0,0)
@AddString(ListBox%,Format$("000.00",10.20)+" | "+"Müller")
@AddString(ListBox%,Format$("000.00",5.40)+" | "+"Meier")
@AddString(ListBox%,Format$("000.00",1.2)+" | "+"Karl")
@AddString(ListBox%,Format$("000.00",8.00)+" | "+"Wert")
@AddString(ListBox%,Format$("000.00",1.2)+" | "+"Hansen")
Platz%=0
x!=0
y%=20
z!= -1
Decimals 2
WhileLoop @GetCount(ListBox%)
'WhileLoop beginnt mit 1, 1.Zeile Liste = 0, d.h. Index Liste= &Loop-1
x!=val(Translate$(Substr$(@GetString$(ListBox%,(&Loop-1)),1,"|"),",","."))
case x! > z! : inc Platz%' Platz% nur erhöhen, wenn nächster Wert größer
Text$=str$(Platz%)+".Platz "+Substr$(@GetString$(ListBox%,(&Loop-1)),2,"|")
DrawText 300,y%,Text$
Text$="mit "+ str$(x!)+" Punkten"
DrawText 480,y%,Text$
y%=y%+20
z!= x!
EndWhile
WaitKey
End
|
| | | | |
| | Jörg Sellmeyer | Ah - stimmt ja. Der kleinste Eintrag ist oben. Ich programmier zu wenig im Moment... |
| | | Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 22.12.2010 ▲ |
| |
| | Thomas Freier | Ergänzend, falls nach zwei 1. der Dritte den 3.Platz hat:
Declare Listbox%,Ende%, Platz%, x!, y%, z! ,Text$
SetTrueColor 1
Cls @RGB(255,255,255)
ListBox%=@CreateSortedListBox(%hWnd,"",20,20,200,200)
' kann auch eine unsichtbare Listbox sein....Box(%hWnd,"",0,0,0,0)
@AddString(ListBox%,Format$("000.00",10.20)+" | "+"Müller")
@AddString(ListBox%,Format$("000.00",5.40)+" | "+"Meier")
@AddString(ListBox%,Format$("000.00",1.2)+" | "+"Karl")
@AddString(ListBox%,Format$("000.00",8.00)+" | "+"Wert")
@AddString(ListBox%,Format$("000.00",1.2)+" | "+"Hansen")
Platz%=0
x!=0
y%=20
z!= -1
Decimals 2
WhileLoop @GetCount(ListBox%)
'WhileLoop beginnt mit 1, 1.Zeile Liste = 0, d.h. Index Liste= &Loop-1
x!=val(Translate$(Substr$(@GetString$(ListBox%,(&Loop-1)),1,"|"),",","."))
case x! > z! : Platz% = &Loop
Text$=str$(Platz%)+".Platz "+Substr$(@GetString$(ListBox%,(&Loop-1)),2,"|")
DrawText 300,y%,Text$
Text$="mit "+ str$(x!)+" Punkten"
DrawText 480,y%,Text$
y%=y%+20
z!= x!
EndWhile
WaitKey
End
oder der 1. der mit den meisten Punkten ist:
Declare Listbox%, Box%, Platz%, x!, y%, z! ,Text$
SetTrueColor 1
Cls @RGB(255,255,255)
' kann auch eine unsichtbare Listbox sein....Box(%hWnd,"",0,0,0,0)
ListBox%=@CreateSortedListBox(%hWnd,"",20,20,200,200)
' Listbox zum Sortieren bei Punktegleichheit
Box%=@CreateSortedListBox(%hWnd,"",0,0,0,0)
@AddString(ListBox%,Format$("000.00",10.20)+" | "+"Müller")
@AddString(ListBox%,Format$("000.00",5.40)+" | "+"Meier")
@AddString(ListBox%,Format$("000.00",5.4)+" | "+"Karl")
@AddString(ListBox%,Format$("000.00",5.40)+" | "+"Wert")
@AddString(ListBox%,Format$("000.00",1.2)+" | "+"Hansen")
Platz%=1
x!=0
y%=20
z!= 10000
Decimals 2
WhileLoop @GetCount(ListBox%),1,-1
'WhileLoop beginnt mit 1, 1.Zeile Liste = 0, d.h. Index Liste= &Loop-1
@AddString(Box%,@GetString$(ListBox%,(&Loop-1)))' für die Ausgabe
x!=val(Translate$(Substr$(@GetString$(ListBox%,(&Loop-1)),1,"|"),",","."))
case x! < z!: Platz% =@GetCount(ListBox%)-&Loop+1
' Wenn der nächste Wert in Box 1 kleiner: Ausgabe Box 2
case x! > val(Translate$(Substr$(@GetString$(ListBox%,(&Loop-2)),1,"|"),",",".")): Anzeige
z!= x!
EndWhile
WaitKey
End
Proc Anzeige
Declare a%
a%=0
While a%<=(@GetCount(Box%)-1)
Text$=str$(Platz%)+".Platz "+Substr$(@GetString$(Box%,a%),2,"|")
DrawText 300,y%,Text$
Text$="mit "+ str$(x!)+" Punkten"
DrawText 480,y%,Text$
y%=y%+20
inc a%
Endwhile
DestroyWindow(box%)
Box%=@CreateSortedListBox(%hWnd,"",0,0,0,0)
Endproc
Sollte nach der Hilfe alles ab Profan 7.5 laufen. Edit 25.12., damit auch die Namen bei Punktegleichheit sortiert sind. |
| | | | |
|
AntwortenThemenoptionen | 13.515 Betrachtungen |
ThemeninformationenDieses Thema hat 4 Teilnehmer: |