@dhonny101

Как генерировать случайные числа в вычислительной системе?

В программе вычислительной системы есть константы. Заявки генерируются каждые 5 секунд "if ((t == 0) || (t % 5 == 0))", канал 1 обрабатывает заявки 2 секунды "if (tk1 < 2)", а канал 2 обрабатывает заявки 3 секунды "if (tk2 < 3)".
Нужно изменить эти константы на случайные числа для генерации заявок (диапазон от 4 до 6) и канала 2 (диапазон от 1 до 7). А для канала 1 - случайные числа с нормальным законом распределения (закон Гаусса).

#include <iostream>
#include <locale>
#include <thread>
#include <chrono>

using namespace std;

int main()
{

    setlocale(LC_ALL, "rus");
    cout << "Введите количество тактов: " << endl;
    int tt;
    cin >> tt;

    int Time_I1 = 0;
    int Zayavki_I1 = 0;
    int Exit_I1 = 0;
    int Time_I2 = 0;
    int Zayavki_I2 = 0;
    int Exit_I2 = 0;
    int Time_I3 = 0;
    int Zayavki_I3 = 0;
    int Exit_I3 = 0;
    int Time_I4 = 0;
    int Zayavki_I4 = 0;
    int Exit_I4 = 0;
    int Time_I5 = 0;
    int Zayavki_I5 = 0;
    int Exit_I5 = 0;
    int Zayavki_H1_1 = 0;
    int Zayavki_H1_2 = 0;
    int Zayavki_H2 = 0;
    int Zayavki_H3 = 0;

    int Time_K1 = 0;
    int Zanyatost_K1 = 0;
    int Exit_K1 = 0;
    int Zayavki_K1 = 0;

    int Time_K2 = 0;
    int Zanyatost_K2 = 0;
    int Exit_K2 = 0;
    int Zayavki_K2 = 0;

    int Time_Prostoi = 0;
    int Exit_1 = 0;
    int Exit_2 = 0;
    int Exit_3 = 0;
    int Exit_4 = 0;
    int Exit_5 = 0;
    int Exit_6 = 0;
    int Exit_7 = 0;

    int t = 0;
    int tk1 = 0;
    int tk2 = 0;

    for (int time = 0; time <= tt; time++)
    {
        if (Zanyatost_K1 == 1)
        {
            if (tk1 < 2)
            {
                tk1++;
            }
            else
            {
                Zanyatost_K1 = 0;
                Exit_K1 = 1;
            }
        }

        if (Zanyatost_K2 == 1)
        {
            if (tk2 < 3)
            {
                tk2++;
            }
            else
            {
                Zanyatost_K2 = 0;
                Exit_K2 = 1;
            }
        }
        if (Exit_K1 == 1)
        {
            Exit_1++;
            Exit_K1 = 0;
            Zayavki_K1--;
            tk1 = 0;
        }
        if (Exit_K2 == 1)
        {
            Exit_2++;
            Exit_K2 = 0;
            Zayavki_K2--;
            tk2 = 0;
        }
        //Сначала описываем функционирование источников.
        if ((t == 0) || (t % 5 == 0))
        {
            Time_I1 = 0;
            Zayavki_I1++;
            Exit_I1 = 1;

            Time_I2 = 0;
            Zayavki_I2++;
            Exit_I2 = 1;

            Time_I3 = 0;
            Zayavki_I3++;
            Exit_I3 = 1;

            Time_I4 = 0;
            Zayavki_I4++;
            Exit_I4 = 1;

            Time_I5 = 0;
            Zayavki_I5++;
            Exit_I5 = 1;
        }
        else
        {
            Time_I1++;
            Time_I2++;
            Time_I3++;
            Time_I4++;
            Time_I5++;
        }


        // Описываем работу блокираторов и накопителей.
        if (Exit_I1 == 1)
        {

            if ((Zayavki_H1_1 + Zayavki_H1_2) < 5)
            {
                Zayavki_H1_1++;
                Exit_I1 = 0;
            }
            else
            {
                Exit_3++;
                Exit_I1 = 0;
            }
        }

        if (Exit_I2 == 1)
        {

            if ((Zayavki_H1_1 + Zayavki_H1_2) < 5)
            {
                Zayavki_H1_1++;
                Exit_I2 = 0;
            }
            else
            {
                Exit_4++;
                Exit_I2 = 0;
            }
        }
        if (Exit_I3 == 1)
        {

            if ((Zayavki_H1_1 + Zayavki_H1_2) < 5)
            {
                Zayavki_H1_2++;
                Exit_I3 = 0;
            }
            else
            {
                Exit_5++;
                Exit_I3 = 0;
            }
        }
        if (Exit_I4 == 1)
        {

            if (Zayavki_H2 < 2)
            {
                Zayavki_H2++;
                Exit_I4 = 0;
            }
            else
            {
                Exit_6++;
                Exit_I4 = 0;
            }
        }
        if (Exit_I5 == 1)
        {

            if (Zayavki_H3 < 2)
            {
                Zayavki_H3++;
                Exit_I5 = 0;
            }
            else
            {
                Exit_7++;
                Exit_I5 = 0;
            }
        }


        if (Zanyatost_K1 == 0)  //U6
        {
            Zanyatost_K1 = 1;
            Time_K1 = 0;
            Zayavki_H1_1--;
            Zayavki_K1++;

        }
        if ((Zanyatost_K2 == 0) && (Zayavki_H2 == 0) && (Zayavki_H3 == 0)) //U7
        {
            Zanyatost_K2 = 1;
            Time_K2 = 0;
            Zayavki_H1_1--;
            Zayavki_K2++;

        }
        if ((Zanyatost_K1 == 0) && (Zayavki_H1_1 == 0)) //U8
        {
            Zanyatost_K1 = 1;
            Time_K1 = 0;
            Zayavki_H1_2--;
            Zayavki_K1++;

        }
        if ((Zanyatost_K2 == 0) && (Zayavki_H2 == 0) && (Zayavki_H3 == 0)) //U9
        {
            Zanyatost_K2 = 1;
            Time_K2 = 0;
            Zayavki_H1_2--;
            Zayavki_K2++;

        }
        if ((Zanyatost_K1 == 0) && (Zayavki_H1_1 == 0)) //U10
        {
            Zanyatost_K1 = 1;
            Time_K1 = 0;
            Zayavki_H2--;
            Zayavki_K1++;

        }
        if ((Zanyatost_K2 == 0) && (Zayavki_H2 != 0)) //U11
        {
            Zanyatost_K2 = 1;
            Time_K2 = 0;
            Zayavki_H2--;
            Zayavki_K2++;

        }
        if ((Zanyatost_K1 == 0) && (Zayavki_H1_1 == 0)) //U12
        {
            Zanyatost_K1 = 1;
            Time_K1 = 0;
            Zayavki_H3--;
            Zayavki_K1++;

        }
        if ((Zanyatost_K2 == 0) && (Zayavki_H3 != 0)) //U13
        {
            Zanyatost_K2 = 1;
            Time_K2 = 0;
            Zayavki_H3--;
            Zayavki_K2++;

        }

        // Считаем время простоя, если простаивают Канал 1 и Канал 2
        if ((Zanyatost_K1 == 0) && (Zanyatost_K2 == 0))
            Time_Prostoi++;


        t++;
    }

    cout << "Общее время работы ВС: " << tt << endl;
    cout << endl;

    cout << "Количество сгенерированных заявок: " << Zayavki_I1 + Zayavki_I2 + Zayavki_I3 + Zayavki_I4 + Zayavki_I5 << endl;
    cout << "Количество сгенерированных заявок для I1: " << Zayavki_I1 << endl;
    cout << "Количество сгенерированных заявок для I2: " << Zayavki_I2 << endl;
    cout << "Количество сгенерированных заявок для I3: " << Zayavki_I3 << endl;
    cout << "Количество сгенерированных заявок для I4: " << Zayavki_I4 << endl;
    cout << "Количество сгенерированных заявок для I5: " << Zayavki_I5 << endl;

    cout << endl;

    cout << "Количество заявок в накопителях: " << Zayavki_H1_1 + Zayavki_H1_2 + Zayavki_H2 + Zayavki_H3 << endl;
    cout << "Количество заявок в Н1_1: " << Zayavki_H1_1 << endl;
    cout << "Количество заявок в Н1_2: " << Zayavki_H1_2 << endl;
    cout << "Количество заявок в Н2: " << Zayavki_H2 << endl;
    cout << "Количество заявок в Н3: " << Zayavki_H3 << endl;



    cout << endl;

    cout << "Количество заявок в каналах: " << Zayavki_K1 + Zayavki_K2 << endl;
    cout << "Количество заявок в К1: " << Zayavki_K1 << endl;
    cout << "Количество заявок в К2: " << Zayavki_K2 << endl;


    cout << endl;

    cout << "Общее число заданий, обработанных ВС до выполнения условия окончания моделирования : " << Exit_1 + Exit_2 << endl;
    cout << "Количество обработанных заявок для у1: " << Exit_1 << endl;
    cout << "Количество обработанных заявок для у2: " << Exit_2 << endl;

    cout << endl;


    cout << "Общее число потерянных заданий до выполнения условия окончания моделирования: " << Exit_3 + Exit_4 + Exit_5 + Exit_6 + Exit_7 << endl;
    cout << "Количество обработанных заявок для у3: " << Exit_3 << endl;
    cout << "Количество обработанных заявок для у4: " << Exit_4 << endl;
    cout << "Количество обработанных заявок для у5: " << Exit_5 << endl;
    cout << "Количество обработанных заявок для у6: " << Exit_6 << endl;
    cout << "Количество обработанных заявок для у7: " << Exit_7 << endl;
}
  • Вопрос задан
  • 103 просмотра
Пригласить эксперта
Ответы на вопрос 1
@Mercury13
Программист на «си с крестами» и не только
Итак, задача — сгенерировать случайные числа по закону Гаусса.
Если есть Си++11, копай модуль <random>.
Если нет, простейший способ сгенерировать — F⁻¹(ξ), для этого есть бэ-мэ качественные приближения обратного распределения Гаусса.
Есть также более «лёгкий» способ генерировать такие числа по два сразу, гугли.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы