Opowieść o programowaniu w Adzie



Pobieranie 0.69 Mb.
Strona4/16
Data28.04.2016
Rozmiar0.69 Mb.
1   2   3   4   5   6   7   8   9   ...   16

Instrukcja warunkowa

Podczas pisania programu musimy czasami uzależnić sposób jego działania od pewnych okoliczności. Służy do tego tzw. instrukcja warunkowa o składni:


[1] if warunek then

instrukcje

end if;


[2]. if warunek then

instrukcje_1

else


instrukcje_2

end if;


[3]. if warunek_1 then

instrukcje_1

elsif warunek_2 then



instrukcje_2

elsif warunek_3 then



instrukcje_3

........


elsif warunek_n then

instrukcje_n

else


instrukcje_dalsze

end if;
Instrukcja if w przypadku [1] powoduje, iż razie spełnienia warunku wykonywany jest ciąg poleceń wewnątrz tej instrukcji, a więc przed słowami end if. W przeciwnym przypadku instrukcje te są pomijane. Polecenie [2] powoduje, że w sytuacji, gdy warunek jest spełniony, wykonywane są instrukcje_1, a gdy nie jest - instrukcje_2. Przypadek [3] jest jak gdyby połączeniem wielu instrukcji typu [1] i instrukcji [2]. Stanowi uproszczoną wersję ciągu instrukcji


if warunek_1 then

instrukcje_1

else


if warunek_2 then

instrukcje_2

else


if warunek_3 then

instrukcje_3
else

........


if warunek_n then

instrukcje_n

else


instrukcje_dalsze

end if;


........

end if;


end if;

end if;
Jeżeli zachodzi warunek_1 - wykonują sie instrukcje_1, jeśli nie - sprawdzany jest warunek_2. Jeśli zachodzi, wykonywane wykonywane są instrukcje_2, jeśli nie - sprawdzany jest kolejny warunek itd. Jeśli nie zachodzi żaden z warunków, wykonywane są instrukcje następujące po else.

Oto przykłady zastosowania poznanych instrukcji:
-- wykorzystanie instrukcji warunkowej

-- program przykladowy

-- podajemy dwie liczby

-- wyprowadzany jest ich iloczyn i iloraz, jezeli

-- mozna go obliczyc
with ada.text_io;

use ada.text_io;

procedure pr13 is

package flt_io is new ada.text_io.float_io(float);

use flt_io;

a,b:float;


begin
put("Podaj dowolna liczbe - a = ");

get(a);


put("Podaj nastepna liczbe - b = ");

get(b);


new_line(2);

put("a*b = ");put(a*b,exp=>0);

new_line;

if b/=0.0 then

put("a/b = ");put(a/b,exp=>0);

end if;


end pr13;
I kolejny przykład:
-- kolejny przyklad programu z wykorzystaniem

-- instrukcji warunkowej

-- rozwiazywanie rownania kwadratowego

with ada.text_io,ada.numerics.generic_elementary_functions;

use ada.text_io;
procedure pr14 is

package flt_io is new ada.text_io.float_io(float);

package fun_mat is new

ada.numerics.generic_elementary_functions(float);

use flt_io,fun_mat;

a,b,c,delt : float;

begin

put_line("Rownanie kwadratowe ma postac a*x^2 + bx + c = 0");



new_line;

put_line("Podaj wspolczynniki : ");

put("a = "); get(a);

put("b = "); get(b);

put("c = "); get(c);

new_line(2);

if a=0.0 then

put_line("To nie jest rownanie kwadratowe !!!");

if b/=0.0 then

put("Rozwiazanie podanego rownania

liniowego : x = ");

put(-c/b,exp=>0);

elsif b=0.0 and c/=0.0 then

put("Podane rownanie jest sprzeczne");

else

put("Podane rownanie jest tozsamosciowe");



end if;

else


delt:=b**2-4.0*a*c;

if delt<0.0 then

put("Podane rownanie nie ma pierwiastkow

rzeczywistych");

elsif delt=0.0 then

put("Rownanie ma jeden pierwiastek

rzeczywisty x = ");

put(-b/(2.0*a),exp=>0);

else

put_line("Rownanie ma dwa pierwiastki



rzeczywiste");

set_col(5);

put("x1 = ");

put((-b-sqrt(delt))/(2.0*a),exp=>0);

new_line;

set_col(5);

put("x2 = ");

put((-b+sqrt(delt))/(2.0*a),exp=>0);

end if;

end if;


end pr14;

Operatory logiczne. Kolejność działań.

Konstruowanie warunków logicznych wymaga odpowiednich operatorów. Są to na przykład <, >, =, <= (mniejsze lub równe), >= (większe lub równe), /= (różne) oraz operatory logiczne - not (zaprzeczenie), A (koniunkcja - "i"), or (alternatywa - "lub"), xor (tzw. exclusive or - "albo"), and then i or else. Niektóre z nich widzieliśmy juz w zamieszczonych powyżej programach. Niech W1 i W2 oznaczają warunki. Wówczas


W1 and W2 daje prawdę, gdy zachodzą oba warunki

W1 or W2 daje prawdę, gdy zachodzi przynajmniej jeden z warunków

W1 xor W2 daje prawdę, gdy zachodzi dokładnie jeden z warunków

not W1 daje prawdę, gdy warunek W1 nie zachodzi.


Operatory and then i or else podobne są w swoim działaniu do and i or, z tą jednak różnicą, że w poprzednich przypadkach obliczana była zawsze wartość logiczna obu warunków. Natomiast napisanie
W1 and then W2
powoduje obliczenie wartości W2 tylko wtedy, gdy W1 zachodzi, zaś
W1 or else W2
powoduje obliczenie wartości W2 tylko wtedy, gdy W1 nie zachodzi.

Operatory te są niejednokrotnie bardzo użyteczne. Jako przykład posłużyć może poniższa sytuacja:

Napisanie
a/=0 and b/a>c
spowoduje zgłoszenie błędu podczas wykonywania programu, jeżeli podamy a=0, ponieważ sprawdzona będzie wartość logiczna warunku b/a>c, a przez 0 dzielić nie wolno. Natomiast
a/=0 and then b/a>c
spowoduje obliczenie wartości logicznej warunku b/a>c tylko wtedy, gdy a/=0, a więc błąd podczas dzielenia nie wystąpi.
Działania - logiczne i matematyczne - wykonywane są w następującej kolejności:
** abs not

* / rem mod

+ - (jednoargumentowe)

+ - (dwuargumentowe)

= /= < <= > >=

and or xor


(operatory wymienione na początku, a więc **, abs i not maja najwyższy priorytet).
Z konstruowaniem warunków logicznych związany jest także test członkostwa - sprawdzenie, czy dana wartość należy do podanego zakresu. Możemy oczywiście dokonać tego za pomocą poznanych dotychczas operatorów, ale możemy też użyć słowa kluczowego in. Zamiast sprawdzać np. warunek
liczba >= 2 and liczba <=8
możemy napisać po prostu
liczba in 2..8
a zamiast
liczba < 2 or liczba > 8
liczba not in 2..8

1   2   3   4   5   6   7   8   9   ...   16


©absta.pl 2016
wyślij wiadomość

    Strona główna