Jump to content

ADA Histogram


Recommended Posts

Witam mam problem... muszę napisać programik w języku ADA GIDE mam zarys programu ale potrzebuję go dokończyć niestety nie jestem najlepszy w te klocki więc proszę o pomoc... Był bym niezmiernie wdzieczny.. Dziekuje z góry za wszelaką pomoc.

oto treść zadania:

 

Dany jest ciąg liczb, które stanowią wyniki pomiarów. Napisz program współbieżny wyznaczający histogram, tj. liczebność pomiarów w przedziałach <0,h), <h,2*h), ...

<(n-1)*h, n*h) dla danych n i h. Jeden proces zliczający wyznacza liczebność dla jednego przedziału. Pomiarów nie wolno przechowywać w tablicy. Zadanie pierwsze otrzymuje liczby (wartości pomiarów) od zadania czytającego dane, zlicza i zatrzymuje te, które należą do jego przedziału, tzn. <0,h), a pozostałe liczby przesyła do zadania drugiego. Zadanie drugie zlicza i zatrzymuje swoje liczby, tzn. te z przedziału <h, 2*h>, a pozostałe przesyła do zadania trzeciego itd. Każde z zadań wyświetla swój wynik. Zadbaj o to, aby wyniki były wyświetlane we właściwej kolejności. Do synchronizacji procesów wykorzystaj spotkania. Zastosuj tablicę zadań.

Uwaga: Przyjmij że sygnałem końca danych przesyłanych od jednego zadania do drugiego jest liczba -1.

 

A tutaj jeszcze wkleję kod programu mniej więcej jest tam wyznaczone co i gdzie trzeba wstawić..

 

with Ada.text_IO; use Ada.Text_IO;

with Ada.Integer_Text_IO; use Ada.Integer_Text_IO;

with Ada.Float_Text_IO; use Ada.Float_Text_IO;

 

 

procedure histogram is

n:integer; h,dana:float;

begin

put("n="); get(n);

--wczytaj h

declare

task type licz is

entry numer(nr:integer);

entry przekaz(x: integer);

end licz;

 

P: array(1..n) of licz;

 

task body licz is

L: integer:=0;

liczba: integer;

a,b:float;

begin

accept numer(nr: integer) do

i:=nr;

-- end numer;

a:=

b:=

loop

accept przekaz(x: integer) do

liczba:=x;

end przekaz;

exit when liczba=-1;

--jeśli liczba należy do przedział a..b to zwiększ licznik L o 1

-- w przeciwnym wypadku prześlij te liczbę do nastepnego procesu

if liczba=a..b then

L=n+1;

else

 

 

-- if liczba=0 then

-- put (liczba_n); put("mod"); put(k)

-- put("="); put(i); new_line;

-- else

-- end if;

end loop;

put (--wydrukuj wynik

--przekaż -1 do procesu nastepnego

end licz;

begin --poczatek bloku

for i in 1..n loop

P(i). numer(i);

end loop

put("podaj ciag pomiarow, zakończ dane -1");

loop

get(dana);

p(1).przekaz(dana);

exit when dana=-1;

end loop;

end; --koniec bloku

end histogram;

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

Guest
This topic is now closed to further replies.
×
×
  • Create New...