OneCompiler

os20

118

Q1)
#include <stdio.h>
#include <stdlib.h>

void scan(int requests[], int n, int start, int direction);

int main() {
int n, start, direction;
printf("Enter the total number of disk blocks: ");
scanf("%d", &n);

int *requests = (int *)malloc(n * sizeof(int));
printf("Enter the disk request string:\n");
for (int i = 0; i < n; i++) {
    scanf("%d", &requests[i]);
}

printf("Enter the starting head position: ");
scanf("%d", &start);
printf("Enter the direction (1 for Right, -1 for Left): ");
scanf("%d", &direction);

scan(requests, n, start, direction);

free(requests);
return 0;

}

void scan(int requests[], int n, int start, int direction) {
int total_head_movements = 0;
int *visited = (int *)calloc(n, sizeof(int));

printf("List of requests in order of service:\n");

int cur = start;
while (1) {
    int min_diff = -1;
    int next_index = -1;

    for (int i = 0; i < n; i++) {
        if (!visited[i]) {
            if (requests[i] >= 0 && requests[i] <= n - 1) {
                int diff = abs(cur - requests[i]);
                if (min_diff == -1 || diff < min_diff) {
                    min_diff = diff;
                    next_index = i;
                }
            }
        }
    }

    if (next_index == -1) {
        if (direction == 1) {
            printf("%d -> ", n - 1);
            total_head_movements += n - 1 - cur;
            cur = n - 1;
        } else if (direction == -1) {
            printf("%d -> ", 0);
            total_head_movements += cur;
            cur = 0;
        }
        break;
    }

    printf("%d -> ", requests[next_index]);
    total_head_movements += abs(cur - requests[next_index]);
    visited[next_index] = 1;
    cur = requests[next_index];
}

printf("\nTotal number of head movements: %d\n", total_head_movements);
free(visited);

}
Q2)
#include <stdio.h>
#include <stdlib.h>
#include <mpi.h>

#define ARRAY_SIZE 1000

int main(int argc, char *argv[]) {
MPI_Init(&argc, &argv);

int rank;
MPI_Comm_rank(MPI_COMM_WORLD, &rank);

int *arr = (int *)malloc(ARRAY_SIZE * sizeof(int));
if (rank == 0) {
    srand(time(NULL));
    for (int i = 0; i < ARRAY_SIZE; i++) {
        arr[i] = rand() % 1000;
    }
}

int max_local = -1;
for (int i = rank; i < ARRAY_SIZE; i += size) {
    if (arr[i] > max_local) {
        max_local = arr[i];
    }
}

int max_global;
MPI_Reduce(&max_local, &max_global, 1, MPI_INT, MPI_MAX, 0, MPI_COMM_WORLD);

if (rank == 0) {
    printf("Max number: %d\n", max_global);
}

MPI_Finalize();
return 0;

}