#define _CRT_SECURE_NO_WARNINGS #include #include #include #include #include #include #include #include #include #include #include #include #include #include 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 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 Worker; int count_potok = 0; process() { count_potok = rand() % 5 + 1; for (int i = 0; i < count_potok; i++) { Worker.emplace_back(); } } }; vector 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 << "Вывод времени выполнения:" << endl; for (int i = 0; i < count_proc; i++) { cout << "Процесс " << i + 1 << endl << "Номер кванта:" << 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 << "Поток номер " << 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; }