155 lines
2.7 KiB
C++
Raw Normal View History

2023-10-18 12:24:01 +04:00
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
#include <cctype>
#include <string>
#include <cmath>
#include <set>
#include <map>
#include <ctime>
#include <chrono>
#include <fstream>
#include <iomanip>
#include <queue>
using namespace std;
#define endl '\n'
#define endll cout << endl
#define LL_MAX 2223372036854775807
typedef long long ll;
int ALL_TIME = 100;
struct Laba {
public:
struct potok
{
double need;
vector<double> coords;
potok()
{
need = rand() % 20 + 1;
}
double add(double t)
{
if (t >= need)
{
coords.push_back(need);
int otv = need;
need = 0;
return otv;
}
else
{
coords.push_back(t);
need -= t;
return t;
}
}
bool full()
{
if (need == 0)
return true;
return false;
}
};
struct process
{
public:
vector<potok> Worker;
int count_potok = 0;
process()
{
count_potok = rand() % 5 + 1;
for (int i = 0; i < count_potok; i++)
{
Worker.emplace_back();
}
}
};
vector<process> proc;
int count_proc;
int count_all_potok = 0;
int potok_max;
double kvant;
int timer = 0;
int count_kvant;
Laba()
{
count_kvant = 0;
count_proc = 5;
for (int i = 0; i < count_proc; i++)
{
proc.emplace_back();
count_all_potok += proc[i].count_potok;
}
potok_max = count_all_potok;
}
bool Kvant_time()
{
kvant = 30;
count_all_potok = potok_max;
for (int i = 0; i < count_proc; i++)
{
for (int j = 0; j < proc[i].count_potok; j++)
{
if (proc[i].Worker[j].full())
count_all_potok--;
}
}
if (count_all_potok == 0)
return 0;
count_kvant++;
double time = (double)kvant / (double)count_all_potok;
for (int i = 0; i < count_proc && kvant > 0; i++)
{
for (int j = 0; j < proc[i].count_potok && kvant > 0; j++)
{
time = (double)kvant / (double)count_all_potok;
if (proc[i].Worker[j].full())
continue;
count_all_potok--;
double m = proc[i].Worker[j].add(time);
kvant -= m;
//cout << m << " ";
}
}
return 1;
}
void Paint()
{
cout << "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:" << endl;
for (int i = 0; i < count_proc; i++)
{
cout << "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> " << i + 1 << endl << "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:" << endl;
for (int j = 0; j < count_kvant; j++)
cout << j + 1<< "\t";
endll;
for (int j = 0; j < proc[i].count_potok; j++)
{
cout << "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> " << j + 1 << endl;
for (int k = 0; k < proc[i].Worker[j].coords.size(); k++)
{
cout << proc[i].Worker[j].coords[k] << "\t";
}
endll;
}
endll;
}
}
};
int main()
{
srand(time(NULL));
setlocale(LC_ALL, "Russian");
cout.precision(3);
Laba l;
while (l.Kvant_time()) {}
l.Paint();
return 0;
}