C++ eine zufällige Zahl generien?

5 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

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ß! :)

Woher ich das weiß:Berufserfahrung

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]

NicoDw 
Fragesteller
 29.03.2020, 14:13

Ich hab mir den Code als denkhilfe genommen, hat auch geklappt, danke dir!

0

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.

Woher ich das weiß:Studium / Ausbildung – Abgeschlossenes Informatik-Studium
NicoDw 
Fragesteller
 29.03.2020, 12:40

Ist eine Gute Idee, werde es ausprobieren, bin für jeden Vorschlag immer offen.
Danke :9

1

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.

Woher ich das weiß:Berufserfahrung – Hauptberuflich IT-Consultant, Informatikstudium
NicoDw 
Fragesteller
 29.03.2020, 12:39

Ich hatte so diese Idee auch schon, jetzt wo einer mir genau das Vorschlagt werde ich es mal probieren. Danke :)

0