毕业论文论文范文课程设计实践报告法律论文英语论文教学论文医学论文农学论文艺术论文行政论文管理论文计算机安全
您现在的位置: 毕业论文 >> 报告 >> 正文

银行家算法C++源程序及流程图 第4页

更新时间:2010-1-27:  来源:毕业论文
银行家算法C++源程序及流程图 第4页
#include <iostream>
using namespace std;
#define I 50         /*最大进程数*/
#define J 100       /*最大资源数*/
#define False 0
#define True 1
int Available[J];   /*可利用资源数*/
int MAX[I][J];     /*最大需求矩阵*/
int Allocation[I][J];  /*分配矩阵*/
int Need[I][J];       /*需求矩阵*/
int Request[I][J];/*进程需要资源数*/
int Finish[I];                   
/*系统是否有足够的资源分配*/
int p[I];            /*记录序列*/
int M,N;        /*M个进程,N类资源*/
void initial();
bool Safe();
void request();
void initial()       /*初始化算法*/
{
    int i,j;
    cout<<"输入进程数:";
    cin>>M;
    cout<<"输入资源的种类数:";
    cin>>N;
 cout<<"输入每个进程最多所需的各资源:"<<endl;
    for(i=0;i<M;i++)
    for(j=0;j<N;j++)
    cin>>MAX[i][j];
    cout<<"输入每个进程已分配的各资源数:"<<endl;
    for(i=0;i<M;i++)
    {
        for(j=0;j<N;j++)
        {
            cin>>Allocation[i][j];
            Need[i][j]=MAX[i][j]-Allocation[i][j];
            if(Need[i][j]<0)
            {
                cout<<"您输入的第"<<i+1<<"个进程所拥有的第"<<j+1<<"个资源数错误,请重新输入:"<<endl;
                j--;
                continue;
            }
        }
    }
    cout<<"输入各个资源现有数目:"<<endl;
    for(i=0;i<N;i++)
    {
        cin>>Available[i];
    }
}
void request()        /*银行家算法*/
{
    int i,ID;
    char again;
    while(1)
    {
        cout<<"输入要申请资源的进程号"<<endl;
        cin>>ID;
        cout<<"输入进程所请求的各资源的数量:"<<endl;
        for(i=0;i<N;i++)
        {
            cin>>Request[ID][i];
        }
    for(i=0;i<N;i++)
        {
            if(Request[ID][i]>Need[ID][i])
            {
                cout<<"输入的请求资源数超过所需的资源最大数!请重新输入!"<<endl;
                continue;
            }
            if(Request[ID][i]>Available[i])
            {
                cout<<"尚无足够资源!请重新输入!"<<endl;
                continue;
            }
        }
        for(i=0;i<N;i++)
        {
            Available[i]-=Request[ID][i];
            Allocation[ID][i]+=Request[ID][i];
            Need[ID][i]-=Request[ID][i];
        }
        if(Safe())
        {
            cout<<"同意分配请求!"<<endl;
        }
        else
        {
           cout<<"请求被拒绝!"<<endl;
            for(i=0;i<N;i++)
            {
                Available[i]+=Request[ID][i];
                Allocation[ID][i]-=Request[ID][i];
                Need[ID][i]+=Request[ID][i];
            }
        }
  for(i=0;i<M;i++)
        {
            Finish[i]=0;
        }
        cout<<"再次请求分配按y/Y,否请按其它键."<<endl;
        cin>>again;
        if(again=='y'||again=='Y')
        {
            continue;
        }
        break;
        }
}
bool Safe()                                    /*安全性算法*/
{
    int i,j,k,l=0;
    int Work[J];                    /*工作数组*/
    for(i=0;i<N;i++)
    Work[i]=Available[i];
    for(i=0;i<M;i++)
    {
        Finish[i]=0;
    }
    for(i=0;i<M;i++)
    {   
        if(Finish[i]==1)
        {
            continue;
        }
        else
        {
            for(j=0;j<N;j++)
            {
                if(Need[i][j]>Work[j])
                {
                    break;
                }
            }
    if(j==N)
            {
                Finish[i]=1;
                for(k=0;k<N;k++)
                {
                    Work[k]+=Allocation[i][k];
                }
                p[l++]=i;
                i=-1;
            }
            else
            {www.751com.cn
                continue;
            }
        }
        if(l==M)
        {
            cout<<"系统是安全的"<<endl;
            cout<<"安全序列:"<<endl;
            for(i=0;i<l;i++)
            {
                cout<<p[i];
                if(i!=l-1)
                {
                    cout<<"  ";
                }
            }
            cout<<""<<endl;
            return 1;
        }
    }
    cout<<"系统是不安全的"<<endl;
    return 0;
}
int main()
{
    initial();
    Safe();
    request

上一页  [1] [2] [3] [4] 

银行家算法C++源程序及流程图 第4页下载如图片无法显示或论文不完整,请联系qq752018766
设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©751com.cn 辣文论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。