#include <stdio.h>
#include <string.h>
void main()
{
int i=0,j=0,finish=0,n=0,k=0,l,m;
int start,temp,max=1,min,respond[24];
int reach[24],running[24];
FILE *fp;
char filename[100];
char str[1000];
printf("\nEnter a filepath/filename:\n");
gets(filename); //输文件目录
fp=fopen(filename, "rt");
// fp=fopen("c:/1.txt","rt");
if(fp==NULL)
{
printf("cannot open file\n");
return;
}
printf("到达时间\t所需运行时间\n");
while (fgets(str,1000,fp))
{
sscanf(str,"%d,%d\n",reach+i,running+i);
printf("%d\t\t%d\n",reach[i],running[i]);
i++;
}
fclose(fp);
for(j=0;j<i;j++)
{
for (k=0;k<i-j;k++)
{
if (reach[k]>reach[k+1])
{
temp=running[k];
running[k]=running[k+1];
running[k+1]=temp;
temp=reach[k];
reach[k]=reach[k+1];
reach[k+1]=temp;
}
}
}
printf("1.fcfs\n2.SJF\n3.HRRN\n");
scanf("%d",&n);
start=reach[1];
if(n==1)
{ //fcfs
printf("fcfs\n");
printf("作业编号 开始时间\t运行时间\t完成时间\t周转时间 带权周转时间\n");
for(j=1;j<=i;j++)
{
printf("%d\t%d\t\t%d\t\t%d\t\t%d\t %f\n",j,start,running[j],start+running[j],start+running[j]-reach[j],(float)(start+running[j]-reach[j])/running[j]);
start=start+running[j];
if(start<reach[j+1]) //到达时间与运行时间比较
start=reach[j+1];
}
}
if(n==2)
{ //sjf
printf("sjf\n");
printf("作业编号 开始时间\t运行时间\t完成时间\t周转时间 带权周转时间\n");
start=reach[1];
for(j=1;j<=i;j++)
{
printf("%d\t%d\t\t%d\t\t%d\t\t%d\t %f\n",j,start,running[j],start+running[j],start+running[j]-reach[j],(float)(start+running[j]-reach[j])/running[j]);
for(k=j;k<=i;k++)
{
if(start+running[j]>reach[k+1])
max=k;
}
for(l=j;l<max;l++)
{
for (m=0;m<max-l;m++)
{
if (running[m]>running[m+1])
{
temp=running[m];
running[m]=running[m+1];
running[m+1]=temp;
temp=reach[m];
reach[m]=reach[m+1];
reach[m+1]=temp;
}
}
}
start=start+running[j];
if(start<reach[j+1]) //到达时间与运行时间比较
start=reach[j+1];
}
}
if(n==3){
printf("hrrf\n");
start=reach[1];
printf("作业编号 开始时间\t运行时间\t完成时间\t周转时间 带权周转时间\n");
for(j=1;j<=i;j++)
{
printf("%d\t%d\t\t%d\t\t%d\t\t%d\t %f\n",j,start,running[j],start+running[j],start+running[j]-reach[j],(float)(start+running[j]-reach[j])/running[j]);
start=start+running[j];
for(k=j;k<=i;k++)
{
if(start+running[j]>reach[k+1])
max=k;
}
for(k=2;k<=max;k++){
if(start!=reach[k]){
respond[k]=1+running[k]/(start-reach[k]);//响应比
}
}
for(l=j;l<max;l++)
{
for (m=0;m<max-l;m++)
{
if (respond[m]>respond[m+1])
{
temp=running[m];
running[m]=running[m+1];
running[m+1]=temp;
temp=reach[m];
reach[m]=reach[m+1];
reach[m+1]=temp;
temp=respond[m];
respond[m]=respond[m+1];
respond[m+1]=temp;
}
}
}
}
}
}




原文:http://www.cnblogs.com/cckuang/p/4486668.html