Лабораторная работа №3 студент группы кс-17 Юхно Б. В. Проверил: Струнилин В. Н. Донецк 2019 г. Ц ель работы


Бесприоритетная дисциплины обслуживания



бет2/2
Дата26.12.2023
өлшемі385,08 Kb.
#199336
түріЛабораторная работа
1   2
Байланысты:
LABARATAAAAAAAAAARNAAAAAAAAAAAAYAAAAAAAAAAAA #3

Бесприоритетная дисциплины обслуживания


Исходная матрица приоритетов:

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0


Результат работы программы:


Дисциплины обслуживания с относительными приоритетами

Исходная матрица приоритетов:

0

1

1

1

1

0

0

0

0

0

0

1

0

1

1

0

1

0

0

0

0

1

0

1

0


Результат работы программы:


Дисциплины обслуживания с абсолютными приоритетами

Исходная матрица приоритетов:

0

2

2

2

2

0

0

0

0

0

0

2

0

2

2

0

2

0

0

0

0

2

0

2

0

Результат работы программы:


Дисциплины обслуживания со смешанными приоритетами

Исходная матрица приоритетов:

0

1

2

2

2

0

0

0

0

0

0

2

0

2

2

0

1

0

0

0

0

1

0

2

0

Результат работы программы:





Код программы:

#include
//#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;

int i, j;


float Bmin, Bmax, deltaB, A = 0, C = 0, D = 0;

//исходные данные


float lambda[5] = { 1.6, 1.5, 1.4, 1.3, 1.2 };
unsigned long long int teta[5] = { 22000,53000, 24000, 45000, 26000 };
float nu[5] = { 1.0, 0.95, 0.90, 0.85, 0.80 };
float omega_z[5] = { 1.3, 4.5, 0.5, 6.0, 5.0 };
bool find_b_done = false;

int OP_q[5][5] = { { 0,1,1,1,1 },


{ 0,0,0,0,0 },
{ 0,1,0,1,1 },
{ 0,1,0,0,0 },
{ 0,1,0,1,0 } };
int SP_q[5][5] = { { 0,1,2,2,2 },
{ 0,0,0,0,0 },
{ 0,2,0,2,2 },
{ 0,1,0,0,0 },
{ 0,1,0,2,0 } };
int AP_q[5][5] = { { 0,2,2,2,2 },
{ 0,0,0,0,0 },
{ 0,2,0,2,2 },
{ 0,2,0,0,0 },
{ 0,2,0,2,0 } };
int BP_q[5][5] = { { 0,0,0,0,0 },
{ 0,0,0,0,0 },
{ 0,0,0,0,0 },
{ 0,0,0,0,0 },
{ 0,0,0,0,0 } };
void main_algor(int q[5][5]);
void find_B();
void print_data();

void main()


{
//выбор русского языка
//setlocale(LC_ALL, "Ukrainian");
//объявление вводисого числа
int n=0;

//цикл для печать меню.


while (n!=666)
{
//печать меню
printf("\n******MENU******\n");
printf("1 - print data\n");
printf("2 - find Bmin\n");
printf("3 - Bec/7puopeTeTHa9I Dicuu/7/luHa oBc/ly}I{uBaHu9I\n");
printf("4 - Dicuu/7/luHa oBc/ly}I{uBaHu9I c oTHocuTe/lbHbImu /7puopuTeTamu\n");
printf("5 - Dicuu/7/luHa oBc/ly}I{uBaHu9I c A6co/lI-OTHbImu /7puopuTeTamu\n");
printf("6 - Dicuu/7/luHa oBc/ly}I{uBaHu9I co cmeLL!AHbIMu /7puopuTeTamu\n");
printf("9 - clear console\n");
printf("0 - exit\n\n\n");

//чтение введёного числа


cin >> n;

//если введенно неверное число


if (!cin)
{
//то ничего не далаем, ну точнеем делаем, но ничего не делаем
printf("Wrong number\n");
cin.clear();
while (cin.get() != '\n');
}
else
{
//меню выбора
switch (n)
{
case 1:print_data();break; //печать исходных данных
case 2:find_B();break; //нахождение В
case 3:main_algor(BP_q);break; //}
case 4:main_algor(OP_q);break; // } Основной алгоритм для разных дисциплин
case 5:main_algor(AP_q);break; // }
case 6:main_algor(SP_q);break; //}
case 9:system("cls");break; //очистка консоли
case 0:n=666;break; //выход из программы
}
}
}
}

//печать исходных данных


void print_data()
{
//чтобы кросиво было
printf("________________________________________________________________________________\n");
printf("| UHTeHcuBHocTb | TpyDoemkocTb | KoeffucuenT |/7peDe/lbHo Do/7ycTumoe|\n");
printf("|/70cTy/7/leHu9I 3a9IBok | 3a9IBok | Bapuacuj | Bpem9I o}I{yDanu9I |\n");
printf("|________________________|______________|______________|_______________________|\n");
for (i = 0;i < 5;i++)
{
printf("| %3.2f |", lambda[i]);
printf(" %2d |", teta[i]);
printf(" %3.2f |", nu[i]);
printf(" %3.2f |\n", omega_z[i]);
}
printf("|________________________|______________|______________|_______________________|\n\n");
}
//функция нахождения Bmin, Bmax и deltaB
void find_B()
{
//вычисление A,C & D
for (i = 0; i < 5; i++)
{
A += lambda[i] * teta[i];
C += lambda[i] * teta[i] * teta[i] * (1 + nu[i] * nu[i]);
D += lambda[i] * teta[i] * omega_z[i];
}

//вычисление Bmin, Bmax, deltaB


Bmin = 0.5 * A + sqrt(0.25 * A * (A + 2 * C / D));
Bmin = round(Bmin); //округление Bmin
Bmax = 2 * Bmin;
deltaB = (Bmax - Bmin) / 5;

//печать результатов


printf("Munuma/lbHoe 6bICTPoDeiCTBue /7poueccopa(Bmin) - %8.0f\n",Bmin);
printf("KoHe4Hoe 6bICTPoDeiCTBue /7poueccopa(Bmax) - %8.0f\n", Bmax);
printf("LL!ag U3meneni9I 6bICTPoDeiCTBu9I /7poueccopa(deltaB) - %8.1f\n\n", deltaB);

//Bmin, Bmax и deltaB найдены


find_b_done = true;
}

void main_algor(int q[5][5])


{
//если Bmin, Bmax и deltaB не найдены, то выходим из функции
if (find_b_done == false)
{
printf("Bmin not found yet\n Quiting algorithm\n");
return;
}

float _Bmin_ = Bmin; //копия Bmin


float omega[5]; //среднее значение времени ожидания
float v[5]; //время обслуживания (среднее значение)
float ro[5]; //загрузка потока
float R, l, L; //R - Суммарная загрузка; l -
float P[5]; //вероятностm пребывания задачи в системе
float sum1, sum2, sum3, sum4; //
float F; //Вероятностная функция штрафа
//цикл основного алгоритма с разным быстродействием
for (int loop = 0; loop <= 5; loop++)
{
//печать заголовка таблицы результатов
printf("\n|%u|.6bICTPoDeiCTBue /7poueccopa %7.1f operacuj B cekyHdy\n", loop + 1, _Bmin_);
printf("_______________________________________________________________________________________________\n");
printf("|# | BPem9I o6c/ly}I{bIBaHu9I | 3agPy3ka | Cp. 3Ha4 Bpemenu |3a/7ac /7o| Bepo9ITHocTb |\n");
printf("|/7oToKa|cp. 3Ha4.| 2-u Ha4. MomenT | /7oToka | o}I{ydaH.|/7pepbIB.| Bpemenu | /7pepbIBaHu9I|\n");
printf("|_______|_________|_________________|__________|__________|_________|__________|______________|\n");

//нахождение времени обслуживания (среднее значение) и загрузки потока


for (i = 0; i < 5; i++)
{
v[i] = (float)teta[i] / _Bmin_;
ro[i] = lambda[i] * v[i];
}

//очень длинный алгоритм


for (i = 0; i < 5; i++)
{
//печать первых 2-ух столбцов
printf("| %3u |", i + 1);
printf(" %7.4f |", v[i]);

//нахождение и печать времени обслуживания 2-го начального момента


printf(" %7.4f |", (float)v[i] * v[i] * (1 + nu[i] * nu[i]));
printf(" %7.4f |", ro[i]);

//переменные и цикл для нахождения среднего значения времени ожидания


sum1 = 0; sum2 = 0; sum3 = 0; sum4 = 0;
for (j = 0; j < 5; j++)
{
sum1 += q[j][i] * (q[j][i] - 1) * ro[j];
sum2 += (2 - q[i][j]) * (1 + q[i][j]) * lambda[j] * teta[j] * teta[j] * (1 + nu[j] * nu[j]);
sum3 += q[j][i] * (3 - q[j][i]) * ro[j];
sum4 += (1 - q[i][j]) * (2 - q[i][j]) * ro[j];
}

//нахождение среднего значения времени ожидания


omega[i] = sum2 / (_Bmin_ * (2 - sum3) * (2 - sum4));
omega[i] /= _Bmin_;
omega[i] += ((teta[i] * sum1) / (_Bmin_ * (2 - sum1)));

//печать среднего значения времени ожидания


printf(" %7.4f |", omega[i]);
//нахождение и печать среднего значения времени пребывания
printf(" %7.4f |", v[i] + omega[i]);
//нахождение и печать запаса по времени
printf(" %7.4f |", omega_z[i] - omega[i]);

//нахождение и печать вероятности пребывания задачи в системе


//очень сложная формула
for (j = 0, R = 0; j < 5; j++)
R += ro[j];
L = R / (1 - R);
l = L * R;
P[i] = R * exp((-R * omega_z[i]) / omega[i]);
printf(" %6.4f |\n", P[i]);
}
printf("|_______|_________|_________________|__________|__________|_________|__________|______________|\n");

sum1 = 0; //Суммарная интенсивность


F = 0; //Вероятностная функция штрафа

//нахождение вероятностной функции штрафа и суммарной интенсивности


for (i = 0; i < 5; i++)
{
sum1 += lambda[i];
F += lambda[i] * P[i];
}

//печать результатов


printf("\nCym. uHTeHcuBHocTb - %5.4f|", sum1);
printf("Cym. 3agpy3ka - %5.4f|", R);
printf("Bepo9IaTnocTb FyHkuu LL!TPaFa - %5.4f|", F);
printf("DluHa o4epeDu (l) - %5.4f\n", l);

_Bmin_ += deltaB; //увеличение быстродействия


}
}


Достарыңызбен бөлісу:
1   2




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет