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

Zadanie w języku ADA

VPS Starter Arubacloud
–1 głos
86 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 73 wizyt
pytanie zadane 5 czerwca 2020 w Inne języki przez Nice guy Nowicjusz (160 p.)
–2 głosów
0 odpowiedzi 102 wizyt
pytanie zadane 5 czerwca 2020 w Inne języki przez Nice guy Nowicjusz (160 p.)
0 głosów
1 odpowiedź 1,233 wizyt
pytanie zadane 5 grudnia 2018 w C i C++ przez profesorek96 Szeryf (91,420 p.)

92,453 zapytań

141,262 odpowiedzi

319,087 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...