此程序在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. Unity中用Mono插件解析xml文件

    1.解压压缩包,把文件夹拖到脚本文件夹下 Mono是第三方基金会开发的开源的东西,通过Mono基础上开发的程序可以在各个系统下运行.开发语言是C#. 用插件解析比较高效,平台运行稳定.使用简单. Un ...

  2. ImportError libcublas.so.9.0

    What to do when you've installed cuda and tensorflow, but you get this error right after you import ...

  3. 【转载】curl 模拟 GET\POST 请求,curl查看响应头 以及 curl post 上传文件

    补充说明:curl查看响应头 curl -I "http://www.baidu.com"HTTP/1.1 200 OK #HTTP协议 HTTP 返回码Server: Tengi ...

  4. vBox Arch UEFI LVM安装

    Table of Contents 介绍 配置 基础 VirtualBox配置 安装准备 基础 分区 格式化 挂载 安装 选择镜像 安装基本系统 配置 fstab chroot 一些配置 lvm2 网 ...

  5. Binary Search 二分法方法总结

    Binary Search 二分法方法总结 code教你做人:二分法核心思想是把一个大的问题拆成若干个小问题,最重要的是去掉一半或者选择一半. 二分法模板: public int BinarySear ...

  6. Java 使用 Redis存储系统

    redis是一个key-value存储系统.它支持存储的value类型很多,包括string(字符串).list(链表).set(集合).zset(sorted set --有序集合)和hash(哈希 ...

  7. 在用单片机接受串口数据的时候,第一位是0x0A

    unsigned char data len=0; //命令字符串长度if(RI) //如果数据已经接收完,即RI=1{ RI=0; //对RI进行清零 cmd_buf[counter] = SBUF ...

  8. echarts折线图

    https://echarts.baidu.com/examples/#chart-type-bar

  9. JAVA 平时作业二

    编写一个 Java 应用程序,统计数组{1,3,4,7,2,1,1,5,2,5,7,2,1,1,3},统 计显示每种数字其出现的次数以及出现最多和最少次数的数字 public class Number ...

  10. html+css+javascript之间的关系与作用

    三者间的关系 一个基本的网站包含很多个网页,一个网页由html, css和javascript组成. html是主体,装载各种dom元素:css用来装饰dom元素:javascript控制dom元素. ...