forked from profpiyush/Hacktberfest-2021
-
Notifications
You must be signed in to change notification settings - Fork 0
/
FCFS_with_AT.c
134 lines (118 loc) · 4.36 KB
/
FCFS_with_AT.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
130
131
132
133
134
#include<stdio.h>
/*
Q2. WAP in C to implement the FCFS scheduling algorithm with considering the arrival time.
*/
/*
Algorithm by Ayan Dutta :
-->the one which arrives first executes first.
-->basically we can sort the array of arrival times
and simultainiously changing the burst times order
according to the arrival time
-->once done that find waiting time[i] = burst_time[i-1]+..burst_time[0]-Arrivaltime[i];
*/
/*
Process by Ayan Dutta :
-->ask user number of process that is n;
-->ask user to input individual burst times;
-->ask user to input individual arrival times;
-->solve the problem
-->Bubble sort arrival time array and accordingly swap the burst times;
-->solve :
-->find waiting time:before burst times - arrival time of the process;
-->turn around time:time when process completed - arrival time;
*/
void arrange(int Burst_time[],int Arrival_time[],int n)
{
// in this function we will be arranging our process according to the arrival times;
// for sorting we use bubble sort algorithm which takes O(N^2) time but easy to implement
for (int i = 0; i < n; i++)
{
for (int j = i+1; j < n; j++)
{
if(Arrival_time[j]<Arrival_time[i])
{
int temp1 = Arrival_time[j];
Arrival_time[j] = Arrival_time[i];
Arrival_time[i] = temp1;
//simultaniously we need to arrange our Burst_times;
int temp2 = Burst_time[j];
Burst_time[j] = Burst_time[i];
Burst_time[i] = temp2;
}
}
}
}
float wait_time(int Burst_time[],int Arrival_time[],int n)
{
int waiting_time[n];
int burst_times = 0;
for (int i = 0; i < n; i++)
{
if(Arrival_time[i]<=burst_times)
waiting_time[i] = burst_times - Arrival_time[i];
else waiting_time[i] = 0;
burst_times+=Burst_time[i];
}
printf("Process_id\tBurst_time\tArrival_time\twait_time\n");
float avg_waiting_time=0;
for (int i = 0; i < n; i++)
{
printf("%d\t\t%d\t\t%d\t\t%d\n",i+1,Burst_time[i],Arrival_time[i],waiting_time[i]);
avg_waiting_time+=waiting_time[i];
}
avg_waiting_time=(float)avg_waiting_time/n;
return avg_waiting_time;
}
float turn_around(int Burst_time[],int Arrival_time[],int n)
{
int waiting_time[n];
int turn_around_time[n];
int burst_times = 0;
for (int i = 0; i < n; i++)
{
if(Arrival_time[i]<=burst_times)
{
waiting_time[i] = burst_times - Arrival_time[i];
burst_times+=Burst_time[i];
}
else {
waiting_time[i] = 0;
burst_times=Arrival_time[i]+Burst_time[i];
}
}
printf("Process_id\tBurst_time\tArrival_time\twait_time\tturn_around_time\n");
float avg_turn_around_time=0;
for (int i = 0; i < n; i++)
{
if(Arrival_time[i]>waiting_time[i]+Burst_time[i])
{
avg_turn_around_time+=Burst_time[i]+waiting_time[i];
printf("%d\t\t%d\t\t%d\t\t%d\t\t%d\n",i+1,Burst_time[i],Arrival_time[i],waiting_time[i],waiting_time[i]+Burst_time[i]);
}
else
{
avg_turn_around_time+=waiting_time[i]+Burst_time[i];
printf("%d\t\t%d\t\t%d\t\t%d\t\t%d\n",i+1,Burst_time[i],Arrival_time[i],waiting_time[i],waiting_time[i]+Burst_time[i]);
}
}
avg_turn_around_time=(float)avg_turn_around_time/n;
return avg_turn_around_time;
}
int main()
{
printf("Enter the number of processes : \n");
int n;
scanf("%d",&n);
int Burst_time[n];
int Arrival_time[n];
printf("Enter the burst time of the processes and arrival time consecutively : \n");
for (int i = 0; i < n; i++)
{
scanf("%d%d",&Burst_time[i],&Arrival_time[i]);
}
arrange(Burst_time,Arrival_time,n);
float avg_waiting_time = wait_time(Burst_time,Arrival_time,n);
printf("average waiting time = %f\n",avg_waiting_time);
float avg_turn_around_time = turn_around(Burst_time,Arrival_time,n);
printf("average turn around time = %f\n",avg_turn_around_time);
}