Monday, 21 October 2013

Banker

#include<stdio.h>
#define sz 10
int alloc[sz][sz],max[sz][sz],need[sz][sz],ava[sz],pr,re;
int flag[sz],seq[sz];

void create();
void disp();
void check();
void request();
void need_mat();

void main()
{
   int ch,i;
  
   do
   {
   printf("\n\t  MENU\n\t1.create\n\t2.Display Matrices\n\t3.Check State\n\t4.Request\n\t5.EXIT");
   printf("\nEnter choice :- ");
   scanf("%d",&ch);
   switch(ch)
      {
         case 1:
                create();
                break;
         case 2:
                disp();
                break;
         case 3:
                check();
                break;
         case 4:
               request();
                break;
         case 5:
                break;
      }
   }while(ch!=5);
}


void request()
{
   int i,j,n;
   printf("\nEnter Process Number to change it's Allocation :- ");
   scanf("%d",&n);
   printf("\nEnter Values for p-%d",n);
   for(i=0;i<re;i++)
      scanf("%d",&alloc[n][i]);
   need_mat();
}

void need_mat()
{
   int i,j;
   for(i=0;i<pr;i++)
      {
         for(j=0;j<re;j++)
            {
               need[i][j]=max[i][j]-alloc[i][j];
            }
      }
}


void check()
{
   int i,j=1,k,cnt1=0,cnt=-1;
   while(cnt!=cnt1)
      {
         cnt=cnt1;
         for(i=0;i<pr;i++)
            {
               if((flag[i]==0) && (need[i][0]<=ava[0]) && (need[i][1]<=ava[1]) && (need[i][2]<=ava[2]))
                  {
                     cnt1++;
                     seq[cnt1-1]=i;
                     for(k=0;k<re;k++)
                        ava[k]=ava[k]+need[i][k];
                   

                     printf("\n\nAt the %d step,\nAvailable Resources are :-",j);
                     for(k=0;k<re;k++)
                        printf("    %d",ava[k]);
                     j++;
                     flag[i]=1;
                  }
            }
      }
   if(cnt1==pr)
      {
         printf("\n\nSAFE SEQUENCE  ==>>");
         for(i=0;i<pr;i++)
            printf("\tP%d",seq[i]);
      }
   else
      printf("\n\nDANGEROUS SEQUENCE  !!!!!");
   printf("\n\n");
  

//   cnt1=0;
//   cnt=-1;


}                       
         
              
                    
               



  
void disp()
{
   int i,j,k;

   printf("\n    Available Resources :- \n");
   for(i=0;i<pr;i++)
      printf("\t%d",ava[i]);

   printf("\n    Allocation Matrix :- ");
   for(i=0;i<pr;i++)
   {  printf("\n");
      for(j=0;j<re;j++)
         {
        printf("\t%d",alloc[i][j]);
         }
   }
  
   printf("\n    MAX Matrix :- ");
   for(i=0;i<pr;i++)
   {  printf("\n");
      for(j=0;j<re;j++)
         {
        printf("\t%d",max[i][j]);
         }
   }
  
   printf("\n    NEED Matrix :- ");
   for(i=0;i<pr;i++)
   {  printf("\n");
      for(j=0;j<re;j++)
         {
        printf("\t%d",need[i][j]);
         }
   }

}



void create()
{
   int i,j,k;
   printf("\nEnter the number of processes :- ");
   scanf("%d",&pr);
   printf("\nEnter the number of resources :- ");
   scanf("%d",&re);
   printf("\nEnter Allocation Matrix :- ");
   for(i=0;i<pr;i++)
      for(j=0;j<re;j++)
         {
        scanf("%d",&alloc[i][j]);
         }
  
   printf("\nEnter MAX Matrix :- ");
   for(i=0;i<pr;i++)
      for(j=0;j<re;j++)
         {
        scanf("%d",&max[i][j]);
         }
  
   printf("\nEnter Available resources :- ");
   for(j=0;j<re;j++)
      {
    scanf("%d",&ava[j]);
      }
   need_mat();  
  
}     

No comments:

Post a Comment