ADA y Examen Diciembre 2009 - Ejercicio 3

ADA y Examen Diciembre 2009 - Ejercicio 3

de Diego Esmir Gonzalez Morales -
Número de respuestas: 4
En este ejercicio me surgieron tres dudas:


1. ¿Está bien definir un arreglo de citas como ENTRY ARRAY [1..x] OF Cita(parámetros)?

(en la solución presentan ENTRY Cita(1..x)(parámetros))


2. En la sentencia DELAY, ¿el tiempo no se expresaba en ms?

(en la solución está en s)


3. En la letra del problema dice: "El supervisor recibirá los llamados de quejas y las registrará en una planilla. Cuando recibió 3 llamados de quejas o pasaron más de 5 minutos sin recibir ningún llamado de queja el supervisor atenderá las quejas pendientes". Lo que yo resolví como:

SELECT

WHEN cantQuejas < 3 DO

ACCEPT IngresarQueja();

cantQuejas := cantQuejas + 1;

OR

IF cantQuejas < 3 THEN

DELAY(5*60*100);

END;

WHILE cantQuejas <> 0 DO

iCaja := prioridad();

ACCEPT Intercambiar[iCaja](vProducto: IN  OUT PRODUCTO);

cantQuejas := cantQuejas - 1;

END;

END;

¿Está mal eso? En la solución propuesta, utilizan una bandera luego del DELAY para ver si el Supervisor esperó ese tiempo para recibir una queja, pero lo que yo interpreto de eso, es que aunque hayan más de 3 quejas, el supervisor seguirá esperando esos 5 minutos, en lugar de esperar sólo si hay menos de tres quejas.


Adjunto código por las dudas.

En respuesta a Diego Esmir Gonzalez Morales

Re: ADA y Examen Diciembre 2009 - Ejercicio 3

de Jorge Merlino -

1) La forma correcta es la que está en el examen. En general no se restan puntos por ese tipo errores en la sintaxis de la definición de un array

2) Va en segundos. Se pueden usar decimales para representar ms

3) Esa sentencia no tiene sentido. ¿Quisiste poner ELSE en lugar de OR?

En respuesta a Jorge Merlino

Re: ADA y Examen Diciembre 2009 - Ejercicio 3

de Diego Esmir Gonzalez Morales -

1 y 2: ¡Gracias!

3. Sí, quise poner ELSE en lugar de OR. ¿Estaría bien, por tanto, así?

SELECT

WHEN cantQuejas < 3 DO

ACCEPT IngresarQueja();

cantQuejas := cantQuejas + 1;

ELSE

IF cantQuejas < 3 THEN

DELAY(5*60);

END;

WHILE cantQuejas <> 0 DO

iCaja := prioridad();

ACCEPT Intercambiar[iCaja](vProducto: IN  OUT PRODUCTO);

cantQuejas := cantQuejas - 1;

END;

END;

END;


En respuesta a Diego Esmir Gonzalez Morales

Re: ADA y Examen Diciembre 2009 - Ejercicio 3

de Jorge Merlino -

La sintaxis está bien pero no hace lo que se espera. Ahí estás esperando los 5 minutos sin fijarte si recibís más quejas o no. La idea es usar un or delay para poder hacer las dos cosas a la vez.