170 likes | 319 Views
Podprogramy. Podprogramy. Potrzeba istnienia podprogramów Ograniczenia percepcji człowieka (5-9 obiektów, średnio 7) Programowanie zstępujące Programowanie wstępujące Podprogramy w Pascalu Procedury Funkcje. Procedury. procedure nazwa(lista_parametrów); deklaracje_etykiet;
E N D
Podprogramy • Potrzeba istnienia podprogramów • Ograniczenia percepcji człowieka(5-9 obiektów, średnio 7) • Programowanie zstępujące • Programowanie wstępujące • Podprogramy w Pascalu • Procedury • Funkcje
Procedury procedure nazwa(lista_parametrów); deklaracje_etykiet; deklaracje_stałych; deklaracje_typów; deklaracje_zmiennych; deklaracje_podprogramów; begin instrukcja_1; instrukcja_2; ... instrukcja_ostatnia end;
Procedury • Zmienne lokalne • Lista argumentów (może być pusta) • Parametry formalne • Parametry aktualne • Zakres widoczności identyfikatorów • Zmienne globalne • Zmienne lokalne • Zmienne nielokalne
program przyk_proc; var i: integer; { zmienne globalne } s: string; procedure pisz; { pisze 40 gwiazdek } var i: integer; { zmienna lokalna procedury } begin write(s); { dotyczy globalnej zmiennej s } for i:=1 to 40 do { dotyczy lokalnej zmiennej i } write(’*’); writeln end; begin s:=’Gwiazdki: ’; for i:=1 to 10 do { dotyczy globalnej zmiennej i } pisz; end.
Procedury • Jak to działa? • Co znajduje się na stosie?
Przez wartość program przyk5; var i: integer; procedure test5(k:integer); begin k:=k+1; writeln(k) end; begin i:=10; test5(i); { 11 } writeln(’Po teście: ’,i); { 11 } end. Przez zmienną ( var) program przyk6; var i: integer; procedure test6(vark:integer); begin k:=k+1; writeln(k) end; begin i:=10; test6(i); { 11 } writeln(’Po teście: ’,i); { 10 } end. Przekazywanie argumentów
Funkcje • Podprogramy zwracające wartość (w Pascalu następujących typów): • typów porządkowych, • typu rzeczywistego, • łańcuchów, • wskaźników. function nazwa(argumenty): typ_wyniku;
Funkcje • Jak zwrócić wynik? program przyk7; function razy3(k:integer):integer; begin razy3:=3*k end; begin writeln(razy3(5)); end.
Przykład • Dana jest funkcja f1(x):real. Napisać (zaimplementować) funkcję calk1(x0,x1:real):real, która wyznacza przybliżoną wartość całki oznaczonej fukcji f1(x) w przedziale od x0 do x1 metodą prostokątów.
Przykład • Napisać funkcję, której argumentem jest łańcuch, zwracającą oryginalny łańcuch uzupełniony o spacje wstawione między każdą parę sąsiadujących znaków (’Ala ma kota’ -> ’A l a m a k o t a’).
Przykład • Napisać funkcję, która sprawdza, czy podana jako argument liczba całkowita jest liczbą pierwszą, czy nie (wynik powinien być typu boolean).
Przekazywanie argumentów do programu var i: Word; begin for i := 1 to ParamCount do WriteLn(ParamStr(i)); end.
Rekurencja • Silnia: n! = n * (n-1) * (n-2) * … * 2 * 1 function silnia(n : integer) : integer; begin if n=0 then silnia := 1 else silnia := n * silnia(n-1); end;
Rekurencja • Ciąg Fibonacciego: Fib(1) = 1; Fib(2) = 1; Fib(n) = Fib(n-1) * Fib(n-2) function fib(n : integer) : integer; begin if n=1 or n=2 then fib := 1 else fib := fib(n-1) * fib(n-2); end;
Rekurencja • Warunek końca rekurencji • słowo kluczowe forward • rozmiar stosu • kiedy nie stosować rekurencji?
Przykład • Napisać funkcję, która wygeneruje wszystkie permutacje przekazanej tablicy znaków.