Ver. 1.0 Beta, Nie masz kompilatora? Teraz moesz pisa skrypty ONLINE! Wersja podstawowa -nie zawiera wszystkich polece Pascala. Suy do nauki podstaw

Pisanie wasnych procedur i funkcji w pascalu


Procedura i funkcja to kilka instrukcji poczonych w grup, instrukcji -ktre robi okrelon rzecz. Np. wypisuj co na ekranie, zmieniaj kolor, rysuj tabelki. Procedura moe wykorzystywa inne napisane przez Ciebie procedury i funkcje.


Moe zastanowisz si po co wogle pisa procedur czy funkcj. Przecie mona napisa program jednym cigiem. Faktycznie dla bardzo maych zada jest to nawet praktyczne. Sprawa utrudnia si gdy chcesz stworzy rozbudowan gr lub nawet niewielki program.


Przy duych ilociach kodu, w ktrym wszystko jest w kadym miejscu nie jest atwo zapamita pozycji kadej najdrobniejszej instrukcji. Dodatkowo, gdy chcesz eby program w kilku miejscach robi to samo musisz kopiowa kod i go wkleja. Potem gdy bdziesz chcia zrobi jak poprawk, bdziesz musia znale kade miejsce z bdem i je udoskonali.


Procedury rozwizuj ten problem. Jedna procedura moe wykonywa jedn konkretn czynno. Mae procedurki mog by wywoywane przez wiksze i w rzeczywistoci czsto dobre gry skadaj tylko z trzech procedur: inicjacji, startu gry i finalizacji czyli czyszenia pamici. Procedury pozwalaj wic zachowa porzdek


Istnieje moliwo wyjcia z procedury, bez wykonania penego kodu. Suy do tego Instrukcja Exit; Wykorzystuje si j w przypadku, gdy ktry z parametrw podanych do procedury nie spenia zaoe programisty. Gdy wywoasz Exit, wykonywanie kodu wznowi si zaraz przed zakoczeniem kodu procedury -w miejscu end; tej instrukcji.



Czym rni si funkcja od procedury

Procedura wykonuje czynno i si zakacza. Funkcja po wykonaniu si zwraca jaki wynik operacji, dziki czemu mona j traktowa prawie jak zmienn. Jednak nie zawsze t warto zwrcon musisz wykorzysta. Moesz po prostu wykona funkcj w taki sposb jak uruchamiaby procedur.



przykady
 procedura:   Czysc_Ekran; WriteLn('tekst');
 funkcja: x:= PozycjaMyszyX; y:= PozycjaMyszyY lub size := FileSize(...)


Schemat budowy procedury

Na pocztku programu mona zdefiniowa nagwek, jeli ta procedura ma by widoczna w caym pliku (koniecznie gdy piszesz modu i bdziesz jej uywa poza moduem). Liczba parametrw procedury moe by dowolna. Kady z parametrw ma okrelony typ.


Nazwa jak nadamy parametrowi (np. parametr1) nie ma adnego znaczenia na zewntrz tej procedury. Uyjemy jej tylko w kodzie wewntrznym. Gdy bdziemy pniej odwoywali do tej procedury, bdziemy mogli jako parametr uywa rnych nazw zmiennych.


program nazwa;
uses Crt; {moduy}

var {deklaracja zmiennych}
  zmienna : Byte;

{nagwek procedury}
procedure NazwaProcedury(parametr1:typ; parametr2:typ2);

{Inne procedury}

{...}
{ciao procedury}
procedure NazwaProcedury(parametr1:typ; parametr2:typ2);
begin {pocztek procedury}
 {tu moe by kod wykonywalny}
end; {koniec}

begin
  {gwna cz programu}

 {wywoanie tej procedury}
 NazwaProcedury(parametr1, parametr2);
end.


Inne przykady procedur:



Czekanie na wcinicie klawisza Enter
procedure CzekajNaEnter;
begin
 WriteLn('Prosze wcisnac ENTER');
 ReadLn;
end;

begin
 WriteLn('Witaj w programie');
 CzekajNaEnter;
end.

wynik dziaania programu:


Witaj w programie
Prosze wcisnac ENTER

w tym wypadku procedura CzekajNaEnter; bdzie wywietlaa komunikat i oczekiwaa na wcinicie klawisza.



Schemat budowy funkcji

Na pocztku programu mona zdefiniowa nagwek, jeli ta funkcja ma by widoczna w innych plikach (koniecznie gdy piszesz modu) lub wywoujesz j gdzie na pocztku kodu a jej tre jest za wywoaniem (tak samo jak w przypadku procedury)


Wewntrz kodu funkcji powinno znale si przypisanie jej jakiej wartoci zwrotnej


{nagwek}
function NazwaFunkcji(parametr1:typ; parametr2:typ2): typ 3; {funkcja musi zwrocic jakas wartosc, wiec posiada swoj typ}

{...}
{ciao funkcji}
function NazwaFunkcji(parametr1:typ; parametr2:typ2): typ 3;
begin {pocztek funkcji}
 {tu moe by tre}
 NazwaFunkcji:=wartosc;
end; {koniec}

begin
 a:=NazwaFunkcji(zmienna1, zmienna2);
 {dopuszczalne rwnie}
 NazwaFunkcji(zmienna1, zmienna2);
end.


Mnoenie dwch liczb
function Pomnoz(a, b : integer) : Longint;
begin
  Pomnoz := a*b;
end;

begin
  WriteLn('wynik 2*5 to ', Pomnoz(2, 5));
end.

wynik dziaania programu:



wynik 2*5 to 10


Obliczanie silni za pomoc rekurencji

W rozdziale dotyczcym ptli zostaa opisana metoda rekurencji (wywoania w procedurze lub funkcji samej siebie).  Poniej pokazano jak poradzi sobie z obliczeniem silni za pomoc rekurencji.



program obliczanie_silni;

function silnia(l : LongInt) : Longint;
begin
 if l <= 1 then silnia:= 1
 else silnia := silnia(l - 1) * l; {wywoanie samej siebie}
end;

begin
 WriteLn(silnia(5)); {wynik: 120}
end.

 

Programy ON-LINE!

Strona korzysta z plikw cookie w celu wiadczenia usug Google (reklamy, statytyki) oraz Facebook. Jeli chcesz zablokowa pliki cookies wyacz je w swojej przegldarce. Potrzebujesz pomocy? kliknij