Variablenwert sortieren

  • 6 Antworten
  • Letztes Antwortdatum
rtwl

rtwl

Dauer-User
1.581
Gibt es eine Möglichkeit den Variablenwert (eine Zahl zwischen 1 und 100) von Variablen zb (%P1=21, %P2=9, %P3=82,...) absteigend zu sortieren?
So dass ich dann zb neue Variablen mit der Platzierung bekomme. Dann also hier im Beispiel (%P1sort=2, %P2sort=3, %P3sort=1)

Bei nur 3 Variablen wäre es ja einfach mit if then. Aber in meinem konkreten Fall sind es 6 Variablen, das wäre dann schon eine sehr aufwendige if then else Geschichte.

hat da jemand eine Tipp für mich?
 
Es gibt die Aufgabe "Array Process" mit der du die Variablen sortieren kannst.
In deinem Beispiel haben die Variabeln dann folgende Werte
%P1=82
%P2=21
%P3=9
 
okay damit lässt sich sicher was basteln.
ich habe quasi 6 Spieler mit unterschiedlicher Punkteanzahl. Dazu würde ich gerne die aktuelle Platzierung anzeigen lassen.
wenn also die Werte in die bestehenden Variablen vertauscht werden, ist das so nicht (für meinen Zweck) brauchbar.

theoretisch könnte ich ja eine andere variable pro Spieler beschreiben lassen und dann einen Vergleich starten. Ob also %P1=21 identisch ist mit (zb) %P2x=21 und er dann die dritte Stelle von der Variablen Bezeichnung (%P2x) als Platzierung speichert in %P1platz=2 speichert. Dann weiß ich, daß Spieler 1 aktuell den 2. Rang belegt.

aber, kann ich die Variablen Bezeichnung auslesen und nur die 3. Position daraus ausgeben lassen?
 
Mit 2 For-Schleifen ist es möglich

Task importieren

Rang (84)
A1: Array Set [ Variable Array:%spieler Values:%Spieler() Teiler:, ]
A2: Array Process [ Variable Array:%spieler Typ:Sort Numeric, Integer ]
A3: Array Process [ Variable Array:%spieler Typ:Reverse ]
A4: For [ Variable:%punkte Einträge:%Spieler() ]
A5: Variable Addiere [ Name:%zähler1 Wert:1 Obergrenze:0 ]
A6: Variable Lösche [ Name:%zähler2 Mustervergleich:Aus Local Variables Only:Aus ]
A7: For [ Variable:%sortiert Einträge:%spieler() ]
A8: Variable Addiere [ Name:%zähler2 Wert:1 Obergrenze:0 ]
A9: Variable Setzen [ Name:%RangSpieler(%zähler1) Zu:%zähler2 Recurse Variables:Aus Mathematisch:Aus Hinzufügen:Aus ] If [ %punkte ~ %sortiert ]
A10: End For
A11: End For
 
Danke @Mathens funktioniert bis auf eine Kleinigkeit perfekt!

Bei Gleichstand der Punkte wird immer der schlechtere Platz angegeben.
also bei zwei zweitplatzierten bekommen beide den Platz 3 zugesprochen.

Spieler 3: Platz 1 = 100 Punkte
Spieler 1: Platz 3 = 78 Punkte
Spieler 2: Platz 3 = 78 Punkte
Spieler 4: Platz 4 = 60 Punkte

Spieler 1 und 2 sollte Platz 2 anstelle von 3 zugesprochen werden.

kann man das noch irgendwie lösen?
 
Bitte schön

Task importieren

Rang1.1 (86)
A1: Array Set [ Variable Array:%spieler Values:%Spieler() Teiler:, ]
A2: Array Process [ Variable Array:%spieler Typ:Sort Numeric, Integer ]
A3: For [ Variable:%punkte Einträge:%Spieler() ]
A4: Variable Addiere [ Name:%zähler1 Wert:1 Obergrenze:0 ]
A5: Variable Setzen [ Name:%zähler2 Zu:%Spieler(#) Recurse Variables:Aus Mathematisch:Aus Hinzufügen:Aus ]
A6: For [ Variable:%sortiert Einträge:%spieler() ]
A7: Variable Setzen [ Name:%RangSpieler(%zähler1) Zu:%zähler2 Recurse Variables:Aus Mathematisch:Aus Hinzufügen:Aus ] If [ %punkte ~ %sortiert ]
A8: Variable Substrahiere [ Name:%zähler2 Wert:1 Obergrenze:0 ]
A9: End For
A10: End For
 
  • Danke
Reaktionen: Spardas und rtwl
Vielen vielen Dank!!
 

Ähnliche Themen

rtwl
Antworten
2
Aufrufe
798
rtwl
rtwl
rtwl
Antworten
7
Aufrufe
894
rtwl
rtwl
A
Antworten
4
Aufrufe
2.434
ati975
A
Zurück
Oben Unten