#include <cstdlib>
#include <iostream>
#include <windows.h>
#include <string>
#include <iomanip>
#include<stdio.h>
#include<conio.h>
using namespace std;
class sched{
private:
struct process{
int at,bt,id;
};
process pro[100];
process temp;
public:
int n,tat[100],wt[100],rt[100],finish[100],twt,ttat,total,awt,ft[100],B[100],Bu[100];
void readData();
void putData();
void computeFCFS();
void computeSJF();
void dispTime();
void Init();
};
void sched::readData()
{
int i;
cout<<"Enter number of processes : ";
cin>>n;
for(i=0;i<n;i++)
{
pro[i].id = i;
cout<<"Enter the burst times for P"<<pro[i].id +1<<" : ";
cin>>pro[i].bt;
cout<<"Enter the arrival times for P"<<pro[i].id +1<<" : ";
cin>>pro[i].at;
}
}//understand
void sched::Init(){
total=0;
twt=0;//total waiting time
ttat=0;//total turn around time
for(int i=0; i<n; i++)
{
rt[i]=pro[i].bt;//runng time
finish[i]=0;
ft[i]=0;//finish time
wt[i]=0;//waitg time
tat[i]=0;//turn around time
total+=pro[i].bt;//total time
}
}//understand
void sched::putData()
{
cout<<"\nProcess No.\tBurst Time\tArrival Time\n";
cout<<"-----------\t----------\t------------\n";
for(int i=0;i<n;i++)
cout<<"P"<<pro[i].id +1<<"\t\t"<<pro[i].bt<<"\t\t"<<pro[i].at<<"\n";
cout<<"---------------------------------------------\n\n";
}
void sched::computeFCFS()
{
readData();
putData();
int time,next=0,i,old;
for(int i=0;i<n;i++)
for(int j=i;j<n;j++)
{
if (pro[i].at>pro[j].at)
{
temp=pro[i];
pro[i]=pro[j];
pro[j]=temp;
}
}
Init();
cout<<"Process State\n\n";
cout<<"TIME\t\tEVENT\n\n";
for(i=0;i<n;i++)
cout<<"\t\tP"<<i+1<<" new process\n";
cout<<"\n";
for(time=0;time<=total;time++)
{
cout<<"time "<<time;
old = next;
if(rt[next]==0)
{
finish[next]=1;
cout<<"\t\tP"<<pro[next].id +1<<" is Exit \n";
ft[next]=time;
}
for(i=0;i<n;i++)
if(finish[i]==0)
{
next=i;
break;
}
for(i=0;i<n;i++)
if(pro[i].at == time)
cout<<"\t\tP"<<pro[i].id +1<<" is Ready!!! \n";
if(old != next|| time== 0 )
{
cout<<"\t\tP"<<pro[next].id +1<<" is Runing... \n";
}
rt[next]=rt[next]-1;
for(i=0;i<n;i++)
if(i!=next && finish[i]==0 && pro[i].at<=time)
wt[i]++;
cout<<"\n";
Sleep(1000);
}
for(i=0;i<n;i++)
if(finish[i]!=1) {cout<<"Scheduling failed, cannot continue\n\n"; return;}
dispTime();
}
void sched::computeSJF()
{
readData();
putData();
int i,j;
for(i=n;i>=1;i--)
{
for(j=1;j<=n;j++)
{
if(pro[j-1].bt>pro[j].bt)
{
temp=pro[j-1];
pro[j-1]=pro[j];
pro[j]=temp;
}
}
}
Init();
wt[1]=0;
for(i=2;i<=n;i++)
{
wt[i]=pro[i-1].bt+wt[i-1];
}
//calculating Average Weighting Time
for(i=1;i<=n;i++)
twt=twt+wt[i];
awt=twt/n;
cout<<"Total Weighting Time="<<twt;
cout<<"Average Weighting Time="<<awt<<" ";
}
void sched::dispTime()
{
for(int i=0;i<n;i++)
{
twt+=wt[i];
tat[i]=wt[i]+pro[i].bt;
ttat+=tat[i];
cout<<"\nWaiting time for P"<<pro[i].id + 1<<" = "<<wt[i]<<"\tTurnaround time = "<<tat[i]<<"\tFinish time = "<<ft[i]<<"\n"<<endl;
}
cout<<"\nAvg Waiting time = "<<(double)twt/n<<" and Avg Turnaround time = "<<(double)ttat/n<<endl;
cout<<"Scheduling complete\n\n";
}
int main()
{
cout<<"choose one"<<endl;
cout<<"1.FCFS"<<endl;
cout<<"2.SJF"<<endl;
int n;
cin>>n;
sched s;
switch(n)
{
case 1:s.computeFCFS();
break;
case 2:s.computeSJF();
break;
case 3:cout<<"get out";
break;}
getch(); // freeaze screen untill key press
}
os.rar_memory
版权申诉
30 浏览量
2022-09-24
19:34:19
上传
评论
收藏 1.34MB RAR 举报
四散
- 粉丝: 52
- 资源: 1万+
最新资源
- 微信小程序 - 图书管理系统源码.zip
- 微信小程序 - 图片自适应 ,富文本解析源码.zip
- 微信小程序 - 同乐居商城:购物车合算源码
- 1、根据输入的三条边值判断能组成何种三角形,并设计测试数据进行判定覆盖测试 三条边为变量a、b、c,范围为1≤边值≤10,不在范
- SQL server 练习题目8道(小白教学).zip
- Python 手写实现 iD3 决策树算法-根据信息增益公式.zip
- 411675952289057车联助手-小窗版(三星)3.5.1.apk
- 三种快速排序方法合并在一个文件中以便直接运行的Python代码示例
- 937712277954201实习5.word
- 2程序语言基础知识pdf1_1716337722703.jpeg
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈