Erneut Fragen zu Zufallswerten
-
Für das Intervall [\min, \max) \cap \mathbb{Z}:
int i = std::rand() % (max-min) + min;x
Voerher natürlich mittelssrandseeden.
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!

-
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 30C:\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
-
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 nachDu 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.