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] p>
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': p>
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])
{ p>
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) p>
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