Von mehreren Variablen die größte ermitteln??

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Hallo liebe Community.
    Ich habe eine Frage an euch: Wie kann man aus mehreren Variablen die bestimmen, die den höchsten Wert hat?
    Beispiel:

    • Variable1 hat den Wert 5.
    • Variable2 hat den Wert 7.
    • Variable3 hat den Wert 10.
    • Variable4 hat den Wert 15.

    Jetzt soll ermittelt werden, welche Variable (1-4) den höchsten Wert hat.
    In diesem Falle ist das Variable4 und dies soll irgendwie ausgegeben werden.
    Ich hoffe, ihr könnt mir weiterhelfen.


    Mit freundlichen Grüßen
    Hardy :)

  • Könntest du das genauer erklären?
    Am Besten mit einem Scriptschnipsel.

    for(new i;i<4;i++)//Variable wird erstellt. Wenn i >= 4 ist wird die Schleife gestoppt ansonsten wird der Wert von i um 1 addiert
    {
    }
    /* Bei der Erstellung hat die Var immer den Wert null also erste Runde der Schleife mit i == 0 runde vorbei die schleife überprüft ist i schon gleich 4 oder höher oder geht noch was nein i ist erst 0 also wird i um 1 erhöht und es geht die zweite runde durch usw. bis i den Wert 3 erreicht hat bei der 3 beendet er die "runde" und fragt ab ist i < 4 auch wenn ich i um 1 addiere? Nein zwar haben wir nur die 3 aber wenn i um 1 addiert wird haben wir das Maximumn erreicht also wird die schleife gestoppt. Ich hoffe ich konnte es verständlich erklären und hoffe du verstehst das prinzip.*/






    PS: Lösung wäre das hier
    new Variable[4],zahl;
    for(new i;i<4;i++)
    {
    if(Variable>=zahl)
    {
    zahl=Variable;

    }

    }

    zahl hat nun den Wert der höchsten var.

    2 Mal editiert, zuletzt von [DT]midomen ()

  • Naja, ich drücks mal anders aus.
    So wird das für meinen Verwendungszweck nicht funktionieren.
    Ich brauche etwas, womit man ein Votesystem machen kann.
    Hast du dafür eine Lösung?


    Das hat aber genau die Funktion, die du beschrieben hast. Erklär doch mal genauer, was später ausgegeben werden soll und welche Werte du brauchst.


    EDIT: Du willst beispielsweise Spielername nach deren Punktzahl ordnen, richtig?

  • Naja, man hat mehrere Dinge zur Auswahl (zum voten) und das, was am meisten gevotet wurde, soll z.B. als "SendClientMessage" ausgegeben werden.


    Das gleiche System ist auch übertragbar, wenn noch zusätzliche Infos vorhanden sind:

    new VoteListe[][7] = {"String1","String2","String3","String4"};
    new Variable[][2] = {
    {0,5}, // Jeweils immer Index des Strings und der Wert
    {1,7},
    {2,10},
    {3,15}
    };
    new Max[2] = Variable[0];
    for(new i = 1; i < 4; i++) {
    if(Variable[i][1] > Max[1]) Max = Variable[i];
    }

    Bei der Ausgabe dann einfach den String VoteListe[Max[0]] benutzen. Zwar eine etwas unschöne Lösung, aber sollte funktioniert.

  • Wieso machst du es so unnötig kompliziert? Übrigens funktioniert nicht mal deine schleife weil sie nur 3 werte durchgehen würde anstatt 4.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Naja, man hat mehrere Dinge zur Auswahl (zum voten) und das, was am meisten gevotet wurde, soll z.B. als "SendClientMessage" ausgegeben werden.


    Wieso machst du es so unnötig kompliziert? Übrigens funktioniert nicht mal deine schleife weil sie nur 3 werte durchgehen würde anstatt 4.


    Der Wert mit Index 0 wird beim initialisieren übergeben. Der Start bei Index 1 war, falls er beim Überprüfen einen Index - 1 verwendet.
    Funktioniert also alles Bestens. :)

  • #include <a_samp>
    #include <dini.inc>
    new Counts;main () {}public OnGameModeInit(){ LoadLastCount(); return 1;}public OnGameModeExit(){ SaveLastCount(); return 1;}stock SaveLastCount(){//Speicherst du mit deiner Speicherungsmethode if(!dini_Exists("count.ini"))return print("[SAVE]Vote: count.ini existiert nicht!");dini_SetInt("count.ini","votes",Counts);}stock LoadLastCount(){if(!dini_Exists("count.ini"))return print("[LOAD]Vote: count.ini existiert nicht!");Counts = dini_Int("count.ini","votes");}
    CMD:vote(playerid,params[])
    { SendClientMessage(playerid,-1,"Danke für deinen Vote"); SendClientMessage(playerid,-1,"Votes:"); SendClientMessage(playerid,-1,Counts); Counts = Counts++; SaveLastCount();}


    Du machst ein Vote System richtig? dann mach oberes.


    Viel Spaß!


    Formationen buggen -.-


  • Der Wert mit Index 0 wird beim initialisieren übergeben. Der Start bei Index 1 war, falls er beim Überprüfen einen Index - 1 verwendet.
    Funktioniert also alles Bestens. :)


    Entweder du beherrscht den Umgang mit Schleifen nicht oder verstehst nicht was ich meine.
    for(new i=1/*es wird direkt mit 1 angefangen also wird im array 0 ignoriert*/;i<4/*Er kann maximal bis zum Wert i=3 kommen selbst wenn du i<=4 geschrieben hättest würde es buggen weil dein array nicht groß genug ist*/;i++)

  • Entweder du beherrscht den Umgang mit Schleifen nicht oder verstehst nicht was ich meine.
    for(new i=1/*es wird direkt mit 1 angefangen also wird im array 0 ignoriert*/;i<4/*Er kann maximal bis zum Wert i=3 kommen selbst wenn du i<=4 geschrieben hättest würde es buggen weil dein array nicht groß genug ist*/;i++)


    Netter Vorwurf, ich glaube eher dass du hier etwas weniger verstehst .. ;)
    Mit new Max[2] = Variable[0] übergebe ich das Array an der Stelle 0, sprich es fehlen noch 1 2 und 3. Daher der Schleifenbeginn bei Index 1 und nicht bei 0.


  • Netter Vorwurf, ich glaube eher dass du hier etwas weniger verstehst .. ;)
    Mit new Max[2] = Variable[0] übergebe ich das Array an der Stelle 0, sprich es fehlen noch 1 2 und 3. Daher der Schleifenbeginn bei Index 1 und nicht bei 0.

    Kann sein ist trotzdem dumm und unnötig wieso die extra arbeit.
    das ist das selbe wie.
    new zahl=1;
    new zahl2=1;
    new zahl3=zahl+zahl2;