#include<istream>
#include<iostream>
using namespace std;
void main()
{
setlocale(LC_ALL, "Russian");
char osmass[4][30];
int vremPr[4]={0,0,0,0};
int tipOS,kolich,a,sum;
int porydok[4]={1,2,3,4}, prior[5]= {0,0,0,0,-100};
for(int i=0,n=0;i<4;i++,n=0)
{
for(;n<30;n++)
{
osmass[i][n]='_';
}
}
do{
cout<<"Выберите тип ОС \n"<<"1 - Последовательное выполнение процессов \n"<<"2 - Паралельное выполнение\n";
cin>>tipOS;
if(tipOS!=1 && tipOS!=2){cout<<"Вы ввели неправильное значение!!!\n";}else{break;}
}while(2);
do{
cout<<"Задайте колли чество прецессов (не более 4)\n";
cin>>kolich;
if(kolich<1 || kolich>4){cout<<"Введено не правильное значение\n";}
else{break;}
}while (2);
do{
cout<<"Укажите время выполнения каждого процесса(в сумме не более 30)\n";
for(int i=1;i<=kolich;i++)
{
cout<<"Процесс "<<i<<endl;
cin>>vremPr[i-1];
cout<<endl;
}
sum=vremPr[0]+vremPr[1]+vremPr[2]+vremPr[3];
if(sum>30){cout<<"Сумма больше 30\n";}else{break;}
}while(2);
do{
cout<<"Указать приоритеты выполнения процессов? 1 - да / 2 - нет\n";
cin>>a;
if(a==1 || a==2){break;}else{cout<<"Введено не правильное значение\n";}
}while(2);
if(a==1)
{
cout<<"Задайте приоритеты выполнения \n";
for(int i=1;i<=kolich;i++)
{
cout<<"Процесс "<<i<<endl;
cin>>prior[i-1];
cout<<endl;
}
}
int zap[4]={0,0,0,0};
for(int i=0,n=0;i<kolich;i++,n=0)
{
for(;n<kolich-1;n++)
{
if(prior[n]<prior[n+1])
{
int prom=prior[n];
prior[n]=prior[n+1];
prior[n+1]=prom;
prom=porydok[n];
porydok[n]=porydok[n+1];
porydok[n+1]=prom;
}
}
}
switch (tipOS)
{
case 1:
for(int i=0,n=0,e=0;i<kolich;i++,n=0)
{
for(;n<vremPr[porydok[i]-1];n++,e++)
{
osmass[porydok[i]-1][e]='/';
}
}
cout<<" ";
for(int n=0;n<sum;n++)
{
cout<<n+1<<" ";
}
cout<<endl;
for(int i=0,n=0;i<kolich;i++,n=0)
{
cout<<"Процесс "<<i+1<<" ";
for(;n<sum;n++)
{
if(n+1>9)
{
cout<<osmass[i][n]<<" ";
}
else{
cout<<osmass[i][n]<<" ";
}
}
cout<<endl;
}break;
case 2:
for(int i=0,n=0,e=0;e<sum;i++)
{
if(i>kolich-1){i=0;}
if(prior[i]>prior[i+1] && prior[i]!=prior[i-1])
{
for(int eh=0;eh<vremPr[porydok[i]-1];n++,e++,eh++)
{
if(zap[porydok[i]-1]==vremPr[porydok[i]-1]){break;}
osmass[porydok[i]-1][n]='/';
zap[porydok[i]-1]++;
}
}else
{
for(int t=0;t<2;t++,n++,e++)
{
if(e==sum){break;}
do{
if(zap[porydok[i]-1]==vremPr[porydok[i]-1]){i++;t=0;}
if(i>kolich-1){i=0;}
}while (zap[porydok[i]-1]==vremPr[porydok[i]-1]);
osmass[porydok[i]-1][n]='/';
zap[porydok[i]-1]++;
}
}
}
cout<<" ";
for(int n=0;n<sum;n++)
{
cout<<n+1<<" ";
}
cout<<endl;
for(int i=0,n=0;i<kolich;i++,n=0)
{
cout<<"Процесс "<<i+1<<" ";
for(;n<sum;n++)
{
if(n+1>9)
{
cout<<osmass[i][n]<<" ";
}
else{
cout<<osmass[i][n]<<" ";
}
}
cout<<endl;
}
break;
}
}