Лабораторна робота №2(1)
.docxТехнічний коледж
НУ "Львівська політехніка"
Лабораторна робота №2 З ОС
Студент групи 31КІ Мартинюк Р.
Викладач
Різник О. Я.
Львів 2020
Мета: створення алгоритму планування процесів
Код програми:
#include "pch.h"
#include <iostream>
#define N 10
using namespace std;
struct tabl
{
int wt;
int num;
};
void enter_mass(int mass_pr[N], int count)
{
for (int i = 0; i < count; i++)
{
cout << i + 1 << ". process_time = ";
cin >> mass_pr[i];
}
}
void fifo(int mass_pr[], int count)
{
int sum = 0;
for (int i = 0; i < count; i++)
{
if (i == 0) sum = 0;
else sum += mass_pr[i - 1];
cout << i + 1 << ". pwt = " << sum << endl;
}
cout << endl;
}
void sjf(int mass_pr[], int count)
{
int temp;
int zam_pr[N];
for (int i = 0; i < count; i++) zam_pr[i] = mass_pr[i];
for (int j = 0; j < N + 1; j++)
for (int i = 0; i < count - 1; i++)
{
if (zam_pr[i] > zam_pr[i + 1])
{
temp = zam_pr[i];
zam_pr[i] = zam_pr[i + 1];
zam_pr[i + 1] = temp;
}
}
fifo(zam_pr, count);
cout << endl;
}
void priority(int mass_pr[], int pr[], int count)
{
int mass_pr1[N];
int temp, temp2;
for (int i = 0; i < count; i++) mass_pr1[i] = mass_pr[i];
for (int j = 0; j < count + 2; j++)
for (int i = 0; i < count - 1; i++)
{
if (pr[i] > pr[i + 1])
{
temp = pr[i];
pr[i] = pr[i + 1];
pr[i + 1] = temp;
temp2 = mass_pr1[i];
mass_pr1[i] = mass_pr1[i + 1];
mass_pr1[i + 1] = temp2;
}
}
fifo(mass_pr1, count);
}
void add_priority(int pr[], int count)
{
cout << "<<Vvedit prioritety" << endl;
for (int i = 0; i < count; i++)
{
cout << i + 1 << ". prioritet = ";
cin >> pr[i];
}
cout << endl;
}
void clone(int mass_pr[], tabl array[], int count)
{
for (int i = 0; i < count; i++)
{
array[i].wt = mass_pr[i];
array[i].num = i + 1;
}
}
void zam(tabl array[], int count)
{
int tmp_num, tmp_wt;
tmp_wt = array[0].wt;
tmp_num = array[0].num;
for (int i = 0; i < count - 1; i++)
{
array[i].wt = array[i + 1].wt;
array[i].num = array[i + 1].num;
}
array[count].wt = tmp_wt;
array[count].num = tmp_num;
}
void rr(int mass_pr[], int count)
{
int quant;
int gen_wt = 0;
int sum = 0;
int i, j = 1;
tabl array[N];
clone(mass_pr, array, count);
cout << "<<Vvedit' kvant chasu:";
cin >> quant;
cout << endl;
for (i = 0; i < count; i++)
gen_wt += array[i].wt;
i = 0;
while (gen_wt != 0)
{
if (array[i].wt == 0) i++;
else
{
if (array[i].wt - quant >= 0)
{
array[i].wt -= quant;
gen_wt -= quant;
sum += quant;
cout << j << ". pr N" << array[i].num << " = " << sum - quant << endl;
i++;
j++;
}
else
{
gen_wt -= array[i].wt;
sum += array[i].wt;
cout << j << ". pr N" << array[i].num << " = " << sum - array[i].wt << endl;
array[i].wt = 0;
i++;
j++;
}
}
if (i >= count) i = 0;
}
}
int main()
{
int count;
int mass_pr[N];
int pr[N];
char checker = '0';
do
{
switch (checker)
{
case '0':
{
cout << "Vvedit kilkist procesiv:"; cin >> count;
enter_mass(mass_pr, count); break;
}
case '1': {fifo(mass_pr, count); break; }
case '2': {sjf(mass_pr, count); break; }
case '3': {add_priority(pr, count); priority(mass_pr, pr, count); break; }
case '4': {rr(mass_pr, count); break; }
}
cout << "Vvedit nomer funkcii:"; cin >> checker;
} while (checker != 'e');
}
Результат: