elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Ejercicios
| | | |-+  problema CLASICO - Barbero Dormilon
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: problema CLASICO - Barbero Dormilon  (Leído 12,302 veces)
MiguelCG88

Desconectado Desconectado

Mensajes: 9


Ver Perfil
problema CLASICO - Barbero Dormilon
« en: 9 Septiembre 2011, 00:33 am »

hola , estoy haciendo un trabajo para exponer en la universidad,soy principiante ok. tengo que exponer sobre el problema clasico de sincronizacion del barbero dormilon y su solucion con semaforos , ya hice la solucion y funciona, ahora debo hacer que la misma solucion para N barberos ,ya qu en mi solucion solo existe un barbero. Adjunto mi codigo en C, usando JBaci .
gracias de antemano.

espero su ayuda.
explico un poco mi codigo, hace uso de un semaforo y debo hacer que el numero de barberos pueda ser mas d uno , 2, 3,4 ....N. y que siga funcionando.

Código:
semaphore peluqueros=1;     
int cantClientes=0;
int clientesAtendidos=0;
int cantSillas=5;                  //puede ser la cantidad de sillas que deseemos en la barberia
int cantSillasOcupadas=0;
int tiempoDeLlegada=0;
int tiempoDeAtencion=0;

void recorre(int cliente){
int j;
for(j=1;j<=cantSillasOcupadas;j++){
cout<<"el cliente de la silla"<<j+1<<" pasa a la silla " <<j<<endl;
}
}
void peluquero(){
int p;
if(tiempoDeAtencion==0){
if(cantSillasOcupadas>0){
wait(peluqueros);
clientesAtendidos=clientesAtendidos+1;
cantSillasOcupadas=cantSillasOcupadas-1;       
tiempoDeAtencion=random(50);
if(cantClientes==1){
cout<<"+-------------------------------------------------------------------+"<<endl;
cout<<"|                                                                   |"<<endl;
cout<<" el "<<clientesAtendidos<<" º cliente"<<" esta despertando al peluquero"<<endl;
cout<<" el "<<clientesAtendidos<<" º cliente"<<" pasa a ser atendido"<<endl;
cout<<" se esta atendiendo al " <<clientesAtendidos<<" º cliente"<<"\n"<<endl;
cout<<"|                                                                   |"<<endl;
cout<<"+-------------------------------------------------------------------+"<<endl;
}else{
cout<<"+-------------------------------------------------------------------+"<<endl;
cout<<"|                                                                   |"<<endl;
cout<<" el "<<clientesAtendidos<<" º cliente"<<"pasa a ser atendido"<<endl;       
cout<<" se esta atendiendo al " <<clientesAtendidos<<" º cliente"<<"\n"<<endl;
cout<<"|                                                                   |"<<endl;
cout<<"+-------------------------------------------------------------------+"<<endl;
recorre(clientesAtendidos);
    }
signal(peluqueros);
}else{
cout<<"-----------------<PELUQUERO DURMIENDO>-------------------"<<"\n"<<endl;
}
}else{
for(p=0;p<tiempoDeAtencion;p++){
tiempoDeAtencion=tiempoDeAtencion-1;
if(tiempoDeAtencion==0){
cout<<"******************************************************"<<endl;
cout<<"  se termino de atender al "<<clientesAtendidos<<"º cliente"<<endl;
cout<<"******************************************************"<<endl;
peluquero();

}
}
}
}
void ensillar(int cliente){
int k;
if(cantSillasOcupadas<cantSillas){
cantSillasOcupadas=cantSillasOcupadas+1;
cout<<"  el "<<cliente<<" º cliente"<<" se sento en la "<<cantSillasOcupadas<<" º silla"<<endl;
cout<<"|                                             |"<<endl;
cout<<"+--------------------------------------------+"<<endl;
if(cantClientes==1){
peluquero();
}
}else{
cout<<"  el "<<cliente<<" º cliente"<<" se fue "<<endl;
cout<<"|                                             |"<<endl;
cout<<"+--------------------------------------------+"<<endl;
}
}
void llega(int cliente){
int i;
int j;
if(cantSillas>0){
tiempoDeLlegada=random(100);
for(j=0;j<tiempoDeLlegada;j++){}
for(i=1;i<=cliente;i++){
cantClientes=cantClientes+1;
cout<<"+--------------------------------------------+"<<endl;
cout<<"|                                             |"<<endl;
cout<<"  llego el "<<cantClientes<<" º cliente "<<endl;
ensillar(cantClientes);

}
}
}
void main(){
cobegin{
while(1){
peluquero();
llega(1);


}
}
}


En línea

Valkyr


Desconectado Desconectado

Mensajes: 646


Divide y vencerás


Ver Perfil
Re: problema CLASICO - Barbero Dormilon
« Respuesta #1 en: 9 Septiembre 2011, 04:20 am »

Tienes el enunciado del problema? Así sería mucho más sencillo pensar en algo que pueda ayudarte. Ponlo o si no explicalo con tus propias palabras.

Saludos.


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Prisoner Of Ice Un Clasico!!!
Juegos y Consolas
amirson 3 2,217 Último mensaje 22 Marzo 2005, 08:43 am
por fandango
clasico ....de avi a mpg
Multimedia
SANSARA 2 2,343 Último mensaje 24 Noviembre 2005, 17:20 pm
por el-brujo
Problema clasico (Granjero, Lobo, Cabra, Repollo) !!!! « 1 2 »
Desafíos - Wargames
luka.ghost 13 32,791 Último mensaje 1 Mayo 2011, 00:33 am
por Karen Izaguirre
problema CLASICO - Barbero Dormilon
Programación C/C++
MiguelCG88 5 16,254 Último mensaje 11 Septiembre 2011, 00:40 am
por Valkyr
La Cena De Los Filosofos ( Problema Clasico) #Ayuda
Programación C/C++
candycrush 1 3,185 Último mensaje 21 Agosto 2014, 08:00 am
por Eternal Idol
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines