Èíôîðìàòèêà íà ïÿòü Î íàñ
 Äîáàâèòü â èçáðàííîå
5byte.ru
 Òåîðèÿ
 •8 êëàññ
 •9 êëàññ
 •10 êëàññ
 •11 êëàññ
Çàäàíèÿ
 •8 êëàññ
 •9 êëàññ
 •10 êëàññ
 •11 êëàññ
Êíèãè
Òåñòû
ÅÃÝ
Turbo Pascal 7
 •Îïèñàíèå
 •Çàäà÷è
HTML
Ðåôåðàòû

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.




КО�ВЕЙЕРЫ И КОМПЛЕКТУЮЩИЕ
 Ó Âàñ åñòü ìàòåðèàë ïèøèòå íàì
 
    Copyright © 2008    
  Top.Mail.Ru