10.3. Ôîðìàëüíûå è ôàêòè÷åñêèå ïàðàìåòðû
Ôîðìàëüíûå ïàðàìåòðû ïîäïðîãðàììû óêàçûâàþò, ñ êàêèìè ïàðàìåòðàìè ñëåäóåò îáðàùàòüñÿ ê ýòîé ïîäïðîãðàììå (êîëè÷åñòâî ïàðàìåòðîâ, èõ ïîñëåäîâàòåëüíîñòü, òèïû). Îíè çàäàþòñÿ â çàãîëîâêå ïîäïðîãðàììû â âèäå ñïèñêà ôîðìàëüíûõ ïàðàìåòðîâ, ðàçáèòîãî íà ãðóïïû, ðàçäåëåííûå òî÷êàìè ñ çàïÿòûìè.  ãðóïïó ôîðìàëüíûõ ïàðàìåòðîâ âêëþ÷àþòñÿ îäíîòèïíûå ïàðàìåòðû îäíîé êàòåãîðèè.
Âñå ôîðìàëüíûå ïàðàìåòðû ìîæíî ðàçáèòü íà ÷åòûðå êàòåãîðèè:
- ïàðàìåòðû-çíà÷åíèÿ (ýòè ïàðàìåòðû â îñíîâíîé ïðîãðàììå ïîäïðîãðàììîé íå ìåíÿþòñÿ);
- ïàðàìåòðû-ïåðåìåííûå (ýòè ïàðàìåòðû ïîäïðîãðàììà ìîæåò èçìåíèòü â îñíîâíîé ïðîãðàììå);
- ïàðàìåòðû-êîíñòàíòû (èñïîëüçóþòñÿ òîëüêî â âåðñèè 7.0);
- ïàðàìåòðû-ïðîöåäóðû è ïàðàìåòðû-ôóíêöèè (ò. å. ïðîöåäóðíîãî òèïà).
Äëÿ êàæäîãî ôîðìàëüíîãî ïàðàìåòðà ñëåäóåò óêàçàòü èìÿ è, êàê ïðàâèëî, òèï, à â ñëó÷àå ïàðàìåòðà-ïåðåìåííîé èëè ïàðàìåòðà-êîíñòàíòû - åãî êàòåãîðèþ. Èìåíà ïàðàìåòðîâ ìîãóò áûòü ëþáûìè, â òîì ÷èñëå è ñîâïàäàòü ñ èìåíàìè îáúåêòîâ ïðîãðàììû. Íåîáõîäèìî ëèøü ïîìíèòü, ÷òî â ýòîì ñëó÷àå ïàðàìåòð îñíîâíîé ïðîãðàììû ñ òàêèì èìåíåì ñòàíîâèòñÿ íåäîñòóïíûì äëÿ íåïîñðåäñòâåííîãî èñïîëüçîâàíèÿ ïîäïðîãðàììîé. Òèï ôîðìàëüíîãî ïàðàìåòðà ìîæåò áûòü ïðàêòè÷åñêè ëþáûì, îäíàêî â çàãîëîâêå ïîäïðîãðàììû íåëüçÿ ââîäèòü íîâûé òèï. Íàïðèìåð, íåëüçÿ ïèñàòü
function Max(A: arrayt1..100] of Real): Real;
×òîáû ïðàâèëüíî çàïèñàòü ýòîò çàãîëîâîê, ñëåäóåò â îñíîâíîé ïðîãðàììå ââåñòè òèï-ìàññèâ, à çàòåì èñïîëüçîâàòü åãî â çàãîëîâêå:
type tArr = arrayt1..100] of Real;
function Max(A: tArr): Real;
Ïðè îáðàùåíèè ê ïîäïðîãðàììå ôîðìàëüíûå ïàðàìåòðû çàìåíÿþòñÿ íà ñîîòâåòñòâóþùèå ôàêòè÷åñêèå âûçûâàþùåé ïðîãðàììû èëè ïîäïðîãðàììû.
10.3.1. Ïàðàìåòðû-çíà÷åíèÿ
Ïàðàìåòðû-çíà÷åíèÿ ïåðåäàþòñÿ îñíîâíîé ïðîãðàììîé â ïîäïðîãðàììó ÷åðåç ñòåê â âèäå èõ êîïèé è, ñëåäîâàòåëüíî, ñîáñòâåííûé ïàðàìåòð ïðîãðàììû ïîäïðîãðàììîé èçìåíèòüñÿ íå ìîæåò.
Ïàðàìåòð-çíà÷åíèå óêàçûâàåòñÿ â çàãîëîâêå ïîäïðîãðàììû ñâîèì èìåíåì è ÷åðåç äâîåòî÷èå - òèïîì. Òèï ïàðàìåòðà-çíà÷åíèÿ ìîæåò áûòü ëþáûì çà èñêëþ÷åíèåì ôàéëîâîãî.
Åñëè ïàðàìåòðîâ-çíà÷åíèé îäíîãî òèïà íåñêîëüêî, èõ ìîæíî îáúåäèíèòü â îä íó ãðóïïó, ïåðå÷èñëèâ èõ èìåíà ÷åðåç çàïÿòóþ, à çàòåì óæå óêàçàòü îáùèé òèï Êàê îòìå÷àëîñü âûøå, îòäåëüíûå ãðóïïû ïàðàìåòðîâ îòäåëÿþòñÿ äðóã îò òî÷êîé ñ çàïÿòîé.
Ïðèìåð.
procedure Inp(Max, Min: Real; N: Word);
function Mult(X, Y: Integer): Real;
 êà÷åñòâå ôàêòè÷åñêîãî ïàðàìåòðà íà ìåñòå ïàðàìåòðà-çíà÷åíèÿ ïðè âûçîâå ïîäïðîãðàììû ìîæåò âûñòóïàòü ëþáîå âûðàæåíèå ñîâìåñòèìîãî äëÿ ïðèñâàèâàíèÿ òèïà (ñì. ï. 9.3), íå ñîäåðæàùåå ôàéëîâóþ êîìïîíåíòó, íàïðèìåð:
Inp(Abs(Z), -Abs(T), 2 * Ê);
M:=Mult(X + Y, X - Y);
MA:=Max(B, 5);
Ïðèìåð. Ôóíêöèÿ âû÷èñëåíèÿ ìàêñèìàëüíîãî ýëåìåíòà â ìàññèâå. Ïóñòü â îñíîâíîé ïðîãðàììå îïðåäåëåí òèï-ìàññèâ, ìàññèâ ýòîãî òèïà è ïåðåìåííàÿ öåëîãî òèïà
type
tArr = array[1..100] of Integer;
var
Massiv: tArr;
Maxim: Integer;
Ôóíêöèÿ â ýòîì ñëó÷àå ìîæåò èìåòü âèä:
function Max(Mas: tArr; N: Byte): Integer;
var Ma: Integer;
i: Byte;
begin
Ma := Mas[l];
for i := 2 to N do
if Ma < Mas[i] then
Ma := Mas[i];
Max := Ma
end;
Òåïåðü, íàïðèìåð, äëÿ îïðåäåëåíèÿ ìàêñèìàëüíîãî ÷èñëà èç ïåðâûõ ïÿòè ÷èñåë ìàññèâà Massiv è çàïèñè åãî â ïåðåìåííóþ Maxim ìîæíî çàïèñàòü îïåðàòîð:
Maxim : = Max(Massiv,5);</p>
Ñëåäóåò èìåòü â âèäó, ÷òî ïîäïðîãðàììà ìîæåò ðàáîòàòü òîëüêî ñ ìàññèâàìè òèïà tArr. Äëÿ ìàññèâîâ äðóãîãî òèïà ïðèäåòñÿ ñîçäàâàòü äðóãóþ àíàëîãè÷íóþ ïîäïðîãðàììó. Êðîìå òîãî, ïðè ðàáîòå ïîäïðîãðàììû â ñòåêå áóäåò ñîçäàíà êîïèÿ èñõîäíîãî ìàññèâà, ÷òî ïðèâîäèò ê óìåíüøåíèþ áûñòðîäåéñòâèÿ è çàïîëíåíèþ ñòåêà èçëèøíåé èíôîðìàöèåé.
10.3.2. Ïàðàìåòðû-ïåðåìåííûå
Ïðè ïåðåäà÷å ïàðàìåòðîâ-ïåðåìåííûõ â ïîäïðîãðàììó ôàêòè÷åñêè ÷åðåç ñòåê ïåðåäàþòñÿ èõ àäðåñà â ïîðÿäêå, îáúÿâëåííîì â çàãîëîâêå ïîäïðîãðàììû. Ñëåäîâàòåëüíî, ïîäïðîãðàììà èìååò äîñòóï ê ýòèì ïàðàìåòðàì è ìîæåò èõ èçìåíÿòü.
Ïàðàìåòð-ïåðåìåííàÿ óêàçûâàåòñÿ â çàãîëîâêå ïîäïðîãðàììû àíàëîãè÷íî ïàðàìåòðó-çíà÷åíèþ, íî òîëüêî ïåðåä èìåíåì ïàðàìåòðà çàïèñûâàåòñÿ çàðåçåðâèðîâàííîå ñëîâî var. Äåéñòâèå ñëîâà var ðàñïðîñòðàíÿåòñÿ äî áëèæàéøåé òî÷êè ñ çàïÿòîé, ò. å. â ïðåäåëàõ îäíîé ãðóïïû.
Ïðèìåð.
procedure MaxMin(A: tArr; var Max, Min: Real; N: Word);
Çäåñü Max, Min - ïàðàìåòðû-ïåðåìåííûå, À è N - ïàðàìåòðû çíà÷åíèÿ.
Òèï ïàðàìåòðîâ-ïåðåìåííûõ ìîæåò áûòü ëþáûì, âêëþ÷àÿ è ôàéëîâûé.
Ïðè âûçîâå ïîäïðîãðàììû íà ìåñòå ïàðàìåòðà-ïåðåìåííîé â êà÷åñòâå ôàêòè÷åñêîãî ïàðàìåòðà äîëæíà èñïîëüçîâàòüñÿ ïåðåìåííàÿ èäåíòè÷íîãî òèïà (ñì. ï. 9.1). Òàê, åñëè ôîðìàëüíûé ïàðàìåòð èìååò òèï, îïðåäåëåííûé ñëåäóþùèì îáðàçîì:
type tArr = array[1..100] of Integer;
òî è ôàêòè÷åñêèé ïàðàìåòð äîëæåí áûòü ïåðåìåííîé èëè òèïèçèðîâàííîé êîíñòàíòîé òèïà tArr.
Ïðèìåð. Ôóíêöèÿ âû÷èñëåíèÿ ìàêñèìàëüíîãî ýëåìåíòà â ìàññèâå. Ìîäèôèöèðóåì ïîäïðîãðàììó ïðèìåðà ï. 10.3.1, èñïîëüçóÿ â êà÷åñòâå ïåðâîãî ïàðàìåòðà ïàðàìåòð-ïåðåìåííóþ:
function Max(var Mas: tArr; N: Byte): Integer;
var Ma: Integer;
i: Byte;
begin
Ma := Mas[l];
for i := 2 to N do
if Ma < Mas[i] then
Ma := Mas[i];
Max := Ma
end;
Ýòîò âàðèàíò ëó÷øå ïðåäûäóùåãî òåì, ÷òî â äàííîì ñëó÷àå â ñòåêå íå ñîçäàåòñÿ êîïèÿ èñõîäíîãî ìàññèâà, ÷òî óëó÷øàåò áûñòðîäåéñòâèå è ýêîíîìèò ïàìÿòü. Îäíàêî ïðè òàêîé ïåðåäà÷å ïàðàìåòðà âîçìîæíî åãî íåæåëàòåëüíîå èçìåíåíèå (òàêîé âàðèàíò ïåðåäà÷è ïàðàìåòðà äîïóñòèì òîëüêî â òàêèõ íåáîëüøèõ ïîäïðîãðàììàõ, êàê â äàííîì ïðèìåðå, êîãäà ïðîãðàììèñò ìîæåò ïðîêîíòðîëèðîâàòü îòñóòñòâèå íåñàíêöèîíèðîâàííîãî èçìåíåíèÿ ïàðàìåòðà). Íåäîñòàòîê æå, ñâÿçàííûé ñ òåì, ÷òî ïîäïðîãðàììà ìîæåò ðàáîòàòü òîëüêî ñ îäíèì òèïîì ìàññèâîâ, îñòàåòñÿ.
10.3.3. Ïàðàìåòðû-êîíñòàíòû
×àñòî â êà÷åñòâå ïàðàìåòðà â ïîäïðîãðàììó ñëåäóåò ïåðåäàòü òó èëè èíóþ ïåðåìåííóþ, íî èçìåíÿòü åå ïîäïðîãðàììà íå äîëæíà.  ýòîì ñëó÷àå íåæåëàòåëüíî ïåðåäàâàòü ýòîò ïàðàìåòð êàê ïàðàìåòð-ïåðåìåííóþ. Ìîæíî åãî ïåðåäàòü êàê ïàðàìåòð-çíà÷åíèå, îäíàêî, åñëè ýòà ïåðåìåííàÿ èìååò áîëüøîé ðàçìåð (ìàññèâ, çàïèñü è ò. ä.), òî êîïèÿ òàêîãî ïàðàìåòðà çàéìåò áîëüøóþ ÷àñòü ñòåêà è äàæå ìîæåò åãî ïåðåïîëíèòü. Ýòî æå ïðèâîäèò è ê óìåíüøåíèþ áûñòðîäåéñòâèÿ ïðîãðàììû.  ýòîé ñèòóàöèè ïàðàìåòð ëó÷øå ïåðåäàòü êàê ïàðàìåòð-êîíñòàíòó. Òàêîé ïàðàìåòð, åñëè îí ñòðóêòóðèðîâàííîãî òèïà, ïåðåäàåòñÿ ñâîèì àäðåñîì, íå ïðåäóñìàòðèâàåòñÿ çàùèòà îò åãî èçìåíåíèÿ. Èñïîëüçîâàòü ïàðàìåòð-êîíñòàíòó ìîæíî òîëüêî â âåðñèè 7.0.
Ïàðàìåòð-êîíñòàíòà óêàçûâàåòñÿ â çàãîëîâêå ïîäïðîãðàììû àíàëîãè÷íî ïàðàìåòðó-çíà÷åíèþ, íî ïåðåä èìåíåì ïàðàìåòðà çàïèñûâàåòñÿ çàðåçåðâèðîâàííîå ñëîâî const. Äåéñòâèå ñëîâà const ðàñïðîñòðàíÿåòñÿ äî áëèæàéøåé òî÷êè ñ çàïÿòîé, ò. å. â ïðåäåëàõ îäíîé ãðóïïû.
Ïðèìåð.
function NewString(const S: string): string;
Òèï ïàðàìåòðà-çíà÷åíèÿ ìîæåò áûòü ëþáûì çà èñêëþ÷åíèåì ôàéëîâîãî.
Ïðè âûçîâå ïîäïðîãðàììû íà ìåñòå ïàðàìåòðà-ïåðåìåííîé â êà÷åñòâå ôàêòè÷åñêîãî ïàðàìåòðà ìîæíî èñïîëüçîâàòü ëþáîå âûðàæåíèå ñîâìåñòèìîãî äëÿ ïðèñâàèâàíèÿ òèïà (ñì. ï. 9.3), íå ñîäåðæàùåãî ôàéëîâóþ êîìïîíåíòó.
Ïàðàìåòð-êîíñòàíòó íåëüçÿ ïåðåäàâàòü â äðóãóþ ïîäïðîãðàììó â êà÷åñòâå ôàêòè÷åñêîãî ïàðàìåòðà.
Ïðèìåð. Ôóíêöèÿ âû÷èñëåíèÿ ìàêñèìàëüíîãî ýëåìåíòà â ìàññèâå.  ïðèìåðå ï. 10.3.1 èñïîëüçóåì â êà÷åñòâå ïåðâîãî ïàðàìåòðà ïàðàìåòð-êîíñòàíòó:
function Max(const Mas: tArr; N: Byte): Integer;
var Ma: Integer;
i: Byte;
begin
Ma := Mas[l];
for i := 2 to N do
if Ma < Mas[i] then
Ma := Mas [ i ] ;
Max := Ma
end;
10.3.4. Ïàðàìåòðû áåç òèïà
 Turbo Pascal ìîæíî èñïîëüçîâàòü ïàðàìåòðû-ïåðåìåííûå è ïàðàìåòðû-êîíñòàíòû áåç óêàçàíèÿ òèïà.  ýòîì ñëó÷àå ôàêòè÷åñêèé ïàðàìåòð ìîæåò áûòü ïåðåìåííîé ëþáîãî òèïà, à îòâåòñòâåííîñòü çà ïðàâèëüíîñòü èñïîëüçîâàíèÿ òîãî èëè èíîãî ïàðàìåòðà âîçëàãàåòñÿ íà ïðîãðàììèñòà.
Ïðèìåð.
function Equal(var Paraml, Param2; Len: Word): Boolean;
Çäåñü Param1, Param2 - ïàðàìåòðû-ïåðåìåííûå áåç òèïà (âìåñòî íèõ ìîæíî èñïîëüçîâàòü, íàïðèìåð, ëþáûå ïåðåìåííûå ïðîñòîãî òèïà, òèïà-ìàññèâ, òèïà-çàïèñü è ò. ä.); Len - ïàðàìåòð-çíà÷åíèå.
Ñëåäóåò èìåòü â âèäó, ÷òî ïàðàìåòð áåç òèïà âíóòðè ïîäïðîãðàììû òèïà íå èìååò è åãî ïåðåä èñïîëüçîâàíèåì ñëåäóåò ïðåîáðàçîâàòü ê êîíêðåòíîìó òèïó, ïðèìåíÿÿ èäåíòèôèêàòîð ñîîòâåòñòâóþùåãî òèïà òàê, êàê ýòî óêàçûâàëîñü â ï. 9.4, ïðè ýòîì ïîëó÷åííûé ðåçóëüòàò ìîæåò áûòü ëþáîãî ðàçìåðà.
Ïðèìåð. Ôóíêöèÿ âû÷èñëåíèÿ ìàêñèìàëüíîãî ýëåìåíòà â ìàññèâå. Ðàññìîòðèì äðóãîé âàðèàíò ïîäïðîãðàììû ïðèìåðà ï. 10.3.1, èñïîëüçóÿ â êà÷åñòâå ïåðâîãî ïàðàìåòðà ïàðàìåòð-ïåðåìåííóþ áåç òèïà:
function Max(var Mas; N: Byte): Integer;
type
tArray = array[1..Maxint] of Integer;
{òèï ìàññèâà ìàêñèìàëüíîãî ðàçìåðà}
var Ma: Integer;
i: Byte;
begin
Ma := tArray(Mas)[1];
for i := 2 to N do
if Ma < tArray(Mas)[i] then
Ma := tArray(Mas)[i];
Max := Ma
end;
 ýòîì ñëó÷àå â êà÷åñòâå ïåðâîãî ïåðåäàâàåìîãî ïàðàìåòðà ìîæíî èñïîëüçîâàòü ëþáîé ìàññèâ (è íå òîëüêî ìàññèâ), òàê ÷òî ïîäïðîãðàììà ñòàíîâèòñÿ áîëåå óíèâåðñàëüíîé. Òåì íå ìåíåå çäåñü íåîáõîäèìî ïåðåäàâàòü â êà÷åñòâå âòîðîãî ïàðàìåòðà ôàêòè÷åñêèé ðàçìåð èíôîðìàöèè, ÷òî íå î÷åíü óäîáíî.
10.3.5. Ìàññèâû è ñòðîêè îòêðûòîãî òèïà
 âåðñèè 7.0 ìîæíî â êà÷åñòâå ïàðàìåòðîâ-ïåðåìåííûõ èñïîëüçîâàòü ìàññèâû 1 è ñòðîêè îòêðûòîãî òèïà, ó êîòîðûõ íå çàäàþòñÿ ðàçìåðû.  êà÷åñòâå ôàêòè÷åñêîãî ïàðàìåòðà â ýòîì ñëó÷àå ìîæíî èñïîëüçîâàòü ìàññèâ èëè ñòðîêó ëþáîãî ðà- 1 çìåðà, îäíàêî ìàññèâ äîëæåí ñîñòîÿòü èç òåõ æå êîìïîíåíò, ÷òî è êîìïîíåíòû j îòêðûòîãî ìàññèâà. Òàêèå ïàðàìåòðû ââåäåíû äëÿ òîãî, ÷òîáû ïîäïðîãðàììà ìî- ] ãëà îáðàáàòûâàòü ìàññèâ èëè ñòðîêó ëþáîãî ðàçìåðà. Ôàêòè÷åñêèé ðàçìåð ìàññèâà â ýòîì ñëó÷àå ìîæåò áûòü îïðåäåëåí ñ ïîìîùüþ ôóíêöèè High (ñì, j ï. 16.1). Îòêðûòûé ìàññèâ çàäàåòñÿ êàê è îáû÷íûé ìàññèâ, íî òîëüêî áåç óêàçàíèÿ òèïà èíäåêñà. Ñëåäóåò èìåòü â âèäó, ÷òî èíäåêñàöèÿ ýëåìåíòîâ îòêðûòîãî ìàññèâà âñåãäà íà÷èíàåòñÿ ñ íóëÿ, à ìàêñèìàëüíûé èíäåêñ ýëåìåíòà ðàâåí çíà÷åíèþ ôóíêöèè High.
Ïðèìåð. Ôóíêöèÿ âû÷èñëåíèÿ ìàêñèìàëüíîãî ýëåìåíòà â ìàññèâå. Ðàññìîòðèì âàðèàíò ïîäïðîãðàììû ïðèìåðà ï. 10.3.1, èñïîëüçóÿ â êà÷åñòâå ïåðåäàâàåìîãî ïàðàìåòðà ìàññèâ îòêðûòîãî òèïà:
function Max(var Mas: array of Integer): Integer;
var Ma: Integer;
i: Byte;
begin
Ma := Mas[0];
for i := 1 to High(Mas) do {öèêë äî íàèáîëüøåãî èíäåêñà}
if Ma < Mas[i] then
Ma := Mas[i];
Max := Ma
end;
 ýòîì ïðèìåðå â ïîäïðîãðàììó ïåðåäàåòñÿ òîëüêî îäèí ïàðàìåòð è îíà ìîæåò ðàáîòàòü ñ ëþáûì îäíîìåðíûì ìàññèâîì öåëûõ ÷èñåë. Îäíàêî ñëåäóåò èìåòü â âèäó, ÷òî ïðè ðàáîòå ïîäïðîãðàììû äëÿ îòêðûòîãî ìàññèâà â ñòåêå îïÿòü-òàêè ñîçäàåòñÿ åãî êîïèÿ, ÷òî ìîæåò åãî ïåðåïîëíèòü.
Ðàçíîâèäíîñòü îòêðûòîãî ìàññèâà - îòêðûòàÿ ñòðîêà, êîòîðàÿ ìîæåò çàäàâàòüñÿ ëèáî ñ ïîìîùüþ ñòàíäàðòíîãî òèïà OpenString, ëèáî ñ ïîìîùüþ òèïà string è èñïîëüçîâàíèÿ êëþ÷à êîìïèëÿòîðà {$Ð+} (ñì. ï. 17.7.1), íàïðèìåð çàãîëîâîê ïðîöåäóðû, çàïîëíÿþùåé êàêèì-ëèáî ñèìâîëîì ñòðîêó, ìîæåò èìåòü âèä:
procedure FillChar(var Str: OpenString; Ch: Char);
èëè
($p+)
procedure FillChar(var Str: string; Ch: Char);
10.3.6. Ïàðàìåòðû-ïðîöåäóðû è ïàðàìåòðû-ôóíêöèè
Ïåðåäàâàåìûì ïàðàìåòðîì ìîæåò áûòü òàêæå ïàðàìåòð-ïðîöåäóðà èëè ïàðàìåòð-ôóíêöèÿ, ò. å. ïàðàìåòð ïðîöåäóðíîãî òèïà. Ôàêòè÷åñêè ýòîò ïàðàìåòð ÿâëÿåòñÿ ïàðàìåòðîì-çíà÷åíèåì, ò. ê. çàïèñûâàåòñÿ áåç çàðåçåðâèðîâàííîãî ñëîâà var.
 êà÷åñòâå ôàêòè÷åñêîãî ïàðàìåòðà â ýòîì ñëó÷àå èñïîëüçóåòñÿ ñîîòâåòñòâóþùàÿ ïðîöåäóðà èëè ôóíêöèÿ, èìåþùàÿ íåîáõîäèìîå êîëè÷åñòâî ïàðàìåòðîâ òðåáóåìûõ òèïîâ.
Äëÿ ïàðàìåòðîâ-ïðîöåäóð è ïàðàìåòðîâ-ôóíêöèé ñóùåñòâóþò òå æå ïðàâèëà, ÷òî è äëÿ äðóãèõ ïåðåìåííûõ ïðîöåäóðíîãî òèïà: ïîäïðîãðàììû äîëæíû êîìïèëèðîâàòüñÿ ñ êëþ÷îì {$F+) èëè èìåòü äèðåêòèâó far, íå äîëæíû áûòü ñòàíäàðòíûìè ïîäïðîãðàììàìè, íå äîëæíû îáúÿâëÿòüñÿ âíóòðè äðóãèõ ïîäïðîãðàìì, íå èìåòü äèðåêòèâ inline èëè interrupt.
Ïðèìåð. Ïðîãðàììà, ïå÷àòàþùàÿ òàáëèöû ñëîæåíèÿ è óìíîæåíèÿ äâóõ öåëûõ ÷èñåë â çàäàííîì äèàïàçîíå.
program EXAMPLE15;
type
Func = function(X, Y: Integer): Integer;
($F+)
function Add(X, Y: Integer): Integer;
begin
Add := X + Y
end;
function Multiply(X, Y: Integer): Integer;
begin
Multiply := X * Y
end;
{$F-}
procedure PrintTable(A, B: Integer; Operation: Func);
{ïðîöåäóðà ïå÷àòè òàáëèöû}
var
i, j: Integer;
begin
for i := 1 to A do
begin
for j := 1 to  do
Write(Operation(i, j): 5);
WriteLn
end;
WriteLn
end;
begin {íà÷àëî îñíîâíîé ïðîãðàììû}
PrintTable(10, 10, Add);
PrintTable(10, 10, Multiply)
end.
|