Visual Basic - cena de filosofos

Life is soft - evento anual de software empresarial
 
Vista:

cena de filosofos

Publicado por JuanJo (4 intervenciones) el 05/12/2006 20:27:19
ALguien tendira el codigo de la cena de los filosofos , la pueden mandar por favor, es urgente, gracias de antemano
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:cena de filosofos

Publicado por Jaynor (1 intervención) el 30/10/2007 15:46:05
holas bueno antes un saludo kisiera k me ayuden a interpretar el algoritmo de cena de filosofos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:cena de filosofos

Publicado por NORBERTO (1 intervención) el 02/05/2008 22:22:59
A continuación te presentamos el código en visual Basic de la aplicación.
Por razones de tiempo no pudimos considerar el número de cucharadas que contiene un plato de pasta y tampoco si un filosofo come más rápido que otro, pero al final te daremos una idea de como implementarlo sobre el siguiente código:
Hemos considerado a los filósofos en un array de botones de comandos. Y los cambios en los estados de los procesos mediante controles timers.

DECLARACIÓN DE VARIABLES:
Dim N As Integer 'NÚMERO DE FILOSOFOS
Dim HAMBRIENTOS(1 To 3), tlibre(1 To 5) As Integer 'hambrientos es una array unidimensional(pila) que contiene a los filósofos que están hambrientos
Dim k, L,I, CONT, INICIAL, FINAL As Integer ' LAS CUATRO PRIMERAS VARIABLES SON PARA AVANZAR EN LOS BUCLES Y LAS 2
BOTON EMPEZAR A COMER:
INSTRUCCIONES PARA ASIGNAR ALEATORIAMENTE LOS SI UN FILOSOFO ESTÁ PENSANDO O HAMBRIENTO.
Private Sub CMDcomer_Click()
'ASIGNO LA POSICION EN LA MESA A CADA FILOSOFO(PROCESO) INICIALMENTE TODOS LOS TENEDORES(RECURSOS) ESTAN LIBRES
For N = 1 To 5
Filosofos(N) = N
tlibre(N) = True
Next N

'INICIALMENTE TODOS ESTAN PENSANDO
For N = 1 To 5
Filosofos(N) = "PEN"
FIL1(N).BackColor = RGB(255, 255, 0)
Next N

‘ASIGANMOS UN VALOR INICIAL ALEATORIO PARA DETERMINAR AL PRIMER HAMBRIENTO
INICIAL = Int((5 * Rnd) + 1) ' GENERA UN VALOR ALEATORIO ENTRE 1 Y 5
Select Case INICIAL
Case 1
FINAL = 5
Case 2
FINAL = 6
Case 3
FINAL = 7
Case 4
FINAL = 8
Case 5
FINAL = 9
End Select
J = 0
‘ASIGNAMOS EL ESTADO HAMBRIENTO DEJANDO UNO Y CAMBIANDO DE COLOR A ROJO
k = 0
CONT = 0
For N = INICIAL To FINAL Step 2
J = N
If N > 5 Then
If N = 6 Or N = 8 Then J = CONT + 1
If N = 7 Or N = 9 Then J = CONT + 2
CONT = CONT + 2
End If
Filosofos(J) = "HAM"
k = k + 1
HAMBRIENTOS(k) = J
FIL1(J).BackColor = RGB(255, 0, 0)
Next N
Timer1.Enabled = True
END SUB






TIMER QUE CAMBIA DEL ESTADO HAMBRIENTO A COMIENDO:

Private Sub Timer1_Timer()
'PASA DEL ESTADO HAMBRIENTO A COMIENDO EVALUANDO SI LOS TENEDORES DE LA IZQUIERDA Y DERECHA ESTAN DISPONIBLES Y SI ES ASI CAMBIARÁN AL COLOR VERDE.
For k = 1 To 3
If HAMBRIENTOS(k) = 1 Then
If tlibre(HAMBRIENTOS(k) + 4) = True And tlibre(HAMBRIENTOS(k)) = True Then
tlibre(HAMBRIENTOS(k) + 4) = False
tlibre(HAMBRIENTOS(k)) = False
tenedor(HAMBRIENTOS(k) + 4).Visible = False
tenedor(HAMBRIENTOS(k)).Visible = False
Filosofos(HAMBRIENTOS(k)) = "COM"
FIL1(HAMBRIENTOS(k)).BackColor = RGB(0, 255, 0)
End If
End If
If HAMBRIENTOS(k) <> 1 Then
If tlibre(HAMBRIENTOS(k) - 1) = True And tlibre(HAMBRIENTOS(k)) = True Then
tlibre(HAMBRIENTOS(k) - 1) = False
tlibre(HAMBRIENTOS(k)) = False
tenedor(HAMBRIENTOS(k) - 1).Visible = False
tenedor(HAMBRIENTOS(k)).Visible = False
Filosofos(HAMBRIENTOS(k)) = "COM"
FIL1(HAMBRIENTOS(k)).BackColor = RGB(0, 255, 0)
End If
End If
Next k
Timer1.Enabled = False
Timer2.Enabled = True
End Sub





TIMER QUE EVALUA LOS ESTADOS DE LOS FILOSOFOS Y VUELVE A REPETIR EL PROCESO:

Private Sub Timer2_Timer()
'EN LA SEGUNDA PASADA EVALUAN LOS ESTADOS DE LOS FILOSOFOS Y DEJAN TENEDOR
L = 0
For N = 1 To 5
If Filosofos(N) = "HAM" Then
L = L + 1
HAMBRIENTOS(L) = N
Else
If Filosofos(N) = "PEN" Then
L = L + 1
HAMBRIENTOS(L) = N
FIL1(N).BackColor = RGB(255, 0, 0)
Else
If Filosofos(N) = "COM" Then
Filosofos(N) = "PEN"
If N = 1 Then
tlibre(N) = True
tlibre(N + 4) = True 'DEJAMOS LIBRE TENEDOR DERECHO
tenedor(N).Visible = True
tenedor(N + 4).Visible = True
Else 'E IZQUIERDO RESPECTIVAMENTE
If N <> 1 Then
tlibre(N) = True
tlibre(N - 1) = True
tenedor(N).Visible = True
tenedor(N - 1).Visible = True
End If
End If
FIL1(N).BackColor = RGB(255, 255, 0)
End If
End If
End If
Next N
Timer2.Enabled = False
Timer1.Enabled = True
End Sub





Y VUELVE AL A EJECUTAR DEL TIMER 1.




Y COMO PROMETIMOS AL COMIENZO DE ESTA DOCUMENTACIÓN TE DAMOS LAS SIGUIENTES IDEAS PARA TERMINAR ESTA APLICACIÓN.

1. PUEDES CONSIDERAR UN ARRAY LLAMADA CUCHARADAS CON DIMENSION DEL NUMERO DE FILOSOFOS QUE CONTENGA CADA ELEMENTO DE ESTE ARRAY EL NUMERO DE CUCHARADAS DE CADA PLATO, CUANDOASIGNES EL ESTADO COMIENDO A UN FILOSOFO AUTOMÁTICAMENTE TENDRAS QUE DESCONTAR UNA CUCHARADA EN EL ELEMENTO DEL ARRAY CON EL MISMO INDICE QUE EL FILOSOFO QUE ESTA COMIENDO.
2. PARA HACER QUE UN PROCESO(TIEMPO QUE DEMORA EN COMER UNA CUCHARADA UN FILOSOFO) SEA MAS RAPIDO QUE OTRO PUEDES ASIGNAR MEDIANTE LA FUNCION RANDOM UN TIEMPO DETERMINADO ALEATORIAMENTE Y CAPTURARLO EN UN ARRAY DE TIEMPOS CON LA DIMENSION DEL NUMERO DE FILOSOFOS Y EN OTRO TIMER COMPARAR EN UN BUCLE SI YA SE LLEGO AL VALOR MENOR ENTONCES ESE PROCESO CAMBIARA DE ESTADO MIENTRAS QUE EL OTRO SEGUIRA PROCESANDO(COMIENDO).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:cena de filosofos

Publicado por gian carlos  (1 intervención) el 28/08/2008 22:30:09
necesito el program de la cena de los filosofos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:cena de filosofos

Publicado por angelica pelayo (1 intervención) el 22/05/2012 21:53:29
hola disculpa una gran molestia. de casualidad no tendras el programa de la cena de los filosofos?? lo necesito si lo tienes me podrias hacer el gran favor de pasarmelo porfavor??
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar