42 (397)

42 (397)



vai

Pom : Integer; begin

while (A<>B) do begin

if A<B then begin

Pom A; A B; B Pom; end;

A A - B; end;

NWD A;

end; {--------------------------NWD -}

begin

Write ('Podaj A:    Readln (A);

Write ('Podaj B: '); Readln (B);

Write ('NWD (', A, ', ', B, ') - ', NWD (A, B)); Readln;

end.


Tutaj dopiero mamy ciekawostkę. Zmienne A i B są zadeklarowane jako globalne, a operujemy na nich w funkcji i zmieniamy ich wartość. I to niby jest dobrze? A co z działaniami ubocznymi? Nie dajmy się zwieść. Nie działamy na zmiennych globalnych. Zauważ, że A i B są także parametrami funkcji. Na parametrach możemy działać i zmiany te nie będą miały (o ile parametry są zadeklarowane w ten sposób; niedługo poznasz drugi sposób, dla którego to nie będzie prawdą) znaczenia na zewnątrz funkcji.

Wyobraźmy sobie, że chcielibyśmy wzbogacić nasz program i wypisywać oprócz NWD także NWW (najmniejszą wspólną wielokrotność). Już wiemy, że można ją wyliczyć ze wzoru NWW(A, B) = A*B / NWD(A, B). Jeżeli więc będziemy pisać funkcję NWW, może ona korzystać z już napisanej NWD (o ile będzie ją znała, powinna więc być zadeklarowana po niej). Może ona mieć postać:

function NWW (A, B: Integer) : Integer;

{ funkcja oblicza wartość najmniejszej wspólnej wielokrotności }

{ liczb A i B uzywajac funkcji NWD.    j

begin


NWW A * B * NWD (A, B);


end; {


NWW -}


Powstaje pytanie: jeżeli jedna funkcja może korzystać do wyliczenia swojej wartości z innych, to czy może korzystać z siebie? Pozwoliłoby nam to na zaprogramowanie reku-rencji.

Oczywiście jest taka możliwość.

W I C 1 E N I £


Silnia — rekurencyjnie

Napisz funkcję obliczajqcq silnię metodq rekurencyjnq i program sprawdzający jej dziatanie.

Spójrz na rekurencyjną definicję silni w ćwiczeniu 1.6.


Wyszukiwarka

Podobne podstrony:
ALG24 324 Dodatek A var c:integer; begin c:=a+b; writeln(c)> m: =c1a1b end; int
img069 69 6.2. Problem wyboru funkcji bazowych fi := 1; m := 1;, while n > 0 do begin fi :=
57 (278) var Liczba, I : Integer; begin Liczba 0; for I :-1 to 1000 do if not Odd (T[I]> the
while w do I gdzie w jest wyrażeniem typu boolowskiego a I jest instrukcją. Przykład. while x<y d
81670 zdj5 (5) Przykład programu w języku maszynowym Program obliczający y var x, y: integer; begin
img042 42 3. Klasyfikacja metod rozpoznawania Podobnie jak w odniesieniu do identyfikatorów u, zasto
Scan0022 (10) 42.    Dowód księgowy to: a) , urządzenie księgowe służące do rejestrac
kat C 20 38 Znak umieszczony pod znakiem D-42 „obszar zabudowany" oznacza, że zakaz obowiązuje
Obraz30 42.    Dowód księgowy to: a) , urządzenie księgowe służące do rejestracji op
obraz0 (62) Złożoność obliczeniowa - przykład procedurę zagadka(n integer); var i. k. 1: integer; b

więcej podobnych podstron