#include<stdio.h> void readfile(void); void input(void); void output(void); void sort(void); void FCFS(void); void SJF(void); void HRRF(void); struct job{ char name[10];//作业名 char status;//作业状态 int arrtime;//到达时间 int reqtime;//所需时间 int startime;//开始时间 int finitime;//结束时间 float TAtime, TAWtime;//周转时间,带权周转时间 float prio;//优先级 } jobarr[24], jobfin[24], job[24], temp; int systime = 0; int intarr, intfin, intjob;//到达作业个数,完成作业个数,未到达作业个数 int main(void) { //input(); readfile(); sort(); output(); FCFS(); SJF(); HRRF(); return 0; } void readfile(void) { int count = 0; FILE *fp; if((fp=fopen("data.txt","a+"))!=NULL) { while(!feof(fp)&&fgetc(fp)!=EOF) { fseek(fp,-1L,SEEK_CUR); fscanf(fp,"%s%d%d",&job[count].name,&job[count].arrtime,&job[count].reqtime); count++; } }else printf("fail to open"); fclose(fp); intarr = count; } void input(void) { int i; printf("请输入作业个数:"); scanf("%d", &intarr); for(i = 0; i < intarr; i++) { printf("\n第%d个作业:\n", i+1); printf("输入作业名:"); scanf("%s", job[i].name); printf("到达时间:"); scanf("%d", &job[i].arrtime); printf("要求服务时间:"); scanf("%d", &job[i].reqtime); } } void sort(void) { int i, j; for(i = 0; i < intarr; i++) { for(j = 0; j < intarr-1; j++) { if(job[j].arrtime > job[j+1].arrtime) { temp = job[j]; job[j] = job[j+1]; job[j+1] = temp; } } } } void output(void) { int i; printf("经按到达时间排序后\n"); printf("\tname\tarrtime\trqtime\n"); for(i = 0; i < intarr; i++) { printf("N %d\t%s\t%d\t%d\n", i, job[i].name, job[i].arrtime, job[i].reqtime); } printf("\n\t\t\t现在系统时间%d\n", systime); } void FCFS(void) { int i; double sumTAtime = 0;//总周转时间 double sumTAWtime = 0;//总带权周转时间 double avgTAtime = 0;//平均周转时间 double avgTAWtime = 0;//平均带权周转时间 job[0].finitime = job[0].arrtime + job[0].reqtime; job[0].startime = job[0].arrtime; for(i = 1; i < intarr; i++) { job[i].startime = job[i-1].finitime; job[i].finitime = job[i-1].finitime + job[i].reqtime; } for(i = 0; i < intarr; i++) { job[i].TAtime = job[i].finitime - job[i].arrtime; sumTAtime += job[i].TAtime; job[i].TAWtime = job[i].TAtime / job[i].reqtime; sumTAWtime += job[i].TAWtime; } avgTAtime = sumTAtime / intarr; avgTAWtime = sumTAWtime / intarr; printf("\nFCFS算法作业序列表\n"); printf("-----------------------------------------------\n"); printf("作业名\t到达系统时间\tcpu所需时间\t开始时间\t结束时间\t周转时间\n"); for(i = 0; i < intarr; i++) { printf("%s\t%d\t\t%d\t\t%d\t\t%d\t\t%.2f\n", job[i].name, job[i].arrtime, job[i].reqtime, job[i].startime, job[i].finitime, job[i].TAtime); } printf("\n平均周转时间=%.2f", avgTAtime); printf("\n平均带权周转时间=%.2f\n", avgTAWtime); } void SJF(void) { int i = 1, j = 1; double sumTAtime = 0;//总周转时间 double sumTAWtime = 0;//总带权周转时间 double avgTAtime = 0;//平均周转时间 double avgTAWtime = 0;//平均带权周转时间 job[0].finitime = job[0].arrtime + job[0].reqtime; job[0].startime = job[0].arrtime; for(i = 1; i < intarr; i++) { for(j = 1; j < intarr-1; j++) { if(job[j].reqtime > job[j+1].reqtime) { temp = job[j]; job[j] = job[j+1]; job[j+1] = temp; } } } for(i = 1; i < intarr; i++) { job[i].startime = job[i-1].finitime; job[i].finitime = job[i-1].finitime + job[i].reqtime; } for(i = 0; i < intarr; i++) { job[i].TAtime = job[i].finitime - job[i].arrtime; sumTAtime += job[i].TAtime; job[i].TAWtime = job[i].TAtime / job[i].reqtime; sumTAWtime += job[i].TAWtime; } avgTAtime = sumTAtime / intarr; avgTAWtime = sumTAWtime / intarr; printf("\nSJF算法作业序列表\n"); printf("-----------------------------------------------\n"); printf("作业名\t到达系统时间\tcpu所需时间\t开始时间\t结束时间\t周转时间\n"); for(i = 0; i < intarr; i++) { printf("%s\t%d\t\t%d\t\t%d\t\t%d\t\t%.2f\n", job[i].name, job[i].arrtime, job[i].reqtime, job[i].startime, job[i].finitime, job[i].TAtime); } printf("\n平均周转时间=%.2f", avgTAtime); printf("\n平均带权周转时间=%.2f\n", avgTAWtime); } void HRRF(void) { int i = 1, j = 1; double sumTAtime = 0;//总周转时间 double sumTAWtime = 0;//总带权周转时间 double avgTAtime = 0;//平均周转时间 double avgTAWtime = 0;//平均带权周转时间 job[0].finitime = job[0].arrtime + job[0].reqtime; job[0].startime = job[0].arrtime; sort(); for(i = 1; i < intarr; i++) { for(j = 1; j < intarr-1; j++) { if(job[j].prio < job[j+1].prio) { if(job[j].arrtime == job[j+1].arrtime) { temp = job[j]; job[j] = job[j+1]; job[j+1] = temp; } } } } for(i = 1; i < intarr; i++) { job[i].prio = 1 + (job[i-1].finitime - job[i].arrtime) / job[i].reqtime; job[i].finitime = job[i-1].finitime + job[i].reqtime; } for(i = 0; i < intarr; i++) { job[i].TAtime = job[i].finitime - job[i].arrtime; sumTAtime += job[i].TAtime; job[i].TAWtime = job[i].TAtime / job[i].reqtime; sumTAWtime += job[i].TAWtime; } avgTAtime = sumTAtime / intarr; avgTAWtime = sumTAWtime / intarr; printf("\nHRRF算法作业序列表\n"); printf("-----------------------------------------------\n"); output(); printf("id\t最高响应比\n"); for(i = 1; i < intarr; i++) { printf("%s\t%.2f\n", job[i].name, job[i].prio); } printf("-----------------------------------------------\n"); printf("作业名\t到达系统时间\tcpu所需时间\t开始时间\t结束时间\t周转时间\n"); for(i = 0; i < intarr; i++) { printf("%s\t%d\t\t%d\t\t%d\t\t%d\t\t%.2f\n", job[i].name, job[i].arrtime, job[i].reqtime, job[i].startime, job[i].finitime, job[i].TAtime); } printf("\n平均周转时间=%.2f", avgTAtime); printf("\n平均带权周转时间=%.2f\n", avgTAWtime); }
转载于:https://www.cnblogs.com/qazwsxedcrfv/p/5421075.html