Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 8: Wykorzystanie procedur i funkcji © Jan Kaczmarek.

Podobne prezentacje


Prezentacja na temat: "Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 8: Wykorzystanie procedur i funkcji © Jan Kaczmarek."— Zapis prezentacji:

1 Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 8: Wykorzystanie procedur i funkcji © Jan Kaczmarek

2 Wykorzystanie procedur i funkcji Definicja procedury lub funkcji zamieszona w części {definicje i deklaracje} naszego programu może być przez nas wykorzystana wielokrotnie w części {instrukcje} naszego programu. Aby wykonać czynności opisane przez procedurę, należy użyć instrukcji wywołania procedury, która ma postać: nazwa-procedury (lista-parametrów-aktualnych); nazwa-procedury to identyfikator, który pozwala zidentyfikować daną procedurę lista-parametrów-aktualnych to zestaw aktualnych danych dla procedury i obiektów, za pomocą których zwrócone będą wyniki jej działania (może jej nie być, gdy procedura nie ma parametrów !) Parametry aktualne muszą wystąpić w tej samej ilości i kolejności, a także muszą być tych samych typów, co parametry formalne podane w definicji procedury.

3 Przykład 1: program pr1; {$APPTYPE CONSOLE} uses SysUtils; var x, y, z : integer; procedure wieksza (a, b : integer; var max : integer); {deklaracja procedury znajdowania większej z dwóch podanych liczb} begin if a>b then max := a else max := b; end; begin readln (x); readln (y); wieksza (x, y, z); {wywołanie procedury wieksza} writeln (wieksza liczba to:, z); readln; end.

4 Przykład 2: program pr2; {$APPTYPE CONSOLE} uses SysUtils; var n, silnia : integer; procedure iloczyn (n : integer; var il : integer); {procedura znajdowania iloczynu il = 1*2*3*…*n dla danego n} var i : integer; begin il := 1; for i:=1 to n do il := il*i; end; begin readln (n); iloczyn (n, silnia); {wywołanie procedury iloczyn} writeln (iloczyn liczb to:, silnia); readln; end.

5 Aby wykonać czynności prowadzące do uzyskania jednego, konkretnego wyniku, opisane przez funkcję, należy wywołać tę funkcję. Wywołanie funkcji ma postać: nazwa-funkcji (lista-parametrów-aktualnych); nazwa-funkcji to identyfikator, który pozwala zidentyfikować daną funkcję, ten identyfikator zwraca wynik działania funkcji, który jest takiego typu, jak określono to w definicji funkcji podając typ-wyniku, jest to wynik z ostatniego wykonania instrukcji nazwa-funkcji := wyrażenie w części {treść funkcji} lista-parametrów-aktualnych to zestaw aktualnych danych dla funkcji (może jej nie być, gdy funkcja nie ma parametrów !) Wywołanie funkcji zwykle ma miejsce w wyrażeniu po prawej stronie symbolu := w instrukcji przypisania postaci: zmienna := nazwa-funkcji (lista-parametrów-aktualnych); Parametry aktualne muszą wystąpić w tej samej ilości i kolejności, a także muszą być tych samych typów, co parametry formalne podane w definicji funkcji. Zgodnie z tymi zasadami wywołujemy także funkcje standardowe.

6 Przykład 1: program pr3; {$APPTYPE CONSOLE} uses SysUtils; var x, y, z : integer; function max (a, b : integer) : integer; {funkcja zwracająca jako wynik większą z dwóch podanych liczb} begin if a>b then max := a else max := b; end; begin readln (x); readln (y); z := max (x, y); {wywołanie funkcji max} writeln (wieksza liczba to:, z); readln; end.

7 Przykład 2: program pr4; {$APPTYPE CONSOLE} uses SysUtils; var n, wynik : integer; function silnia (n : integer) : integer; {funkcja zwracająca jako wynik iloczyn 1*2*3*…*n dla danego n} var i, il : integer; begin il := 1; for i:=1 to n do il := il*i; silnia := il end; begin readln (n); wynik := silnia (n); {wywołanie funkcji silnia} writeln (iloczyn liczb to:, wynik); readln; end.

8 Przekazywanie parametrów i wyników W momencie zakończenia swego działania procedura przekazuje (zwraca) wyniki do programu przez parametry aktualne, natomiast funkcja przekazuje (zwraca) wynik przez nazwę funkcji. Program przekazuje dane do procedury lub funkcji przez parametry. W zależności od sposobu, w jaki przekazywane są dane i wyniki, parametry dzielimy na parametry przekazywane przez: - wartość - zmienną określonego typu Możliwe są jeszcze inne sposoby przekazywania parametrów.

9 Parametry przekazywane przez wartość Parametr jest przekazywany przez wartość, gdy na liście parametrów formalnych w definicji procedury lub funkcji nie jest poprzedzony słowem kluczowym var. Parametrem aktualnym może być wówczas dowolne wyrażenie, typ tego wyrażenia musi być zgodny z typem odpowiadającego mu parametru formalnego. Parametr formalny traktowany jest w części {treść procedury} lub {treść funkcji} jak lokalny obiekt (nie istnieje poza procedurą lub funkcją), a wartość parametru aktualnego jest wyłącznie początkową wartością tego obiektu, przypisywaną mu w momencie wywołania procedury lub funkcji. Zatem parametr przekazywany przez wartość nie może być nośnikiem wyniku.

10 Parametry przekazywane przez zmienną określonego typu Parametr jest przekazywany przez zmienną określonego typu, gdy na liście parametrów formalnych w definicji procedury lub funkcji jest poprzedzony słowem kluczowym var. Parametr aktualny musi być zmienną takiego samego typu, jaki posiada odpowiadający mu parametr formalny. Parametr formalny jest zastępowany w części {treść procedury} lub {treść funkcji} przez parametr aktualny (odwołanie do niego) i na nim, wykonywane są wszelkie działania w procedurze lub funkcji. Zatem jedynie parametr przekazywany przez zmienną określonego typu może być nośnikiem wyniku.

11 Rekurencja Jedną z bardziej użytecznych własności wybranych algorytmów jest rekurencja, czyli zdolność do wywoływania samego siebie (ze zmienionymi parametrami). Algorytmy rekurencyjne zapisujemy w postaci rekurencyjnych procedur lub funkcji. W części {treść procedury} lub {treść funkcji} występuje wywołanie tejże procedury lub funkcji z odpowiednimi parametrami aktualnymi. Algorytm rekurencyjny można w wielu przypadkach zastąpić, równoważnym mu, algorytmem iteracyjnym, w którym występują pętle. Rekurencja jest narzędziem silnym i użytecznym, ale należy ją stosować z rozwagą.

12 Przykłady algorytmów rekurencyjnych: - obliczanie n! = 1*2*…*n, (0!=1) wg wzorów: silnia(0)=1 silnia(n)=n*silnia(n-1) - obliczanie n-tej potęgi liczby x wg wzorów: potęga(x,0)=1 potęga(x,n)=x*potęga(x,n-1) - obliczanie n-tego wyrazu ciągu Fibonacciego: F(0)=0 F(1)=1 F(n)=F(n-1)+F(n-2) - przenoszenie krążków dla wież Hanoi

13 Algorytm obliczania n! = 1*2*…*n function silnia (n: integer) : integer; begin if n=0 then silnia := 1 else silnia := n*silnia(n-1); end; Algorytm obliczania n-tego wyrazu ciągu Fibonacciego function Fib(n: integer) : integer; begin if n=0 then Fib := 0 else if n=1 then Fib := 1 else Fib := Fib(n-1) + Fib(n-2); end;


Pobierz ppt "Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 8: Wykorzystanie procedur i funkcji © Jan Kaczmarek."

Podobne prezentacje


Reklamy Google