@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;
}
  • Вопрос задан
  • 106 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Mercury13
Программист на «си с крестами» и не только
Итак, задача — сгенерировать случайные числа по закону Гаусса.
Если есть Си++11, копай модуль <random>.
Если нет, простейший способ сгенерировать — F⁻¹(ξ), для этого есть бэ-мэ качественные приближения обратного распределения Гаусса.
Есть также более «лёгкий» способ генерировать такие числа по два сразу, гугли.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы