Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции_Паскал.doc
Скачиваний:
2
Добавлен:
21.09.2019
Размер:
1.21 Mб
Скачать

Параметри - значення

Це найбільш поширений і найпростіший спосіб передачі параметрів. У даному випадку параметр вважається звичайною локальною змінною у межах підпрограми, з тією особливістю, що при виклику підпрограми початкове значення параметра автоматично встановлюється рівним значенню відповідного фактичного параметра, заданого при виклику підпрограми. Цей фактичний параметр може бути довільним виразом того ж типу, що і формальний параметр.

Усередині підпрограми можливі довільні дії з даним формальним параметром, але будь-які зміни його значення НІЯК НЕ ВІДБИВАЮТЬСЯ на значеннях змінних поза підпрограмою.

Нижче приводиться приклад процедури, що використовує передачу параметрів за значенням.

procedure SumSquare ( X, У : real ) ;

begin

x := x*x;

Y := Y*Y;

Writeln('Сума квадратів = ',X+Y) end;

Виклик цієї процедури може відбуватись так:

var

А, у : real;

begin

write(‘a=>’); readln(a);

write(‘b=>’);writeln(b);

SumSquare(А,У) ;

При виклику цієї процедури з фактичними параметрами А і В значення цих параметрів (один раз) копіюються у відповідні формальні параметри X і У, і подальші маніпуляції з формальними параметрами усередині процедури "SumSquare ніяк не впливають на значення змінних А і В

Параметри-змінні

Параметри, передані по посиланню (параметри - змінні), вказуються завданням службового слова var перед їхніми ідентифікаторами в списку параметрів. Цей спосіб передачі параметрів використовується в тих випадках, коли необхідно передати деяке значення в точку виклику підпрограми.

Пояснимо це на прикладі. Нехай необхідно обчислити суму і різницю квадратів двох чисел, причому реалізувати ці обчислення у виді процедури. Phj,bvj чорновий начерк такої процедури:

procedure Drafti ( X, Y : real ) ;

var

Sum, Sub : real;

begin

Sum := X*X+Y*Y;

Sub := X*X-Y*Y end;

Обчислення суми і різниці квадратів очевидні, однак приведений приклад не вирішує поставленої задачі, тому що локальні перемінні Sum і Sub, що містять обчислені значення, по визначенню відомі тільки в межах поточного блоку, існують тільки в процесі роботи підпрограми і при закінченні її роботи зникають.

Отже, необхідно використовувати механізм передачі параметрів і передбачити в списку формальних параметрів ще два параметри для суми і різниці квадратів:

procedure Draft2 ( X, Y : real; Sum, Sub : real ) ;

begin

Sum := X*X+Y*Y;

Sub := X*X-Y*Y end;

Що відбудеться при виклику даної процедури, наприклад, у наступному фрагменті?

var

А, У : real;

SumAB, SubAB : real;

begin

A := 1.7;

В:= 8.09;

Draft2(А,У,SumAB,SubAB) ;

Відповідно до правил мови параметри Sum і Sub у процедурі Draft2, передані за значенням, є локальними в межах цієї процедури, тому присвоювання їм будь-яких значень НЕ ПРИВЕДЕ до одержання цих значень змінними SumAB і SubAB.

Для того, щоб зміна в тілі процедури значення формального параметра ПРИВОДИЛА ДО АНАЛОГІЧНОЇ ЗМІНИ відповідного фактичного параметра, необхідно використовувати передачу параметра по посиланню:

procedure SumSub ( X, Y : real; var Sum, Sub : real ) ;

begin

Sum := X*X+Y*Y;

Sub := X*X-Y*Y end;

У цьому випадку формальні параметри Sum і Sub вважаються синонімами відповідних фактичних параметрів у межах процедури. При цьому фактичні параметри повинні бути змінними (не виразами) того ж типу, що і формальні параметри.

Якщо виклик процедури SumSub матиме такий вигляд:

var

А, У : real;

SumAB, SubAB : real;

begin

А:= 1.7;

В:= 8.09;

SumSub(А,У,SumAB,SubAB) ;

то присвоювання параметрам Sum і Sub усередині тіла процедури будуть означати відповідні присвоювання змінним SumAB і SubAB, переданими процедурі як параметрі-змінні. Після завершення процедури ці змінні будуть містити шукані значення.

Приведемо ще один приклад передачі параметрів-змінних. Часто буває необхідно зробити обмін значень між двома змінними. Ці дії можна оформити у виді наступної процедури:

procedure Swap ( var X, У : real ) ;

var

Т: real;

begin

Т:= X;

X := У;

У:= Т

end;

Такий обмін реалізується за допомогою проміжної змінної Т. При виклику цієї процедури, наприклад:

Swap(А,У)

присвоювання параметрам-змінним Х и У в тілі процедури означають присвоювання відповідним фактичним параметрам А і В.

Варто мати на увазі, що змінні файлових типів можуть передаватися в підпрограми тільки як параметри-змінні.