Advertisement
desdemona

ada asynchronius select

Oct 22nd, 2012
263
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ada 4.18 KB | None | 0 0
  1. with ada.text_io, ada.integer_text_io;
  2. use ada.text_io, ada.integer_text_io;
  3.  
  4. procedure main is
  5.    licznik_gofrownicy : natural := 0;
  6.    protected gotowe_gofry is
  7.       procedure dodaj (ilosc : natural);
  8.       procedure odejmij (ilosc : natural);
  9.       procedure stan (ilosc : out natural);
  10.  
  11.    private
  12.       ilosc_gotowych_gofrow : natural := 0;
  13.  
  14.    end gotowe_gofry;
  15.  
  16.    protected body gotowe_gofry is
  17.  
  18.       procedure dodaj(ilosc : natural) is
  19.       begin
  20.          ilosc_gotowych_gofrow := ilosc_gotowych_gofrow + ilosc;
  21.       end dodaj;
  22.  
  23.       procedure odejmij(ilosc : natural) is
  24.       begin
  25.          ilosc_gotowych_gofrow := ilosc_gotowych_gofrow - ilosc;
  26.       end odejmij;
  27.  
  28.       procedure stan(ilosc : out natural) is
  29.       begin
  30.          ilosc := ilosc_gotowych_gofrow;
  31.       end stan;
  32.  
  33.    end gotowe_gofry;
  34.  
  35.    TASK Produkcja IS
  36.       entry smaz_gofry;
  37.    end produkcja;
  38.  
  39.    task sprzedawaj is
  40.       --zamowienie : integer := 0;
  41.       --klient : char;
  42.       entry obsluz_klienta;
  43.    end sprzedawaj;
  44.  
  45.    task zadanie_glowne;
  46.  
  47.    task body zadanie_glowne is
  48.    begin
  49.       delay 0.5;
  50.       loop
  51.          select
  52.             Sprzedawaj.Obsluz_Klienta;
  53.             delay 2.0;
  54.          then abort
  55.             produkcja.smaz_gofry;
  56.          end select;
  57.       end loop;
  58.    end zadanie_glowne;
  59.  
  60.    TASK BODY Produkcja IS
  61.    begin
  62.       delay 1.0;
  63.       put_line("gofrownica nagrzana");
  64.       loop
  65.          ACCEPT Smaz_Gofry DO
  66.             LOOP
  67.  
  68.                new_line;
  69.                put("rozpoczynam smazenie gofra nr ");
  70.                Put((Licznik_Gofrownicy + 1), 3);
  71.                new_line;
  72.                delay 1.5;
  73.                Gotowe_Gofry.Dodaj(1);
  74.                licznik_gofrownicy := licznik_gofrownicy + 1;
  75.                put("gofr nr ");
  76.                put(licznik_gofrownicy, 3);
  77.                Put(" jest juz gotowy");
  78.                new_line;
  79.                DELAY 0.5;
  80.                Put_Line("gofrownica oczyszczona");
  81.                delay 1.0;
  82.                New_Line;
  83.                end loop;
  84.  
  85.          end smaz_gofry;
  86.       end loop;
  87.    end produkcja;
  88.  
  89.    task body sprzedawaj is
  90.       Zamowienie : Integer := 0;
  91.       obecna_ilosc : natural;
  92.       klient : character;
  93.    begin
  94.       delay 1.1;
  95.       put_line("kasa otwarta, zapraszamy do zakupu");
  96.       loop
  97.          ACCEPT Obsluz_Klienta DO
  98.             loop
  99.                put_line("w czym moge pomoc?");
  100.                <<to_nie_jest_k>>
  101.                put_line("k enter ilosc enter");
  102.  
  103.                get(klient);
  104.                IF ((Klient = 'k') OR (Klient = 'K')) THEN
  105.                   Put_Line("witam klienta");
  106.                   put_line("prosze podac jeszcze ilosc zamawianych gofrow");
  107.                   <<ile_zamawiasz>>
  108.                   Get(Zamowienie);
  109.                   IF (Zamowienie > 10) then
  110.                      Put_Line("maksymalna liczba zamawianych gofrow to 10");
  111.                      goto ile_zamawiasz;
  112.                   end if;
  113.                   Put_Line("zamowienie przyjete");
  114.                   Gotowe_Gofry.Stan(Obecna_Ilosc);
  115.                   <<ujemny_natural>>
  116.                   IF(Obecna_Ilosc < Zamowienie ) then
  117.                      Put_Line("prosze chwileczke poczekac");
  118.                      DELAY (Zamowienie - Obecna_Ilosc)*3.0;
  119.                      Gotowe_Gofry.Stan(Obecna_Ilosc);
  120.                      IF(Obecna_Ilosc < Zamowienie ) THEN
  121.                         goto ujemny_natural;
  122.                         end if;
  123.                   end if;
  124.                   delay 0.5;
  125.                   gotowe_gofry.odejmij(zamowienie);
  126.                   put_line("zmowienie zrealizowane, wydano ");
  127.                   put(zamowienie, 3);
  128.                   Put(" gofry. ");
  129.                   new_line;
  130.  
  131.                else
  132.                   goto to_nie_jest_k;
  133.                end if;
  134.             end loop;
  135.          end obsluz_klienta;
  136.       end loop;
  137.    end sprzedawaj;
  138. begin
  139.    put_line("uproszczona symulacja budki z goframi");
  140.    put_line("aby kupic gofra nacisnij wpisz k");
  141.    put_line("nacisnij enter, podaj liczbe gofrow i potwierdz enterem");
  142.    put_line("max ilosc w jednym zamownieniu to 10");
  143.    new_line;
  144.  
  145.  
  146. end main;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement