标题:求助一道关于操作系统的编程-->Plateau转移
只看楼主
friend1234
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2005-10-26
 问题点数:0 回复次数:0 
求助一道关于操作系统的编程-->Plateau转移

这是我编的关于调度算法的程序,我的问题出在不知道怎么在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); }

搜索更多相关主题的帖子: Plateau 操作系统 
2005-10-26 22:56



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-31538-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.915655 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved