Algoritmo del banquero
#include "string.h"
#include
#include
# define M 5
#define N 3
#define FALSE 0
#define TRUE 1
/*M procesos para N Máximo demanda de recursos para recursos de clase*/
int MAX[M][N]={{7,5,3},{3,2,2},{9,0,2},{ 2 ,2,2},{4,3,3}};
/*Número de recursos disponibles del sistema*/
int AVAILABLE[N]={10,5,7 };
/*Demanda máxima de recursos para N tipos de recursos por M procesos*/
int ALLOCATION[M][N]={{0,0,0},{ 0,0,0},{0,0,0},{0,0,0},{0,0,0}};
/*M procesos han obtenido N tipos de recursos Recurso cantidad*/
int NECESIDAD[M][N]={{7,5,3},{3,2,2},{9,0,2},{2,2, 2 },{4,3,3}};
/*M procesos también requieren la cantidad de N tipos de recursos*/
int Request[N]={0, 0 ,0};
void main()
{
int i=0,j=0;
char flag= ' Y';
void showdata();
void changdata(int);
void rstordata(int);
int chkerr (int);
mostrar datos();
mientras(flag=='Y'||flag=='y')
{ p >
i=-1;
while(i<0||i>=M)
{
printf("Ingrese el valor requerido Número de proceso para solicitar recursos (de 0 a ");
printf("%d",M-1);
printf(", en caso contrario ¡reingrese!): ") ;
scanf("%d",&i);
if(i<0||i>=M)printf("El número de proceso ingresado no existe, ¡Vuelva a ingresar! \n");
}
printf("Por favor, ingrese el proceso");
printf("%d",i );
printf("Número de recursos solicitados\n");
for (j=0;j { p> printf ("recurso"); printf("%d",j); printf(":"); scanf("%d" ,&Request[j]); if(Request[j]>NECESITA[i][j]) { printf("proceso") ; printf("%d",i); printf("El número de recursos solicitados es mayor que el proceso"); printf("%d" ,i); printf("Aún es necesario"); printf("%d",j); printf("¡Recurso de recurso de clase Cantidad! ¡La aplicación no es razonable, ocurrió un error! ¡Seleccione nuevamente!\n"); /*printf("La aplicación no es razonable, ocurrió un error ! ¡Seleccione nuevamente!\n");*/ flag='N'; brea k; } else { if(Solicitud[j]>DISPONIBLE[j]) { printf("Proceso"); printf("%d",i); printf("El número de recursos solicitados es mayor que el sistema Disponible"); printf("%d",j); printf("¡La cantidad de recursos del recurso de clase! La aplicación no es razonable, un error ocurrió! ¡Seleccione nuevamente!\n" ); /*printf("¡La solicitud no es razonable, ocurrió un error! ¡Elija nuevamente!\n");*/ bandera='N'; romper; } } } if(bandera= ='Y'||flag=='y' ) { changdata(i); if(chkerr(i)) { rstordata(i); showdata(); } else mostrar datos(); } else mostrar datos(); printf("\n"); printf("Ya sea para continuar con la demostración del algoritmo bancario, presione la tecla 'Y' o 'y' para continuar, presione la tecla 'N' o 'n' para salir de la demostración: "); scanf("%c",&flag); } } void showdata() { int i,j; printf ("El número de recursos disponibles para el sistema es:\n"); printf(" "); for (j=0;j printf("recurso"); printf("%d",j); printf(":"); printf ("%d",AVAILABLE[j]); /*printf("\n");*/ /* cout< // cout<<"La demanda máxima de recursos de cada proceso:"< // for (i=0;i // { // cout<<"Proceso"< // for (j=0;j // cout< */ } p> printf("\n"); printf("La cantidad de recursos que cada proceso aún necesita :\n"); for (i=0;i { printf(" proceso"); printf("%d",i); printf(":"); for (j=0;j printf("recurso"); printf ("%d",j); printf(:"); printf("%d",NEED[i][j]); /*printf("\n");*/ } printf("\n"); }< /p> printf("La cantidad de recursos que ha obtenido cada proceso: \n"); for (i=0;i { printf("proceso"); printf("%d",i); /*printf(:\n");* / for (j=0;j printf("Recurso"); printf("%d",j ) ; printf(":"); printf("%d",ALLOCATION[i][j]); /*printf( " \n");*/ } printf("\n"); } } void changdata(int k) { int j; for (j=0;j { DISPONIBLE[j]=DISPONIBLE[j]-Solicitud[j]; ASIGNACIÓN[k][j]=ASIGNACIÓN[k][j]+ Solicitud [j]; NEED[k][j]=NEED[k][j]-Solicitud[j]; } }; void rstordata(int k) { int j; for (j=0;j { DISPONIBLE[j]=DISPONIBLE[j]+Solicitud[j]; ASIGNACIÓN[k][j]=ASIGNACIÓN[k][ j ]-Solicitud[j]; NECESIDAD[k][j]=NECESIDAD[k][j]+Solicitud[j]; } }; int chkerr(int s) { int TRABAJO,FINALIZAR[M],temp[M]; int i,j,k=0; for(i=0;i for(j=0;j < N;j++) { TRABAJO=DISPONIBLE[j]; i=s; mientras(i { if (FINALIZAR[i]==FALSO&&NECESITA[i][j]<=TRABAJO) { TRABAJO =TRABAJO+ASIGNACIÓN[i][j]; FINALIZAR[i]=VERDADERO; temp[k]=i; k++; k++; temp[k]=i; k++; p> i=0; } else { i++; } } for(i=0;i if(FINALIZAR[i]==FALSE) { printf(" \n"); printf("¡¡¡El sistema no es seguro!!! ¡¡¡Esta aplicación de recursos no tuvo éxito!!!\n"); printf("\n") ; devuelve 1; } } printf("\n "); printf ("Después del control de seguridad, el sistema es seguro y la asignación se realizó correctamente. \n"); printf("\n"); printf("Esta secuencia de seguridad: "); for(i=0 ; i printf("proceso"); printf("%d",temp[i]); printf ( "->"); } printf("\n"); devuelve 0; } p >