此程序在Windows10    CodeBlocks17.12环境下测试运行,其他编程环境未经测试!


作业需求↓↓↓↓↓↓


运行效果图如下


(codeblocks下载地址http://www.codeblocks.org/downloads/binaries)


C++代码

 #include<iostream>
#include<string>
#include<stdlib.h>
using namespace std; int **all,**ma,*work,**need,*a,*sum,*finish;//定义已分配矩阵,最大需求矩阵,工作向量,需求矩阵,可利用资源向量,各类资源总个数,finish标志
string *pN,*rN;//定义进程名称数组,资源名称数组
int row,col;//定义未知矩阵的行数和列数,动态输入 //------安全性算法-----
void isSafe(int row,int col){
int t2,t3,t4;//整型中间变量
string t1;//字符型中间变量
int i,j,g,k;//循环变量i,j,标志位g,k //finish标志全部置零
for(i=;i<row;i++){
finish[i]=;
} //令work向量等于可利用资源向量
for(j=;j<col;j++){
work[j]=a[j];
} g=;
for(i=;i<row;i++){
k=;
//用以判断某类资源的需求是否全部小于可分配资源
for(j=;j<col;j++){
if(need[i][j]<=work[j])
{k++;}
}
if(k==col){
for(j=;j<col;j++){
work[j]=work[j]+all[i][j];
} //对Need矩阵进行排序
for(j=;j<col;j++){
t2=need[i][j];
for(int temp=i;temp>g;temp--){
need[temp][j]=need[temp-][j];
}
need[g][j]=t2;
} //对已分配矩阵进行排序
for(j=;j<col;j++){
t3=all[i][j];
for(int temp=i;temp>g;temp--){
all[temp][j]=all[temp-][j];
}
all[g][j]=t3;
}
t1=pN[i]; //对进程名称数组进行排序
for(int temp=i;temp>g;temp--){
pN[temp]=pN[temp-];
}
pN[g]=t1; finish[i]=;//置标志位为1 //对标志位finish进行排序
t4=finish[i];
for(int temp=i;temp>g;temp--){
finish[temp]=finish[temp-];
}
finish[g]=t4;
i=g;
g++;
} } //判断标志位,只要有finish标志位0的进程,结束整个程序,若全为1,则输出安全序列
for(i=;i<row;i++){
if(finish[i]==){
cout<<"(不安全!!!!!!!)"<<endl<<"(程序已退出!)"<<endl;
exit();
}
}
cout<<"(存在安全序列为){";
for(i=;i<row;i++){
cout<<pN[i]<<",";
}
cout<<"} 所以此时系统处于安全状态"<<endl;
} //------银行家算法-----
void request(int col){
int *py,i,j;//定义t0后进程请求资源的资源数组和循环变量i,j
string px;//资源名变量
py=new int[col];//分配数组大小
cout<<"(请输入请求资源的进程名)"<<endl;
cin>>px;//输入t0后进程请求资源的进程名 //寻找请求资源的进程名在进程名数组中的位置
for(i=;i<row;i++){
if(px==pN[i]){
cout<<"(请依次输入对各类资源的请求数目,数之间以空格隔开)"<<endl;
for(j=;j<col;j++){
cin>>py[j];
}
break;
}
} int re1=,re2=;//定义标志位,分别用以判断某进程请求的各类资源是否全部小于等于最大需求和可分配资源
for(j=;j<col;j++){
if(py[j]<=need[i][j])
{re1++;}
if(py[j]<=a[j])
{re2++;}
} //若符合标志位判断标准,对资源进行修改
if(re1==col&&re2==col){
for(j=;j<col;j++){
need[i][j]=need[i][j]-py[j];
a[j]=a[j]-py[j];
all[i][j]=all[i][j]+py[j];
}
isSafe(row,col);//对资源重新分配后 调用安全性算法
}else{cout<<"(不安全!!!)"<<endl;} delete[] py;//释放
}
int main()
{
int i,j,ch;//定义循环变量i,j和判断变量ch(判断是否有进程请求资源)
cout<<"(请依次输入进程个数和资源个数(以空格隔开))"<<endl;
cin>>row>>col; //以下是对数组或者矩阵分配大小
pN=new string[row];//进程名数组
rN=new string[col];//资源名数组
a=new int[col];//可利用资源数组
sum=new int[col];//各类资源总个数
finish=new int[row];//各类资源总个数
work=new int[col]; //动态分配 分配矩阵
all=new int*[row];
for(i=;i<row;i++){
all[i]=new int[col];
} //动态分配最大需求矩阵
ma=new int*[row];
for(i=;i<row;i++){
ma[i]=new int[col];
} //动态分配需求矩阵
need=new int*[row];
for(i=;i<row;i++){
need[i]=new int[col];
} cout<<"(请输入进程名(以空格隔开,按回车键结束))"<<endl;
for(i=;i<row;i++){
cin>>pN[i];
} cout<<"(请输入资源名(以空格隔开,按回车键结束))"<<endl;
for(i=;i<col;i++){
cin>>rN[i];
} cout<<"(请输入各类资源的总数量)"<<endl;
for(i=;i<col;i++){
cin>>sum[i];
} //最大矩阵
for(i=;i<row;i++){
cout<<"(请输入进程 "+pN[i]+" 对各类资源的最大需求(以空格隔开,按回车键结束))"<<endl;
for(j=;j<col;j++){
cin>>ma[i][j];
}
} //分配矩阵
for(i=;i<row;i++){
cout<<"(请依次输入进程 "+pN[i]+" 已分配资源情况(以空格隔开,按回车键结束))"<<endl;
for(j=;j<col;j++){
cin>>all[i][j];
}
} //需求矩阵
for(i=;i<row;i++){
for(j=;j<col;j++){
need[i][j]=ma[i][j]-all[i][j];
}
} //可利用资源
for(j=;j<row;j++){
a[j]=sum[j]-all[][j];
}
for(j=;j<col;j++){
for(i=;i<row;i++){
a[j]=a[j]-all[i][j];
}
} isSafe(row,col);//调用安全性算法
cout<<"(是否有进程对资源发出请求,是---1,否---0)"<<endl;
cin>>ch;
if(ch==){
request(col);//调用银行家算法
} //释放
for(i=;i<row;i++){
delete[] all[i];
delete[] ma[i];
delete[] need[i];
}
delete[] all,ma,need,pN,rN,a,sum,work,finish;
return ;
}

2019-04-20-20:39:05

银行家算法C++程序的更多相关文章

  1. 避免死锁的银行家算法C++程序实现

     本篇博文为追忆以前写过的算法系列第二篇(20081021) 温故知新 目的:具有代表性的死锁避免算法是Dijskstra给出的银行家算法.本实验是基于银行家算法的思想通过编写C++程序实现银行家 ...

  2. 用python实现银行家算法

    编制模拟银行家算法的程序,并以下面给出的例子验证所编写的程序的正确性. 进程 已占资源 最大需求数 资源种类 A B C D A B C D P0 0 0 1 2 0 0 1 2 P1 1 0 0 0 ...

  3. C程序模拟实现银行家算法

    C程序模拟实现银行家算法 上周又做操作系统实验,题目是用程序模拟实现银行家算法,写了半天还真有点晕,主要是因为想尽可能符合课本上的描述,所以写出来的程序就比较恶心了,好了,银行家算法就不多说了,不了解 ...

  4. 操作系统,银行家算法模拟实现(Windows 环境 C++)

    计算机操作系统课设需要,写了两个下午的银行家算法(陷在bug里出不来耽误了很多时间),参考计算机操作系统(汤子瀛) 实现过程中不涉及难度较大的算法,仅根据银行家算法的思想和步骤进行实现.以下为详细步骤 ...

  5. 银行家算法之JavaScript实现

    上学期有个课程叫做操作系统,期末的时候这课程还有个课程设计,其中有个题目叫做银行家算法. 什么是银行家算法我就不解释了! 看着同学们的设计,大同小异甚至前篇一律. 清一色的控制台程序,清一色的蛋疼输入 ...

  6. linux多线程模拟银行家算法

    题外话: 这应该是最近有点难度的作业了,起码比之前的理发师,读写,哲学家问题要难. 但是做好程序的结构,自顶向下,就还是不难的. 银行家算法简介:                 代码: init() ...

  7. c/c++多线程模拟系统资源分配(并通过银行家算法避免死锁产生)

    银行家算法数据结构 (1)可利用资源向量Available 是个含有m个元素的数组,其中的每一个元素代表一类可利用的资源数目.如果Available[j]=K,则表示系统中现有Rj类资源K个. (2) ...

  8. Round() 四舍五入 js银行家算法(转)

    首先问一下round(0.825,2) 返回的结果,大家猜一猜, 首先SQL server 返回的是 0.83 js的返回结果 是0.83,code 如下: var b = 0.825;        ...

  9. 1014 C语言文法定义与C程序的推导过程 程序:冒泡算法C程序(语法树)

    阅读并理解提供给大家的C语言文法文件. 参考该文件写出一个自己好理解版的现实版的完整版的C语言文法. 给出一段C程序,画出用上述文法产生这段C程序的完整语法树. 程序:冒泡算法C程序 点此文字查看原图 ...

随机推荐

  1. Java面向对象编程思想

    面向对象三个特征:封装.继承.多态封装:    语法:属性私有化(private).提供相对应的get/set 的方法进行访问(public). 在set/get的方法中对属性的数据 做相对应的业务逻 ...

  2. servlet的url-pattern的缺省匹配【<url-pattern>/<url-pattern>】

    最近在学习配置springmvc的框架,对配置springMVC时的url用“/”很是疑惑,经查阅前辈文章,学习了servlet的url-pattern匹配规则 <servlet-mapping ...

  3. 【转】 android5.1里面的user-app的默认权限设置!

    在 frameworks/base/services/core/java/com/android/server/AppOpsPolicy.java中:public boolean isControlA ...

  4. 002dayPython学习编码

    由于计算机是美国人发明的,所以计算机最开始只能识别256个字符(ASCII码),而你在计算机中输入中文就会报错 而中国人想让计算机认识中文,就重新编写了一套支持中文的编码(GB2312) 随后由于GB ...

  5. JDBC Request

    1.下载jdbc驱动,放至jmeter安装目录的lib目录和lib\ext目录下 PS:自己操作的时候,由于JDBC Connection Configuration中驱动名称写错,前面多了一个空格, ...

  6. 运维架构之httpd

    Web Service 传输层:提供进程地址 Port number tcp:传输控制协议,面向连接,通信前需建立虚拟链路,结束后拆除:0-65535 udp:用户数据报协议,无连接:0-65535 ...

  7. Delphi中播放Flash

    在delphi中可以直接打开flash动画,并控制它播放和停止,还可以得到它的总帧数. 具体操作步骤:①Component -> Import ActiveX Contrals -> Sh ...

  8. 极速在mac中安装python开发环境

    mac开发环境的安装: brew: 包管理工具{ 安装:ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/in ...

  9. C# 8.0 抢先看-- Async Stream

    异步流? Async Stream 简单说来是一种非同步的迭代器模式,说更白一点就是可以await 的foreach.在过去的C# 中如果要回传一个可迭代的IEnumerable<T> , ...

  10. P3954 成绩(noip2017普及组)

    题目描述 牛牛最近学习了C++入门课程,这门课程的总成绩计算方法是: 总成绩=作业成绩\times 20\%+×20%+小测成绩×30\%+×30%+期末考试成绩\times 50\%×50% 牛牛想 ...