Параметр-мән және параметр-айнымалы
Формальды параметрлер тізбегі міндетті емес, сондықтан кейбір процедураларда қолданылмауы мүмкін. Қолданылатын жағдайда формальды параметрлердің атаулары мен типтері жариялануы тиіс, мысалы:
Procedure SB(a: real; b: integer; c: char);
Мысалда көрсетілгендей параметрлер бір-бірінен нүктелі үтірмен ажыратылады. Мұнда көрсетілген параметрлер процедураның кез келген бөлігінде қолданылуы мүмкін. Нәтижесінде кез келген тапсырманы орындауға керекті алгоритмді жазуға болады.
Егер параметр мән ретінде белгілі болса, процедураны шақыру алдында бұл мән есептеледі және уақытша жадыға көшіріліп процедураға жіберіледі. Параметр ретінде кез келген қарапайым айнымалы немесе константа берілсе де, процедураға тек айнымалының (константаның) көшірмесі жіберілетінін ескеру қажет. Процедура іске асырылған өзгерістер бағдарлама жұмысын күрт өзгерте алмайды, себебі процедурада параметрдің көшірмесі қолданылады.
Егер параметр айнымалы ретінде айқындалса, прооцедураға көшірмесі емес, айнымалының өзі жіберіледі. Яғни процедура параметр адресіне ие болады. Процедурадағы параметр-айнымалыны өзгерту бағдарламадағы айнымалының өзгеруіне әкеліп соғады.
Параметр константа болған жағдайда процедураға параметр адресі жіберіледі. Алайда компилятор параметр-константаға меншіктеу операцияларын қабылдамайды, сондықтан оның мәні өзгермейді.
Келесі бағдарламада параметр-айнымалы мен параметр-мән айырмашылықтарын көре аламыз. Бағдарламада 5 және 7 сандары берілген. Олар INC2 процедурасына жіберіледі де екіге көбейтіледі. Параметрлердің бірі – параметр-мән, екіншісі – параметр-айнымалы. Экранға процедура жұмысына дейінгі және процедура жұмысынан кейінгі нәтижелер көрсетіледі.
const
а: integer = 5;
b: integer = 7;
{----------}
Procedure Inc2 (var c: integer; b: integer);
begin {Inc2}
c := c + с;
b := b + b;
WriteLn(екі еселенген: ', c:5, b:5)
End; {Inc2};
{----------}
begin {main}
WriteLn('бастапқы: ', a:5, b:5);
Inc2(a,b);
WriteLn('результат: ', a:5, b:5)
end {main}.
Бағдарлама нәтижесінде келесі мәліметтер шығады:
бастапқы: 5 7
екі еселенген: 10 14
нәтижесі: 10 7
Егер формальды параметр ретінде айнымалы берілсе, ол параметр-мән деп аталады. Мұндай параметрлердің мысалы ретінде келесі процедураны қарастыруға болады:
PROCEDURE SQ (A,B,C:REAL; VAR X1,X2: REAL);
Бұл жағдайда A, B, немесе С параметрі ретінде сәйкес типтегі мән және константа болуы мүмкін. SQ процедурасын келесідей шақыруға болады:
SQ((25./3+2)*2, - 1.5, (8.2-3.1)/3, X1, X2);
Параметр-мәндер үшін процедураны шақырғанда компьютер келесі әрекеттерді іске асырады: әр формальды параметр жадыда орын бөлінеді, параметр мәні есептеледі және сәйкес формальды параметрдің ұяшығына жіберілед. Егер параметр айнымалы атауы болса (мысалы K), сәйкес формальды параметр ұяшығына (мысалы А) жіберіледі. Осымен А және К арасындағы байланыс жоғалады. Тіпті фактілік және формальды параметр атацлары бірдей болған жағдайда, олар компьютер жадысында бөлек ұяшықтарда орналасады.
Егер формальды параметр алдында var кілттік сөзі орналасса, параметр-айнымалы деп аталады. Мысалы, жоғарыдағы мысалдағы X1 және X2 айнымалылары.
Фактіленген параметр-айнымалы тек айнымалы болуы мүмкін, яғни константа бола алмайды. Процедураны шақырғанда параметр-айнымалы келесідей өңделеді: формальды параметр сәкес фактілік параметр ұяшығын қолданады. Формальды және фактілік парметрлер үшін транслятор жады облысының түрлі ұяшықтарын бөледі. Сондықтан нәтижесі тек параметр-айнымалы арқылы жіберілуі мүмкін.
