If Anweisung für zwei random Werte



  • Hallo zusammen. Ich habe da eine Frage:
    Gibt es eine Möglichkeit, anhand einer if Anweisung, zwei random Werte so zu vergleichen, dass sie höchstens eine Differenz von 10 haben dürfen ?



  • Warum nicht?



  • Wie wärs wenn du einfach die Range [0,10] nimmst zwei Werte davon generierst und diese vergleichst? Die Differenz von 10 - 0 ist 10.

    Test-Programm:

    #include <random>
    #include <iostream>
    #include <cmath>
    
    int main(){
        std::uniform_int_distribution<> distri(0, 10);
        std::random_device rd;
        std::mt19937 twister(rd());
        int res;
    
        while((res = distri(twister) - distri(twister)))
            std::cout << "Difference: " << std::abs(res) << std::endl;
    
        std::cout << "Difference: 0\n";
    }
    

    Beispiel Ausgabe:

    Difference: 10
    Difference: 2
    Difference: 5
    Difference: 1
    Difference: 1
    Difference: 7
    Difference: 3
    Difference: 10
    Difference: 1
    Difference: 1
    Difference: 10
    Difference: 3
    Difference: 2
    Difference: 1
    Difference: 2
    Difference: 2
    Difference: 1
    Difference: 6
    Difference: 2
    Difference: 0
    


  • This post is deleted!


  • @eigenartig sagte in If Anweisung für zwei random Werte:

    einfach die Range [0,10]

    Das war nicht die Anforderungen. Eigentlich war die Anforderung völlig unklar.



  • @Mechanics sagte in If Anweisung für zwei random Werte:

    Das war nicht die Anforderungen. Eigentlich war die Anforderung völlig unklar.

    Ich fand sie eigentlich ganz klar.

    Hier nochmal zum mitlesen:

    @dybala_ichNoch sagte in If Anweisung für zwei random Werte:

    Gibt es eine Möglichkeit, anhand einer if Anweisung, zwei random Werte so zu vergleichen, dass sie höchstens eine Differenz von 10 haben dürfen ?



  • @dybala_ichNoch sagte in If Anweisung für zwei random Werte:

    Gibt es eine Möglichkeit, anhand einer if Anweisung, zwei random Werte so zu vergleichen, dass sie höchstens eine Differenz von 10 haben dürfen ?

    Naja, eigentlich vergleicht man, ob - und nicht, dass... Dass es sich hier um 2 random-Werte handelt, ist doch eigentlich irrelevant für einen Vergleich?! Ich dachte, es könnte gemeint sein:

    if (std::abs(random1 - random2) <= 10) ...
    

    Aber im Endeffekt wird das nur @dybala_ichNoch wissen.

    (Warnung: ich gehe hier davon aus, dass dass die Differenz und der Betrag ohne Überlauf berechnet werden können)



  • Höchtens eine Differenz von 10 heißt aber nicht, dass die Werte nicht 100002 und 100005 sein dürfen.
    Da sich mir der Sinn von dem ganzen aber sowieso nicht erschließt, kann es gut sein, dass deine Lösung hier perfekt passt.



  • Ja, die Frage ist schlecht formuliert.

    Erstmal macht schon "anhand einer if Anweisung ... vergleichen" keinen Sinn.
    Man kann mit einer if Anweisung das Ergebnis eines Vergleichs prüfen. Von mir aus kann man auch sagen "mit/mittels einer if Anweisung vergleichen" - was IMO strenggenommen auch falsch ist, aber noch klar genug. "Mit/mittels einer if Anweisung prüfen" wäre besser.

    Und dann macht "so zu vergleichen, dass sie höchstens eine Differenz von 10 haben dürfen". Man kann vergleichen ob die Differenz max. 10 ist.

    Ich glaube aber es gibt nur eine sinnvolle Auslegung: wenn eine if-Anweisung im Spiel sein soll, dann kann nicht gemeint sein dass man die Zahlen gleich so generiert dass die Differenz nicht > 10 sein kann.


    @dybala_ichNoch

    Also ist vermutlich gemeint: kann man mittels einer if Anweisung prüfen ob die Differenz zweier Zahlen kleiner oder gleich 10 ist. Das einzige was dabei jetzt noch unklar ist, ist ob die Reihenfolge der Zahlen definiert ist. Also ob die Differenz oder der "Abstand" (Absolutbetrag der Differenz) gemeint ist.
    (Eigentlich steht Differenz da, was klar wäre, aber da der Rest der Frage so schlecht formuliert war, und bei solchen Fragestellungen öfter der Abstand gemeint ist, ...)

    Die Antwort in beiden Fällen ist "ja".

    Wie genau die Bedingung für die if Anweisung aussehen muss hängt dabei aber davon ab um welche Datentypen es sich handelt, und wie genau man es mit Corner-Cases nimmt (z.B. wenn Datentypen mit Vorzeichen verwendet werden und eine der Zahlen nahe dem positiven Limit und die andere nahe dem negativen Limit ist.)

    Im einfachsten Fall wäre so eine Bedingung if ((a - b) <= 10) -- bzw. einfach nur if (a - b <= 10) da die Rangfolge der Operatoren dafür sorgt dass a - b vor XXX <= 10 ausgewertet wird.

    Bzw. falls der Abstand gemeint ist, weiterhin einfachster Fall: if (a - b <= 10 && b - a <= 10)).
    Bzw. wenn man Hilfsfunktionen verwenden darf/möchte, auch einfach if (abs(a - b) <= 10).


Log in to reply