Я новичок в C++ и для одного из моих проектов задействован цикл внутри циклов и создание случайных чисел. Вот то, что я до сих пор: `Такие же случайные числа создаются каждый раз, когда цикл проходит.
using namespace std;
int main()
{
srand((unsigned int)time(0));
{
cout << "Name of reservoir: ";
string reservior_name;
cin >> reservior_name;
cout << "Capacity in MAF: ";
double capacity;
cin >> capacity;
cout << "Maximum inflow in MAF: ";
int max;
cin>> max;
cout << "minimum inflow in MAF: ";
int min;
cin >> min;
if(min>max)
{cout<<endl<<"Error: The minimum inflow is higher than the maximum inflow."<<endl
<< "Please re-enter your minimum inflow: ";
cin>>min;
}
double inflow_range= max-min;
cout <<"required outflow in MAF: ";
double required;
cin >> required;
if (required > 0.9 * (min + max)/2)
{
cout<<endl<< "Warning: required ouflow is over 90% of the average inflow."<<endl
<< "Returning to main menu ";
}
else
{ const int simulations = 10;
int water_level = 0;
int years = 1;
cout << "Running simulation..." << endl;
for (int i = 1; i <= simulations; i++)
{
int x = (rand()% (max-min + 1)) + min;
while (water_level < capacity)
{
//double r = rand() * 1.0/RAND_MAX;
//double x = min + inflow_range * r;
//int x = (rand()% (max-min + 1)) + min;
if (water_level + x > required)
{
water_level = water_level + x - required;
}
else
{
water_level= 0;
}
years++;
}
cout <<"Simulation "<< i <<" took " << years <<" years to finish"<< endl;
}
}
}
system ("pause");
return 0;
}
`
Так что мой главный вопрос, я бегу в стену относительно Наладка для петель под ним«Запуск моделирования», где нужно создать первый цикл для запуска внутреннего цикла в 10 раз, причем каждая из этих 10 итераций внутреннего цикла петли со случайными числами для диапазона допустимых результатов запроса для случайного значения. Мне сказали, что идея заключается в использовании метода Монте-Карло, т. Е. Я включил здесь метод Монте-Карло и метод генерации нормальных случайных чисел. Вот он:
for (int i = 1; i <= simulations; i++)
{
int x = (rand()% (max-min + 1)) + min;
while (water_level < capacity)
{
//double r = rand() * 1.0/RAND_MAX;
//double x = min + inflow_range * r;
//int x = (rand()% (max-min + 1)) + min;
поэтому программа создаст случайное значение для притока. Идея состоит в том, что внутренний цикл цикла будет продолжать работать до тех пор, пока заполняющий уровень резервуара, начинающийся с 0, не достигнет емкости. Процесс имитации того, сколько лет (каждая итерация внутреннего для цикла, представляющего год), повторяется 10 раз родителем для цикла моделирования water_level для цикла.
Проблема в том, что случайное число, которое должно быть создано, - это то же самое число. Все они меняются каждый раз, когда я запускаю его, но они одинаковы каждый раз, когда петли повторяются, чтобы сделать новую симуляцию. Я попытался выяснить, что проблема в течение нескольких часов и все еще застряла. Любая помощь очень ценится.
Если вы можете использовать C++ 11, используйте это из библиотеки std, будет проще: http://en.cppreference.com/w/cpp/numeric/random – UldisK