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

Podobne dokumenty