Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Теоретичні відомості. У мові Паскаль передбачено засоби, завдяки яким можна оформляти послідовність операторів як підпрограму





У мові Паскаль передбачено засоби, завдяки яким можна оформляти послідовність операторів як підпрограму. Підпрограма - це названа група операторів, яку можна виконати в будь-якому місці програми довільну кількість разів. Розрізняють два види підпрограм: підпрограми-процедури і підпрограми-функції (у подальшому просто процедури та функції).

Усі процедури й функції поділяються на два класи: стандартні (зарезервовані) і визначені користувачем. Стандартні процедури й функції є частиною мови, вони заздалегідь не описуються. Процедури й функції, визначені користувачем, обов'язково описуються в розділі опису підпрограм. Сам опис не передбачає виконання жодних дій. Для виконання процедури в програмні є оператор виклику процедури. Функція буде виконана, якщо її ім'я зустрінеться в деякому виразі.

Процедура має ту саму структуру, що й Паскаль-програма, і складається із заголовка і блока (тіла). Заголовок процедури містить ключове слово Procedure, ім'я процедури і, якщо необхідно, список формальних параметрів із зазначенням типу кожного з них. Тип параметра повинен бути простим або описаним за допомогою імені раніше введеного типу.

Наприклад, опис вигляду:

Procedure sum(n: Integer, а: array [1..50] of Real);

не допускається. Цей заголовок слід описати так:

Type ar= array [1..50] of Real;

Procedure sum(n: Integer, а: ar);

Блок процедури аналогічний блоку Паскаль-програми, за винятком лиш того, що після останнього end процедури ставиться крапка з комою, а не крапка.

Загальний вигляд опису процедури:

Procedure <ім'я процедури> (<ім'я формального параметру>: <тип>;

... <ім'я формального параметру>: <тип>);

<розділ описів>

begin

<розділ операторів>

end;

Наприклад, процедура frame формує на екрані рамку розміром 10х10 із знаків '*'. Лівий верхній куток рамки має координати (х,у). Програма demo_procedure будує на екрані дві рамки.

Program demo_procedure;

Procedure frame(x,y: Byte);

Var i:Byte;

begin

GotoXY(x,y);Write(‘**********’);

For i:=1 to 8 do begin GotoXY(x,y+i);Write(‘* *’) end;

GotoXY(x,y+9);Write(‘***********’);

end;

begin

ClrScr; fram(31,2);frame(41,12)

end.

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

Загальний вигляд опису функції:

Function <ім'я функції>(<ім'я формального параметру>:<тип>;... <ім'я формального параметру>:<тип>;): <ім'я типу функції;

<розділ описів>

begin

<розділ операторів>

end;

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

Наприклад, функція ch(х) обчислює значення гіперболічного косинуса.

Програма demo_function знаходить значення виразу: y=ch(1)+ch(2).

Program demo_function;

Var y:Real;

Function ch(x: Real): Real;

begin

Ch:=(Exp(x)+Exp(-x))/2

end;

Begin

Y:=ch(1)+ch(2); Write(‘y=’,y)

end.

Параметри процедур і функцій. Вони дають змогу під час кожного виклику процедури чи функції працювати з об'єктами, що задаються в момент виклику через список фактичних параметрів. Список формальних параметрів у заголовку процедури чи функції визначає імена, під якими ці об'єкти відомі всередині підпрограми, а також тип необхідних фактичних параметрів. Між формальними і фактичними параметрами існує відповідність: перший фактичний параметр відповідає першому формальному, другий – другому і т.д.

Кількість формальних і фактичних параметрів повинна бути однаковою. Типи формальних і фактичних параметрів повинні збігатися. Винятком є передача параметрів рядкового типу. В цьому випадку за допомогою директиви компілятору {$V+} можна активізувати перевірку збігу довжин фактичних і формальних параметрів. За замовчуванням встановлено режим {$V+}.

Turbo Pascal підтримує три види параметрів: параметри-значення, параметри-змінні і параметри-процедури(параметри-підпрограми).

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

Параметр-змінна. Якщо процедура чи функція містить формальний параметр-зміну, то фактичний параметр може бути лише змінною того самого типу, а формальний параметр позначає цю змінну на весь час виконання підпрограми. Характерною ознакою параметра-змінної є той факт, що будь-яка зміна формального параметра викликає зміну фактичного параметра. Параметри-змінні використовуються тоді, коли цей параметр призначений для зображення результату процедури чи функції. Для опису параметрів-змінних у заголовку підпрограми існує ключове слово var, яке ставиться перед відповідними змінними.

Наприклад,

Type st80= string [80];

Procedure demo(a,b: Byte; c: Char; var s: st80; var n: Byte);

У процедурі demo параметри a, b і c є параметрами-значеннями, а параметри s i n – параметрами-змінними.

Для параметрів-змінних можна не вказувати їх типів. Тоді параметр є безтиповим. Такі параметри сумісні з будь-яким типом.

Область дії мітки та імені(принцип локалізації). Опис або означення мітки чи імені (константи, типу, змінної, процедури, функції) поширюється на весь блок, в якому міститься цей опис або означення. Область, в якій справедливе означення чи опис мітки або імені, називається областю дії цієї мітки або імені.

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

Наприклад, під час виконання програми:

Program demo_var;

Var a,b,c,d: Integer;

Procedure change(c: Integer; Var d: Integer);

Var b: Integer;

begin

a:=0;b:=0;c:=0;d:=0; change(c,d);

Write(‘a=’,a,’b=’,b,’c=’,c,’d=’,d)

end.

Отримуємо результат:

a=1 b=0 c=0 d=1.

Змінна а є глобальною для програми demo_var, область її дії поширюється й на процедуру change. Зміна значення а всередині процедури change викликає зміну її значення і в основній програмі. У процедурі change описана локальна змінна b, значення її дійсне лише всередині цієї процедури. Глобальна змінна b свого значення не змінює. Змінна с, як параметр-значення, є теж локальною і свого значення за межами процедури change не змінює. Присвоєння всередині процедури change нового значення змінній d, як параметру-змінній, викликає зміну фактичного параметра d.

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

Рекурсивні процедури та функції. Якщо процедура чи функція викликає сама себе, то вона називається рекурсивною. Глибина рекурсії, тобто кількість викликів, системою Тurbo Pascal не обмежується. Реально вона залежить від ресурсів пам'яті конкретного комп'ютера.

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

Попередній опис процедур і функцій. Взаєморекурсією називається ситуація, коли підпрограма А викликає підпрограму В, а остання, в свою чергу, викликає підпрограму А. Під час опису взаєморекурсії виникає замкнуте коло: в підпрограмі А необхідно використати підпрограму В, яка вже повинна бути описаною, тоді як під час опису підпрограми В слід описати підпрограму А. Для подолання таких ситуацій існує директива попереднього опису forward. Під час опису підпрограми А замість її тіла ставиться ключове слово forward. Далі йде опис підпрограми В і можливо інших підпрограм, за якими розташовується заголовок та тіло підпрограми А, причому в її заголовку формальні параметри не вказуються.

Блок-схема програми, в якій є підпрограма, та блок-схема підпрограми наведені на рисунку 4.1.

Рисунок 4.1 – Блок - схема програми з підпрограмою

Методичні вказівки:

а) вивчити правила запису підпрограм різних типів та засобів звертання до них;

б) вивчити засоби передачі параметрів до підпрограми;

в) засвоїти правила запису програм, які використовують підпрограми різних видів;

г) розробити алгоритми розв`язання задач свого варіанту, записавши їх у вигляді блок-схем;

д) підготувати текстовий варіант програми та попередніх даних.

Контрольні запитання:

1. Використання підпрограм-процедур у програмі.

2. Використання підпрограм-функцій у програмі.

3. Різниця між процедурами та функціями.

4. Формальні та фактичні параметри.

5. Принцип локалізації.

6. Особливості складання блок-схеми програми, що має підпрограми.

7. Процедурний тип даних.

8. Рекурсія.

 

 

Date: 2015-12-12; view: 378; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.006 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию