MIT-Curricular/OS/C/Week11/qq1.c
2025-08-05 07:23:18 +05:30

11 lines
2.1 KiB
C

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define MAX 100
void sstf(int a[],int n,int h){int v[MAX]={0},t=0,c=h;printf("\nSSTF:\n%d ",c);for(int i=0;i<n;i++){int x=-1,m=1e9;for(int j=0;j<n;j++){if(!v[j]){int d=abs(a[j]-c);if(d<m){m=d;x=j;}}}v[x]=1;t+=m;c=a[x];printf("->%d ",c);}printf("\nTotal:%d\n",t);}
void sortAsc(int a[],int n){for(int i=0;i<n-1;i++)for(int j=i+1;j<n;j++)if(a[i]>a[j]){int t=a[i];a[i]=a[j];a[j]=t;}}
void sortDesc(int a[],int n){for(int i=0;i<n-1;i++)for(int j=i+1;j<n;j++)if(a[i]<a[j]){int t=a[i];a[i]=a[j];a[j]=t;}}
void scan(int a[],int n,int h,int d){int l[MAX],r[MAX],x=0,y=0;for(int i=0;i<n;i++)if(a[i]<h)l[x++]=a[i];else r[y++]=a[i];sortDesc(l,x);sortAsc(r,y);int t=0,c=h;printf("\nSCAN:\n%d ",c);for(int i=0;i<x;i++){t+=abs(c-l[i]);c=l[i];printf("->%d ",c);}if(c){t+=c;c=0;printf("->%d ",c);}for(int i=0;i<y;i++){t+=abs(r[i]-c);c=r[i];printf("->%d ",c);}printf("\nTotal:%d\n",t);}
void cscan(int a[],int n,int h,int d){int l[MAX],r[MAX],x=0,y=0;for(int i=0;i<n;i++)if(a[i]<h)l[x++]=a[i];else r[y++]=a[i];sortAsc(l,x);sortAsc(r,y);int t=0,c=h;printf("\nCSCAN:\n%d ",c);for(int i=0;i<y;i++){t+=abs(r[i]-c);c=r[i];printf("->%d ",c);}if(c!=d-1){t+=abs(d-1-c);c=d-1;printf("->%d ",c);}t+=d-1;c=0;printf("->%d ",c);for(int i=0;i<x;i++){t+=abs(l[i]-c);c=l[i];printf("->%d ",c);}printf("\nTotal:%d\n",t);}
void clook(int a[],int n,int h){int l[MAX],r[MAX],x=0,y=0;for(int i=0;i<n;i++)if(a[i]<h)l[x++]=a[i];else r[y++]=a[i];sortAsc(l,x);sortAsc(r,y);int t=0,c=h;printf("\nCLOOK:\n%d ",c);for(int i=0;i<y;i++){t+=abs(r[i]-c);c=r[i];printf("->%d ",c);}if(x){t+=abs(c-l[0]);c=l[0];printf("->%d ",c);for(int i=1;i<x;i++){t+=abs(l[i]-c);c=l[i];printf("->%d ",c);}}printf("\nTotal:%d\n",t);}
int main(){int c,n,h,d,a[MAX];printf("1.SSTF\n2.SCAN\n3.CSCAN\n4.CLOOK\nChoice:");scanf("%d",&c);printf("Requests:");scanf("%d",&n);printf("Queue:");for(int i=0;i<n;i++)scanf("%d",&a[i]);printf("Head:");scanf("%d",&h);if(c==2||c==3){printf("Size:");scanf("%d",&d);}switch(c){case 1:sstf(a,n,h);break;case 2:scan(a,n,h,d);break;case 3:cscan(a,n,h,d);break;case 4:clook(a,n,h);break;default:printf("Invalid\n");}return 0;}