Red de conocimiento informático - Consumibles informáticos - Descripción del algoritmo bancario C

Descripción del algoritmo bancario C

#include lt; iostreamgt;

#include lt; stringgt;

#define M 3 //Número de tipos de recursos

#define N 5 //Número de procesos

void output(int iMax[N][M], int iAllocation[N][M], int iNeed[N][M], int iAvailable[ M ], char cName[N]); //Formato de salida uniforme

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]); p>

int main()

{

int i, j

//El número de recursos de cada tipo de recurso disponibles actualmente

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

//La demanda máxima de recursos tipo M para cada uno de los N procesos del sistema

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

//iNeed[N][M]El número de diversos tipos de recursos que cada proceso aún necesita

//iAllocation[N][M] es cada uno tipo de recurso en el sistema La cantidad de recursos asignados actualmente a cada proceso

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

//Nombre del proceso

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

bool bExitFlag=true //Salir bandera

char ch; // Recibir el valor pasado al elegir si continuar aplicando

bool bSafe; //Indicador de seguridad de almacenamiento

//Calcular el valor de iNeed[N][ M]

for(i=0;ilt;N;i)

for(j=0;jlt;M;j)

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

//Valor inicial de salida

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

//Determinar si el estado actual es seguro

bSafe=safety(iAllocation, iNeed, iAvailable, cName); continuar aplicándose

while(bExitFlag)

{

coutlt;lt;"\n"lt;lt;"¿Continuar aplicándose? \ny significa sí; n significa no.

\n";

cingt; gt; ch;

interruptor(ch)

{

caso 'y':

switch(ch)

case 'y':

p>

//coutlt;lt;"Algoritmo de llamada al banquero"

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

if (bSafe) //Safe, genera los datos modificados

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

romper;

case 'n':

coutlt;lt;"Salir.

\n";

bExitFlag=false;

break;

default:

coutlt;lt;"Entrada incorrecta, por favor vuelva -enter:\n";

}

}

}

//Salida

salida nula (int iMax[N][M], int iAllocation[N][M], int iNeed[N][M], int iAvailable[M], char cName[N])

{

int i,j;

coutlt;lt;"\n\t Asignación máxima\t Necesidad \t Disponible"lt;lt;endl; ;lt;"\tA B C\tA B C\tA B C\t A B C"lt;lt;endl

for(i=0;ilt;N;i)

{

coutlt;lt;cNombre[i]lt;lt;"\t"

for(j=0;jlt;M;j)

coutlt;lt;iMax[i][j]lt;lt;" ";

coutlt;lt;"\t"; ; j )

coutlt;lt;iAsignación[i][j]lt;lt;" ";

coutlt;lt;"\t"; >for(j=0;jlt;M;j)

coutlt;lt;iNeed[i][j]lt;lt;" "

coutlt;lt;" \t";

coutlt;lt;" ";

// Disponible solo debe generarse una vez

if (i==0)

for(j=0;jlt;M;j)

coutlt;lt;iDisponible[j]lt;lt;" ";

coutlt;lt; endl;

}

}

// Algoritmo de seguridad, realiza una verificación de seguridad; seguro devuelve verdadero y genera una secuencia segura, inseguro devuelve falso y genera una secuencia Mensaje inseguro;

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

{

}

//Ubica la posición del nombre del proceso correspondiente a ch en la matriz

//Devuelve -1 si no se encuentra; de lo contrario, devuelve el subíndice de matriz

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

{

int

for(i= 0; ilt; N; i )

if (cName[i]==ch) //encontrado

return i

//no encontrado

return -1;

}

//Realizar una solicitud y devolver el subíndice correspondiente al nombre del proceso que realizó la solicitud

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

{

p>

int i, loc;

char ch;

bool bFlag=true;

//Determine si el nombre del proceso ingresado es incorrecto

while(bFlag)

{

//Nombre del proceso de salida

for(i=0;ilt;N;i)

coutlt;lt;cName[i]lt;lt;"\t";

//Ingrese el nombre del proceso que realizó la solicitud

coutlt ;lt;" \nIngrese el nombre del proceso que realiza la solicitud de recurso:\n";

cingt; ch

//Ubica la posición del nombre del proceso correspondiente a ch en la matriz del nombre del proceso

loc=locate(cName, ch

//No encontrado, vuelva a ingresar

if (loc==- 1)

coutlt;lt;"\n¡El nombre del proceso que ingresó es incorrecto! Vuelva a ingresar"

//Buscar, salir del ciclo

else

bFlag =false;

}

//Ingrese el número de recursos solicitados

coutlt;lt;"Ingrese el número de varios recursos solicitados:\n";

for(i=0; ilt; M; i)

cingt; gt; iRequest[i];

//Devuelve el nombre del proceso que realizó la solicitud Subíndice correspondiente

return loc;

}

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

{

}

Este es mi informe de c