Wszystkie
polecenia używane
podczas pisania
programów (bez
dyrektyw i słów
kluczowych) są
procedurami lub
funkcjami. Różnica
między procedurą,
a funkcją jest
taka, że
funkcja potrafi
zwrócić jakąś
wartość.
Wszystkie
procedury i
funkcje zapisane
są w modułach.
Oczywiście można
pisać własne
moduły, a tym
samym własne
procedury
(funkcje), czyli
polecenia, które
będziemy mogli
później użyć.

Procedury

Ogólna
składnia
procedury jest
następująca:
PROCEDURE Nazwa_procedury (Parametry); dyrektywa;
blok_danych; {opcjonalnie}
blok_kodu;
Nazwa_procedury
jest
identyfikatorem,
za pomocą którego
będziemy się
do niej zwracać.
Przykładowa
procedura
czyszcząca
ekran może wyglądać
tak:
USES CRT;
PROCEDURE Ekran;
BEGIN
CLRSCR;
END;
BEGIN {program główny}
Ekran;
END.
Instrukcja
EKRAN znajdująca
się w programie
głównym
spowoduje wywołanie
procedury EKRAN,
która wyczyści
ekran.
Jako
parametry możemy
podawać różne
wartości
przyjmowane
przez procedurę.
Poniżej
znajduje się
program
wykorzystujący
procedurę
PiszXY, która
powoduje wyświetlenie
napisu w określonym
miejscu.
USES CRT;
PROCEDURE PiszXY(x,y : Word; Napis : STRING);
BEGIN
GotoXY(x,y);
Write(Napis);
END;
BEGIN {program główny}
PiszXY(37,12,'Jak się masz');
END.
Poszczególne
parametry
oddzielone są
od siebie średnikiem.
Jeśli w danej
procedurze
zostaje wywołana
ta sama
procedura, to
nazywamy to
rekurencją.
Podczas wywoływania
procedury
rekurencyjnie na
stosie zapamiętywany
jest aktualny
adres oraz wartości
wszystkich
zmiennych
lokalnych, dzięki
temu po zakończeniu
wykonywania się
procedury, następuje
powrót do
miejsca, z którego
wywołanie nastąpiło
oraz wszystkie
zmienne
przywracają
swoje pierwotne
wartości.
Do
dyrektyw
zaliczamy:
Dyrektywy
NEAR, FAR
Są
to odwołania:
NEAR (bliskie) i
FAR (dalekie).
Typ odwołania
jest
automatycznie
określany
podczas
kompilacji w
oparciu o
dyrektywę.
Dyrektywa
INTERRUPT
Dyrektywa
ta umożliwia
pisanie procedur
obsługi przerwań.
Każda procedura
obsługi
przerwania
powinna mieć
następującą
składnie:
PROCEDURE Nazwa_procedury(Flags, CS, IP, AX, BX, CX,
DX, SI, DI, DS, ES, BP: Word);
INTERRUPT;
blok;
Dyrektywa
EXTERNAL
Jeśli
mamy już
skompilowane
przy pomocy
asemblera
procedury i
zapisane w pliku
OBJ możemy je
przyłączyć do
naszego programu
używając
dyrektywy
{$L
PLIK.OBJ}
Jednak
dołączone
procedury można
wykorzystywać
tylko, gdy
zadeklarujemy je
z dyrektywą
EXTERNAL.
Dyrektywa
ASSEMBLER
Za
pomocą
dyrektywy
ASSEMBLER możemy
umieszczać w
naszych
procedurach
wstawki
Asemblerowe np.:
PROCEDURE Init13H; Assembler;
ASM;
MOV AH,0H
MOV AL,13H
INT 10H
End;
Dyrektywa
INLINE
Pozwala
ona na
wstawienie kodu
programu jako
procedury np.
PROCEDURE Resetuj_komputer;
INLINE($EA/$F0/$FF/$00/$F0);

Funkcje

Ogólna
składnia
funkcji jest
następująca:
FUNCTION Nazwa_funkcji (Parametry) : Typ_rezultatu;
dyrektywa;
blok;
Każda
funkcja zwraca
jakąś wartość.
W bloku funkcji
musimy więc
zamieścić
zapis:
Nazwa_funkcji:=coś_tam;
Przykładowa
funkcja obliczająca
silnię:
FUNCTION Silnia (n : Integer) : Longint;
var i : Integer;
Wynik : Longint;
Begin
Wynik:=1;
For i:=1 to N do Wynik:=Wynik*i;
Silnia:=Wynik;
End;
|