Студопедия
Новини освіти і науки:
МАРК РЕГНЕРУС ДОСЛІДЖЕННЯ: Наскільки відрізняються діти, які виросли в одностатевих союзах


РЕЗОЛЮЦІЯ: Громадського обговорення навчальної програми статевого виховання


ЧОМУ ФОНД ОЛЕНИ ПІНЧУК І МОЗ УКРАЇНИ ПРОПАГУЮТЬ "СЕКСУАЛЬНІ УРОКИ"


ЕКЗИСТЕНЦІЙНО-ПСИХОЛОГІЧНІ ОСНОВИ ПОРУШЕННЯ СТАТЕВОЇ ІДЕНТИЧНОСТІ ПІДЛІТКІВ


Батьківський, громадянський рух в Україні закликає МОН зупинити тотальну сексуалізацію дітей і підлітків


Відкрите звернення Міністру освіти й науки України - Гриневич Лілії Михайлівні


Представництво українського жіноцтва в ООН: низький рівень культури спілкування в соціальних мережах


Гендерна антидискримінаційна експертиза може зробити нас моральними рабами


ЛІВИЙ МАРКСИЗМ У НОВИХ ПІДРУЧНИКАХ ДЛЯ ШКОЛЯРІВ


ВІДКРИТА ЗАЯВА на підтримку позиції Ганни Турчинової та права кожної людини на свободу думки, світогляду та вираження поглядів



Var Ident,

Var

Begin

Var

Begin

Var

Begin

Var

А, у : real;

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

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

SumSquare(А,У) ;

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

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

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

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

procedure Drafti ( X, Y : real ) ;

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 ) ;

Sum := X*X+Y*Y;

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

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

А, У : real;

SumAB, SubAB : real;

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 ) ;

Т: real;

begin

Т:= X;

X := У;

У:= Т

end;

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

Swap(А,У)

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

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

Безтипові параметри

Крім двох звичайних способів передачі параметрів у підпрограми при їх виклику - за значенням і по посиланню - Turbo Pascal допускає третій спосіб передачі, при якому тип параметра не фіксується. У цьому випадку специфікація формального параметра в заголовку підпрограми має наступний загальний вид:

де Ident - ідентифікатор формального параметра.

У випадку виклику підпрограми фактичний параметр, що відповідає формальному не типізованому параметру, повинний являти собою змінну будь-якого типу (але не вираз; у цьому мається визначена подібність з передачею параметра по посиланню).

Оскільки тип формального параметра не заданий, то, строго говорячи, він несумісний ні з якою іншою змінною, тобто не може входити ні в які конструкції. Тому єдиним способом використання таких параметрів у тілі підпрограми є "наділення" їх визначеним типом. Цього можна досягти двома основними способами: застосувавши до них операцію приведення типу чи описавши в підпрограмі локальну змінну визначеного типу зі сполученням її в пам'яті з не типізованим параметром.

Приведення типів.

Turbo Pascal, на відміну від авторської версії мови, містить спеціальну конструкцію явного перетворення типу. Ця конструкція зветься приведення типу змінної. Приведення не здійснює ніяких операцій з змінної (як, наприклад, операції Round чи Trunc), а просто дозволяє трактувати змінну одного типу, як змінну деякого іншого типу. Загальний вид приведення типу наступний:

ТИП (ЗМІННА)

Іншими словами, для того. щоб використовувати змінну як таку що має деякий інший тип, необхідно взяти її в круглі дужки, а ліворуч приписати ідентифікатор цього типу. Пояснимо це на простому прикладі. Нехай мається ціла змінна SI з наступним описом:




Переглядів: 473

<== попередня сторінка | наступна сторінка ==>
Параметри - значення | Модуль CRT

Не знайшли потрібну інформацію? Скористайтесь пошуком google:

  

© studopedia.com.ua При використанні або копіюванні матеріалів пряме посилання на сайт обов'язкове.


Генерація сторінки за: 0.003 сек.