|
| 1 | +#include <stdio.h> |
| 2 | +#include <stdlib.h> |
| 3 | + |
| 4 | +#define MAX_PROCESSES 10 |
| 5 | + |
| 6 | +// Define a structure for processes |
| 7 | +typedef struct { |
| 8 | + int id; |
| 9 | + int priority; // Lower number means higher priority |
| 10 | + int burstTime; |
| 11 | + int waitingTime; |
| 12 | + int turnaroundTime; |
| 13 | +} Process; |
| 14 | + |
| 15 | +// Function to perform Ripple Effect Scheduling (RES) |
| 16 | +void rippleEffectScheduling(Process processes[], int n) { |
| 17 | + // Sort processes by priority (ascending order for higher priority first) |
| 18 | + for (int i = 0; i < n - 1; i++) { |
| 19 | + for (int j = i + 1; j < n; j++) { |
| 20 | + if (processes[i].priority > processes[j].priority) { |
| 21 | + Process temp = processes[i]; |
| 22 | + processes[i] = processes[j]; |
| 23 | + processes[j] = temp; |
| 24 | + } |
| 25 | + } |
| 26 | + } |
| 27 | + |
| 28 | + // Initialize waiting time for the first process |
| 29 | + processes[0].waitingTime = 0; |
| 30 | + |
| 31 | + // Calculate waiting time for each process |
| 32 | + for (int i = 1; i < n; i++) { |
| 33 | + processes[i].waitingTime = processes[i - 1].waitingTime + processes[i - 1].burstTime; |
| 34 | + |
| 35 | + // Ripple effect: give small wait reduction to next lower-priority process |
| 36 | + if (i < n - 1 && processes[i].priority < processes[i + 1].priority) { |
| 37 | + processes[i + 1].waitingTime -= processes[i + 1].priority - processes[i].priority; |
| 38 | + if (processes[i + 1].waitingTime < 0) { |
| 39 | + processes[i + 1].waitingTime = 0; // Avoid negative waiting time |
| 40 | + } |
| 41 | + } |
| 42 | + } |
| 43 | + |
| 44 | + // Calculate turnaround time for each process |
| 45 | + for (int i = 0; i < n; i++) { |
| 46 | + processes[i].turnaroundTime = processes[i].waitingTime + processes[i].burstTime; |
| 47 | + } |
| 48 | +} |
| 49 | + |
| 50 | +// Function to print process details |
| 51 | +void printProcesses(Process processes[], int n) { |
| 52 | + float totalWaitingTime = 0, totalTurnaroundTime = 0; |
| 53 | + |
| 54 | + printf("ID\tPriority\tBurst Time\tWaiting Time\tTurnaround Time\n"); |
| 55 | + for (int i = 0; i < n; i++) { |
| 56 | + totalWaitingTime += processes[i].waitingTime; |
| 57 | + totalTurnaroundTime += processes[i].turnaroundTime; |
| 58 | + printf("%d\t%d\t\t%d\t\t%d\t\t%d\n", |
| 59 | + processes[i].id, processes[i].priority, |
| 60 | + processes[i].burstTime, processes[i].waitingTime, |
| 61 | + processes[i].turnaroundTime); |
| 62 | + } |
| 63 | + |
| 64 | + printf("\nAverage Waiting Time: %.2f\n", totalWaitingTime / n); |
| 65 | + printf("Average Turnaround Time: %.2f\n", totalTurnaroundTime / n); |
| 66 | +} |
| 67 | + |
| 68 | +int main() { |
| 69 | + Process processes[MAX_PROCESSES]; |
| 70 | + int n; |
| 71 | + |
| 72 | + printf("Enter number of processes: "); |
| 73 | + scanf("%d", &n); |
| 74 | + |
| 75 | + // Input details for each process |
| 76 | + for (int i = 0; i < n; i++) { |
| 77 | + processes[i].id = i + 1; |
| 78 | + printf("Enter priority and burst time for process %d: ", i + 1); |
| 79 | + scanf("%d %d", &processes[i].priority, &processes[i].burstTime); |
| 80 | + } |
| 81 | + |
| 82 | + // Perform Ripple Effect Scheduling |
| 83 | + rippleEffectScheduling(processes, n); |
| 84 | + |
| 85 | + // Print process details and average times |
| 86 | + printProcesses(processes, n); |
| 87 | + |
| 88 | + return 0; |
| 89 | +} |
0 commit comments