Erneut Fragen zu Zufallswerten


  • Mod

    Für das Intervall [\min, \max) \cap \mathbb{Z}:

    int i = std::rand() % (max-min) + min;
    

    x
    Voerher natürlich mittels srand seeden.
    Oder Boost verwenden.



  • Vielen Dank, das hat schon mal meine zweite Frage beantwortet.
    Nun benötige ich nur noch eine Antwort auf die erste Frage, ich hoffe ich habe diese eindeutig formuliert. 🙂

    DirkB: Einfach irgendein Beispiel, wurde mir aber schon geliefert, trotzdem Danke 🙂



  • #include <stdlib.h>
    #include <stdio.h>
    #include <time.h>
    
    int main() {
      srand(time(NULL));
      puts(((const char*[]){"Erstes Wort", "Zweites Wort", "Drittes Wort"})[rand()%3]);
      return 0;
    }
    


  • Super, Danke! 🙂


  • Mod

    random.choice schrieb:

    #include <stdlib.h>
    #include <stdio.h>
    #include <time.h>
    
    int main() {
      srand(time(NULL));
      puts(((const char*[]){"Erstes Wort", "Zweites Wort", "Drittes Wort"})[rand()%3]);
      return 0;
    }
    

    Verdammt nochmal, nicht so ein widerlicher Schund in meinem Board!11 😡 😡 😡 😡



  • Oder die tolle C++ Version davon:

    #include <vector>
    #include <iostream>
    
    template <class T>
    const T& randomChoice(const std::vector<T>& v)
    {
      return v[rand() % v.size()];
    }
    
    int main()
    {
      // TODO: srand aufrufen
      std::vector<const char*> v = {"Erstes Wort", "Zweites Wort", "Drittes Wort"};
      std::cout << randomChoice(v) << std::endl;
    }
    


  • Ich habe jetzt mal die Variante von vorhin versucht zu benutzen, aber das funktioniert nicht 😡

    string Zufallswort;
    string Zufallswort = puts(((const char*[]) {"Erstes Wort", "Zweites Wort"})[rand()%2]); // Zeile 30
    

    C:\Users\Henry\Desktop\C++\Übungen\Zufallszahlen\Zufallswerte.cpp In function 'int main()':
    30 7 C:\Users\Henry\Desktop\C++\Übungen\Zufallszahlen\Zufallswerte.cpp [Error] expected unqualified-id before '[' token
    30 77 C:\Users\Henry\Desktop\C++\Übungen\Zufallszahlen\Zufallswerte.cpp [Error] expected primary-expression before ')' token
    30 77 C:\Users\Henry\Desktop\C++\Übungen\Zufallszahlen\Zufallswerte.cpp [Error] expected ';' before ')' token
    *

    Und bei der zuletzt angegebenen Methode schau ich wie die Kuh ins Uhrwerk, ich hab von Templates, Klassen usw. keine Ahnung 😃 Hole ich aber nach


  • Mod

    Vengeancos schrieb:

    Ich habe jetzt mal die Variante von vorhin versucht zu benutzen, aber das funktioniert nicht 😡

    Natürlich nicht, es ist ja auch C - nicht aber gültiges C++. In C++ gibt es keine Compound-Literale, und die explizite Konvertierung mit der functional notation erlaubt grammatikalisch keine Arraytypen.

    Jedoch kann man diese mittels eines Typedefs angeben. Daher ist die C++-Version einfach

    #include <cstdlib>
    #include <cstdio>
    #include <ctime>
    
    int main() {
      std::srand(time(NULL));
      using arr = const char*[];
      std::puts(arr{"Erstes Wort", "Zweites Wort", "Drittes Wort"}[std::rand()%3]);
    }
    


  • Vengeancos schrieb:

    Und bei der zuletzt angegebenen Methode schau ich wie die Kuh ins Uhrwerk, ich hab von Templates, Klassen usw. keine Ahnung 😃 Hole ich aber nach

    Du programmierst C++ und hast noch nie std::vector gesehen? Das solltest du aber ganz schnell nachholen. Und wenn dir Template Funktionen noch nicht so zusagen kannst du statt dem T auch einfach selbst einen Typ einsetzen wie z.B:

    const std::string& randomChoice(const std::vector<std::string>& v)
    

    Ist dann natürlich nicht mehr so flexibel.



  • Oh oh, klingt alles sehr komplex. Aber danke für die Antworten. Dann werd ich das so machen.


Anmelden zum Antworten