Kamikadze-ADA.pdf

(117 KB) Pobierz
393672759 UNPDF
Programowanie współbieżne i rozproszone - Kamik...
http://student.agh.edu.pl/~kamikadz/kamikadzeIsBac...
Programowanie współbieżne i
rozproszone
From KamikadzeWiki
kompilacja:
gnatmake -gnat05 powitanie.adb -o powitanie
Spis treści
1 Zadania z laboratoriów
1.1 Laboratorium 1
1.1.1 Zadanie 1
1.1.1.1 Rozwiązanie 1
1.1.2 Zadanie 2
1.2 Laboratorium 2
1.2.1 Zadanie 3
1.3 Laboratorium 3
1.3.1 Zadanie 4
1.3.2 Zadanie 5
1.4 Laboratorium 4
1.4.1 Zadanie 6
1.4.2 Zadanie 7
1.5 Laboratorium 5
1.5.1 Zadanie 8
1.5.1.1 zadanie8c.adb
1.5.2 Zadanie 9
1.5.3 Zadanie 10
1.6 Laboratorium 6
1.6.1 Zadanie 11
1.6.2 Zadanie 12
1.6.2.1 Rozwiązanie 12
1.6.2.2 parking.ads
1.6.2.3 parking.adb
1.6.2.4 zadanie12.adb
1.7 Kolokwium 2007 i 2008
1.7.1 Grupa A
1.7.1.1 Zadanie 1
1 z 38
06.01.2009 10:52
393672759.006.png
Programowanie współbieżne i rozproszone - Kamik...
http://student.agh.edu.pl/~kamikadz/kamikadzeIsBac...
1.7.1.2 Zadanie 2
1.7.2 Grupa B
1.7.2.1 Zadanie 1
1.7.2.2 Zadanie 2
1.8 Adds On
1.8.1 Suma macierzy o wartościach zespolonych
1.8.2 Skrzyżowanie
Zadania z laboratoriów
Laboratorium 1
Zadanie 1
Skompiluj i uruchom podany poniżej program.
Uruchom program w debugerze i prześledź krokowo jego działanie.
Zmodyfikuj program tak, aby wykorzystywał pętlę while i sprawdzał tylko liczby
mniejsze od sqrt(n).
with Ada.Text_IO, Ada.Integer_Text_IO;
use Ada.Text_IO, Ada.Integer_Text_IO;
procedure Zadanie1 is
n, j : Integer;
begin
Put("Podaj wartość liczby n: ");
Get(n);
for i in 2 .. n - 1 loop
j := n mod i;
exit when j = 0;
end loop;
if j /= 0 then
Put(n, 0);
Put(" jest liczbą pierwszą.");
else
Put(n, 0);
Put(" nie jest liczbą pierwszą.");
end if;
end;
Rozwiązanie 1
2 z 38
06.01.2009 10:52
393672759.007.png
Programowanie współbieżne i rozproszone - Kamik...
http://student.agh.edu.pl/~kamikadz/kamikadzeIsBac...
with Ada.Text_IO, Ada.Integer_Text_IO,Ada.Numerics.Elementary_Functions;
use Ada.Text_IO, Ada.Integer_Text_IO,Ada.Numerics.Elementary_Functions;
procedure zadanie1 is
n, j, i : Integer;
begin
Put("Podaj wartość liczby n: ");
Get(n);
i:=2;
while i<=Integer(sqrt(Float(n))) loop
j := n mod i;
exit when j = 0;
i:=i+1;
end loop;
if j /= 0 then
Put(n, 0);
Put(" jest liczbą pierwszą.");
else
Put(n, 0);
Put(" nie jest liczbą pierwszą.");
end if;
end;
Zadanie 2
Napisz program wykonujący obliczenia na wektorach (suma, różnica i iloczyn
skalarny). W ramach programu należy zdefiniować procedury Read, Write (do
wczytywania i wypisywania wektorów) oraz funkcje przeładowujące operatory +, - i *.
Wszystkie argumenty tych podprogramów powinny być typu:
type Vector is array (Integer range <>) of Float;
W przypadku operatorów obliczenia mają być wykonywane w ramach krótszego z nich.
Niezależnie od zakresu argumentów, zakres wyniku ma być liczony od 1, na przykład
wynikiem dodawania (odejmowania) wektorów:
a : Vector(4 .. 6);
b : Vector(11 .. 15);
powinien być wektor typu:
Vector(1 .. 3);
3 z 38
06.01.2009 10:52
393672759.008.png 393672759.009.png 393672759.001.png
Programowanie współbieżne i rozproszone - Kamik...
http://student.agh.edu.pl/~kamikadz/kamikadzeIsBac...
with Ada.Text_IO, Ada.Integer_Text_IO,Ada.Text_IO, Ada.Float_Text_IO,Ada.Numerics.Elementary_Functions;
use Ada.Text_IO, Ada.Integer_Text_IO,Ada.Text_IO, Ada.Float_Text_IO,Ada.Numerics.Elementary_Functions;
procedure zadanie2 is
type Vector is array (Integer range <>) of Float;
len1,len2, first1, first2, len_out : Integer;
--**************************************************--
-------------------Function sum ----------------------
function sum (v1,v2 : Vector) return Vector is
len : Integer;
begin
if (v1'length > v2'length) then
len:=v2'length;
else
len := V1'length;
end if ;
declare
tmp : Vector(1 .. len);
begin
for i in 1 .. len loop
tmp(i):=v1(v1'first+i-1)+v2(v2'first+i-1);
end loop;
return tmp;
end;
end ;
-------------------Function sum ----------------------
--**************************************************--
--**************************************************--
-------------------Function div ----------------------
function div (v1,v2 : Vector) return Vector is
len : Integer;
begin
if (v1'length > v2'length) then
len:=v2'length;
else
len := V1'length;
end if ;
declare
tmp : Vector(1 .. len);
begin
for i in 1 .. len loop
tmp(i):=v1(v1'first+i-1)-v2(v2'first+i-1);
end loop;
return tmp;
end;
end ;
-------------------Function div ----------------------
--**************************************************--
--**************************************************--
-------------------Function scalar--------------------
function scalar (v1,v2 : Vector) return Float is
len : Integer;
begin
if (v1'length > v2'length) then
len:=v2'length;
else
len := V1'length;
end if ;
declare
ret : Float;
begin
ret:=0.0;
4 z 38
06.01.2009 10:52
393672759.002.png 393672759.003.png
 
Programowanie współbieżne i rozproszone - Kamik...
http://student.agh.edu.pl/~kamikadz/kamikadzeIsBac...
Laboratorium 2
Zadanie 3
Napisz program będący kalkulatorem dla ułamków zwykłych. Program powinien
działać w nieskończonej pętli, w ramach której wybierany jest typ operacji, podawane
są argumenty i wyznaczany jest wynik. Program powinien składać się z trzech plików
(2 z nich stanowią implementację pakietu udostępniającego odpowiedni typ i operacje
na ułamkach). Zawartość pliku fractions.ads (specyfikacja dla pakietu Fractions)
podano poniżej:
package Fractions is
type Fraction is private;
function "-"(x : Fraction) return Fraction;
function "+"(x, y : Fraction) return Fraction;
function "-"(x, y : Fraction) return Fraction;
function "*"(x, y : Fraction) return Fraction;
function "/"(x, y : Fraction) return Fraction;
function frac(n, d : Integer) return Fraction;
function numerator(x : Fraction) return Integer;
function denominator(x : Fraction) return Integer;
private
type Fraction is record
n, d : Integer;
end record;
procedure abridge(x : in out Fraction);
procedure sign(x : in out Fraction);
end;
fraction.ads:
package Fractions is
type Fraction is private;
function "-"(x : Fraction) return Fraction;
function "+"(x, y : Fraction) return Fraction;
function "-"(x, y : Fraction) return Fraction;
function "*"(x, y : Fraction) return Fraction;
function "/"(x, y : Fraction) return Fraction;
function frac(n, d : Integer) return Fraction;
function numerator(x : Fraction) return Integer;
function denominator(x : Fraction) return Integer;
private
type Fraction is record
n, d : Integer;
end record;
procedure abridge(x : in out Fraction);
procedure sign(x : in out Fraction);
end;
5 z 38
06.01.2009 10:52
393672759.004.png 393672759.005.png
Zgłoś jeśli naruszono regulamin