Fordelinger
Form det tilfældige output
Fordelinger er en gratis C++ Academy-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i C++ Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. C++ Academy-kurset indeholder 4 lektioner i alt.
Hvad fordelinger gør
En fordeling omdanner en generators rå bits til værdier med en ønsket form og et ønsket interval. Du kalder den med generatoren som argument.
#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;
}Ensartet heltalsfordeling
std::uniform_int_distribution<int>(a, b) returnerer heltal i det inklusive interval [a, b], hvor alle værdier er lige sandsynlige.
#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;
}Ensartet fordeling af kommatal
std::uniform_real_distribution<double>(a, b) giver kommatal i [a, b), hvilket er nyttigt til sandsynligheder.
#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-fordeling
std::bernoulli_distribution(p) returnerer true med sandsynligheden p og modellerer et kast med en skæv mønt.
#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;
}Normalfordeling
std::normal_distribution<double>(mean, stddev) producerer en klokkeformet kurve, der samler sig omkring middelværdien.
#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;
}Genbrug af en fordeling
Det er billigt at kalde fordelinger gentagne gange. Opret én, og kald den i en løkke med den samme generator.
#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-fordeling
std::poisson_distribution<int>(mean) modellerer antallet af sjældne hændelser, f.eks. ankomster pr. minut.
#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;
}Fordelingsparametre
Du kan hente en fordelings parametre med adgangsmetoder som a(), b(), mean() eller stddev().
#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;
}Nulstilling af fordelings tilstand
Nogle fordelinger, f.eks. normalfordelingen, gemmer intern tilstand. reset() rydder den, så den næste værdi kun afhænger af generatoren.
#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;
}Valg af et tilfældigt element
Hvis du vil vælge et tilfældigt arrayindeks, skal du bruge en uniform_int_distribution fra 0 til 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;
}Estimering af pi
Fordelinger danner grundlag for Monte Carlo-metoder. Ved at udtage tilfældige punkter i et kvadrat kan du estimere pi.
#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;
}Hurtig kontrol
Afprøv din forståelse af fordelingers intervaller.
Opsummering
Du har lært om fordelinger:
- de former generatorens resultat:
uniform_int(inklusiv),uniform_real([a,b)),bernoulli,normal,poisson - kald dem med generatoren, f.eks.
dist(gen), og genbrug dem i løkker - de gør det muligt at vælge elementer og lave Monte Carlo-estimater
Dernæst initialiserer du generatorer korrekt.
Lær C++ med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 51
- Lektioner
- 203
Ofte stillede spørgsmål
Er lektionen “Fordelinger” gratis?
Ja — alle 3 lektioner i læringssporet C++ Academy, inklusive “Fordelinger”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. C++ Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Fordelinger”?
Form det tilfældige output Du øver dig i C++ Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på C++ Academy?
Der kræves ingen tidligere erfaring. C++ Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.
Hvor lang tid tager lektionen “Fordelinger”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne C++ Academy-lektion?
Ja. Alle C++ Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.