Site hosted by Angelfire.com: Build your free website today!

DOCUMENTACION DE LA APLICACIÓN “CENA DE CINCO FILOSOFOS”

 

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).

 

 

CREADORAS:

Alumnas del séptimo ciclo de  la Escuela Academico Profesional de ingenieria de sistemas e informatica de la UNIVERSIDAD NACIONAL DEL SANTA en la ciudad de CHIMBOTE – PERU.