當前位置:編程學習大全網 - 編程語言 - 銀行家算法C++描述

銀行家算法C++描述

#include <iostream>

#include <string>

#define M 3 //資源的種類數

#define N 5 //進程的個數

void output(int iMax[N][M],int iAllocation[N][M],int iNeed[N][M],int iAvailable[M],char cName[N]); //統壹的輸出格式

bool safety(int iAllocation[N][M],int iNeed[N][M],int iAvailable[M],char cName[N]);

bool banker(int iAllocation[N][M],int iNeed[N][M],int iAvailable[M],char cName[N]);

int main()

{

int i,j;

//當前可用每類資源的資源數

int iAvailable[M]={3,3,2};

//系統中N個進程中的每壹個進程對M類資源的最大需求

int iMax[N][M]={{7,5,3},{3,2,2},{9,0,2},{2,2,2},{4,3,3}};

//iNeed[N][M]每壹個進程尚需的各類資源數

//iAllocation[N][M]為系統中每壹類資源當前已分配給每壹進程的資源數

int iNeed[N][M],iAllocation[N][M]={{0,1,1},{2,0,0},{3,0,2},{2,1,1},{0,0,2}};

//進程名

char cName[N]={'a','b','c','d','e'};

bool bExitFlag=true; //退出標記

char ch; //接收選擇是否繼續提出申請時傳進來的值

bool bSafe; //存放安全與否的標誌

//計算iNeed[N][M]的值

for(i=0;i<N;i++)

for(j=0;j<M;j++)

iNeed[i][j]=iMax[i][j]-iAllocation[i][j];

//輸出初始值

output(iMax,iAllocation,iNeed,iAvailable,cName);

//判斷當前狀態是否安全

bSafe=safety(iAllocation,iNeed,iAvailable,cName);

//是否繼續提出申請

while(bExitFlag)

{

cout<<"\n"<<"繼續提出申請?\ny為是;n為否。\n";

cin>>ch;

switch(ch)

{

case 'y':

//cout<<"調用銀行家算法";

bSafe=banker(iAllocation,iNeed,iAvailable,cName);

if (bSafe) //安全,則輸出變化後的數據

output(iMax,iAllocation,iNeed,iAvailable,cName);

break;

case 'n':

cout<<"退出。\n";

bExitFlag=false;

break;

default:

cout<<"輸入有誤,請重新輸入:\n";

}

}

}

//輸出

void output(int iMax[N][M],int iAllocation[N][M],int iNeed[N][M],int iAvailable[M],char cName[N])

{

int i,j;

cout<<"\n\t Max \tAllocation\t Need \t Available"<<endl;

cout<<"\tA B C\tA B C\tA B C\t A B C"<<endl;

for(i=0;i<N;i++)

{

cout<<cName[i]<<"\t";

for(j=0;j<M;j++)

cout<<iMax[i][j]<<" ";

cout<<"\t";

for(j=0;j<M;j++)

cout<<iAllocation[i][j]<<" ";

cout<<"\t";

for(j=0;j<M;j++)

cout<<iNeed[i][j]<<" ";

cout<<"\t";

cout<<" ";

//Available只需要輸出壹次

if (i==0)

for(j=0;j<M;j++)

cout<<iAvailable[j]<<" ";

cout<<endl;

}

}

//安全性算法,進行安全性檢查;安全返回true,並且輸出安全序列,不安全返回false,並輸出不安全的提示;

bool safety(int iAllocation[N][M],int iNeed[N][M],int iAvailable[M],char cName[N])

{

}

//定位ch對應的進程名在數組中的位置

//沒找見返回-1,否則返回數組下標

int locate(char cName[N],char ch)

{

int i;

for(i=0;i<N;i++)

if (cName[i]==ch) //找到

return i;

//未找到

return -1;

}

//提出申請,返回提出申請的進程名對應的下標

int request(char cName[N],int iRequest[M])

{

int i,loc;

char ch;

bool bFlag=true;

//判斷輸入的進程名是否有誤

while(bFlag)

{

//輸出進程名

for(i=0;i<N;i++)

cout<<cName[i]<<"\t";

//輸入提出申請的進程名

cout<<"\n輸入提出資源申請的進程名:\n";

cin>>ch;

//定位ch對應的進程名在進程名數組中的位置

loc=locate(cName,ch);

//沒找到,重新輸入

if (loc==-1)

cout<<"\n您輸入的進程名有誤!請重新輸入";

//找到,退出循環

else

bFlag=false;

}

//輸入提出申請的資源數

cout<<"輸入申請各類資源的數量:\n";

for(i=0;i<M;i++)

cin>>iRequest[i];

//返回提出申請的進程名對應的下標

return loc;

}

bool banker(int iAllocation[N][M],int iNeed[N][M],int iAvailable[M],char cName[N])

{

}

這個是c++的 我的報告

  • 上一篇:武漢理工大學最好的專業是什麽
  • 下一篇:地圖著色問題源程序C++語言(算法設計與分析)急求
  • copyright 2024編程學習大全網