-- EJERCICIO 10 - PRACTICO 6 - ADA Task Heladeria is ENTRY obtenerVendedor(id : out Integer); ENTRY liberarVendedor(id : in Integer); End Task; Task Body Heladeria Is VAR vendedores : array [0..3] of Boolean; disponibles : Integer; id_vendedor : Integer; Begin for (int i = 0 to 3) do vendedores[i] := true; //Vendedores disponibles end for; disponibles := 4; //Cantidad de vendedores disponibles loop SELECT WHEN [disponibles > 0 =>] accept obtenerVendedor(id : out Integer) do id := 0; while ( not vendedores[id] ) do //Obtengo el primer vendedor disponible id := id + 1; end while; id_vendedor := id; end obtenerVendedor; vendedores[id_vendedor] := false; disponibles--; OR accept liberarVendedor(id : in Integer) do vendedores[id] := true; end liberarVendedor; disponibles++; END SELECT end loop End Task; ------- Task Type Cliente Is //No ofrece encuentros End Task; Task Body Cliente Is VAR id_vendedor : Integer; gusto : Gustos; Begin que_helado_quiero(gusto); heladeria.obtenerVendedor(id_vendedor); Vendedor[id_vendedor].pedirHelado(gusto); heladeria.liberarVendedor(id_vendedor); comer_helado(); End Task; ------- Task Type Vendedor Is ENTRY pedirHelado(g : in Gustos); End Task; Task Body Vendedor Is Begin loop accept pedirHelado(g : in Gustos) do Gustos[g].armarGusto(); armar_helado(g); Gustos[g].liberarGusto(); entregar_helado(); end pedirHelado; end loop End Task; ------ Task Type Gustos Is ENTRY armarGusto(); ENTRY liberarGusto(); End Task; Task Body Gustos Is Begin loop accept armarGusto() do end armarGusto; accept liberarGusto() do end armarGusto; end loop; End Task;