Глобальні та локальні параметри
Поняття глобальних і локальних змінних запроваджено мовою Паскаль через наявність у ньому поняття блокової структури. Будь-яка програма, процедура та функція є блоком зі своєю областю описів і можуть містити всередині цього блоку описи інших процедур і функцій, а також звернення до них. Програма та сукупність описаних у ній процедур та функцій утворює блокову структуру. Блок, що містить у своєму розділі описів інший блок (процедуру та функцію), називається зовнішнім по відношенню до нього. Блок, який міститься у розділі описів деякого блоку, називається внутрішнім або підблоком. Об'єкти, описані всередині будь-якого підблоку, стосовно нього локальними і недоступні зовнішнім блокам, тобто. на них можна посилатися лише усередині блоку, в якому вони описані. У прикладі 2.1 локальною змінною є змінна I.
Другий варіант коротший. Виграш буде значнішим, якщо треба виводити кілька таблиць різних розмірів. Тоді змінюємо значення.
Щоб процедура могла виконати не одну суворо певну послідовність дій, а ціле сімейство аналогічних дій, але з різними параметрами, необхідно доповнити процедуру цими параметрами. У нашому випадку доцільно передбачити два параметри: параметр, що визначає довжину рядка, та параметр для вибору символу, яким передбачається прокреслити рядок.
Тоді програма, що включає процедуру, матиме вигляд, представлений нижче.
Приклад 2.2.
FOR l:=1 ТО Len DO write(Ch);
writeIn ('Таблиця 2.1');
У дужках після імені процедури описуються імена та типи формальних параметрів. Виклик такої процедури відбувається із зазначенням значень фактичних параметрів так:
де 40 - довжина лінії,'='- використовуванийсимвол.
Значення, які у круглих дужках, називаються аргументами, тобто. значеннями фактичних параметрів, які підставляються при виклику процедури. Параметру LEN буде присвоєно значення 40, параметр Ch значення‘=’типу Char. У випадку аргумент і параметр повинні ставитися до сумісних типів, тобто. значення аргументу має бути таким, щоб можна було призначити параметру.
Формальні параметри є локальними в межах процедури (у прикладі 2.2 це I). Об'єкти, описані в деякому зовнішньому блоці (або програмі), доступні і можуть бути використані у будь-якому його підблоці, тобто. вони є глобальними стосовно цих підблоків. Таким чином, об'єкти, локальні для деякого блоку, є глобальними всім його підблоків. Під цими об'єктами мають на увазі мітки та імена констант, типів, змінних, процедур та функцій. На рис. 2.1 наведено схему, що ілюструє дане положення.
Змінні I, J, є локальними по відношенню до блоку 3 і недоступні в блоках 1,2. Змінні X, Y, Z доступні в блоках 2,3 і недоступні в блоці 1, стосовно блоку 3 є глобальними. Змінні А, В, З доступні у всій програмі та є глобальними в блоках 2,3. На рис. 2.2 наведено складнішу структуру з чотирьох блоків. На цьому малюнку змінна L і локальна і глобальна, але це різні змінні!
Змінна дійсного типу L, визначена в блоці 1, є глобальною в блоці 2, але перевизначена в блоці 3 де має силу вже новий зв'язок між ім'ям і типом. Глобальна змінна з іменем L у блоках 3, 4 недоступна, зміна значення локальної змінної L у блоках 3, 4 ніякого впливу на глобальну змінну не має (її значення не зміниться). Щоб не виникали помилки,пов'язані з плутаниною імен, не слід використовувати одні й самі змінні як глобальні і як локальні. Також доцільно уникати збігу імен формальних та фактичних параметрів. Різні імена роблять програму наочнішою.
З допомогою параметрів можна передавати дані у викликану процедуру, тобто. здійснювати пряму передачу інформації, а й із викликаної процедури до зухвалої. Це робиться за допомогою атрибуту VAR (параметри-змінні, див. підрозділ 2.6).
Розглянемо наступний приклад. Припустимо, необхідно обчислити за заданим числом десятковий логарифм. Так як такої функції у Турбо Паскалі немає, то для обчислення використовуємо співвідношення
Для перекладу можна використати таку процедуру.
Приклад 2.3.
Procedure LOG10(Argument:Real;Var LOG:Real);
LOG := 0.4343 * LN(X)
Виклик процедури відбувається так: LOG10 (X, Y);
Функція
Підпрограма-функція призначена для обчислення будь-якого параметра. Функція складається із заголовка та тіла функції.
Заголовок функції має вигляд:
FUNCTION (СПИСОК ФОРМАЛЬНИХ ПАРАМЕТРІВ ): ;
де FUNCTION – службове слово; Ім'я - ім'я процедури, що визначається відповідно до загальних правил побудови ідентифікаторів; СПИСОК ФОРМАЛЬНИХ ПАРАМЕТРІВ - перелік імен для позначення вихідних даних та результатів роботи процедури із зазначенням їх типів.
Допускається опис функції, що не містить:
у цьому випадку параметри передаються через систему глобальних параметрів.
Ця підпрограма має дві основні відмінності від процедури. Перша відмінність – заголовок. Він складається зі слова Function, за яким слідує ім'я функції, потім у круглих дужках - список формальних параметрів, потім через двокрапкузаписується тип функції, тобто. тип параметра, що повертається. Функція може повертати типи речові, порядкові, рядкові та будь-які покажчики.
Друга відмінність у тому, що процедура може мати кілька вихідних параметрів-результатів, а функція лише одне значення, що передається через її ім'я. Саме цим пояснюється те, що в тілі функції хоча б один раз імені функції має надаватися обчислене значення.
Структура функції така сама, як і процедури.
Приклад 2.4. Функція обчислення тангенсу tan(x) від аргументу x.
Function Tan(х: real): real;
Var tangens: real;
tangens:= Sin(x)/Cos(x); tan: = tangens;
Для виклику функції з основної програми або іншої підпрограми слід у виразі, де необхідно використовувати значення функції, вказати ім'я функції зі списком фактичних параметрів, які мають збігатися за кількістю та типами формальних параметрів функції. Наприклад, треба обчислити , оператор присвоювання буде