Advertisement
Guest User

Untitled

a guest
Jan 31st, 2017
185
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ada 3.71 KB | None | 0 0
  1. //Zadania z ADy
  2.  
  3. --zadania cykliczne z wykładów JPI
  4. with Ada.Text_IO, Ada.Real_Time;
  5. use Ada.Text_IO, Ada.Real_Time;
  6.  
  7. procedure Co_Pol_Sek is
  8.    
  9.     procedure bla is
  10.     begin
  11.         delay 0.3;
  12.         Put_Line("Bla");
  13.     end;
  14.    
  15.     Loop_Time : Time_Span := To_Time_Span(0.5);
  16.     Next_Loop_Time : Time;
  17. begin
  18.     Next_Loop_Time := Clock;
  19.     loop
  20.         bla;
  21.  
  22.         Next_Loop_Time := Next_Loop_Time + Loop_Time;
  23.         delay until Next_Loop_Time;
  24.     end loop;
  25. end Co_Pol_Sek;
  26.  
  27. --obrazek
  28. with Ada.Text_IO;
  29. use Ada.Text_IO;
  30.  
  31. type PIC is array (POSITIVE range <>, POSITIVE range <>) of INTEGER;
  32. type PIC_Acc is access PIC;
  33.  
  34. task type wykonaj is
  35.     entry start(Picture_Acc: PIC_Acc; poczatek, koniec, rozmiar_kolumny : Integer);
  36.     entry koniec;
  37. end wykonaj;
  38.  
  39. task body wykonaj is
  40.     local_Img_Acc : PIC_Acc;
  41.     local_poczatek, local_koniec, local_rozmiar : Integer;
  42. begin
  43.     accept start(Picture_Acc: PIC_Acc; poczatek, koniec, rozmiar_kolumny : Integer) do
  44.         local_Img_Acc := Picture_Acc;
  45.         local_poczatek := poczatek;
  46.         local_koniec := koniec;
  47.         local_rozmiar := rozmiar_Kolumny;
  48.     end start;
  49.    
  50.     for i in Integer range local_poczatek..local_koniec loop
  51.         for j in Integer range 1..local_rozmiar loop
  52.             local_Img_Acc(i, j) := 255 - local_Img_Acc(i, j);
  53.         end loop;
  54.     end loop;
  55.    
  56.     accept koniec;
  57. end;
  58.  
  59. procedure inwersja(Picture: PIC_Acc; X, Y, Count: in Integer) is
  60.     Step: Integer;
  61.     Taski : Array(1..Count) of wykonaj;
  62. begin
  63.     Step := X / Count;
  64.     for i in 1..Count loop
  65.         if (i = Count) then
  66.             Taski(i).start(Picture,step*(i-1),X,Y);
  67.         else
  68.             Taski(i).start(Picture,step*(i-1),step*i,Y);
  69.         end if;
  70.     end loop;
  71.  
  72.     for i in 1..Count loop
  73.         Taski(i).koniec;
  74.     end loop;
  75. end;
  76.  
  77.  
  78.  
  79. --przeterminowane wywołanie wejscia
  80. select
  81.     FixWorld(W:World);
  82. or delay 5000
  83.     Put_Line("Nie zostało zakoncozne");
  84. end select;
  85.  
  86. --policzenie macierzy równolegle
  87.  
  88. --wywołanie wejść procesów
  89. procedure zad1 is
  90.  
  91. task type A is
  92.   entry E;
  93. end;
  94.  
  95. task body A is
  96. begin
  97.   accept E;
  98. end;
  99.  
  100. procesy: array(Integer range 1..10) of A;
  101. begin
  102.   for i in 1..10 loop
  103.     procesy(i).E;
  104.   end loop;
  105. end zad1;
  106.  
  107. --normalizacja próbki dźwięku
  108. procedure normalize(sound: in out SND, n: in POSITIVE) is
  109.   task type worker is
  110.     entry set(sound: in SND, max in Sample);
  111.     entry get(sound: out SND);
  112.   end;
  113.   task body worker is
  114.     samples: SND;
  115.     maxSample: Sample;
  116.   begin
  117.     accept set(sound: in SND, max in Sample)
  118.       samples := sound;
  119.       maxSample := max;
  120.     end;
  121.     for i in samples'Range
  122.       samples(i) := samples(i) * 1/maxSample;  
  123.     end
  124.     accept get(sound: out SND)
  125.       sound := samples
  126.     end
  127.   end;
  128.  
  129.   tasks: array(1..n) of worker
  130.   max: Sample;
  131.   spacing: Positive;
  132.   partialResult: SND;
  133.  
  134.  
  135. begin
  136.   max := sound(sound'First);
  137.   for i in sound'Range do
  138.     if max < sound(i) then
  139.       max := sound(i);
  140.     end;
  141.   end;
  142.  
  143.   spacing := sound'length mod n;
  144.  
  145.   for i in 1..(n-1) do
  146.     tasks(i).set(sound((sound'first + (i-1) * spacing)..(sound'first + i * spacing - 1)), max);
  147.   end;
  148.   tasks(n).set(sound( (sound'first + (n-1) * spacing)..sound'last ), max);
  149.  
  150.   for i in 1..(n-1) do
  151.     tasks(i).get(partialResult);
  152.     sound((sound'first + (i-1) * spacing)..(sound'first + i * spacing - 1)) := partialResult;
  153.   end;
  154.   tasks(n).get(partialResult);
  155.   sound( (sound'first + (n-1) * spacing)..sound'last) := partialResult;
  156.  
  157. end
  158.  
  159.  
  160. -- obsługa przerwań
  161. protected Sensor is
  162.     procedure Int_Handler;
  163.     pragma Attach_Handler(Int_Handler, InterruptID);
  164. private
  165.     -- ...
  166. end;
  167.  
  168. protected body Sensor is
  169.     procedure Int_Handler is
  170.     begin
  171.         -- ...
  172.     end;
  173.     -- ...
  174. end;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement