[text] eee

Viewer

  1. #include <stdio.h>
  2.  
  3. typedef struct{
  4.         int pid,at,bt,wt,tt,flag;
  5. }Process;
  6.  
  7. void TakeInput(Process p[],int n){
  8.         for(int i=0;i<n;i++){
  9.                 printf("Arrival Time, Burst time of P%d : ",i);
  10.                 scanf("%d %d",&p[i].at,&p[i].bt);
  11.                 p[i].pid = i;
  12.                 p[i].flag = 0;
  13.         }
  14. }
  15.  
  16. void swap(Process p[],int i , int j){
  17.         Process temp;
  18.         temp = p[i];
  19.         p[i] = p[j];
  20.         p[j] = temp;
  21. }
  22.  
  23. void sortPid(Process p[],int n){
  24.         for(int i=1;i<n;i++){
  25.                 for(int j=0;j<n-i;j++){
  26.                         if(p[j].pid > p[j+1].pid){
  27.                                 swap(p,j,j+1);
  28.                         }
  29.                 }
  30.         }
  31. }
  32.  
  33. void sort(Process p[],int n){
  34.         for(int i=1;i<n;i++){
  35.                 for(int j=0;j<n-i;j++){
  36.                         if(p[j].bt > p[j+1].bt){
  37.                                 swap(p,j,j+1);
  38.                         }
  39.                 }
  40.         }
  41. }
  42.  
  43. void display(Process p[],int n){
  44.         printf("\nSJF\n\n");
  45.         printf("Process  AT  BT  WT  TT\n");
  46.         float w=0,t=0;
  47.         for(int i=0;i<n;i++){
  48.                 printf("P%d      %3d %3d %3d %3d\n",p[i].pid,p[i].at,p[i].bt,p[i].wt,p[i].tt);
  49.                 t +=p[i].tt;
  50.                 w +=p[i].wt;
  51.         }
  52.         w = w/n; t=t/n;
  53.         printf("Average waiting time = %f\n", w);
  54.         printf("Average turnaround time = %f\n", t);
  55. }
  56.  
  57. int pRemain(Process p[],int n){
  58.         for(int i=0;i<n;i++){
  59.                 if(p[i].flag == 0)
  60.                         return 1;
  61.         }
  62.         return 0;
  63. }
  64.  
  65. int minNextAt(Process p[],int n, int t){
  66.         int min = 999;
  67.         for(int i=0;i<n;i++){
  68.                 if(p[i].flag == 0 && p[i].at > t && p[i].at < min){
  69.                         min = p[i].at;
  70.                 }
  71.         }
  72.         return min;
  73. }
  74.  
  75. void SJF(Process p[],int n){
  76.         int t=0,test;
  77.         while(pRemain(p,n)){
  78.                 test = 0;
  79.                 for(int i=0;i<n;i++){
  80.                         if(p[i].at <= t && p[i].flag==0){
  81.                                 printf("%d| P%d |",t,p[i].pid);
  82.                                 test = 1;
  83.                                 t += p[i].bt;
  84.                                 p[i].tt = t - p[i].at;
  85.                                 p[i].wt = p[i].tt - p[i].bt;
  86.                                 p[i].flag = 1;
  87.                                 break;
  88.                         }
  89.                 }
  90.                 if(test == 0){
  91.                         printf("%d|",t);
  92.                         t = minNextAt(p,n,t);
  93.                         printf(" * |");
  94.                 }
  95.         }
  96.         printf("%d",t );
  97. }
  98.  
  99.  
  100. void main(){
  101.         int n;
  102.         printf("Enter the number of process: ");
  103.         scanf("%d",&n);
  104.         Process p[n];
  105.         TakeInput(p,n);
  106.         sort(p,n);
  107.         SJF(p,n);
  108.         sortPid(p,n);
  109.         display(p,n);
  110. }

Editor

You can edit this paste and save as new:


File Description
  • eee
  • Paste Code
  • 19 Apr-2024
  • 1.92 Kb
You can Share it: