while( i < MAX_INTENTOS_CLIENTES && result == CLIENTE_CANSADO_ESPERA && result != CLIENTE_ENOJADISIMO && result != CLIENTE_PATALETA && result != CLIENTE_ABANDONA_FELIZ){
22
while((id==-1 && result!=CLIENTE_ABANDONA_FELIZ) || ( i < MAX_INTENTOS_CLIENTES && result == CLIENTE_CANSADO_ESPERA && result != CLIENTE_ENOJADISIMO && result != CLIENTE_PATALETA && result != CLIENTE_ABANDONA_FELIZ)){
asiento = NULL;asiento = 0x00000000;for (int i = 0; i < MAX_CLIENTES_ESPERANDO; i++) {for (int i = 0; i < MAX_CLIENTES_ESPERANDO; i++) {clientes_wait[i] = NULL;clientes_wait[i] = 0x00000000;int Barberia::entrarPelu(int id){int Barberia::entrarPelu(int id){if(l->comenzoCorte==0){if((l->comenzoCorte==0 && l->requierePeluquero == 1) || (l->requiereManicura == 1 && l->comenzoManicura==0)){if(barberoEnPataleta == 1){if(barberoEnPataleta == 1){ReleaseSemaphore(l->semAtendidoM,1,0x00000000);ReleaseSemaphore(l->semAtendidoP,1,0x00000000);}else{}else{ReleaseSemaphore(l->semAtendidoM,1,0x00000000);ReleaseSemaphore(l->semAtendidoP,1,0x00000000);}else{}else{if(l->rajadoPorManicura == 1){l->enEspera = 0;return CLIENTE_ENOJADISIMO;sacarCliente(l);}else{l->enEspera = 0;sacarCliente(l);return CLIENTE_CANSADO_ESPERA;ReleaseSemaphore(l->semAtendidoM,1,0x00000000);ReleaseSemaphore(l->semAtendidoP,1,0x00000000);return CLIENTE_CANSADO_ESPERA;}}else{}else{void Barberia::pataletaAlAzar(){void Barberia::pataletaAlAzar(){if(l!=0x00000000){//hay clientes para atenderif(asiento!=0x00000000){//hay clientes para atenderif(l->requierePeluquero){if(asiento->requierePeluquero){l->comenzoCorte = 1;if(asiento->amigo == 1){if(l->amigo == 1){p->cliente(l->id,CHARLANDO_DE_LA_VIDA);p->cliente(asiento->id,CHARLANDO_DE_LA_VIDA);l->atendido = 1;asiento->atendido = 1;}else{//no requiere peluqueria}else{//no requiere peluqueriaWaitForSingleObject(l->semAtendidoM,INFINITE);//que espere a la manicuraif(asiento->requiereManicura==1)WaitForSingleObject(l->semAtendidoM,INFINITE);//que espere a la manicuraReleaseSemaphore(l->semAtendidoP,1,NULL);ReleaseSemaphore(l->semSilla,1,NULL);ReleaseSemaphore(asiento->semAtendidoP,1,0x00000000);ReleaseSemaphore(asiento->semSilla,1,0x00000000);asiento->requierePeluquero = 0;return l->id;return asiento->id;}else{}else{Lobby *cli = NULL;Lobby *cli = 0x00000000;if(cli!=0x00000000){if(cli!=0x00000000){if(cli->amigo==1 && cli->atendido == 0 && cli->enEspera == 1){if(cli->amigo==1 && cli->atendido == 0 && cli->enEspera == 1&& cli->esCliente == 1){clientes_wait[i] =NULL;clientes_wait[i] =0x00000000;if(cli!=0x00000000){if(cli!=0x00000000){if(cli->atendido == 0 && cli->enEspera == 1){if(cli->atendido == 0 && cli->enEspera == 1 && cli->esCliente == 1){clientes_wait[i] =NULL;clientes_wait[i] =0x00000000;bool Barberia::peluqueria_full(){bool Barberia::peluqueria_full(){while(clientes_wait[i]!=NULL && i < MAX_CLIENTES_ESPERANDO){while(clientes_wait[i]!=0x00000000 && i < MAX_CLIENTES_ESPERANDO){bool Barberia::hay_gente(){bool Barberia::hay_gente(){while(clientes_wait[i]==NULL && i < MAX_CLIENTES_ESPERANDO){while((clientes_wait[i]==0x00000000 || clientes_wait[i]->esCliente == 0 )&& i < MAX_CLIENTES_ESPERANDO){if(i < MAX_CLIENTES_ESPERANDO || clientes_wait[i]!=NULL){if(i < MAX_CLIENTES_ESPERANDO || (clientes_wait[i]!=0x00000000 && clientes_wait[i]->esCliente == 1)){if(clientes_wait[i]==cli && i < MAX_CLIENTES_ESPERANDO){if(clientes_wait[i]==cli && i < MAX_CLIENTES_ESPERANDO){clientes_wait[i] = NULL;clientes_wait[i] = 0x00000000;if(cli->id == -1){if(cli->id == -1){printf("Ingreso cliente -1, saca a cliente en pos 0");printf("\nIngreso cliente -1, saca a cliente en pos 0");}else{}else{while(clientes_wait[i]!=NULL && i < MAX_CLIENTES_ESPERANDO){while(clientes_wait[i]!=0x00000000 && i < MAX_CLIENTES_ESPERANDO){if(clientes_wait[i]==NULL && i < MAX_CLIENTES_ESPERANDO){if(clientes_wait[i]==0x00000000 && i < MAX_CLIENTES_ESPERANDO){void Barberia::observarAsientos() {void Barberia::observarAsientos() {printf("\n-Listado de clientes esperando: ");printf("\n-Listado de clientes esperando: ");Lobby* cli = NULL;Lobby* cli = 0x00000000;for (int i = 0; i < MAX_CLIENTES_ESPERANDO; i++) {for (int i = 0; i < MAX_CLIENTES_ESPERANDO; i++) {if(cli!=0x00000000){if(cli!=0x00000000){if(asiento!=0x00000000){if(asiento!=0x00000000){if(asiento->requiereManicura){if(asiento->requiereManicura){ReleaseSemaphore(asiento->semAtendidoM,1,NULL);ReleaseSemaphore(asiento->semAtendidoM,1,0x00000000);}else{}else{//RAJA A 1 CLIENTE Y OCUPA ESE LUGARif(asiento!=0x00000000)ReleaseSemaphore(asiento->semAtendidoM,1,0x00000000);if(asiento!=0x00000000)ReleaseSemaphore(asiento->semSilla,1,0x00000000);manicuraEspera();//LIBERA EL LUGAR OCUPADOReleaseSemaphore(asiento->semAtendidoM,1,NULL);}else{}else{//RAJA A 1 CLIENTE Y OCUPA ESE LUGARmanicuraEspera();while(asiento==0x00000000){}while(asiento==0x00000000 || !asiento->requiereManicura){}manicuraVuelve();//LIBERA EL LUGAR OCUPADOvoid Barberia::manicuraEspera(){while(clientes_wait[i]!=0x00000000 && i < MAX_CLIENTES_ESPERANDO){if(clientes_wait[i]==0x00000000 && i < MAX_CLIENTES_ESPERANDO){if(lugarVacio == 0){//no encontro lugar para sentarse!printf("\nmanicura ocupa lugar %i", POS_FAVORITA_MANICURA);void Barberia::manicuraVuelve(){for (int i = 0 ; i< MAX_CLIENTES_ESPERANDO; i++){if(clientes_wait[i]!=0x00000000 && clientes_wait[i]->id == ID_MANICURA){void Barberia::terminarManicuria(){void Barberia::terminarManicuria(){if(asiento != 0x00000000 && asiento->requierePeluquero==1)WaitForSingleObject(asiento->semAtendidoP,INFINITE);if(asiento != 0x00000000 && asiento->requierePeluquero==1){asiento->requiereManicura = 0;WaitForSingleObject(asiento->semAtendidoP,INFINITE);if(asiento != 0x00000000)}p->cliente(asiento->id,MANICURA_TERMINA);if(asiento != 0x00000000){asiento->requiereManicura = 0;p->cliente(asiento->id,MANICURA_TERMINA);}while( i < MAX_INTENTOS_CLIENTES && result == CLIENTE_CANSADO_ESPERA && result != CLIENTE_ENOJADISIMO && result != CLIENTE_PATALETA && result != CLIENTE_ABANDONA_FELIZ){while((id==-1 && result!=CLIENTE_ABANDONA_FELIZ) || ( i < MAX_INTENTOS_CLIENTES && result == CLIENTE_CANSADO_ESPERA && result != CLIENTE_ENOJADISIMO && result != CLIENTE_PATALETA && result != CLIENTE_ABANDONA_FELIZ)){if(result == CLIENTE_ABANDONA_FELIZ ){if(result == CLIENTE_ABANDONA_FELIZ ){const int MAX_CLIENTES_ESPERANDO = 4;//ASIENTOS DE RECEPCIONconst int MAX_INTENTOS_CLIENTES = 5;//CANTIDAD DE INTENTOS QUE HACE EL CLIENTE CUANDO LA PELU ESTA LLENAconst int WAIT_REINTENTO = 5;const int WAIT_REINTENTO = 8;//CANTIDAD DE TIEMPO QUE ESPERA EL CLIENTE EN VOLVER A INTENTAR REINGRESARconst int DEMORA_PATALETA = 8;const int DEMORA_PATALETA = 5;//LO QUE TARDA EL PELUQUERO EN ATENDERSEconst int DEMORA_MANICURA = 2;//LO QUE TARDA LA MANICURA EN ATENDERconst int TIEMPO_DE_CHARLA = 5;const int TIEMPO_DE_CHARLA = 10;//CON AMIGOSconst int NUMERO_CLIENTES = 10; //LOS CLIENTES QUE VAN A CAER (DE 1 A NUMERO_CLIENTES)const int NUMERO_CLIENTES = 15; //LOS CLIENTES QUE VAN A CAER (DE 0 A NUMERO_CLIENTES -1) Y SIEMPRE EL ULTIMO ES -1const int DEMORA_CORTE = 5; //LO QUE TARDA EL PELUQUERO EN CORTAR, SI TARDA MUCHO SE VA A ARMAR COLAconst int DEMORA_CORTE = 10; //LO QUE TARDA EL PELUQUERO EN CORTAR, SI TARDA MUCHO SE VA A ARMAR COLAconst int DEMORA_CLIENTE = 20; //CUANTO MAS CHICO LOS CLIENTES VAN A VENIR MAS RAPIDO (SI ES GRANDE EL PELUQUERO DUERME MAS)const int DEMORA_CLIENTE = 15; //CUANTO MAS CHICO LOS CLIENTES VAN A VENIR MAS RAPIDO (SI ES GRANDE EL PELUQUERO DUERME MAS)const int PACIENCIA = 2;const int PACIENCIA = 30;//PACIENCIA DEL CLIENTEconst char MANICURA_VUELVE = ')';const int NO_HAY_NADIE = -2; //SUCEDE CUANDO EL BARBERO VA A VER SI HAY ALGUEIN Y NO HAY{{amigo=((idCliente % 3)==0); //LOS MULTIPLOS DE 3 SON AMIGOS DEL PELUQUEROfor (int i = 0; i < idCliente+idCliente*2;i++) {requierePeluquero = rand() % 8 > 4; // genero un numero totalmente al azar entre 0 y 1 para ver si quiere peluqueroif(idCliente!=-1 && idCliente!=ID_MANICURA){}for (int i = 0; i < idCliente+idCliente*2;i++) {requierePeluquero = rand() % 8 > 4; // genero un numero totalmente al azar entre 0 y 1 para ver si quiere peluquero}for (int i = 0; i < idCliente+idCliente*2;i++) {for (int i = 0; i < idCliente+idCliente*2;i++) {requiereManicura = rand() % 8 > 4;// genero un numero totalmente al azar entre 0 y 1 para ver si quiere manicura}if(requierePeluquero==0 && requiereManicura == 0){if(requierePeluquero==0 && requiereManicura == 0){requierePeluquero = 1;}}else{requierePeluquero =1 ;requiereManicura =1;printf("cliente %i requiere peluquero: %i,requiere manicura: %i",idCliente,requierePeluquero,requiereManicura);if(idCliente != ID_MANICURA)printf("\ncliente %i requiere peluquero: %i,requiere manicura: %i",idCliente,requierePeluquero,requiereManicura);Sleep(10000);//free(barbero);void Printer::peluquero(char status){void Printer::peluquero(char status){printf("\nEl peluquero tiene estado %s",getStatusName(status));char buffer[200];sprintf( buffer, "\nEl peluquero tiene estado %s", getStatusName(status));//FILE *fp;fp = fopen("unDiaDeLaburo.txt", "a"); /* Abrir archivo para apend */fprintf(fp, buffer);printf(buffer);fclose(fp); /* Cerrar el archivo antes de terminar el programa */void Printer::manicura(char status){void Printer::manicura(char status){printf("\nLa manicura tiene estado %s",getStatusName(status));char buffer[200];sprintf( buffer, "\nLa manicura tiene estado %s",getStatusName(status));//FILE *fp;fp = fopen("unDiaDeLaburo.txt", "a"); /* Abrir archivo para apend */fprintf(fp, buffer);printf(buffer);fclose(fp); /* Cerrar el archivo antes de terminar el programa */void Printer::comenazarCorte(int id){void Printer::comenazarCorte(int id){printf("\nEl cliente %i comienza corte",id);char buffer[200];sprintf( buffer, "\nEl cliente %i comienza corte",id);//FILE *fp;fp = fopen("unDiaDeLaburo.txt", "a"); /* Abrir archivo para apend */fprintf(fp, buffer);printf(buffer);fclose(fp); /* Cerrar el archivo antes de terminar el programa */void Printer::cliente(int id,char status){void Printer::cliente(int id,char status){printf("\nEl cliente %i tiene estado %s",id,getStatusName(status));char buffer[200];sprintf( buffer, "\nEl cliente %i tiene estado %s",id,getStatusName(status));//FILE *fp;fp = fopen("unDiaDeLaburo.txt", "a"); /* Abrir archivo para apend */fprintf(fp, buffer);printf(buffer);fclose(fp); /* Cerrar el archivo antes de terminar el programa */}char* Printer::getStatusName(char status){char* Printer::getStatusName(char status){switch(status){switch(status){case MANICURA_VUELVE: return "MANICURA_VUELVE";break;