0
由于这是一项重要的任务,而我的另一篇文章没有得到回答,这是另一个尝试编程的尝试。
如果到达时间有序,它似乎正在工作,但随着爆发时间随机进行无限循环。我调试了它与#include<stdio.h>
typedef struct nonpresjf
{
int at,bt,ft,tat,wt,id;
}nonpresjf;
nonpresjf p[20],p1[20],aux;
int main()
{
int i,limit,nextval,m,min,j;
float mediaperm=0,mediaespera=0;
p[0].wt=p[0].tat=0;
int n=3;
p[0].at=3;
p[1].at=5;
p[2].at=7;
p[0].bt=9;
p[1].bt=3;
p[2].bt=2;
limit=p[0].at;
for (i=0;i<n;i++){
for(j=i+1;j<n;j++){
if(p[i].at<p[j].at){
aux=p[j];
p[j]=p[i];
p[i]=aux;
}
}
}
for(i=0;i<n;i++)
limit+=p[i].bt;
for(i=0;i<n;i++)
p1[i]=p[i];
printf("\n\n Diagram: ");
printf("%d",p[0].at);
nextval=p[0].at;
m=0;
do
{
min = 9999;
for(i=0;p[i].at<=nextval && i<n ;i++)
if(p[i].bt<min && p[i].bt>0)
{
m=i;
min=p[i].bt;
}
nextval+=p[m].bt;
p[m].bt=0;
printf("->P%d->%d",m,nextval);
if(p[m].bt==0)
{
p[m].ft=nextval;
p[m].tat=p[m].ft-p[m].at;
p[m].wt=p[m].tat-p1[m].bt;
p[0].tat+=p[m].tat;
p[0].wt+=p[m].wt;
}
}while(nextval<limit);
p[0].tat=p[0].tat/n;
p[0].wt=p[0].wt/n;
printf("\n\n-----------TABLE-------------------\n");
printf("\nProcess\tArrival\tBurst\tTurnAround\tWaitTime\n");
for(i=0;i<n;i++)
printf("\nP%d\t%d\t%d\t\t%d\t\t%d\n",p[i].id,p[i].at,p1[i].bt,p[i].tat,p[i].wt);
printf("\n\n--------------------------------\n");
}
return 0;
}
有关的事情,nextval永远不会达到限制,有时会发生这种情况。
我认为aT的排序也不能正常工作,我在其他帖子中建议我从j = i + 1开始对它进行排序,但这样理论上正确的输出是错误的。
输入:
nextval<limit
预期产出。
number of process: 3
Arrival Time0: 3
Arrival Time1: 5
Arrival Time2: 7
Burst time 0: 9
Burst time 1: 3
Burst time 2: 2
实际输出。
-----------TABLE-------------------
Process Arrival Burst TurnAround WaitTime
P0 3 9 9 0
P1 5 3 12 9
P2 7 2 7 5
如果输入是:
-----------TABLE-------------------
Process Arrival Burst TurnAround WaitTime
P0 3 9 9 4
P1 5 3 7 9
P2 7 2 12 5
我会得到一个无限循环