Ïðè ñîçäàíèè ôóíêöèè èëè ïðîöåäóðû ðàáîòû ñ ìàññèâàìè â åå îáúÿâëåíèå íåëüçÿ âêëþ÷àòü îïèñàíèå èíäåêñîâ. Ïðèìåð, îáúÿâëåíèå procedure MyProc(A: array[1..10] of Integer); áóäåò ðàñöåíåíî êàê ñèíòàêñè÷åñêàÿ îøèáêà è âûçîâåò ñîîòâåòñòâóþùåå ñîîáùåíèå êîìïèëÿòîðà. Ïðàâèëüíûì áóäåò îáúÿâëåíèå type ta = array[1..10] of Integer; procedure MyProc(A: ta); Ôóíêöèè è ïðîöåäóðû ìîãóò âîñïðèíèìàòü â êà÷åñòâå ïàðàìåòðîâ íå òîëüêî ìàññèâû ôèêñèðîâàííîãî ðàçìåðà, íî è òàê íàçûâàåìûå îòêðûòûå ìàññèâû, ðàçìåð êîòîðûõ íåèçâåñòåí.  ýòîì ñëó÷àå â îáúÿâëåíèè ôóíêöèè èëè ïðîöåäóðû îíè îïèñûâàþòñÿ êàê ìàññèâû áàçîâûõ òèïîâ áåç óêàçàíèÿ èõ ðàçìåðíîñòè. Ïðèìåð: procedure SumArray(A:array of integer; var B: array of integer); Ïðè òàêîì îïðåäåëåíèè ïåðåäàâàåìûé â ôóíêöèþ ïåðâûé ìàññèâ áóäåò êîïèðîâàòüñÿ è ñ ýòîé êîïèåé - ìàññèâîì A, áóäåò ðàáîòàòü ïðîöåäóðà. Âòîðîé îòêðûòûé ìàññèâ îïðåäåëåí êàê var. Ýòîò ìàññèâ ïåðåäàåòñÿ ïî ññûëêå, ò.å. îí íå êîïèðóåòñÿ, è ïðîöåäóðà áóäåò ðàáîòàòü íåïîñðåäñòâåííî ñ èñõîäíûì ìàññèâîì. Ìàññèâ, ïåðåäàííûé êàê îòêðûòûé, âîñïðèíèìàåòñÿ â òåëå ïðîöåäóðû èëè ôóíêöèè êàê ìàññèâ ñ öåëûìè èíäåêñàìè, íà÷èíàþùèìèñÿ ñ 0. Ðàçìåð ìàññèâà ìîæåò áûòü îïðåäåëåí ôóíêöèÿìè Length - ÷èñëî ýëåìåíòîâ è High - íàèáîëüøåå çíà÷åíèå èíäåêñà. Î÷åâèäíî, ÷òî âñåãäà High = Length - 1. Ïðè âûçîâå ôóíêöèè èëè ïðîöåäóðû ñ ïàðàìåòðîì â âèäå îòêðûòîãî ìàññèâà ìîæíî èñïîëüçîâàòü â êà÷åñòâå àðãóìåíòà êîíñòðóêòîð îòêðûòîãî ìàññèâà, êîòîðûé ôîðìèðóåò ìàññèâ íåïîñðåäñòâåííî â îïåðàòîðå âûçîâà. Ñïèñîê ýëåìåíòîâ òàêîãî êîíñòðóêòîðà ìàññèâà çàêëþ÷àåòñÿ â êâàäðàòíûå ñêîáêè, à çíà÷åíèÿ ýëåìåíòîâ ðàçäåëÿþòñÿ çàïÿòûìè. Íàïðèìåð, ôóíêöèþ Sum, ñóììèðóþùóþ ýëåìåíòû ÷èñëîâîãî ìàññèâà, ìîæíî âûçâàòü ñëåäóþùèì îáðàçîì: Sum([1.2,4.45,0.1]); Ïðèìåð:  êà÷åñòâå ïðèìåðà èñïîëüçîâàíèÿ îòêðûòûõ ìàññèâîâ ðàññìîòðèì ïðîöåäóðó, êîòîðàÿ ïðèíèìàåò äâà îòêðûòûõ îäèíàêîâîãî ðàçìåðà ìàññèâà öåëûõ ÷èñåë, ñóììèðóåò èõ è çàíîñèò ðåçóëüòàò âî âòîðîé èç ïåðåäàííûõ ìàññèâîâ. procedure SumArray(A:array of integer; var B: array of integer); var i:word; begin for i:=0 to High(A) do B[i]:=A[i]+B[i]; end; Âûçîâ ýòîé ïðîöåäóðû ìîæåò èìåòü âèä: var A1,A2: array [1..3] of integer; begin <îïåðàòîðû çàïîëíåíèÿ ìàññèâîâ> SumArray(A1,A2); end;
|