Distribuciones
Dé forma a la salida aleatoria
Distribuciones es una lección gratuita de C++ Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C++ Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C++ Academy incluye 4 lecciones en total.
Qué hacen las distribuciones
Una distribución transforma los bits sin procesar de un motor en valores con una forma y un rango determinados. Se invoca pasando el motor como argumento.
#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;
}Distribución uniforme de enteros
std::uniform_int_distribution<int>(a, b) devuelve enteros en el rango inclusivo [a, b], todos con la misma probabilidad.
#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;
}Distribución uniforme de reales
std::uniform_real_distribution<double>(a, b) proporciona valores de coma flotante en [a, b), lo que resulta útil para las probabilidades.
#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;
}Distribución de Bernoulli
std::bernoulli_distribution(p) devuelve true con probabilidad p, simulando el lanzamiento de una moneda sesgada.
#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;
}Distribución normal
std::normal_distribution<double>(mean, stddev) produce una curva de campana agrupada alrededor de la media.
#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;
}Reutilizar una distribución
Las distribuciones se pueden invocar repetidamente sin un coste elevado. Cree una y llámela dentro de un bucle con el mismo motor.
#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;
}Distribución de Poisson
std::poisson_distribution<int>(mean) modela cantidades de eventos poco frecuentes, como las llegadas por minuto.
#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;
}Parámetros de la distribución
Puede consultar los parámetros de una distribución con accesores como a(), b(), mean() o 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;
}Restablecer el estado de la distribución
Algunas distribuciones, como la normal, almacenan estado interno en caché. reset() lo borra para que el siguiente valor dependa únicamente del motor.
#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;
}Elegir un elemento aleatorio
Para elegir un índice de array aleatorio, use una uniform_int_distribution del 0 al 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;
}Estimar pi
Las distribuciones permiten aplicar métodos de Monte Carlo. Muestrear puntos aleatorios en un cuadrado permite estimar 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;
}Comprobación rápida
Compruebe su comprensión de los intervalos de las distribuciones.
Repaso
Ha aprendido sobre las distribuciones:
- dan forma a la salida del motor:
uniform_int(inclusivo),uniform_real([a,b)),bernoulli,normal,poisson - se invocan con el motor, por ejemplo,
dist(gen), y se reutilizan en bucles - permiten elegir elementos y realizar estimaciones de Monte Carlo
A continuación, inicializará correctamente los motores con una semilla.
Aprende C++ con un tutor de IA — gratis
Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.
- Cursos
- 51
- Lecciones
- 203
Preguntas frecuentes
¿La lección «Distribuciones» es gratis?
Sí — el texto completo de «Distribuciones» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C++ Academy, actualiza a CoddyKit PRO. El curso de C++ Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Distribuciones»?
Dé forma a la salida aleatoria Practicas C++ Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar C++ Academy?
No se requiere experiencia previa. C++ Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.
¿Cuánto tiempo toma la lección «Distribuciones»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de C++ Academy?
Sí. Cada lección de C++ Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.