作业调度,求指教,同学习,同进步。
#include <iostream>#include <iomanip>
using namespace std;
typedef struct task
{ int id;
char name[5];//作业名称
float rtime;//提交时间
float space;//存储空间
float btime;//开始时间
float ftime;//完成时间
float wtime;//等待时间
float runtime;//运行时间
}task;
void input(int n,task *a)
{ cout<<"请输入作业编号,名称,提交时间,运行时间,存储空间:"<<endl;
for(int i=0;i<n;i++)
{
cin>>a[i].id>>a[i].name>>a[i].rtime>>a[i].runtime>>a[i].space;
a[i].btime=0;
a[i].wtime=0;
a[i].ftime=0;
}
}
void fcfs(int n,task *a)
{
a[0].btime=a[0].rtime;
a[0].ftime=a[0].btime+a[0].runtime;
a[0].wtime=a[0].btime-a[0].rtime;
for(int j=1;j<n;j++)
{a[j].btime=a[j-1].ftime;//开始时间
a[j].ftime=a[j].btime+a[j].runtime;//完成时等待时间
a[j].wtime=a[j].btime-a[j].rtime;//
}
}
void sjf(int n,task *a)
{ int j,k,c,b;
task t;
a[0].btime=a[0].rtime;
a[0].ftime=a[0].btime+a[0].runtime;
a[0].wtime=a[0].btime-a[0].rtime;
for( j=1;j<n;j++)
{k=j;
while(a[k].rtime<=a[j-1].ftime&&k<n)
{
k++;
}
for(c=j;c<k;c++)
{
for(b=c+1;b<k;b++)
{
if(a[c].runtime>a[b].runtime)
{
t=a[c];
a[c]=a[b];
a[b]=t;
}
}
}
a[j].btime=a[j-1].ftime;
a[j].ftime=a[j].btime+a[j].runtime;
a[j].wtime=a[j].btime-a[j].rtime;
}
}
void smory(int n,task *a)
{int j,k,c,b;
task t;
a[0].btime=a[0].rtime;
a[0].ftime=a[0].btime+a[0].runtime;
a[0].wtime=a[0].btime-a[0].rtime;
for( j=1;j<n;j++)
{k=j;
while(a[k].rtime<=a[j-1].ftime&&k<n)
{
k++;
}
for(c=j;c<k;c++)//冒泡算法进行排序
{
for(b=c+1;b<k;b++)
{
if(a[c].space>a[b].space)
{
t=a[c];
a[c]=a[b];
a[b]=t;
}
}
}
a[j].btime=a[j-1].ftime;
a[j].ftime=a[j].btime+a[j].runtime;
a[j].wtime=a[j].btime-a[j].rtime;
}
}
void output(int n,task *a)
{ cout<<"id"<<setw(8)<<"name"<<setw(8)<<"btime"<<setw(8)<<"ftime"<<setw(8)<<"wtime"<<endl;
for(int i=0;i<n;i++)
cout<<a[i].id<<setw(8)<<a[i].name<<setw(8)<<a[i].btime<<setw(8)<<a[i].ftime<<setw(8)<<a[i].wtime<<endl;
}
int main()
{ task *a;
int n;
cout<<"请输入作业总数n:"<<endl;
cin>>n;
a=new task [n];
input(n,a);
cout<<"先来先服务:"<<endl;
fcfs(n,a);
output(n,a);
cout<<"短作业优先:"<<endl;
sjf(n,a);
output(n,a);
cout<<"存储空间最小:"<<endl;
smory(n,a);
output(n,a);
return 0;
}