#include<stdio.
h>
#include<stdlib.h>
#define DISK_SIZE 200
void c_scan(int *requests, int num_requests, int start_pos) {
int i, j, temp, seek_time = 0, curr_pos = start_pos;
int visited[num_requests];
int left = 0, right = DISK_SIZE - 1;
// Initialize all requests as not visited
for (i = 0; i < num_requests; i++) {
visited[i] = 0;
}
// Sort requests in ascending order
for (i = 0; i < num_requests - 1; i++) {
for (j = i + 1; j < num_requests; j++) {
if (requests[i] > requests[j]) {
temp = requests[i];
requests[i] = requests[j];
requests[j] = temp;
}
}
}
// Move disk head from start position towards right end
for (i = start_pos; i <= right; i++) {
for (j = 0; j < num_requests; j++) {
if (requests[j] == i && visited[j] == 0) {
visited[j] = 1;
seek_time += abs(curr_pos - requests[j]);
curr_pos = requests[j];
}
}
}
// Move disk head from right end to left end
seek_time += abs(curr_pos - right);
curr_pos = right;
for (i = right; i >= left; i--) {
for (j = 0; j < num_requests; j++) {
if (requests[j] == i && visited[j] == 0) {
visited[j] = 1;
seek_time += abs(curr_pos - requests[j]);
curr_pos = requests[j];
}
}
}
printf("C-SCAN Total Seek Time: %d\n", seek_time);
}
int main() {
int num_requests, start_pos, i;
int requests[100];
printf("Enter the number of disk requests: ");
scanf("%d", &num_requests);
printf("Enter the start position: ");
scanf("%d", &start_pos);
printf("Enter the requests:\n");
for (i = 0; i < num_requests; i++) {
scanf("%d", &requests[i]);
}
c_scan(requests, num_requests, start_pos);
return 0;
}