• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zadanie w języku ADA

Object Storage Arubacloud
–1 głos
87 wizyt
pytanie zadane 5 czerwca 2020 w Inne języki przez Nice guy Nowicjusz (160 p.)

Nie wiem jak uzupełnić monitor Lodka tak żeby zwierzęta były przewożone niepojedynczo biorąc pod uwagę że na łódce może być tylko jeden typ zwierzęcia.
Wątki zwierzaków pojawiają się w losowej kolejności; każdy z nich przed wejściem do łódki wywołuje entry chceWsiasc z parametrem określającym jego własny typ a następnie
wejdz. Do ”symulacji” płynięcia łódki służy procedura lodkaPlynie. 

 

with Ada.Text_IO; use Ada.Text_IO;
with Ada.Strings.Fixed;


procedure Zwierzaki is

----- zamek dla ochrony wypisywania -----
task Mutex is -- taka definicja utworzy obiekt Mutex
  entry lock;
  entry unlock;
end Mutex;
    
task body Mutex is 
begin
  loop
    accept lock;
    accept unlock;
  end loop;
end Mutex;
----- koniec zamka -----


----- symulacja plyniecia lodki -----
procedure lodkaPlynie(ile: Integer) is 
begin
  Mutex.lock;
  Put("Lodka plynie - liczba zabranych zwierzakow" & Integer'Image(ile) & "...");
  delay 2.0;
  Put_Line(" Lodka wraca...");
  delay 0.5;
  Mutex.unlock;
end lodkaPlynie;
----- koniec symulacji plyniecia -----


----- typ reprezentujacy rodzaje zwierzakow
type TypZwierza is (Pies,Kot,Stwor,Inny);

-- funkcja pomocnicza zamieniajaca typ na napis
function typ2string(t: TypZwierza) return String is
begin
  case t is
    when Pies => return "Pies";
    when Kot => return "Kot";
    when others => return "Nieznany";
  end case;
end typ2string;


----- watek monitora -----
task Lodka is -- utworzy obiekt
  entry chceWsiasc(typ: TypZwierza);
  entry Wejdz;	
end Lodka;

task body Lodka is

begin



end Lodka;
----- koniec monitora -----
    

----- typ i kod watku zwierzaka -----
task type Zwierzak is -- definicja typu (nie tworzy obiektu)
  entry Init(t: TypZwierza; n: String);
end Zwierzak;

task body Zwierzak is
  typ: TypZwierza;
  nazwa: String(1..10); -- uwaga: nazwy zwierzakow nie moga byc dluzsze niz 10 znakow
begin
  accept Init(t: TypZwierza; n: String) do
    typ:= t;
    Ada.Strings.Fixed.Move(n, nazwa); -- kopiowanie napisu (z ewentualnym uzupelnieniem spacjami)
  end;
  loop
    Mutex.lock;
    Put_Line("Zwierzak " & Ada.Strings.Fixed.Trim(nazwa, Ada.Strings.Right) & " typu " & typ2string(typ) & " chce wsiasc.");
    delay 0.5;
    Mutex.unlock;

    Lodka.ChceWsiasc(typ);
    Lodka.Wejdz;
    
    Mutex.lock;
    Put_Line("Zwierzak " & Ada.Strings.Fixed.Trim(nazwa, Ada.Strings.Right) & " typu " & typ2string(typ) & " jest na lodce.");
    delay 0.5;
    Mutex.unlock;
  end loop;
end Zwierzak;
----- koniec zwierzaka -----
      

-- Inicjalizacja - tworzenie tablicy watkow typu Zwierzak
z: array(1..8) of Zwierzak;

begin -- oraz ustawienie ich parametrow (typow i nazw)
  z(1).Init(Pies, "Azor");
  z(2).Init(Pies, "Reksio");
  z(3).Init(Kot, "Kicia");
  z(4).Init(Pies, "Burek");
  z(5).Init(Kot, "Mruczus");
  z(6).Init(Stwor, "Yeti");
  z(7).Init(Stwor, "Dziubdziub");
  z(8).Init(Pies, "Pluto");
end zwierzaki;

 

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

–1 głos
0 odpowiedzi 77 wizyt
pytanie zadane 5 czerwca 2020 w Inne języki przez Nice guy Nowicjusz (160 p.)
–2 głosów
0 odpowiedzi 104 wizyt
pytanie zadane 5 czerwca 2020 w Inne języki przez Nice guy Nowicjusz (160 p.)
0 głosów
1 odpowiedź 1,257 wizyt
pytanie zadane 5 grudnia 2018 w C i C++ przez profesorek96 Szeryf (91,420 p.)

92,579 zapytań

141,429 odpowiedzi

319,656 komentarzy

61,962 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...