SA:MP Support - Durchschnitt errechnen

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
  • Guten Tag,
    ich möchte das man am Ende eines Support Ticket's mit dem Befehl /rate [1-6] den Support bewerten kann.


    Note 1 = Sehr guter Support
    Note 6 = Mieserrabele Kenntnisse des Admins/Supporters.

    Nun habe ich eine Variable für Supporter


    PlayerInfo[playerid][pRated];


    In dieser Variable möchte ich das der Durchschnitt angezeigt wird.
    Wie könnte ich das am besten machen?

  • Du musst die abgegebenen Werte (also die Werte von 1-6) jeweils immer addieren (von dem Admin alleine) und dann durch die Anzahl der abgegebenen Werte dividieren.
    Sprich:

    • Alle Werte addieren
    • Das Ergebnis durch die Anzahl der abgegebenen Stimmen dividieren
  • Beitrag von Home ()

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
  • PlayerInfo[playerid][pRated] // Bewertungen
    PlayerInfo[playerid][pRatedAnzahl] // Anzahl an Bewertungen


    Bei einer Bewertung:


    PlayerInfo[playerid][pRated] = PlayerInfo[playerid][pRated] + VariableDieFürDieAngegebeneNoteSteht;
    PlayerINfo[playerid][pRatedAnzahl] ++;


    Durchschnitt berechnen:


    new Durchschnittsbewertung = PlayerInfo[playerid][pRated] / PlayerInfo[playerid][pRatedAnzahl];


    Ich glaube so ist es eine Möglichkeit :)

  • Besseres Plan:
    pRated als Array definieren.
    Am Ende eines Tickets die Bewertung zum Array hinzufügen


    Durchschnitt berechen machste dann so:

    new gesamt = 0;
    for(new i=0;i<sizeof(PlayerInfo[playerid][pRated]);i++) {
    gesamt += PlayerInfo[playerid][pRated][i];
    }
    new durchschnitt = gesamt/sizeof(PlayerInfo[playerid][pRated]);


    Grüße
    Drasko


    Kostenlose Pawno Alternative / PAWN IDE -> PawnStar
    Mass Effect
    :love:

  • Drasko:
    Dann bist du aber in der Anzahl der Bewertungen beschränkt, was an sich ja kein Problem sein muss, aber nur damit das klar ist. Sonst müsste man es über eine Datenbank oder ähnliches lösen.
    Das größere Problem hier ist, dass du nicht abfragst ob der Wert der Bewertung 0 ist, in deiner Schleife. Angenommen dein Array ist 10 groß, und es sind nur 3 Bewertungen drin, dann werden 7 Nullen dazu gerechnet. Das gibt einen ziemlich guten Schnitt ;) Das müsstest du noch hinzufügen, dann passt es.
    Vom Prinzip her ist es natürlich besser, da man jederzeit auf alte Bewertungen zurück greifen kann.



  • Zu dieser Methode möchte ich gerne zurückgreifen, soll ich
    PlayerInfo[playerid][pRated]
    als Float definieren oder wie wäre das am besten?

  • Wenn die Noten die du den Spieler eingeben lässt als Kommazahlen akzeptierst, sprich dass man zum Beispiel 1.8 eingeben kann, dann als Float.
    Wenn man nur ganze Zahlen eingeben darf, dann als Integer, und bei der Berechnung wandelst du es mit
    float()
    in ein Float um, damit es den Durchschnitt als Kommazahl anzeigt.

  • Wenn die Noten die du den Spieler eingeben lässt als Kommazahlen akzeptierst, sprich dass man zum Beispiel 1.8 eingeben kann, dann als Float.
    Wenn man nur ganze Zahlen eingeben darf, dann als Integer, und bei der Berechnung wandelst du es mit
    float()
    in ein Float um, damit es den Durchschnitt als Kommazahl anzeigt.


    Eigentlich will ich nur das man /rate [1 | 2 | 3 | 4 | 5 oder 6]
    eingeben kann.
    Kannst du mir die Variable definieren? Derzeit kapiere ich das nicht.

  • Also keinen Spieler? Dann einfach so:
    new gesamtNoten;
    new anzahlBewertungen;


    Bei gesamtNoten addierst du einfach dem rate Wert dazu und anzahlBewertungen zählst du bei einer Bewertung um eins hoch.


    Ne, natürlich für einen Spieler wie auch oben beschrieben, aber ohne das man bei /rate 1.4 oder so was angeben kann.
    Soll ich das im enum


    Float:pRated,


    definieren?


  • enum
    {
    pRated,
    pRatedAnzahl
    }


    Wenn du es berechnen möchtest:



    new Float:Durchschnitt = float(PlayerInfo[playerid][pRated])/float(PlayerInfo[playerid][pRatedAnzahl]);



    Dann ist die Variable "Durchschnitt" das was du haben möchtest :)


    Beispiel:
    pRated = 5
    pRatedAnzahl = 2


    Also wurde eine Person beispielsweise einmal mit 4 und einmal mit 1 bewertet. Oder halt einmal mit 2 und einmal mit 3.
    Dies wird in deinem Enum gespeichert (siehe oben als mögliches Beispiel). Um den Durchschnitt zu errechnen,
    erstellst du dir zuerst eine Variable (oben ist es "Durchschnitt"), die bei mir jetzt als Float deklariert ist. Das heißt,
    dass sie keine ganze Zahl ist wie z.B. 1 oder 2 oder 3 etc sondern diese kann auch Kommastellen haben ( 1,2 oder 4,1).
    Die weiteren "floats", also "float(PlayerInfo[playerid][pRated])" und das andere sind dazu da, dass der Compiler keine
    Probleme bekommt, denn aus einer ganzen Zahl (1 oder 2 etc) kann man nicht ohne weiteres eine Float Zahl
    (also die mit Kommastellen) errechnen. Deswegen muss man diese ganzen Zahlen erst in Floats umwandeln.
    Für den Wert der Zahl macht es keinen Unterschied. Eine 5 wird beispielsweise zur 5,00.
    Bezogen auf mein Beispiel wird 5 durch 2 geteilt, das Ergebnis (2,5) wird dann in die Variable "Durchschnitt" gespeichert.
    Diese kannst du dann für Texte, Einblendungen oder sonstigen Kram verwenden :)


    Könntest z.B. noch einen String erstellen und die Variable dann ausgeben lassen.



    new str[64];
    format(str,sizeof(str),"Deine Bewertung: %f",Durchschnitt);
    SendClientMessage(playerid, 0xFFFFFF, str);


    Dazu muss ich sagen, dass ich seit Monaten kein Script mehr in der Hand hatte und es ggf. Flüchtigkeitsfehler gibt,
    aber ich hoffe ich konnte dir das alles ein wenig näher bringen :)


    Falls Fehler vorhanden sind entschuldige ich mich ^^
    Jeffry: Kannst doch bestimmt mal eben schnell rüberschauen und mich ggf. korrigieren oder? :P
    Wollte es halt nur nochmal zusammenfassen und möglichst genau Schritt für Schritt erklären, damit
    man nicht nur kopiert sondern auch was draus lernen kann

    2 Mal editiert, zuletzt von 085zehn ()

  • Soweit alles in Ordnung, ist gut erklärt.


    Nur eine Kleinigkeit, die ich da so nicht stehen lassen will:
    Es gibt keine "ganzrationalen Zahlen".
    Du meinst zwar das richtige, aber hast es durcheinander gebraucht. Es gibt rationale Zahlen und ganze Zahlen, aber keine ganzrationalen Zahlen. Das Einzige was es gibt sind "ganzrationale Funktionen", das ist aber was anderes.


    • Ganze Zahlen:
      Das sind ganze Zahlen, also Zahlen ohne Komma, wie zum Beispiel 2 oder 17 oder 94 etc...
    • Rationale Zahlen:
      Das sind Zahlen, die sich als Bruch darstellen lassen, also Kommazahlen (nicht alle!) und ganze Zahlen. Beispielsweise 5/3 oder 12/54 oder 99/100 oder einfach 17.
    • Rationale Funktionen:
      Das sind Funktionen die in dem Term nur Hochzahlen haben, die positive ganze Zahlen sind (=natürliche Zahlen). Also zum Beispiel: f(x) = 5x³+2,5x²-8x+3



    PS: "seid" kommt von "sein", daher heißt es "seit Monaten" ;)

  • Mein Fehler, habe an dem Tag meine Mathe Abiturklausur geschrieben und bin da dann ein wenig durcheinander gekommen :D
    Ja, den "seid - seit" Fehler mache ich schon immer :rolleyes:


    B2T:
    #Reverse: Hast du denn Alles verstanden soweit oder gibt es noch Fragen? :)