Параметр-айнымалы
Сілтеме бойынша шақырғанда, ішкі программада берілетін айнымалылар үшін жадыдан орын бөлінбейді. Ішкі программаға
240
айнымалының мəні емес, сəйкес нақты параметрдің жадыдағы орнына сілтеме беріледі. Осы айнымалымен есептеулер жүр-гізетін ішкі программа шын мəнінде сəйкес нақты параметрмен жұмыс істейді. Сондықтан, процедура орындалғанда айны-малымен орындалған өзгерістер сақталады. Параметр-айны-малыны жазған кезде формальді параметрлер тізімінде VAR қызметші сөзі көрсетіледі. Есептелетін нəтижелер үшін тек параметр-айнымалылар қолдануға болады. Формальді параметр-айнымалылар үшін нақтылы мəн ретінде тұрақты немесе өрнек қолдануға болмайды. Себебі, олардың адресі жоқ.
Параметр-айнымалы ретінде көлемі көрсетілмеген ашық типті жиым жəне жолдарды қолдануға болады. Ашық жиым ішкі программаның базалық элементтер типін анықтайтын, бірақ көлемі мен шекарасын анықтамайтын, формальді параметрі бола алады. Бұл жағдайда элементтердің индексі нөлден баста-лады. Ашық жиымның жоғарғы шекарасы HIGH функциясының көмегімен қайтарылады. Мұндай сипаттама тек бір өлшемді жиым үшін ғана қолданылады. Ашық жиым үшін стекте оның көшірмесі жасалады. Бұл стектің толып кетуіне əкелуі мүмкін.
Ашық жиымды қолдануға мысал қарастырайық. Бір өлшемді жиым элементтерінің қосындысын есептеу керек.
FUNCTION SUM (VARA:ARRAYOF INTEGER):INTEGER;
VAR S,I : INTEGER;
BEGIN
S:=0;
FOR I:=0 TO HIGH(A) DO
S:=S+A[I];
SUM:=S;
END;
Негізгі программада мұндай жиымды Var A: array [ -2 .. 3] of integer; түрінде сипаттауға болады. Бұл жерде ең маңыздысы жиымның нақты шекарасы емес оның элементтерінің саны, ол 6-ға тең.
Ашық жолды компилятордың {$P+} директивасын қолданып, стандартты OPENSTRING жəне STRING типтерінің көмегімен беруге болады.
Мысалы,
PROCEDURE ZAP ( VAR ST : OPENSTRING; R: INTEGER );
241
немесе
{$P+}
PROCEDURE ZAP ( VAR ST : STRING; R: INTEGER ); Турбо Паскаль тілінде жолдың формальді жəне нақтылы
параметрлердің ұзындықтарының сəйкестігін қадағалауды алып тастайтын, {$V-} компиляция режимін орнатуға болады. Көлемі қысқа жол берілген кезде, формальді параметр ұзындығы осыған сəйкестелінеді, ал көлемі ұзын жол берілгенде, формальді па-раметр ұзындығы максимальді ұзындыққа дейін қысқартылады. Бақылау тек параметр-айнымалы үшін ғана қосылады, параметр-мəн үшін бақылау қажет емес.
Процедура жəне функция қолданылатын мысал қарастырайық. M бағана жəне N жолдан тұратын матрицаның барлық элементтері өсу немесе кему бойынша реттелген жəне жай сан болып келген бағана нөмірлерінен тұратын вектор құрастыратын процедура жазу керек. Бастапқы мəндерді енгізу, процедураны шақыру жəне нəтижені шығару негізгі программада орындалады.
USES CRT;
TYPE TMAS=ARRAY[1..100,1..100] OF WORD;
TVECT=ARRAY[1..100] OF WORD; VAR A:TMAS;
V:TVECT;
N,M,K:BYTE;
I,J:BYTE;
PROCEDURE FORM(VAR X:TMAS; {матрица} N,M:BYTE; {жол жəне бағана саны }
VAR R:TVECT; {нəтиже-вектор} VAR K:BYTE); {алынған вектор ұзындығы}
VAR I,J,Z,S:BYTE;
F:BOOLEAN;
FUNCTION PROS(B:WORD):BOOLEAN; {жай санды тексеру функциясы} VAR I:WORD;
BEGIN
IF B<>1 THEN PROS:=TRUE
ELSE PROS:=FALSE;
FOR I:=2 TO B DIV 2 DO
242
IF B MOD I = 0 THEN PROS:=FALSE;
END;
BEGIN
K:=0;
FOR J:=1 TO M DO
BEGIN
Z:=0; S:=0; F:=TRUE;
FOR I:=1 TO N-1 DO
BEGIN
IF X[I,J]>X[I+1,J] THEN Z:=Z+1;
IF X[I,J]
END;
IF (Z = N-1) OR (S = N-1) THEN
BEGIN
FOR I:=1 TO N DO
IF NOT(PROS(X[I,J])) THEN F:=FALSE;
IF F THEN
BEGIN
K:=K+1; R[K]:=J
END;
END;
END;
END;
BEGIN
WRITELN(‘ N жəне M-ді енгіз:’);
READLN(N,M);
WRITELN(‘Матрицаны енгіз:');
FOR I:=1 TO N DO
FOR J:=1 TO M DO
READLN(A[I,J]);
FORM(A,N,M,V,K);
WRITELN(‘Нəтиже:’);
FOR I:=1 TO K DO
WRITE(V[I],’ ‘);
READKEY
END.
Бұл мысалда процедураға бастапқы мəндер беріледі: екі өлшемді жиым жəне оның көлемі. Жиым, процедурада оның
243
көшірмесіне орын бөлінбес үшін параметр-айнымалы ретінде беріледі. Нəтиже: вектор жəне оның көлемі міндетті түрде параметр-айнымалылар ретінде беріледі. Жай санды тексеру процедураның ішкі функциясы жəне оған негізгі программадан қол жеткізуге болмайды.
Достарыңызбен бөлісу: |