C++ eine zufällige Zahl generien?
Ich weiß das es den Befehl :
srand(time(NULL);
int Zufall = rand () & 100 + 1;
gibt, Probelm an der Sache ist, das es eine zahl zwischen 1 und 100 generiert.
ich würde allerding gerne eine Zahl aus einem ausgewählten Bereich generiern.
Also ich hab die Zhalen = 5, 10, 20 ,50 ,100, 200 als beispiel und daraus soll eine Zahl gepickt werden.
Hätte da jemand eine Idee wie ich das anstellen könnte?
(Im Internet hab ich schon nachgeschaut, youtube tutorial hab ich eher keine gefunden und in Foren war alle zu kompliziert für mich da ich erst seit 1Woche Programmiere.)
5 Antworten
Dein Code ist Fehlerhaft, da du ein binäres UND anstelles des Modulo Operators verwendest.
Davon abgesehen ist dein Code C und nicht C++ und du benutzt die alte rand() Funktion mit extrem schlechter zufälliger Verteilung.
In C++ würde ich es so machen:
#include <iostream> // cout, endl
#include <random> // default_random_engine, random_device, uniform_int_distribution
#include <type_traits> // extent_v
#include <cstdlib> // size_t
int main() {
using namespace ::std;
const int values[] { 5, 10, 20, 50, 100, 200 };
constexpr size_t count { extent_v<decltype(values)> };
default_random_engine prng { random_device{}() };
uniform_int_distribution<size_t> choice { 0, count - 1 };
for (size_t i {}; i < 10; ++i) {
const auto value { values[choice(prng)] };
cout << i << " => " << value << endl;
}
}
Dafür brauchst du aber einen modernen Compiler, der C++17 unterstützt.
Das Programm gibt dir einfach 10 zufällig gewälte Einträge aus deinem Array aus.
Viel Spaß! :)
Vielleicht kannst du dieses Beispiel ja umschreiben:
[code]
include <stdio.h>
#include <stdlib.h>
#include <time.h>
int initrandom = 0;
int getrand(int min, int max)
{
int zuza, zuza2, zuza3, rewer;
// bis 32767
//srand (time (NULL));
if (initrandom == 0)
{
srand (time (NULL));
initrandom = 1;
}
zuza = rand();
zuza2 = (max - min); // + 1);
zuza3 = zuza % zuza2;
rewer = zuza3 + min;
return rewer;
}
int main(int argc, char **argv)
{
int i, z, max = 0;
float rohwert;
srand (time (NULL));
initrandom = 1;
printf("\n5 Werte ohne getrand:\n");
for (i = 0; i < 5; i++)
{
rohwert = rand();
printf("\nWert: %f", rohwert);
}
printf("\nMit getrand 1500 Werte(og = 13):\n");
for (i = 0; i < 1500; i++)
{
z = getrand(0, 13);
if (z > max) max = z;
}
printf("\nMax-Wert: %d\n", max);
return 0;
}
[/code]
Ich hab mir den Code als denkhilfe genommen, hat auch geklappt, danke dir!
Ich habe zwar keine direkte Ahnung mit C++, aber du könntest die Zahlen in ein Array oder eine List packen und dann ein random Element zwischen 0 und der Länge des Arrays/der List (möglicherweise dei Array/List Länge -1 rechnen) aus dem Array/ der List nehmen.
Bsp:
zahlen = [5, 10, 20 ,50 ,100, 200] // array
int Zufall = rand () & (zahlen.Länge - 1 ) + 1
int zufälligesElement = zahlen[Zufall]
Du könntest die Zahlen durchnummerieren (0 -> 5, 1 -> 10, 2 -> 20 usw), eine Zufallszahl zwischen 0 und 5 generieren und dann die i-te Zahl aus der Liste zurückgeben.
Ist eine Gute Idee, werde es ausprobieren, bin für jeden Vorschlag immer offen.
Danke :9
Die Zahlen, aus denen gewählt werden soll, packst du in ein Array. Dann generierst du halt den Arrayindex zufällig. Den Rest kriegst du selbst hin.
Ich hatte so diese Idee auch schon, jetzt wo einer mir genau das Vorschlagt werde ich es mal probieren. Danke :)