#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; } } } } } }
时间: 2024-10-03 14:00:41