这是我编的关于调度算法的程序,我的问题出在不知道怎么在i的循环中出去几个变量,也就是不同颜色的部分!谢谢啦,帮我指点一下,给我把这个程序改对啊!
谢谢啊!
#include"stdio.h" #define n 4 void first(int process[n],float reach[n],float service[n]) {float start[n],finish[n],T[n],W[n]; int i; start[0]=reach[0]; finish[0]=reach[0]+service[0]; T[0]=finish[0]-reach[0]; W[0]=T[0]/service[0]; for(i=1;i<n;i++) {start[i]=finish[i-1]; finish[i]=start[i]+service[i]; T[i]=finish[i]-reach[i]; W[i]=T[i]/service[i]; } printf("进程 到达时间 服务时间 开始时间 结束时间 周转时间 带权周转时间"); printf("\n"); for(i=0;i<n;i++) {printf("%d",process[i]); printf("%15f",reach[i]); printf("%13f",service[i]); printf("%10f",start[i]); printf("%12f",finish[i]); printf("%12f",T[i]); printf("%12f",W[i]); printf("\n"); } } //先来先服务调度算法
void least(int process[n],float reach[n],float service[n]) {float start[n],finish[n],T[n],W[n],min; int i,j=1,t1[n],t[n]; t1[0]=0; t[0]=0; start[0]=reach[0]; finish[0]=reach[0]+service[0]; T[0]=finish[0]-reach[0]; W[0]=T[0]/service[0]; while(j<=n) {min=service[j+1]; for(i=1;i<n;i++) while(j>0) if(i==t1[j--]||i==t[j--]) continue; if(min>service[i]) {min=service[i]; t[j]=i;} if(reach[t[j]]<=finish[t1[j-1]]) {start[t[j]]=finish[t1[j]-1]; finish[t[j]]=reach[t[j]]+service[t[j]]; T[t[j]]=finish[t[j]]-start[t[j]]; W[t[j]]=T[t[j]]/service[t[j]]; t1[j]=t[j]; j++; } } printf("进程 到达时间 服务时间 开始时间 结束时间 周转时间 带权周转时间"); printf("\n"); for(i=0;i<n;i++) {printf("%d",process[i]); printf("%15f",reach[i]); printf("%13f",service[i]); printf("%10f",start[i]); printf("%12f",finish[i]); printf("%12f",T[i]); printf("%12f",W[i]); printf("\n"); } } //短作业优先调度算法
void reflect(int process[n],float reach[n],float service[n]) {float start[n],finish[n],T[n],W[n],max; int i,j=1,t1[n],t[n]; t1[0]=0; t[0]=0; start[0]=reach[0]; finish[0]=reach[0]+service[0]; T[0]=finish[0]-reach[0]; W[0]=T[0]/service[0]; while(j<=n) {max=1+(start[j-1]-reach[j])/service[j]; for(i=1;i<n;i++) while(j>0) if(i==t1[j--]||i==t[j--]) continue;
if(max<1+(start[j-1]-reach[i])/service[i]) t[j]=i; if(reach[t[j]]<=finish[t1[j-1]]) {start[t[j]]=finish[t1[j]-1]; finish[t[j]]=reach[t[j]]+service[t[j]]; T[t[j]]=finish[t[j]]-start[t[j]]; W[t[j]]=T[t[j]]/service[t[j]]; t1[j]=t[j]; j++; } } printf("进程 到达时间 服务时间 开始时间 结束时间 周转时间 带权周转时间"); printf("\n"); for(i=0;i<n;i++) {printf("%d",process[i]); printf("%15f",reach[i]); printf("%13f",service[i]); printf("%10f",start[i]); printf("%12f",finish[i]); printf("%12f",T[i]); printf("%12f",W[i]); printf("\n"); } } //高响应比优先调度算法
void main() {float reach[n],service[n]; int process[n],i; for(i=0;i<n;i++) {scanf("%f",&reach[i]); scanf("%f",&service[i]); process[i]=i; } first(process,reach,service); least(process,reach,service); reflect(process,reach,service); }