#include <iostream.h>
#define WLG 10000
const int MAX = 10 ; /*最多10个进程*/
//最短作业优先
void SJF( char *a , int *b,int *c,int num) ;
void main()
{
int i, num,cometime,runtime,b[MAX],c[MAX];
char identy,a[MAX];
cout << "Input the count of processes : " << endl ;
cin>>num;
//输入进程相关参数
for( i = 0 ; i < num; i++ )
{
cout << "Input identity ,cometime,runtime:" << endl ;
cin >> identy ; a[i]=identy;
cin >> cometime ; b[i] =cometime;
cin >> runtime ; c[i]=runtime;
}
SJF(a,b,c,num);
}
void SJF( char *a , int *b,int *c,int num)
{
float come_time,run_time,finishtime,totalrun;float aver_run,aver_totalrun=0,aver_aver_run=0;
int t=0,j=0,min,k,i,p=0,n; int d[MAX]; int tag;
for(;(c[0]!=WLG)||(c[1]!=WLG)||(c[3]!=WLG)||(c[4]!=WLG);)
{
for(i=0;i<num;i++)
if (b[i]==0)
{
cout<<"Process "<<a[i]<<" "<<"run"<< endl ;
cout<<"Its come_time,run_time,finishtime,totalrun,aver_run are:"<< endl ;
come_time=b[i];
run_time=c[i];
finishtime=come_time+run_time;
totalrun=run_time;
aver_totalrun+=totalrun;
aver_run=totalrun/run_time ;
aver_aver_run+=aver_run;
cout<<"come_time="<<come_time<< endl;
cout<<"run_time="<<run_time<< endl;
cout<<"finishtime="<<finishtime<< endl;
cout<<"totalrun="<<totalrun<< endl;
cout<<"aver_run="<<aver_run<< endl;
t+=run_time;
c[i]=WLG;b[i]=WLG; }
for(i=0;i<num;i++)//记录0到T时刻的所以进程。
if (b[i]<=t)
{d[j++]=c[i];tag=j;}
min=d[0]; //找出服务时间最小的。
for(i=0;i<tag;i++)
if(min>d[i])
{ k=min; min=d[i];}
for(i=0;i<num;i++)//找出服务时间最小的进程的下标。
if(c[i]==min)
{ cout<<"Process "<<a[i]<<" "<<"run"<< endl ;
cout<<"Its come_time,run_time,finishtime,totalrun,aver_run are:"<< endl ;
come_time=b[i];
run_time=c[i];
finishtime=t+run_time;
totalrun=finishtime-come_time;
aver_totalrun+=totalrun;
aver_run=totalrun/run_time ;
aver_aver_run+=aver_run;
cout<<"come_time="<<come_time<< endl;
cout<<"run_time="<<run_time<< endl;
cout<<"finishtime="<<finishtime<< endl;
cout<<"totalrun="<<totalrun<< endl;
cout<<"aver_run="<<aver_run<< endl;
t+=run_time;
c[i]=WLG;b[i]=WLG;
}//if
}//for
for(i=0;i<num;i++)//找出服务时间最小的进程的下标。
if(c[i]!=WLG)
{ cout<<"Process "<<a[i]<<" "<<"run"<< endl ;
cout<<"Its come_time,run_time,finishtime,totalrun,aver_run are:"<< endl ;
come_time=b[i];
run_time=c[i];
finishtime=t+run_time;
totalrun=finishtime-come_time;
aver_totalrun+=totalrun;
aver_run=totalrun/run_time ;
aver_aver_run+=aver_run;
cout<<"come_time="<<come_time<< endl;
cout<<"run_time="<<run_time<< endl;
cout<<"finishtime="<<finishtime<< endl;
cout<<"totalrun="<<totalrun<< endl;
cout<<"aver_run="<<aver_run<< endl;
t+=run_time; }
aver_totalrun/=num;
aver_aver_run/=num;
cout<<"aver_totalrun="<<aver_totalrun<< endl;
cout<<"aver_aver_run="<<aver_aver_run<< endl;
}//sjf