Zwei Zufallszahlen mit Unterprogramm in C++ ?

2 Antworten

Was ist unklar? Wie man Funktionen schreibt? Wie man Zufallszahlen bekommt? Wie man Rückgabewerte oder Referenzen verwendet? Was ist dein bisheriger Ansatz?

Geh doch erstmal schrittweise vor. Du kannst z.B. fixe Werte statt Zufallszahlen nehmen. Man muss nicht alles auf einmal ausprogrammieren.

int wuerfel(); // Call by Value

Ausgerechnet eine parameterlose Funktion als "call by value" zu bezeichnen, finde ich ja etwas merkwürdig, aber was soll's.

Also die vorgegebene API ist unschön, weil man dabei zwangsläufig entweder auf globale Variablen angewiesen ist, oder bei jedem einzelnen Funktionsaufruf immer wieder neue Objekte erzeugen und oder zerstören muss.

Ich habe mich jetzt mal für einen globalen Zufallszahlengenerator und eine globale Ganzzahlverteilung entschieden:

#include <iostream> // cout, endl
#include <random> // random_device, uniform_int_distribution

#include <cstdlib> // size_t

using namespace ::std;

random_device generator {};
uniform_int_distribution<int> distribution { 1, 6 };

int wuerfel() {
    return distribution(generator);
}

void wuerfel(int & zahl) {
    zahl = distribution(generator);
}

int main (void) {
    for (size_t i { 1 }; i <= 9; ++i) {
        cout << "Runde #" << i << ": ";

        cout << wuerfel() << " und ";

        int zahl {};
        wuerfel(zahl);

        cout << zahl << endl;
    }
}

Die Ausgabe sieht ungefähr so aus:

Runde #1: 3 und 5
Runde #2: 4 und 4
Runde #3: 5 und 3
Runde #4: 2 und 4
Runde #5: 5 und 6
Runde #6: 1 und 1
Runde #7: 1 und 3
Runde #8: 4 und 6
Runde #9: 5 und 5

Bei dieser typischen Übungsaufgabe wirst du meistens auf Lösungen mit der ollen alten "rand()" Funktion aus C-Zeiten stoßen, aber da es hier um C++ geht, nutze ich natürlich auch die entsprechende Funktionalität aus dem <random> Header der Standardbibliothek.

Bei C++ gibt es eine ganze Reihe Pseudozufallszahlengeneratoren und einen echten Zufallszahlengenerator, der intern auf echten Hardwarezufall zugreift.

Naja, für Details guck dir die Dokumentation der Standardbibliothek an!

Und noch ein weiterer Tipp: Um besser oder gar wirklich gut werden zu können, löse so viele "Hausaufgaben" anderer Leute hier auf GF! Das ist eine prima Übung, vor allem für dich selbst!

Deshalb ist meine Antwort auch nicht ganz uneigennützig. :)

Trotzdem viel Spaß noch beim Lernen! :)

Woher ich das weiß:Berufserfahrung

Rimsasky 
Fragesteller
 29.11.2020, 11:22

Vielen Dank :)

1