Ver. 1.0 Beta, Nie masz kompilatora? Teraz mo¿esz pisaæ skrypty ONLINE! Wersja podstawowa -nie zawiera wszystkich poleceñ Pascala. S³u¿y do nauki podstaw

Pisanie w³asnych procedur i funkcji w pascalu


Procedura i funkcja to kilka instrukcji po³±czonych w grupê, instrukcji -które robi± okre¶lon± rzecz. Np. wypisuj± co¶ na ekranie, zmieniaj± kolor, rysuj± tabelki. Procedura mo¿e wykorzystywaæ inne napisane przez Ciebie procedury i funkcje.


Mo¿e zastanowisz siê po co wogóle pisaæ procedurê czy funkcjê. Przecie¿ mo¿na napisaæ program jednym ci±giem. Faktycznie dla bardzo ma³ych zadañ jest to nawet praktyczne. Sprawa utrudnia siê gdy chcesz stworzyæ rozbudowan± grê lub nawet niewielki program.


Przy du¿ych ilo¶ciach kodu, w którym wszystko jest w ka¿dym miejscu nie jest ³atwo zapamiêtaæ pozycji ka¿dej najdrobniejszej instrukcji. Dodatkowo, gdy chcesz ¿eby program w kilku miejscach robi³ to samo musisz kopiowaæ kod i go wklejaæ. Potem gdy bêdziesz chcia³ zrobiæ jak±¶ poprawkê, bêdziesz musia³ znale¼æ ka¿de miejsce z b³êdem i je udoskonaliæ.


Procedury rozwi±zuj± ten problem. Jedna procedura mo¿e wykonywaæ jedn± konkretn± czynno¶æ. Ma³e procedurki mog± byæ wywo³ywane przez wiêksze i w rzeczywisto¶ci czêsto dobre gry sk³adaj± tylko z trzech procedur: inicjacji, startu gry i finalizacji czyli czyszenia pamiêci. Procedury pozwalaj± wiêc zachowaæ porz±dek


Istnieje mo¿liwo¶æ wyj¶cia z procedury, bez wykonania pe³nego kodu. S³u¿y do tego Instrukcja Exit; Wykorzystuje siê j± w przypadku, gdy który¶ z parametrów podanych do procedury nie spe³nia za³o¿eñ programisty. Gdy wywo³asz Exit, wykonywanie kodu wznowi siê zaraz przed zakoñczeniem kodu procedury -w miejscu end; tej instrukcji.



Czym ró¿ni siê funkcja od procedury

Procedura wykonuje czynno¶æ i siê zakañcza. Funkcja po wykonaniu siê zwraca jaki¶ wynik operacji, dziêki czemu mo¿na j± traktowaæ prawie jak zmienn±. Jednak nie zawsze t± warto¶æ zwrócon± musisz wykorzystaæ. Mo¿esz po prostu wykonaæ funkcjê w taki sposób jak uruchamia³by¶ procedurê.



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


Schemat budowy procedury

Na pocz±tku programu mo¿na zdefiniowaæ nag³ówek, je¶li ta procedura ma byæ widoczna w ca³ym pliku (koniecznie gdy piszesz modu³ i bêdziesz jej u¿ywa³ poza modu³em). Liczba parametrów procedury mo¿e byæ dowolna. Ka¿dy z parametrów ma okre¶lony typ.


Nazwa jak± nadamy parametrowi (np. parametr1) nie ma ¿adnego znaczenia na zewn±trz tej procedury. U¿yjemy jej tylko w kodzie wewnêtrznym. Gdy bêdziemy pó¼niej odwo³ywali do tej procedury, bêdziemy mogli jako parametr u¿ywaæ ró¿nych nazw zmiennych.


program nazwa;
uses Crt; {modu³y}

var {deklaracja zmiennych}
  zmienna : Byte;

{nag³ówek procedury}
procedure NazwaProcedury(parametr1:typ; parametr2:typ2);

{Inne procedury}

{...}
{cia³o procedury}
procedure NazwaProcedury(parametr1:typ; parametr2:typ2);
begin {pocz±tek procedury}
 {tu mo¿e byæ kod wykonywalny}
end; {koniec}

begin
  {g³ówna czê¶æ programu}

 {wywo³anie tej procedury}
 NazwaProcedury(parametr1, parametr2);
end.


Inne przyk³ady procedur:



Czekanie na wci¶niêcie klawisza Enter
procedure CzekajNaEnter;
begin
 WriteLn('Prosze wcisnac ENTER');
 ReadLn;
end;

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

wynik dzia³ania programu:


Witaj w programie
Prosze wcisnac ENTER

w tym wypadku procedura CzekajNaEnter; bêdzie wy¶wietla³a komunikat i oczekiwa³a na wci¶niêcie klawisza.



Schemat budowy funkcji

Na pocz±tku programu mo¿na zdefiniowaæ nag³ówek, je¶li ta funkcja ma byæ widoczna w innych plikach (koniecznie gdy piszesz modu³) lub wywo³ujesz j± gdzie¶ na pocz±tku kodu a jej tre¶æ jest za wywo³aniem (tak samo jak w przypadku procedury)


Wewn±trz kodu funkcji powinno znale¼æ siê przypisanie jej jakiej¶ warto¶ci zwrotnej


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

{...}
{cia³o funkcji}
function NazwaFunkcji(parametr1:typ; parametr2:typ2): typ 3;
begin {pocz±tek funkcji}
 {tu mo¿e byæ tre¶æ}
 NazwaFunkcji:=wartosc;
end; {koniec}

begin
 a:=NazwaFunkcji(zmienna1, zmienna2);
 {dopuszczalne równie¿}
 NazwaFunkcji(zmienna1, zmienna2);
end.


Mno¿enie dwóch liczb
function Pomnoz(a, b : integer) : Longint;
begin
  Pomnoz := a*b;
end;

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

wynik dzia³ania programu:



wynik 2*5 to 10


Obliczanie silni za pomoc± rekurencji

W rozdziale dotycz±cym pêtli zosta³a opisana metoda rekurencji (wywo³ania w procedurze lub funkcji samej siebie).  Poni¿ej 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; {wywo³anie samej siebie}
end;

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

 

Strona korzysta z plików cookie w celu ¶wiadczenia us³ug Google (reklamy, statytyki) oraz Facebook. Je¶li chcesz zablokowaæ pliki cookies wy³acz je w swojej przegl±darce. Potrzebujesz pomocy? kliknij