Está en la página 1de 6

Algoritmo del Banquero

(Programa)

static void Main(string


Main(string[]
[] args)
{
Algoritmo_del_banquero AB;
int recu;
int usuarios;

Console.WriteLine("Escriba
Console.WriteLine("Escriba cuantos usuarios desea");
desea" );
usuarios = Convert
Convert.ToInt32(
.ToInt32(Console
Console.ReadLine());
.ReadLine());
Console.WriteLine(
Console.WriteLine("Escriba
"Escriba cuantos recursos extras hay");
hay" );
recu= Convert
Convert.ToInt32(
.ToInt32(Console
Console.ReadLine());
.ReadLine());
AB = new Algoritmo_del_banquero
Algoritmo_del_banquero(usuarios,
(usuarios, recu);

for (int y = 0; y < usuarios; y++)


{
Console.WriteLine(
Console .WriteLine("Escriba
"Escriba los valores para cada usuario"); usuario" );
Console.WriteLine(
Console .WriteLine("---------------------------------------"
"---------------------------------------");
);
Console.WriteLine(
Console .WriteLine("Usuario
"Usuario " + y+":"y+":"););
Console.WriteLine(
Console .WriteLine("Recurso
"Recurso asignado " + y + ":" ":");
);
int asi = Convert
Convert.ToInt32(
.ToInt32(Console
Console.ReadLine());
.ReadLine());
Console.WriteLine(
Console .WriteLine("Necesidad
"Necesidad maxima " + y + ":" ":");
);
int max = Convert
Convert.ToInt32(
.ToInt32(Console
Console.ReadLine());
.ReadLine());
Console.WriteLine(
Console .WriteLine( AB.Asignar(y,asi,max));
AB.Asignar(y,asi,max));
}
AB.OrdenarBurbuja();
Console.WriteLine(AB.AsignaMatrizBool());
Console .WriteLine(AB.AsignaMatrizBool());
Console.WriteLine(AB.VerificarSeguridad());
Console .WriteLine(AB.VerificarSeguridad());
Console.ReadKey();
Console .ReadKey();

Algoritmo del Banquero (Class)


class Algoritmo_del_banquero
{
int[] MatrizAsignado,MatrizMaximo;
bool[] MatrizBool;
int RecursosDisponibles;

int /*LimiteAsignado,*/ LimiteMaximo;

public Algoritmo_del_banquero(int usu,int Rec)


{
RecursosDisponibles=Rec;
LimiteMaximo = usu;
MatrizAsignado=new int[usu];
MatrizMaximo=new int[usu];
MatrizBool = new bool[usu];

}
public string Asignar(int num, int asignado, int maxim)
{
string texto;
if (num < LimiteMaximo)
{
MatrizAsignado[num] = asignado;
MatrizMaximo[num] = maxim;
texto = "Valores asignados";

}
else
{
texto = "El arreglo esta lleno, no se puede agregar mas";
}

return texto;

public void OrdenarBurbuja()


{
for (int pasadas = 1; pasadas < MatrizMaximo.Length; pasadas++) // pasadas
for (int i = 0; i < MatrizMaximo.Length - 1; i++)
if (MatrizMaximo[i] < MatrizMaximo[i + 1]) // comparar
{
intercambio(MatrizMaximo, i); // intercambiar
intercambio(MatrizAsignado, i);
}
ImprimirInt(MatrizMaximo);
ImprimirInt(MatrizAsignado);
Console.ReadKey();
}

// intercambio de dos elementos en un arreglo


public void intercambio(int[] c, int primero)
{
int temp; // variable temporal para el intercambio
temp = c[primero];
c[primero] = c[primero + 1];
c[primero + 1] = temp;
}

public string AsignaMatrizBool()


{
for (int x = 0; x < LimiteMaximo; x++)
{
if (MatrizBool[x] == false)
{
if (RecursosDisponibles + MatrizAsignado[x] >= MatrizMaximo[x])
{
MatrizBool[x] = true;
RecursosDisponibles = RecursosDisponibles + MatrizAsignado[x];
x = -1;
}
else { }
}
else { }
}
return "Matriz Bool Asignada";
Console.Read();
ImprimirBool(MatrizBool);

public string VerificarSeguridad()


{
int x = 0;
string texto = "";
for (x = 0; x < LimiteMaximo; x++)
{
if (MatrizBool[x] == false)
break;

}
if (x == LimiteMaximo)
{
texto = "Estado seguro";
}
else
{
texto="estado no seguro";
}

return texto;
}

public void ImprimirInt( int [] a)


{
for (int x = 0; x < LimiteMaximo; x++)
{
Console.WriteLine(a[x]);
}
}
public void ImprimirBool(bool[] a)
{
for (int x = 0; x < LimiteMaximo; x++)
{
Console.WriteLine(a[x]);
}
}

INSTITUTO TECNOLOGICO DE TUXTLA GUTIERREZ


INGENIERIA EN SISTEMAS COMPUTACIONALES

III SEMESTRE

EQUIPO:

ISRAEL CALDEROND DE LA CRUZ

LUIS ALFREDO HERNANDEZ MENDOZA

CEIN CANTORAL AGUILAR

SISTEMAS OPERATIVOS

ALGORITMO MATEMATICO

ALGORITMO DEL BANQUERO


ALGORITMO MATEMATICO

Donde

RDn=Recurso disponible

RAn=Recurso asignado

RMn=Recurso máximo

EUn=Estado del Usuario

Ejemplo:

V+V+V=V Estado seguro

V+F+V=F Estado no seguro

Ecuacion Matematica

CONDICIONES
Si EUn=V entonces n=0
RMn>RM0
Esto se ve aquí:
public string AsignaMatrizBool()

{
for (int x = 0; x < LimiteMaximo; x++)
{
if (MatrizBool[x] == false)
{
if (RecursosDisponibles + MatrizAsignado[x] >= MatrizMaximo[x])
{
MatrizBool[x] = true;
RecursosDisponibles = RecursosDisponibles + MatrizAsignado[x];
x = -1;
}
else { }
}
else { }
}
return "Matriz Bool Asignada";
Console.Read();
ImprimirBool(MatrizBool);

También podría gustarte