To implement Priority based Non pre-emptive Scheduling Algorithm

   
/* Objective: To implement Priority based Non pre-emptive Scheduling Algorithm
            Author:Rahul kumar*/
                           

#include <stdio.h>
#define max 100

int main(){
    int n,AT[max],WT[max],ET[max],TAT[max],CT[max],PID[max],Priority[max],RT[max],min,maxCT=0,i,count,j,temp;
    double avg_WT,avg_TAT,thrpt;
    
    printf("Please enter number of processes\n");
    scanf("%d",&n);
    if(n>max){
        printf("Limit exceeded");
    }
    else if(n<1){
        printf("No process exist or negative input.");
    }
    else{
        for(i=0;i< n;i++){
            printf("\nEnter details for process %d:\n",i+1);
            printf("Arrival Time:");
            scanf("%d",&AT[i]);
            printf("Execution Time:");
            scanf("%d",&ET[i]);
            PID[i]=i+1;
            printf("Priority:");
            scanf("%d",&Priority[i]);
        }
        for(i=0;i< n-1 ; i++){
            min=i;
            for(j=i+1;j< n; j++){
                if(AT[j]< AT[min]){
                    min=j;
                }
            }
            temp=AT[i];
            AT[i]=AT[min];
            AT[min]=temp;

            temp=ET[i];
            ET[i]=ET[min];
            ET[min]=temp;

            temp=PID[i];
            PID[i]=PID[min];
            PID[min]=temp;
            
            temp=Priority[i];
            Priority[i]=Priority[min];
            Priority[min]=temp;
        }
        for(i=0;i< n;i++){
            RT[i]=ET[i];
        }
        RT[n]=9999;

        printf("Process\tPriority\tArrival Time\tBurst Time\tCompletion Time\tTAT\tWaiting Time\n");
        count=0;
        for(i=0;count!=n;)
        {
            min=n;
            for(j=0;j< n; j++)
            {
                if(AT[j]<=i && RT[j]>0 && Priority[j]>Priority[min])
                {
                    min=j;
                }
            }
            RT[min]=0;
            count++;
            i=i+ET[min];
            CT[min]=i;
            TAT[min]=CT[min]-AT[min];
            WT[min]=TAT[min]-ET[min];
            printf("P%d\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t%d\n",PID[min],Priority[min],AT[min],ET[min],CT[min],TAT[min],WT[min]);
            if(i>maxCT)
            {
                maxCT=i;
            }
            avg_TAT=avg_TAT+TAT[min];
            avg_WT=avg_WT+WT[min];
        }
        avg_TAT=(double)avg_TAT/n;
        avg_WT=(double)avg_WT/n;
        thrpt=(double)n/(CT[n-1]-AT[0]);
        printf("\nAvg.TAT=%.2f\n",avg_TAT);
        printf("Avg.WT=%.2f\n",avg_WT);
        printf("Throughput=%.2f",thrpt);
    }
    return 0;
}

Output:

Please enter number of processes
5

Enter details for process 1:
Arrival Time:0
Execution Time:3
Priority:3

Enter details for process 2:
Arrival Time:1
Execution Time:6
Priority:4

Enter details for process 3:
Arrival Time:4
Execution Time:5
Priority:6

Enter details for process 4:
Arrival Time:8
Execution Time:2
Priority:7

Enter details for process 5:
Arrival Time:6
Execution Time:5
Priority:1
Process Priority        Arrival Time    Burst Time      Completion Time TAT     Waiting Time
P1      3               0               3               3               3       0
P2      4               1               6               9               8       2
P4      7               8               2               11              3       1
P3      6               4               5               16              12      7
P5      1               6               5               21              15      10

Avg.TAT=8.20
Avg.WT=4.00
Throughput=0.45