就是我的作业啦,拿给大家看看有没有什么要改的地方.
关于银行家算法的,本来我问了老师我可不可以不写,结果被训了一顿.
我字本来就不好,非要我手写下来,哎,光交代码还不成.
bank.h
[code]
#include "windows.h"
#include "time.h"
#define Z 7 //某个墒值
#define M 3 //资源数
#define N 4 //进程数
class CProcess //进程类
{
public:
CProcess();
void Set(); //设置已分配资源
DWORD max[M], used[M]; //最大需求资源,已分配资源
int ok; //需求状态标识
};
class CResource //资源类
{
public:
CResource();
void AddResource(CProcess &p); //增加资源函数
DWORD r[M]; //可利用资源
};
int Test(CProcess p[N]); //测试是否全部分配结束
int Check(CProcess p[N], CResource r, int n); //检查是否可分配资源
CProcess::CProcess()
{
srand((unsigned)time (NULL));
Sleep(1000);
for(int i = 0; i < M; i++)
{
max[i] = (rand() % Z) + 1;
used[i] = Z;
cout<<max[i];
}
ok = 0;
cout<<endl;
}
void CProcess::Set()
{
srand((unsigned)time (NULL));
Sleep(1000);
for(int i = 0; i < M; i++)
{
while (used[i] >= max[i])
{
used[i] = rand() % Z;
}
cout<<used[i];
}
cout<<endl;
}
CResource::CResource()
{
srand((unsigned)time (NULL));
cout<<endl;
for(int i = 0; i < M; i++)
{
r[i] = rand() % Z;
cout<<r[i];
}
cout<<endl<<endl;
}
void CResource::AddResource(CProcess &p)
{
for(int i = 0; i < M; i++)
{
r[i] += p.used[i];
p.used[i] = 0;
}
p.ok = 1;
}
int Test(CProcess p[N])
{
int result = 1;
for(int i = 0; i < N; i++)
{
result *= p[i].ok;
}
return result;
}
int Check(CProcess p[N], CResource r, int n)
{
int result = 1;
for(int i = 0; i < M; i++)
{
if (r.r[i] < (p[n].max[i] - p[n].used[i]))
{
return 0;
}
}
return result;
}[/code]
bank.cpp
[code]
#include "iostream.h"
#include "bank.h"
int main(void)
{
CProcess process[N];
CResource resource;
DWORD n = 0, j = 0;
for(int i = 0; i < N; i++)
{
process[i].Set();
}
// cout<<Test(process);
while (0 == Test(process))
{
// cout<<"A"<<n;
if (0 == process[n].ok)
{
if (Check(process, resource, n))
{
resource.AddResource(process[n]);
cout<<(n + 1);
j = 0;
}
}
n++;
j++;
if (j > N)
{
cout<<"no!";
return 1;
}
n %= N;
}
return 0;
}
[/code]