Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save bas-kirill/ec01dc68c74ee7ae6efc0e50004e90cc to your computer and use it in GitHub Desktop.
Save bas-kirill/ec01dc68c74ee7ae6efc0e50004e90cc to your computer and use it in GitHub Desktop.
#include <iostream>
#include "queue.h"
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <ctime>
#include <locale.h>
using namespace std;
int main() {
srand(time(NULL));
setlocale(LC_ALL, "Russian");
queue *head1 = NULL, *head2 = NULL;
queue *tail1 = NULL, *tail2 = NULL;
srand(time(NULL));
double ob1 = 0; // время обработки ОА1
double ob2 = 0; // время обработки ОА2
int t;
double a1 = 0;
double a2 = 6;
double b1 = 1;
double b2 = 8;
double tt = 0;
double can1 = -1; //максимальное ожидание 1 заявки
double can2 = -1; // максимальное ожидание 2 заявки
double msred1 = -1; // среднее время ожидание в очереди заявки 1
double msred2 = -1; // среднее время ожидание в очереди заявки 2
int mnum = -1; //номер с максимальным ожиданием
int mnum1 = -1; //номер с максимальным ожиданием 1 заявки
int mnum2 = -1; //номер с максимальным ожиданием 2 заявки
double count = 0; //общее время моделирования+
double k = 0; //переменная,отвечающая за то,на каком моменте обрабатывается заявка в ОА2
int lenQ1 = 1000; // длина очереди 1+
int lenQ2 = 0; //длина очереди 2+
int deliverRequest1 = 0; // количество принятых заявок в очереди один+
int deliverRequest2 = 0; // количество принятых заявок в очереди два+
double primary1 = 0; // простой 1 +
double primary2 = 0; // простой 2 +
for (int i = 1; i < 1001; ++i) { //заполнение 1 очереди
push(head1,tail1,i);
tail1->prix = 0;
tail1->vix = 0;
tail1->ozh = 0;
}
while (deliverRequest2 < 10) { // ОА1
cout << "1 очередь" << endl;
print(head1);
cout << "2 очередь" << endl;
print(head2);
if (!queue_is_empty(head1)) {
t = rand() % 10;
if (t < 7) {
tt = (double) rand() / RAND_MAX;
ob1 = (a2-a1)*tt + a1;
count += ob1;
deliverRequest1++;
head1->prix = count;
queue *qst = pop(head1);
if(head1 == NULL) {
tail1 = NULL;
}
push(head1,tail1,qst->id);
tail1->prix = qst->prix;
tail1->vix = 0;
tail1->ozh = 0;
delete(qst);
} else {
head1->ozh = count - head1->prix;
if (head1->ozh > can1) {
can1 = head1->ozh;
mnum1 = head1->id;
}
msred1 += head1->ozh;
tt = (double) rand() / RAND_MAX;
ob1 = (a2-a1)*tt + a1;
count += ob1;
deliverRequest1++;
head1->vix = count;
queue *lst = pop(head1);
lenQ1--;
push(head2,tail2,lst->id);
lenQ2++;
tail2->prix = lst->vix;
tail2->vix = lst->vix;
delete(lst);
if (deliverRequest2 == 0 && k == 0 && !queue_is_empty(head2)) {
tt = (double) rand() / RAND_MAX;
ob2 = (b2-b1)*tt + b1;
primary2 += head2->prix - k;
k = count + ob2;
queue *ast = pop(head2);
lenQ2--;
delete(ast);
deliverRequest2++;
head2 = tail2 = NULL;
}
}
if (count >= k && head2 == tail2 && head2!= NULL && tail2 != NULL) {
tt = (double) rand() / RAND_MAX;
ob2 = (b2-b1)*tt + b1;
primary2 += head2->prix - k;
k = count + ob2;
queue *pst = pop(head2);
lenQ2--;
delete(pst);
deliverRequest2++;
if (deliverRequest2 % 100 == 0) {
if (can1 > can2 && mnum1 > mnum) {
mnum = mnum1;
} else if(can2 > can1 && mnum2 > mnum) {
mnum = mnum2;
}
cout <<"Количество принятых заявок 1 очереди =" << deliverRequest1 << endl
<<"Количество принятых заявок 2 очереди =" << deliverRequest2 << endl
<< "Длина 1 очереди = " << lenQ1 << endl <<"Длина 2 очереди = " << lenQ2 << endl
<< "Номер заявки с максимальным временем ожидания = " << mnum << endl
<<"Максимальное время ожидания в очереди 1 =" << can1 << endl
<<"Максимальное время ожидания в очереди 2 = " << can2 << endl
<<"Среднее время ожидания в очереди 1 = "<< msred1 / (lenQ2+deliverRequest2) << endl
<<"Среднее время ожидания в очереди 2 = " << msred2 / deliverRequest2 << endl << endl;
}
head2 = tail2 = NULL;
}
if (count >= k && !queue_is_empty(head2)) {
head2->ozh = count - head2->prix;
if (head2->ozh > can2) {
can2 = head2->ozh;
mnum2 = head2->id;
}
msred2 += head2->ozh;
queue *sst = pop(head2);
lenQ2--;
tt = (double) rand() / RAND_MAX;
ob2 = (b2-b1)*tt + b1;
k += ob2;
delete(sst);
deliverRequest2++;
if (deliverRequest2 % 100 == 0) {
if (can1 > can2 && mnum1 > mnum) {
mnum = mnum1;
} else if (can2 > can1 && mnum2 > mnum) {
mnum = mnum2;
}
cout <<"Количество принятых заявок 1 очереди = " << deliverRequest1 << endl
<<"Количество принятых заявок 2 очереди = " << deliverRequest2 << endl
<<"Длина 1 очереди = " << lenQ1 << endl <<"Длина 2 очереди = " << lenQ2 << endl
<< "Номер заявки с максимальным временем ожидания = " << mnum << endl
<<"Максимальное время ожидания в очереди 1 = " << can1 << endl
<<"Максимальное время ожидания в очереди 2 = " << can2 << endl
<<"Среднее время ожидания в очереди 1 = "<< msred1 / (lenQ2+deliverRequest2) << endl
<<"Среднее время ожидания в очереди 2 = "<< msred2 / deliverRequest2 << endl << endl;
}
}
} else {
head2->ozh = count - head2->prix;
if (head2->ozh > can2) {
can2 = head2->ozh;
mnum2 = head2->id;
}
queue *zst = pop(head2);
lenQ2--;
count = k;
tt = (double) rand() / RAND_MAX;
ob2 = (b2-b1)*tt + b1;
count += ob2;
k = count;
delete(zst);
deliverRequest2++;
if (deliverRequest2 % 100 == 0) {
if (can1 > can2 && mnum1 > mnum) {
mnum = mnum1;
} else if (can2 > can1 && mnum2 > mnum) {
mnum = mnum2;
}
cout <<"Количество принятых заявок 1 очереди = " << deliverRequest1 << endl
<<"Количество принятых заявок 2 очереди = " << deliverRequest2 << endl
<<"Длина 1 очереди = " << lenQ1 << endl <<"Длина 2 очереди = " << lenQ2 << endl
<< "Номер заявки с максимальным временем ожидания = " << mnum << endl
<<"Максимальное время ожидания в очереди 1 = " << can1 << endl
<<"Максимальное время ожидания в очереди 2 = " << can2 << endl
<<"Среднее время ожидания в очереди 1 = "<< msred1 / (lenQ2+deliverRequest2) << endl
<<"Среднее время ожидания в очереди 2 = "<< msred2 / deliverRequest2 << endl << endl;
}
}
}
cout <<"Общее время моделирования = " << count << endl
<<"Время простоя 1 = " << primary1 << endl
<<"Время простоя 2 = " << primary2 << endl
<<"Количество прошедших заявок через ОА1 = " << deliverRequest1 << endl
<<"Количество прошедших заявок через ОА2 = " << deliverRequest2 << endl;
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment