Zad Lab4


Napisać działający kod, w którym...:

w dedykowanym zadaniu odbywają się czasochłonne obliczenia numeryczne polegające (najogólniej mówiąc) na wyznaczaniu coraz lepszego przybliżenia poszukiwanej wartości. Niestety dokładne wyznaczenie tej wartości trwałoby nieskończenie długo, więc w jakimś momencie obliczenia te trzeba w końcu przerwać i zadowolić się ostatnio wyznaczoną liczbą.

Należy zatem zaimplementować obiekt (może task, może protected?) udostępniający następujące procedury (/wejścia?):

Start_Calc(Init_Value: in Integer);

--rozpoczyna wykonywanie obliczen (dla podanej wartosci poczatkowej)

Get_Result(The_Result: out Integer);

--wymusza przerwanie obliczen. Parametr odbiera wynik obliczen

tak, aby w programie głównym następujące wywołania spowodowały odpowiednio: rozpoczęcie wykonywania obliczeń (podany parametr ustawia wartość początkowego przybliżenia poszukiwanej wartości) oraz wymuszenie przerwania obliczeń i odebranie wyznaczonej wartości:

C.Start_Calc(123); -- uruchomienie obliczen numerycznych

C.Get_Result(V); -- TERAZ potrzebny jest wynik. Przerwij obliczenia i daj, co masz.

Dodatkowe wymaganie na ocenę powyżej 3: nie wolno ingerować w ciało pętli wykonującej obliczenia (innymi słowy: między loop i end loop mają znaleźć się tylko te dwie linijki umieszczone w kodzie poniżej). Przerywanie wykonywania obliczeń trzeba wtedy zrobić jakoś poza ciałem pętli...

Rozwiązanie ma się znaleźć w katalogu nazwanym od swojego nazwiska. Niech w katalogu tym będą również wszystkie dodatkowe, wykorzystywane moduły.

W rozwiązaniu warto/należy oprzeć się na poniższym kodzie (tzn. kod ten uzupełnić, i/lub zmodyfikować...) :

with Ada.Text_IO; use Ada.Text_IO; -- + ew. inne pomocne moduly ...??...

procedure tresc is

--stosowne definicje typow zadaniowych i/lub chronionych, w tym:

... type Calculator is

--gdzies wewnatrz musi znalezc sie niniejsza petla, ktora wykonuje

--(symuluje wykonywanie) owe zlozone obliczenia numeryczne

--{parametr w Start_Calc ustala poczatkowa wartosc zmiennej Wynik_Obliczen}

loop

delay 0.0001; -- symuluje czas wykonywania obliczen

Wynik_Obliczen := (Wynik_Obliczen + 1) mod 123456; --"obliczenia"

end loop;

--... i w jakis sposob na sygnal Get_Result petla ta ma byc przerwana,

--a wartosc zmiennej Wynik_Obliczen ma byc zwrocona na zewnatrz

--program glowny:

C: Calculator; --'obiekt' odpowiadajacy za wykonanie obliczen

V: Integer;

begin

C.Start_Calc(123); -- uruchomienie obliczen numerycznych

delay 1.234; -- czas wyczekiwania. Obliczenia trwaja...

C.Get_Result(V); -- TERAZ potrzebny jest wynik. Przerwij obliczenia i daj, co masz.

Put_Line("Wynik obliczen: " & Integer'Image(V)); --wyswietlenie wyniku

end tresc;



Wyszukiwarka

Podobne podstrony:
Lab4-zad, Laboratorium 4
lab4 zad do rozw
wm 2011 zad 2
Lab4
Instrukcja do zad proj 13 Uklad sterowania schodow ruchom
CAD CAM KWPPWPS Zad graf PDF
Lab4
2009 klucz zad 01 092 u
ALGEBRA zad 2 id 57346 Nieznany (2)
K2 2009 10 zad 2 id 229691
koło 15 zad 1
GIiZK 0809 przydzial tematow zad domowego
cw zad dysocjacja hydroliza buf Nieznany
E1 2010 11 zad 2 id 149115
K1 2007 08 zad 5 id 229626
ICh S schemat rozw zad konwekcja

więcej podobnych podstron