我有一个学校项目,要求我使用这些变量来模拟先到先得:
用户输入:
处理数量:3
流程1到达0时间,需要5个'资源'
3
1,5,0
2,5,4
3,1,8
然而,我似乎无法超越前5个'资源'。我试图找出如何增加PID并重复,但保持所有这些资源的时间增加。我创建了这个相同的程序,但它只允许这个特定的输入,我试图让它更通用,所以我可以选择任何数量的流程和资源(单位)。
#include <stdio.h>
main() {
int n;
printf("Enter the Amount of processes: ");
scanf("%d",&n);
//Variables
int process[n], unit[n], at[n];
int i,time,PID = 1;
int awt, atat,sum,counter;
int x = n;
//Takes and stores the users input into process unit and at
for(i=0;i<n;i++)
{
scanf("%d,%d,%d", &process[i], &unit[i], &at[i]);
}
sum = sum_array(unit,n);
printf("%d\n", sum);
printf("FCFS\n");
printf("Time PID");
for(counter = 0; counter < x; counter++, PID++){
FCFS(time,n,unit,PID);
}
}
int sum_array(int at[], int num_elements){
int x, sum = 0;
for(x=0; x<num_elements;x++){
sum = sum + at[x];
}
return(sum);
}
int FCFS(int time,int n,int unit[], int PID){
for(time = 0, n = 0 ; unit[n] >0 ;time++, unit[n]--){
printf("\n%d ", time);
printf("%d", PID);
}
return;
}
示例输出:
FCFS
TIME PID
0 1
1 1
2 1
3 1
4 1
5 2
6 2
7 2
8 2
9 2
10 3
答案 0 :(得分:1)
您的问题主要与FCFS
函数和您调用它的循环有关。
尝试以下方法:
time = 0
counter
而不是n
传递给FCFS
time
FCFS
time
n
和FCFS
参数
在FCFS
圈内呼叫for
:
time = FCFS(time, counter, unit, PID);
更新了FCFS
代码:
int FCFS(int time,int n,int unit[], int PID)
{
for( ; unit[n] >0 ;time++, unit[n]--)
{
printf("\n%d ", time);
printf("%d", PID);
}
return time;
}
除此之外,您的代码存在许多问题,但它并不适合这个Q / A全部提及,所以我坚持使用必要的东西让代码运行有效示例输入。
答案 1 :(得分:0)
由于这是一个家庭作业问题,我建议您自己解决。既然你已经付出了一些努力来解决这个问题,我将下面的答案作为扰流板发布(注意缩进在剧透版中不起作用)。然而,在看到答案之前,几乎没有建议来修复你的程序:
n
绝对没有任何意义。请在FCFS
函数中使用其他变量。PID
。由于您将它放在数组中,请尝试从数组中获取值。n
将counter
传递给函数,以便您可以索引这两个数组。FCFS
内的for循环毫无意义。它应该是for(i=0; i<unit[counter]; i++)
。 time
可以在循环内增加。time
需要返回才能正常增加我的代码:
int time = 0;
int cur_index = 0;
while (cur_index < n) {
int pid = -1;
if (at[cur_index] <= time) {
pid = process[cur_index];
} else {
printf("%d %d\n", time, pid);
time++;
continue;
}
if (pid != -1) {
int r = 0;
for (r = 0; r < unit[cur_index]; r++) {
printf("%d %d\n", time, pid);
time++;
}
}
}