All pastes #2097987 Raw Edit

Stuff

public text v1 · immutable
#2097987 ·published 2012-01-01 17:56 UTC
rendered paste body
with Ada.Text_IO;
with Ada.Integer_Text_IO;
use Ada.Text_IO;
use Ada.Integer_Text_IO;

Procedure Cafeteria is
   S: integer;
   B: integer;

   task type Estudiante;

   type Est is access Estudiante;

   task Agente_sillas is
      entry sacar_silla;
      entry dejar_silla;
   end Agente_sillas;

   task Agente_bandejas is
      entry sacar_bandeja;
      entry dejar_bandeja;
   end Agente_bandejas;

   task Cocinero is
      entry servir;
   end Cocinero;

   task Cola_bandejas is
      entry esperar;
   end Cola_bandejas;

   task Gen_Estudiantes;

   task body Estudiante is
   begin
      if (S>0) then
         Agente_sillas.sacar_silla;
         --while (B<=0)loop
            --Put("Esperando bandeja...");
            --New_Line;
         --end loop;
         Agente_bandejas.sacar_bandeja;
         Cocinero.servir;
         Agente_bandejas.dejar_bandeja;
         Agente_sillas.dejar_silla;
      else
         Put("Estudiante se fue por no encontrar silla");
         New_Line;
      end if;
   end Estudiante;

   task body Agente_sillas is
   begin
      loop
         select
            accept sacar_silla do
               Put("Estudiante reservó silla");
               New_Line;
               S:=S-1;
            end sacar_silla;
         or
            accept dejar_silla do
               S:=S+1;
               Put("Estudiante terminó de comer y se fue...");
               Put("Nº sillas: ");
               New_Line;
               Put(S);
               Put("Nº bandejas: ");
               Put(B);
               New_Line;
            end dejar_silla;
         end select;
      end loop;
   end Agente_sillas;

   task body Agente_bandejas is
   begin
      loop
         select
            accept sacar_bandeja  do
               if (B>0)then
               B:=B-1;
               Put("Nº de bandejas: ");
               Put(B);
               New_Line;
               delay(0.5);
               else
                  Cola_bandejas.esperar;
               end if;
            end sacar_bandeja;
         or
            accept dejar_bandeja  do
               B:=B+1;
               New_Line;
            end dejar_bandeja;
         end select;
      end loop;
   end Agente_bandejas;

   task body Cocinero is
      begin
      loop
         accept servir do
            Put("Comida servida");
            New_Line;
            delay(0.5);
         end servir;
      end loop;
   end Cocinero;

   task body Cola_bandejas is
      begin
      loop
         accept esperar  do
            delay(0.5);
            Put("Estudiante se fue a la cola de bandejas");
            New_Line;
            while (B=0)loop
               Put("Esperando bandeja...");
               New_Line;
            end loop;
            B:=B-1;
         end esperar;
      end loop;
   end Cola_bandejas;


   task body Gen_Estudiantes is
      T_Est: Est;
   begin
      loop
         --Put("Llego un estudiante!");
         --New_Line;
         T_Est:= new Estudiante;
         delay(0.1);
      end loop;
   end Gen_Estudiantes;

begin
   S:=10;
   B:=5;
end Cafeteria;