0Pricing
C++ Academy · Lektion

Verteilungen

Zufallsausgaben formen

Verteilungen ist eine kostenlose C++ Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C++ Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.

Aufgabe von Verteilungen

Eine Verteilung wandelt die Rohbits einer Engine in Werte mit einer gewünschten Form und einem gewünschten Wertebereich um. Sie rufen sie mit der Engine als Argument auf.

#include <iostream>
#include <random>

int main() {
    std::mt19937 gen(1);
    std::uniform_int_distribution<int> dist(1, 100);
    std::cout << "value: " << dist(gen) << '\n';
    return 0;
}

Gleichverteilung für Ganzzahlen

std::uniform_int_distribution<int>(a, b) gibt Ganzzahlen im einschließlich angegebenen Bereich [a, b] zurück, wobei jede gleich wahrscheinlich ist.

#include <iostream>
#include <random>

int main() {
    std::mt19937 gen(5);
    std::uniform_int_distribution<int> die(1, 6);
    for (int i = 0; i < 5; ++i) std::cout << die(gen) << ' ';
    std::cout << '\n';
    return 0;
}

Gleichverteilung für reelle Zahlen

std::uniform_real_distribution<double>(a, b) liefert Gleitkommawerte im Bereich [a, b), was für Wahrscheinlichkeiten nützlich ist.

#include <iostream>
#include <random>
#include <iomanip>

int main() {
    std::mt19937 gen(3);
    std::uniform_real_distribution<double> dist(0.0, 1.0);
    std::cout << std::fixed << std::setprecision(3) << dist(gen) << '\n';
    return 0;
}

Bernoulli-Verteilung

std::bernoulli_distribution(p) gibt mit der Wahrscheinlichkeit p den Wert true zurück und bildet damit einen gewichteten Münzwurf ab.

#include <iostream>
#include <random>

int main() {
    std::mt19937 gen(8);
    std::bernoulli_distribution coin(0.5);
    for (int i = 0; i < 5; ++i) std::cout << (coin(gen) ? 'H' : 'T');
    std::cout << '\n';
    return 0;
}

Normalverteilung

std::normal_distribution<double>(mean, stddev) erzeugt eine Glockenkurve, deren Werte sich um den Mittelwert konzentrieren.

#include <iostream>
#include <random>
#include <iomanip>

int main() {
    std::mt19937 gen(11);
    std::normal_distribution<double> dist(100.0, 15.0);
    std::cout << std::fixed << std::setprecision(1) << dist(gen) << '\n';
    return 0;
}

Eine Verteilung wiederverwenden

Verteilungen können wiederholt kostengünstig aufgerufen werden. Erzeugen Sie eine Verteilung und rufen Sie sie in einer Schleife mit derselben Engine auf.

#include <iostream>
#include <random>

int main() {
    std::mt19937 gen(20);
    std::uniform_int_distribution<int> d(1, 3);
    int counts[4] = {0};
    for (int i = 0; i < 12; ++i) counts[d(gen)]++;
    std::cout << counts[1] << ' ' << counts[2] << ' ' << counts[3] << '\n';
    return 0;
}

Poisson-Verteilung

std::poisson_distribution<int>(mean) modelliert die Anzahl seltener Ereignisse, etwa von Ankünften pro Minute.

#include <iostream>
#include <random>

int main() {
    std::mt19937 gen(30);
    std::poisson_distribution<int> dist(4.0);
    for (int i = 0; i < 5; ++i) std::cout << dist(gen) << ' ';
    std::cout << '\n';
    return 0;
}

Verteilungsparameter

Sie können die Parameter einer Verteilung mit Zugriffsfunktionen wie a(), b(), mean() oder stddev() abfragen.

#include <iostream>
#include <random>

int main() {
    std::uniform_int_distribution<int> d(10, 50);
    std::cout << "range: " << d.a() << " to " << d.b() << '\n';
    return 0;
}

Zustand einer Verteilung zurücksetzen

Einige Verteilungen, etwa die Normalverteilung, speichern internen Zustand zwischen. reset() löscht diesen, sodass der nächste Wert nur von der Engine abhängt.

#include <iostream>
#include <random>

int main() {
    std::mt19937 gen(40);
    std::normal_distribution<double> dist(0.0, 1.0);
    dist(gen);
    dist.reset();
    std::cout << "distribution state reset\n";
    return 0;
}

Ein zufälliges Element auswählen

Um einen zufälligen Array-Index auszuwählen, verwenden Sie eine uniform_int_distribution von 0 bis size - 1.

#include <iostream>
#include <random>
#include <string>

int main() {
    std::string colors[] = {"red", "green", "blue"};
    std::mt19937 gen(50);
    std::uniform_int_distribution<int> pick(0, 2);
    std::cout << colors[pick(gen)] << '\n';
    return 0;
}

Pi schätzen

Verteilungen bilden die Grundlage für Monte-Carlo-Methoden. Durch das Ziehen zufälliger Punkte in einem Quadrat lässt sich Pi schätzen.

#include <iostream>
#include <random>
#include <iomanip>

int main() {
    std::mt19937 gen(60);
    std::uniform_real_distribution<double> u(0.0, 1.0);
    int inside = 0, n = 10000;
    for (int i = 0; i < n; ++i) {
        double x = u(gen), y = u(gen);
        if (x * x + y * y <= 1.0) ++inside;
    }
    std::cout << std::fixed << std::setprecision(2) << 4.0 * inside / n << '\n';
    return 0;
}

Kurze Überprüfung

Testen Sie Ihr Verständnis von Verteilungsbereichen.

Zusammenfassung

Sie haben Verteilungen kennengelernt:

  • Sie formen die Ausgabe der Engine: uniform_int (einschließlich), uniform_real ([a,b)), bernoulli, normal, poisson
  • Sie rufen sie mit der Engine auf, zum Beispiel mit dist(gen), und verwenden sie in Schleifen wieder
  • Sie ermöglichen die Auswahl von Elementen und Monte-Carlo-Schätzungen

Als Nächstes setzen Sie Engines korrekt mit einem Startwert.

Häufig gestellte Fragen

Ist die Lektion „Verteilungen“ kostenlos?

Ja — der vollständige Text von „Verteilungen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C++ Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Verteilungen“?

Zufallsausgaben formen Du übst C++ Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um C++ Academy zu starten?

Keine Vorkenntnisse erforderlich. C++ Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „Verteilungen“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser C++ Academy-Lektion Code schreiben und ausführen?

Ja. Jede C++ Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Zufallszahlengeneratoren
  2. Verteilungen
  3. Richtig initialisieren
  4. Praktische Beispiele
← Zurück zu C++ Academy