Kurs Pascal - IV. Procedury i funkcje

D.F.

Były Moderator
Dołączył
Listopad 4, 2009
Posty
493
I. Wstęp

Witaj. Część czwarta kursu traktować będzie o procedurach i funkcjach. Rzecz ta może wydawać się na początku trudna, jednak bardzo ułatwia programowanie i wprowadza porządek do kodu źródłowego naszych aplikacji.


II. Procedury

Jeżeli w naszym programie chcemy wykonać jakąś rzecz kilka, kilkanaście, kilkadziesiąt, a może i nawet kilkaset razy, aby nie pisać tyle razy tego samego kodu, tworzymy procedurę zawierającą te instrukcje i wywołujemy ją kiedy chcemy i ile razy chcemy. Procedury deklarujemy przed głównym kodem programu (widać to w przykładzie poniżej).

Przykładowa procedura, bez parametrów wygląda następująco:

Kod:
 procedure nazwa_procedury();
 var //zmienne, jeżeli nie używamy zmiennych, słowo kluczowe var pomijamy
   zmienna1 : String;
 begin
   //tutaj instrukcje, które będą wykonane po wywołaniu procedury
 end;

Jeżeli procedura nie ma parametrów, nawiasy przy jej nazwie można pominąć.

Wywołanie procedury wygląda następująco:

Kod:
nazwa_procedury();

lub

Kod:
nazwa_procedury;

Przykładowy program wyświetlający tekst na konsoli. Posiada on kod rysujący w pętli linię długą na szerokość konsoli (80 znaków). Kod rysujący został umieszczony w procedurze, przez co w głównym programie pisząc nazwę procedury możemy wywoływać ją wielokrotnie, nie pisząc tyle razy tego samego kodu.

Kod:
 program Procedury;

 uses CRT;

 //procedura rysująca poziomą linię na szerokość konsoli
 procedure LiniaPozioma();
 var
   I : Integer;
 begin
   for I := 1 to 80 do Write('_');
   WriteLn();
 end;

 //program główny
 begin
   ClrScr();
   LiniaPozioma();
   WriteLn(' Witaj drogi użytkowniku! ');
   LiniaPozioma();
   WriteLn(' Oto przykład programu z procedurą, rysującą linię poziomą, ');
   WriteLn(' długą na szerokość konsoli (80 znaków). ');
   LiniaPozioma();
   WriteLn(' Kod rysujący tą linię umieszczony jest w osobnej procedurze, ');
   WriteLn(' Dzięki czemu nie musimy cały czas przepisywać tego samego kodu, ');
   WriteLn(' Zajmującego się rysowaniem tej linii . ');
   LiniaPozioma();
   ReadLn();
 end.


III. Procedury z parametrami

Procedury mogą również przyjmować parametry, są to dane, które podajemy procedurze, a ona wykonuje na nich odpowiednie operacje.

Spójrz na poniższy przykład programu zawierającego procedurę z parametrami. Rysuje on podobnie do powyższego programu poziomą linię w konsoli, jednak przy wywołaniu procedury możemy podać jej rodzaj oraz długość linii. Dostępne rodzaje linii: 0 - domyślna linia ciągła, 1 - linia łamana (przy długości 40 pojedyncza, przy 80 podwójna), 2 - linia kropkowana.

Kod:
 program Procedury2;

 uses CRT;

 //procedura rysująca poziomą linię na szerokość konsoli
 procedure LiniaPozioma(LineType: Integer; Length: Integer);
 var
   I : Integer;
 begin
   case LineType of
     0 : for I := 1 to Length do Write('_');
     1 : for I := 1 to Length do Write('\/');
     2 : for I := 1 to Length do Write('.');
   end;
   WriteLn();
 end;

 //program główny
 begin
   ClrScr();
   LiniaPozioma(1,80);
   WriteLn(' Witaj drogi użytkowniku! ');
   LiniaPozioma(2,80);
   WriteLn(' Oto przykład programu z procedurą, rysującą linię poziomą, ');
   WriteLn(' długą na szerokość konsoli (80 znaków). ');
   LiniaPozioma(2,80);
   WriteLn(' Kod rysujący tą linię umieszczony jest w osobnej procedurze, ');
   WriteLn(' Dzięki czemu nie musimy cały czas przepisywać tego samego kodu, ');
   WriteLn(' Zajmującego się rysowaniem tej linii . ');
   LiniaPozioma(1,80);
   ReadLn();
 end.

IV. Funkcje

Funkcje są podobne do procedur, różnią się jednak tym, że prócz przyjmowanych wartości (argumentów) zwracają nam one jakiś wynik.

Deklaracja funkcji wygląda następująco:

Kod:
 function nazwa_funkcji(argument1, argument2: Integer; argument3: String):Integer;
 var
   zmienna1 : Integer;
 begin
   //instrukcje
   nazwa_funkcji := argument1 + argument2 + argument3; //zwracany wynik
 end;

Po słowie kluczowym function podajemy nazwę funkcji, dalej w nawiasie podajemy argumenty jakie przyjmuje funkcja z ich typem po dwukropku. Poszczególne argumenty oddzielamy średnikiem. Po nawiasie podajemy po dwukropku typ zwracanego wyniku. Niżej możemy dać słowo kluczowe var lub const i zadeklarować zmienne lokalne (dostępne tylko wewnątrz tej funkcji). Dalej pomiędzy znajdują się instrukcje jakie funkcja ma wykonać. Wynik zwracany przez funkcję ustanawiamy poprzez przypisanie danej wartości do nazwy funkcji przy użyciu operatora przypisania.

Oto przykładowy program z zadeklarowanymi funkcjami:

Kod:
 program Funkcje;

 uses CRT;

 function Suma(a, b: Integer):Integer;
 begin
   Suma := a + b;
 end;

 function Roznica(a, b: Integer):Integer;
 begin
   Roznica := a - b;
 end;

 function Kwadrat(a: Integer):Int64;
 begin
   Kwadrat := a*a;
 end;

 //program główny
 var
   liczba1, liczba2 : Integer;
 begin
   ClrScr();
   WriteLn('Oto program sumujący, odejmujacy i podajacy kwadrat dwoch liczb.');
   WriteLn('Podaj pierwszą liczbę:');
   ReadLn(Liczba1);
   WriteLn('Podaj drugą liczbę:');
   ReadLn(Liczba2);
   WriteLn('Wyniki:');
   WriteLn('[] Suma tych liczb wynosi: ',Suma(Liczba1, Liczba2));
   WriteLn('[] Różnica tych liczb wynosi: ', Roznica(Liczba1, Liczba2));
   WriteLn('[] Kwadrat pierwszej liczby: ',Kwadrat(Liczba1));
   WriteLn('[] Kwadrat drugiej: ',Kwadrat(Liczba2));
   ReadLn();
 end.

Powyższy program oblicza sumę, różnicę dwóch liczb oraz podnosi do potęgi stopnia drugiego podane liczby.


V. Zakończenie

To już koniec tej części kursu. Dla przećwiczenia do wcześniej podanego programu obliczającego sumę, różnicę i kwadrat, możesz dopisać iloczyn, iloraz, resztę z dzielenia (operator mod) i inne operacje matematyczne (funkcje matematyczne powinny być opisane gdzieś w kategorii Pascal), oczywiście wszystko zaprogramowane powinno być przy użyciu funkcji i procedur. To z pewnością pomoże Ci lepiej zrozumieć i zapamiętać jak tworzy się procedury i funkcje.
Jak tylko będziesz gotów zapraszam do kolejnej części.
 
Do góry Bottom