-
Notifications
You must be signed in to change notification settings - Fork 0
/
SJF(pre).c
129 lines (95 loc) · 3.24 KB
/
SJF(pre).c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#include <stdio.h>
typedef struct pros {
int id;
int burstTime;
int arivalTime;
};
void waitingTimeFunc(struct pros proc[], int num,int waitingTime[])
{
int remainingTime[num];
int i;
for ( i = 0; i < num; i++)
remainingTime[i] = proc[i].burstTime;
int current = 0, currnetTime = 0, mini = 1000;
int shortest = 0, endTime;
int checker = 0;
while (current != num) {
int j;
for ( j = 0; j < num; j++) {
if ((proc[j].arivalTime <= currnetTime) &&
(remainingTime[j] < mini) && remainingTime[j] > 0) {
mini = remainingTime[j];
shortest = j;
checker = 1;
}
}
if (checker == 0) {
currnetTime++;
continue;
}
remainingTime[shortest]--;
mini = remainingTime[shortest];
if (mini == 0)
mini = 100000;
if (remainingTime[shortest] == 0) {
current++;
endTime = currnetTime + 1;
waitingTime[shortest] = endTime - proc[shortest].burstTime - proc[shortest].arivalTime;
if (waitingTime[shortest] < 0)
waitingTime[shortest] = 0;
}
currnetTime++;
}
}
void findTurnAroundTime(struct pros proc[], int num,
int waitingTime[], int turnAroundTime[])
{
int i;
for ( i = 0; i < num; i++)
turnAroundTime[i] = proc[i].burstTime + waitingTime[i];
}
void findAvgTime(struct pros proc[], int num)
{
int waitingTime[num], turnAroundTime[num], totalWaitingTime = 0, totalTurnAroundTime = 0;
waitingTimeFunc(proc, num, waitingTime);
findTurnAroundTime(proc, num, waitingTime, turnAroundTime);
printf("Processes Arrival Time Burst time Waiting time Turn around time\n");
int i;
for (i = 0; i < num; i++) {
totalWaitingTime = totalWaitingTime + waitingTime[i];
totalTurnAroundTime = totalTurnAroundTime + turnAroundTime[i];
printf(" %d\t\t%d\t\t%d\t\t%d\t\t%d\num\n",proc[i].id ,proc[i].arivalTime,proc[i].burstTime,waitingTime[i],turnAroundTime[i]);
}
float avgWait = (float)totalWaitingTime /num;
printf( "Average waiting time =%f\n",avgWait);
float avgTurn = (float)totalTurnAroundTime / num;
printf( "Average turn around time = %f\n",avgTurn);
}
int main()
{
int num;
printf("enter number of process\n");
scanf("%d",&num);
struct pros proc[num] ;
int i;
for(i = 0; i < num; i++)
{
proc[i].id = i ;
printf("\n Enter information of %d:\n", proc[i].id);
printf("Enter Arrival Time:\t");
scanf("%d", &proc[i].arivalTime );
printf("Enter Burst Time:\t");
scanf("%d", &proc[i].burstTime);
if(proc[i].burstTime <= 0 ){
printf("The burst time can only be a positive integer\nPlease Input again\n ");
i--;
continue;
}else if(proc[i].arivalTime < 0){
printf("The arival time can not be negative\nPlease Input again\n ");
i--;
continue;
}
}
findAvgTime(proc, num);
return 0;
}