C中的SJF算法无法正常工作

时间:2018-01-04 01:11:50

标签: c algorithm process

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

我会得到一个无限循环

0 个答案:

没有答案