ein Problem mit der Logik :D

  • Moin moin,

    hier geht es zwar um ein logisches Problem wird jedoch später in PHP geschrieben also nicht wundern,

    es geht um eine Tabellenplatzierung:
    man hat 1. Die Punkte eines Teams und 2. die Win/Loose differenz
    Das ganze wird so geordnet:
    1. Je größer die Punktzahl desto höher der Platz,
    2. wenn beide Teams die gleich Punktzahl haben wird nach der Win/Loose differenz geschaut (auch je höher desto besser die platzierung)
    Ich hab jetzt die tolle aufgabe bekommen das script von irgendjemandem umzuschreiben *juhu*

    Spoiler anzeigen

    ihr seht etwas umständlich gemacht und vor allem es gibt fehler wenn ein team eine höhere differenz hat aber weniger punkte als ein anderes weil er in die ifabfragen immer && (AND) macht...

    Ich würde erstmal mit ner schleife beginnen aber zum Rest fällt mir nix ein da steh ich grad voll aufm schlauch :P

    MFG FireFlyer

    MFG FireFlyer

    *Paradox ist, wenn man sich im Handumdrehen den Fuss bricht* :D

    • Offizieller Beitrag

    Mit PHP kenne ich mich nicht aus, aber in AutoIt würde ich es so machen:

    Beispiel:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstants.au3>
    Global $max = 5 ; Anzahl der Teilnehmer
    Global $Points[$max] = [25, 5, 7, 25, 34] ; Punkte der Teilnehmer
    Global $Diff[$max] = [2, 1, 0, 1, 2] ; Win/Loose der Teilnehmer
    Global $Names[$max] = ['cobra', 'gamma', 'digger', 'golf', 'uruk'] ; Namen der Teilnehmer

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To $max-2
    For $j = $i+1 To $max-1
    If $Points[$i] < $Points[$j] Then ; Wenn die Punktzahl kleiner ist, dann...
    _Change($i, $j) ; austauschen
    ElseIf $Points[$i] = $Points[$j] Then ; Bei Punktgleichstand
    If $Diff[$i] < $Diff[$j] Then _Change($i, $j) ; auf Win/Loose testen und ggf. austauschen
    EndIf
    Next
    Next

    [/autoit] [autoit][/autoit] [autoit]

    GUICreate('Test', 640, 480)
    Global $listview = GUICtrlCreateListView('Punkte|Diff|Name', 5, 5, 630, 470)

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To $max-1
    GUICtrlCreateListViewItem($Points[$i] & '|' & $Diff[$i] & '|' & $Names[$i], $listview)
    Next

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState()
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

    [/autoit] [autoit][/autoit] [autoit]

    Func _Change($a, $b)
    Local $h
    $h = $Points[$a]
    $Points[$a] = $Points[$b]
    $Points[$b] = $h
    $h = $Diff[$a]
    $Diff[$a] = $Diff[$b]
    $Diff[$b] = $h
    $h = $Names[$a]
    $Names[$a] = $Names[$b]
    $Names[$b] = $h
    EndFunc

    [/autoit]

    BugFix : Ja, ich würde eigentlich ein mehrdimensionales Array verwenden. Für Anfänger ist es so aber einfacher, IMHO. :rolleyes:

  • Moin,

    eine Frage, die Daten kommen doch mit Sicherheit aus einer Datenbank, da liegt es nahe sich 1. eine eigene Abfrage zu basteln 2. diese in einer View zu speichern 3. nur noch die Abfrage auf die View zu machen. Vorteil, man spart sich irre viel Tipparbeit und die Fehlerquellen werden minimiert, da man bei weitem nicht mehr so viel php tippen muss :)

    Zu deinem (bzw. dem Skript von deinem Vorgänger), würde das mal in eine Funktion packen, ist doch der reinste Horror alle Gruppen nutzen doch den selben Quelltext, zudem wenn ich an einer Stelle was änder, muss ich das immer in allen Gruppen machen. Also am besten die Datei neu aufbauen :)

    Mfg
    Jens (McPoldy)

    Twitter: jkroeger

    Denn die Dinge, die wir erst lernen müssen, bevor wir sie tun, lernen wir beim Tun.(Aristoteles)

    • Offizieller Beitrag

    Hi,
    stimme da McPoldy zu. Wenn du Zugriff auf die Datenbank hast, reicht doch eine sortierte Abfrage und das gewünschte Ergebnis liegt vor.
    So etwa:
    "SELECT team,points,diff FROM table ORDER BY points DESC, diff DESC"

    Solltest du keinen Zugriff auf die Datenbank haben, dann halt eine Lösung mit Array. Auch wenn Oscar wegen der Einfachheit mit mehreren 1D-Array arbeitet ;), bessere Übersicht und einfachere (vor allem mehrstufige) Sortierung geht mit einem 2D-Array.
    $array[n][3] ; [n][0]=TEAM, [n][1]=PUNKTE, [n][2]=DIFF
    Das ganze mehrstufig sortieren (ArrayMore.au3) und fertig.