gpt4 book ai didi

c - 到达时间的 SJF 算法无法正常工作

转载 作者:行者123 更新时间:2023-11-30 16:37:13 24 4
gpt4 key购买 nike

typedef struct{
int tL; //Arrival time
int rafaga,id,tE,tP; //burst,id,waitTime,TimeAround
} process;

int main(int argc, char** argv) {
int n= 3;
int i,j,rafagasum=0,k=1,rafagacomp;
process p[n],aux;
char id []= {'A','B','C','D','E','F'};
for(i=0;i<n;i++)
{
printf(" Process burst %d: ",i);
scanf("%d",&p[i].rafaga);
printf("Arrival time %d: ",i);
scanf("%d",&p[i].tL);
p[i].id=id[i];



}

//Sort by arrival time

for (i=0;i<n;i++){
for(j=0;j<n;j++){
if(p[i].tL<p[j].tL){
aux=p[j];
p[j]=p[i];
p[i]=aux;


}

}
}

for(j=0;j<n;j++){
rafagasum=rafagasum+p[j].rafaga;
rafagacomp=p[k].rafaga;
for(i=k;i<n;i++)
{

if(rafagasum>p[i].tL && p[i].rafaga<rafagacomp)
aux=p[k];
p[k]=p[i];
p[i]=aux;
}
k++;
}
// We calculate waiting time
p[0].tE=0;

int sum=0;
for(i=1;i<n;i++){
sum=sum+p[i-1].rafaga;
p[i].tE=sum-p[i].tL;
}

//We calculate Timearound
int sum1=0;
for(i=0;i<n;i++){

sum1=sum1+p[i].rafaga;
p[i].tP=sum1-p[i].tL;
}

printf(" ID Turnaround TWAit \n ");

for(i=0;i<n;i++){
printf("%c \t %d \t %d \t \n", p[i].id,p[i].tP,p[i].tE);
}



return 0;
}

我想你们大多数人都知道这个算法(SJF)应该做什么,我被告知编写一个算法,这就是我得到的。我决定使用一个包含时间和 id 的“process”结构。

我认为按到达时间排序工作得很好,但有时,在 printf 上,我得到两次相同的字母(进程),并且我得到的时间间隔和等待时间不正确,我真的不知道知道如何解决这个问题,因为我认为我使用的公式是正确的。任何帮助都会很好。

无论哪里写着“rafaga”,意思是“爆发时间”

最佳答案

SJF算法中,首先根据到达时间排序然后根据突发时间.

现在看看您的排序代码,您似乎正在使用 selection sort ,并且您的代码不正确。内部循环总是从比外部索引多一个索引开始,因此 j = i + 1,而不是 j = 0 正确的排序是:

for (i = 0;i < n;i++){

for(j = i+1;j < n;j++)
{
if(p[i].tL < p[j].tL){

aux=p[j];
p[j]=p[i];
p[i]=aux;
}

}
}

此外,您对突发时间的排序看起来不正确。照顾好这些小事情,你的代码就会是正确的。附带说明一下,一旦您了解了基础知识,SJF 就是最简单的编码方式。

关于c - 到达时间的 SJF 算法无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48060958/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com