Kurs Wybranego Języka Programowania (ADA)
Transkrypt
Kurs Wybranego Języka Programowania (ADA)
Kurs Wybranego Języka Programowania (ADA) Lista 0.75 (pakiety rodzajowe) Przemysław Kobylański Zadanie Napisz rodzajowy pakiet Buffers, który ma następujące dwa parametry: • rozmiar bufora będący liczbą całkowitą dodatnią, • typ wartości przechowywanych w buforze. Dla bufora powinny być dostępne dwie operacje: PUT(X) wstawienie wartości X do bufora, GET(X) pobranie wartości z bufora i podstawienie pod X. Jeśli bufor jest pusty, to operacja GET powinna być wstrzymana do chwili kiedy coś pojawi się w buforze. Analogicznie jeśli bufor jest pełen, to operacja PUT powinna być wstrzymana do czasu gdy zwolni się miejsce w buforze. Poniżej przedstawiono przykładowy program testujący bufory. Tworzy on dziesięcioelementowy bufor dla liczb całkowitych, trzy zadania piszące do bufora po 100 liczb oraz jedno zadanie odczytujące z bufora 300 liczb. with Ada.Text_IO; use Ada.Text_IO; with Ada.Integer_Text_IO; use Ada.Integer_Text_IO; with Buffers; procedure Main is package MyBuffers is new Buffers(10, Integer); Buff: MyBuffers.Buffer; task type Generator(N: Integer; Start: Integer; Step: Integer) is end Generator; task body Generator is J: Integer := Start; begin for I in 1 .. N loop Buff.Put(J); J := J + Step; 1 end loop; end Generator; task type Drukuj(N: Integer) is end Drukuj; task body Drukuj is J : Integer; begin for I in 1 .. N loop Buff.Get(J); Put(J); New_Line; end loop; end Drukuj; T0: T1: T2: T3: Drukuj(300); Generator(100, 0, 3); Generator(100, 1, 3); Generator(100, 2, 3); begin null; end Main; Przetestuj swoją implementację bufora dla różnych jego rozmiarów i różnych szybkości dopisywania i odczytywania (zastosuj w tym celu instrukcję delay po pisaniu/czytaniu). 2