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.