银行家在c ++中的算法

时间:2015-12-11 23:41:23

标签: c++ algorithm

我在c ++的banker算法实现项目

但我在资源请求

中有一个小错误:')

我不知道错误是什么。第一个if语句不起作用:(

#include<iostream>
#include<vector>

using namespace std;

int main() {
    int work[4];
    int allocation[5][4];
    int max[5][4];
    int need[5][4];
    int p, pr, r, a, aval[4], req[4];
    bool state[5], test;
    vector < int > avl;
    //----------------------------------------
    test = true;
    for (int i = 0; i < 4; i++)
        work[i] = aval[i];
    for (int i = 0; i < 5; i++)
        state[i] = false;
    //----------------------------enter p r---------------------------------
    cout << "Enter the number of processes in the system :";
    cin >> p;
    cout << "\nEnter the number of recourses :";
    cin >> r;
    //---------------------enter alloc---
    cout << "\nEnter the allocation " << endl;
    if (r = 1)
    {
        cout << "\t A \n \t ";
    }
    else if (r = 2)
    {
        cout << "\t A B \n \t ";
    }
    else if (r = 3)
    {
        cout << " A B C\n \t ";
    }
    else if (r = 4)
    {
        cout << " A B C D\n \t ";
    }
    for (int i = 0; i < p; i++)
    {
        cout << endl << "\t" << "P" << i << ":";
        for (int j = 0; j < 4; j++)
        {
            cin >> allocation[i][j];
            cout << " ";
        }
    }
    //-----------------------------entet max----------------
    cout << "\nEnter the MAX" << endl;
    if (r = 1)
        cout << " A \n \t ";
    else if (r = 2)
        cout << " A B \n \t ";
    else if (r = 3)
        cout << " A B C\n \t ";
    else if (r = 4)
        cout << " A B C D\n \t ";
    for (int i = 0; i < p; i++)
    {
        cout << endl << "P" << i << ":";
        for (int j = 0; j < 4; j++)
        {
            cin >> max[i][j];
            need[i][j] = max[i][j] - allocation[i][j];
        }
    }
    //-----------------enter ava--------------
    cout << "\nEnter the avaliable number : " << endl;
    for (int i = 0; i < 4; i++)
    {
        cin >> aval[i];
        cout << " ";
    }
    //-----------------enter request--------------
    cout << "\nEnter the number of process want be request  : ";
    cin >> pr;
    cout << "\nEnter the request number : " << endl;
    for (int i = 0; i < 4; i++)
    {
        cin >> req[i];
        cout << " ";
    }
    //-----------------------------------COUT---------------------
    cout << endl << "There are " << p << " processes in the system." << endl << endl;
    cout << "There are " << r << " resource types." << endl << endl;
    //----------------------------------cout allocation---------------  
    cout << " The allocation Matrix : " << endl << endl;
    cout << "\t  A B C D";
    for (int i = 0; i < p; i++)
    {
        cout << endl << "\tP" << i << ":";
        for (int j = 0; j < 4; j++)
        {
            cout << allocation[i][j] << " ";
        }
        cout << endl;
    }
    //----------------------------------cout max---------------  
    cout << endl << " The Max Matrix is...  " << endl << endl;
    cout << "\t  A B C D";
    for (int i = 0; i < p; i++)
    {
        cout << endl << "\tP" << i << ":";
        for (int j = 0; j < 4; j++)
        {
            cout << max[i][j] << " ";
        }
        cout << endl;
    }
    //-------------------------cout need-------------------------------------------
    cout << endl << " The Need Matrix is...  " << endl << endl;
    cout << "\t  A B C D";
    for (int i = 0; i < p; i++)
    {
        cout << endl << "\tP" << i << ":";
        for (int j = 0; j < 4; j++)
        {
            cout << need[i][j] << " ";
        }
        cout << endl;
    }
    //----------------------------- cout aval ---------------------
    cout << endl << "The Available Vector is..." << endl << endl;
    cout << "A B C D" << endl;
    for (int i = 0; i < 4; i++)
    {
        cout << aval[i] << " ";
    }
    //-----------------------------------SAFE STATE-----------------------
    int k = 0;
    for (k = 0; k < p; k++) {
        if (state[k] == false) {
            test = false;
            for (int j = 0; j<r; j++) {
                if (need[k][j] > work[j])
                    break;
                if (need[k][j] <= aval[j])
                    test = true;
            }
        }
    }
    if (test == true) {
        for (int j = 0; j < r; j++)
        {
            work[j] = work[j] + allocation[k][j];
        }
        state[k] = true;
        cout << endl << endl << "THE SYSTEM IS IN A SAFESTATE!" << endl;
    }
    if (test == false) {
        state[k] = false;
        cout << endl << endl << "THE SYSTEM IS NOT IN A SAFE STATE!";
    }
    //-----------------------------------request------------------------
    cout << "\nThe Request Vector is..." << endl;
    cout << "  A B C D" << endl;
    cout << pr << ":";
    for (int i = 0; i < 4; i++)
    {
        cout << req[i] << " ";
    }
    bool test2 = false;
    for (int i = 0; i < p; i++) {
        if (pr == p) {
            for (int j = 0; j < 4; j++)
            {
                if (req[j] <= avl[j] && req[j] <= need[i][j])
                {
                    test2 = true;
                }
                else
                {
                    break;
                }
            }
            if (test2 = true)
            {
                for (int n = 0; n < r; n++)
                {
                    aval[n] = aval[n] - req[n];
                    allocation[i][n] = allocation[i][n] + req[n];
                    need[i][n] = need[i][n] - req[n];
                }
                cout << "THE REQUEST CAN BE GRANTED!" << endl << endl;
                cout << "The Available Vector is...";
                cout << "A B C D" << endl;
                for (int x = 0; x < r; x++)
                {
                    cout << aval[x] << " ";
                }
            }
            else
            {
                cout << "THE REQUEST CANNOT BE GRANTED!" << endl << endl;
            }
        }
    }

    //------------------------------------------------------------------------------

    system("pause");
    return 0;
}

3 个答案:

答案 0 :(得分:5)

当检查两个原始类型是否相等时,您需要使用&#34; ==&#34;而不是&#34; =&#34; 例如,从

更改您的if语句
if ( r = 1 )

if (r == 1)

答案 1 :(得分:1)

  1. 除了以上

    work[i] = aval[i]; - aval[i] - 尚未初始化

  2. 阅读switch而不是r == 1执行此操作等。(我考虑了上述声明和链式if语句

  3. = true同上。了解比较和作业之间的区别

  4. 或许可以学习如何使用调试器

  5. 您需要使用cout << flush以便发送输出。

  6. ....我可以添加其他人 - 这足以继续

答案 2 :(得分:0)

这是整个工作计划。我对其进行了一些更改,使代码更容易理解。

int p, r;
bool test;
vector < int > avl;

//----------------------------enter p r---------------------------------
system("clear");

cout << "Enter the number of processes in the system: ";
cin >> p;
cout << "Enter the number of recourses: ";
cin >> r;


//test
int allocation[p][r];
int max[p][r];
int need[p][r];
int aval[r];
int state[p];
test = true;
//test
//---------------------enter alloc---
system("clear");

cout << "\nEnter the allocation " << endl;
if (r == 1)
{
  cout << "\t    A \n \t ";
}
else if (r == 2)
{
    cout << "\t    A B \n \t ";
}
else if (r == 3)
{
    cout << "\t    A B C \n \t ";
}
else if (r == 4)
{
    cout << "\t    A B C D \n \t ";
}
for (int i = 0; i < p; i++)
{
    cout << endl << "\t" << "P" << i << ": ";
    for (int j = 0; j < r; j++)
    {
        cin >> allocation[i][j];
        cout << " ";
    }
}
system("clear");
//-----------------------------entet max----------------
cout << "\nEnter the MAX" << endl;
if (r == 1)
    cout << "\t    A \n \t ";
else if (r == 2)
    cout << "\t    A B \n \t ";
else if (r == 3)
    cout << "\t    A B C\n \t ";
else if (r == 4)
    cout << "\t    A B C D\n \t ";
for (int i = 0; i < p; i++)
{
    cout << endl << "\t" << "P" << i << ": ";
    for (int j = 0; j < r; j++)
    {
        cin >> max[i][j];
        need[i][j] = max[i][j] - allocation[i][j];
    }
}
system("clear");
//-----------------enter ava--------------
cout << "\nEnter the avaliable number : " << endl;
cout<<"\tAvail: ";
for (int i = 0; i < r; i++)
{
    cin >> aval[i];
    cout << " ";
}
//-----------------------------------COUT---------------------
system("clear");
system("clear");
cout << "There are " << p << " processes in the system." << endl;
cout << "There are " << r << " resource types." << endl << endl;
//----------------------------------cout allocation---------------
cout << " The allocation Matrix : " << endl << endl;
if (r == 1)
    cout << "\t    A \n \t ";
else if (r == 2)
    cout << "\t    A B \n \t ";
else if (r == 3)
    cout << "\t    A B C\n \t ";
else if (r == 4)
    cout << "\t    A B C D\n \t ";
for (int i = 0; i < p; i++)
{
    cout << endl << "\tP" << i << ": ";
    for (int j = 0; j < r; j++)
    {
        cout << allocation[i][j] << " ";
    }
    cout << endl;
}
//----------------------------------cout max---------------
cout << endl << " The Max Matrix is...  " << endl << endl;
if (r == 1)
    cout << "\t    A \n \t ";
else if (r == 2)
    cout << "\t    A B \n \t ";
else if (r == 3)
    cout << "\t    A B C\n \t ";
else if (r == 4)
    cout << "\t    A B C D\n \t ";
for (int i = 0; i < p; i++)
{
    cout << endl << "\tP" << i << ": ";
    for (int j = 0; j < r; j++)
    {
        cout << max[i][j] << " ";
    }
    cout << endl;
}
//-------------------------cout need-------------------------------------------
cout << endl << " The Need Matrix is...  " << endl << endl;
for(int i = 0; i < p; i++)
{
  for(int j = 0; j < r; j++)
  {
    need[i][j] = max[i][j] - allocation[i][j];
  }
}
if (r == 1)
    cout << "\t    A \n \t ";
else if (r == 2)
    cout << "\t    A B \n \t ";
else if (r == 3)
    cout << "\t    A B C\n \t ";
else if (r == 4)
    cout << "\t    A B C D\n \t ";
for (int i = 0; i < p; i++)
{
    cout << endl << "\tP" << i << ": ";
    for (int j = 0; j < r; j++)
    {
        cout << need[i][j] << " ";
    }
    cout << endl;
}
//----------------------------- cout aval ---------------------
cout << endl << "The Available Vector is..." << endl << endl;
cout<<"\tAvail: ";

for (int i = 0; i < r; i++)
{
    cout << aval[i] << " ";
}
cout<<endl;
//--------SAFESTATE----------SAFESTATE----------SAFESTATE-------------------
  int count = p;
  cout<<endl;
  cout<<"Safe sequence: ";
  do{
    for(int loop_var = 0; loop_var < p; loop_var++)
    {
      test = false;
        for (int j = 0; j < r; j++) {
          if(state[loop_var] == true)
          {
            break;
          }
          if(need[loop_var][j] > aval[j])
          {
            test = false;
            state[loop_var] = false;
            break;
          }
          else
          {
            test = true;
          }
      }

      if((test))
      {
        count--;
        state[loop_var] = true;
        for(int sb = 0; sb < r; sb++)
        {
          aval[sb] = aval[sb] + allocation[loop_var][sb];
        }
        if(count == 0)
        {
          cout<<"P"<<loop_var<<" ";
        }
        else if(count > 0)
        {
          cout<<"P"<<loop_var<<"-->";
        }
      }
    }
  }while(count != 0);
  cout<<endl;

//--------SAFESTATE----------SAFESTATE----------SAFESTATE-------------------
cout<<endl;
cout<<"The new available vector is: ";
for(int i = 0; i < r; i++)
{
  cout<<aval[i]<<" ";
}
cout << endl << endl;
return 0;