TE Comp Sem-II SPOS Prac 6 (Page replacement)

#include<stdio.h>
#include<conio.h>
#include<iostream.h>
int search(int pf[10],int pno)
{
    for(int i=0;i<3;i++)
    {
        if(pf[i]==pno)
            return i+1;

    }
    return 0;
}
void main()
{
    int ch,pn,pf[10],flag,cnt=0,i,ch1,count[3]={0};
    do
    {
        clrscr();
        cout<<"\n\t1.FIRST IN FIRST OUT.";
        cout<<"\n\t2.OPTIMAL ALGORITHM.";
        cout<<"\n\t3.LEAST RECENTLY USED.";
        cout<<"\n\t4.EXIT";
        cout<<"\n\tENTER YOUR CHOICE : ";
        cin>>ch;
        switch(ch)
        {
            case 1:
                do
                {
                    clrscr();
                    cout<<"\n Enter Page no.::";
                    cin>>pn;
                    flag=search(pf,pn);
                    if(flag==0)
                    {
                        if(cnt<3)
                            pf[cnt++]=pn;
                        else
                        {
                            for(i=0;i<2;i++)
                            {
                                pf[i]=pf[i+1];
                            }
                            pf[i]=pn;
                        }
                    }
                    cout<<"\n Status\n";
                    for(i=0;i<cnt;i++)
                        cout<<"\t"<<pf[i];
                    cout<<"\n Want to add more::Y=1,N=0 ";
                    cin>>ch1;
                }while(ch1!=0);
                break;

            case 2:
                clrscr();
                int n,buff[10];

                cout<<"\n Enter the total no of Pages ::";
                cin>>n;
                for(i=0;i<n;i++)
                {
                    cout<<"Enter"<<i+1<<" page: ";
                    cin>>buff[i];
                }
                cnt=0;
                i=0;
                do
                {
                    flag=search(pf,buff[i]);
                    if(flag==0)
                    {
                        if(cnt<3)
                            pf[cnt++]=buff[i];
                        else
                        {
                            for(int k=0;k<3;k++)
                            {
                                for(int j=i;j<n;j++)
                                {
                                    if(pf[k]==buff[j])
                                    {
                                        count[k]=j;
                                        break;
                                    }

                                }
                                if(j>=n)
                                count[k]=n;
                            }
                            int  ma,max=-99;
                            for(k=0;k<3;k++)
                            {
                                if(max<count[k])
                                  {
                                    max=count[k];
                                    ma=k;
                                  }
                            }
                            pf[ma]=buff[i];
                        }
                    }
                    cout<<"\n Status\n";
                    for(int j=0;j<cnt;j++)
                        cout<<"\t"<<pf[j];
                    getch();
                    i++;
                }while(i<n);
                break;
           case 3:
                do
                {
                    clrscr();
                    cout<<"\n Enter Page no.::";
                    cin>>pn;
                    flag=search(pf,pn);
                    if(flag==0)
                    {
                        if(cnt<3)
                            pf[cnt++]=pn;
                        else
                        {
                            int  mi,min=99;
                            for(int k=0;k<3;k++)
                            {
                                if(min>count[k])
                                  {
                                    min=count[k];
                                    mi=k;
                                  }
                            }
                            pf[mi]=pn;
                            count[mi]=0;
                        }
                    }
                    else
                    {
                        count[flag-1]++;
                    }
                    cout<<"\n Status\n";
                    for(i=0;i<cnt;i++)
                        cout<<"\t"<<pf[i];
                    cout<<"\n Want to add more::Y=1,N=0 ";
                    cin>>ch1;
                }while(ch1!=0);
                break;
        }
    }while(ch!=4);
}

No comments:

Post a Comment