Practico 6 - Ejercicio 5

Practico 6 - Ejercicio 5

de Diego Kiedanski Estrugo -
Número de respuestas: 1

Hola, es mi primer intento en escribir algo en ADA y quería saber si funciona, pero sobretodo si la forma de pensar las tareas es correcta. Cualquier sugerencia es bienvendia.

EJERCICIO 5:


TASK Sumador IS

    ENTRY Sumando1 (s: IN integer)

    ENTRY Sumando2 (r: IN integer)

    ENTRY Termine;

END Sumador


TASK BODY Sumador IS

var

bool: espero = true; integer:x,y; integer: count = 0

begin

while(espero AND count < 100){

    SELECT

        ACCEPT Sumando1 (s: IN integer) IS

            x =s;

        END Sumando1

        ACCEPT Sumando2 (r: IN integer) IS

            y =r;

        END Sumando1

    OR

        ACCEPT Sumando2 (r: IN integer) IS

            y =r;

        END Sumando2

        ACCEPT Sumando1 (s: IN integer) IS

            x =s;

        END Sumando1

    OR DELAY 10

        espero = false;

    END

    count++;

}

ACCEPT Termine;

end

END Sumador   


TASK Programa1;






TASK BODY Programa1 IS

d:integer

begin

   

LOOP

    d=getnum();

    Sumador.Sumando1(d);

ENDLOOP


END Programa1;



TASK BODY Programa2 IS

d:integer

begin

   

LOOP

    d=getnum();

    Sumador.Sumando2(d);

ENDLOOP


END Programa2;


BEGIN


    Sumador.Termine();

END


Algunos comentarios:
* Tengo el OR dentro del select porque hasta donde tengo entendido, no ejecuta el segundo acept hasta que acepto el primero y quizas llega el segundo número antes que el primero y me paso de los 10 segundo igual.

* No estoy seguro de si tenia que declarar los otros dos programas de esa forma, pero parecia lo más natural para aceptar las tareas.
* Para el main preferi agregar una nueva tarea que le avise que termino en lugar de no poner nada y quedar loopeando porque parecia más prolijo, pero no se si estará bien.


Desde ya,

Gracias

En respuesta a Diego Kiedanski Estrugo

Re: Practico 6 - Ejercicio 5

de Jorge Merlino -

La idea del sumador es que va recibiendo números y los va sumando en un acumulador. Vos no estás sumando nada.

Con una sola entrada es suficiente dado que de todas maneras vas a atender a uno de los procesos por vez.

La letra pide solamente escribir el sumador, pero igualmente el programa principal y la entrada termine no sirven para nada, el task va a terminar cuando termina su código sin necesidad de esa entrada adicional.