Hola, tengo un problema con un ejercicio que estoy realizando en C++. Les cuento, tengo que escribir un programa que simule 10 000 000 de tiradas de un dado e imprima las frecuencias que se obtienen para cada una de las caras.
Mi propuesta para resolver este ejercicio es:
Código c++:
Ver original#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
//Función que genera un número pseudoaleatorio entero en el intervalo discreto [a, b].Conseguir un entero entre [a,b] es igual a conseguirlo
//entre a + [0, b-a]. Para conseguir enteros entre 0 y b-a recurrimos al resto de la división entera, ya que el resto de dividir cualquier
//número entre b-a+1 nos da valores entre 0 y b-a, a los cuales les sumaremos el valor a obteniendo así enteros del intervalo [a, b].
int Numero_Pseudoaleatorio(int a, int b){
return a
+(rand()%(b
-a
+1)); }
int main()
{
const int a=1, num_caras = 6;
const float num_tiradas = 10000000;
int v[num_caras], num_pseudo = 0;
for(int i=1; i<=num_caras; i++) // Inicializamos el vector a 0
v[i]=0;
srand(time(0)); // Usaremos como semilla un valor variable para poder observar distintos resultados en cada ejecución.
for(int i=1; i<=num_tiradas; i++){ //realizamos las 10000000 tiradas del dado
num_pseudo = Numero_Pseudoaleatorio(a,num_caras); //almacenamos el resultado de la tirada (valor de la cara del dado)
v[num_pseudo]++; //incrementamos las veces que aparece cada valor.
}
cout << "****muestra el número de veces que aparece cada cara****" << endl;
cout << "cara 1 -----> " << v[1] << endl;
cout << "cara 2 -----> " << v[2] << endl;
cout << "cara 3 -----> " << v[3] << endl;
cout << "cara 4 -----> " << v[4] << endl;
cout << "cara 5 -----> " << v[5] << endl;
cout << "cara 6 -----> " << v[6] << endl;
float suma = 0;
for(int i=1; i <=num_caras; i++){ /* EN ESTE BUCLE ESTA EL PROBLEMA, ¿PORQUE V[6] CAMBIA SU VALOR? */
cout<< "cara 6 -->" << v[6] << endl; /*HAGO ESTO PARA COMPROBAR QUE V[6] CAMBIA SU VALOR AL ENTRAR EN EL BUCLE Y SE VA INCREMENTANDO*/
cout << "La frecuencia relativa de " << i << " es: " << v[i]/num_tiradas << endl;
suma = suma + v[i]/num_tiradas;
cout << " frecuencia absoluta = " << suma << endl;
}
}
pero cuando obtengo los resultados, veo que en el último bucle for cambia el valor de v[6] en cada iteración y realmente no entiendo porqué sucede esto.
Al final la frecuencia absoluta no me sale 1, por lo que se que el problema esta mal.
Espero que puedan ayudarme.
Muchas gracias y un saludo.