Смекни!
smekni.com

Структуровані типи даних записи та множини Використання процедур та функції мови Turbo Pascal (стр. 2 из 3)

4) варіантна частина:

case -> <ідентифікатор> -> of -> <альтернатива> -> ;

5) дискриминант:

<ідентифікатор>-> : -> <ідентифік. типа>

6) альтернатива:

<константа> -> : -> <список полів> ->

4. Множини

Цей тип даних використовують не так часто (одна з причин – низька швидкість виконання операції з множинами). Однак у ряді випадків його використання надає компактність і наочність програм.

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

Наприклад, цифри та символи латинського алфавіту:

[1, 3, 5, 7, 9,] – множинанепарних чисел;

[‘A’, ’X’] – множина елементів типу char;

[ ] – порожня множина.


Опис множини:

1) Type

в 2-х розділах;

var

2) var– в 1-му розділі.

Для опису використовують таку форму:

<ім’я змінної множини> : SETOF <тип елементів> ;

Приклад 1:

Var

M1 : SET OF ‘A’ .. Z’;

M2 : SETOF 1 .. 2;

В опису можна вказуватине тільки границі значень, а також їх перелік:

Приклад2:

M3 : SET OF ‘A’ , ’R’ , ’C’;

Для присвоювання імені множини змінних значень використовують конструкцію вида:

<ім’я змінної множини> := <список>;

Приклад3:

M1 := [‘A’ , ‘B’ , ‘K’] ;

M2 := [2 , 3] ;

тобто змінна М1 приймає значення множини із елементів ‘A’,’B’,’K’, змінна M2 – із елементів 2 і 3.

По суті конструктор є перетворювач змінних простого типу у тип множини.

Над множинами виконують теоретико-множинні операції та операції відношень.

Теоретико-множинні операції:

1) поєднання “+”;

2) перетин “*”;

3) різниця “-”.

Операції відношень:

1) належність елемента множині;

2) рівність, нерівність;

3) належність множини множині.

Приклади:

1) поєднання “+”;

А+В АВ

A := [‘A’ , ‘B’];

B := [‘A’ , ‘K’];

A := A+B

{A = [‘A’ , ‘B’ , ‘K’]}

2) перетин: “*”

A*B B

A := [‘A’ , ‘B’];

B := [‘A’ , ‘K’];

S := A*B {S=[‘A’]}

3) різниця – формується множина з елементів першої множини, які не входять в другу множину

R := A-B {R=[‘B’]}

A-B (A/B)

Пріоритет виконання операцій:

() Þ* Þ + Þ-

4) належність елемента множині – призначається службовим словом IN:

<значення> in <множина>

результат: TRUE- значення входить до множини;

FALSE- не входить.

Приклад:

2 in [1 … 10, 12] {TRUE}

5 in [1, 2 ,7, 10] {FALSE}

Цю операцію використовують для спрощення перевірок.ї

Наприклад:


if (ch = ‘a’) or (ch = ‘b’) or (ch = ‘k’) or (ch = ‘y’) then S , абоінакше

if ch in [‘a’,’b’,’x’,’y’] then S

5) перевірка на рівність, нерівність:

“=” – рівність 2-х множин;

“<>” – нерівність 2-х множин;

6) належність множин:

“<=” – перевірка належності множини лівого операнда правому;

“=>” - перевірка належності множини правого операнда лівому;

результат операції є :

TRUEабо FALSE.

Приклади:

Нехай задані множини

M : setof 1 .. 10;

L : set of ‘A’ .. ‘D’;

і виконані оператори присвоювання

M := [2, 3, 4, 6];

L := [‘A’, ‘B’];

тоді

3 inM{true}

[2, 4] <= M{true}

[ ] = L{false}

[‘A’] <> L{true}

‘E’ in L{false}

([4] <= M) and (L =B) {false}

Bin (M + [7, 8]){false}

Особливість введення та виведення множини

Ввести та вивести множини за допомогою операторів readта writeне можливо. Тому існують спеціальні прийоми вводу і виводу окремих елементів множини.

1) Послідовне введення елементів множини. Можна виконати за допомогою циклічного оператора з перед умовою. Для фіксації кінця вводу елементи порівнюються із втраченою константою. Коли вони співпадають, ввід закінчується. Внутрішнім оператором циклу є конструктор, який формує множину.

Нехай ознакою закінченням буде крапка ‘.’.

MN := [ ]; {конструктор порожня множина}

M := ‘ ‘; {можна присвоювати будь-який символ}

While M <> ‘ . ‘ do

Begin

Writeln (“ввести елемент множини”);

Read (M);

MN := MN + [M];

End.

2) вивід елементів множини можна виконувати шляхом перевірки наявності елемента в множині і його виводу, якщо він міститься в множині. Нехай елемента множини

ZZ : setof 1 .. 30;


Потрібно вивести на екран, тоді фрагмент циклічного перебору має вигляд:

For i := 1 to 30 do

If i in ZZ then Writeln ( i );

5. Загальні відомості про процедури та функції

В практиці програмування часто зустрічаються випадки, коли при виконанні програми треба проводити однакові обчислення при різних початкових даних. Для виключення повторень і спрощення програми ці обчислення можна виділити в самостійну частину програми, яка може використовуватись багаторазово. Така автономна частка програми (яка реалізує визначений алгоритм і припускає звертання до неї із різних часток загальної програми) називається підпрограмою.

Розміщення підпрограм у програмі схоже з ієрархічним принципом побудови файлової системи.

Позитивні сторони використання підпрограм:

1) реалізується метод структурного програмування (модульна побудова);

2) економія пам’яті (яка виділяється для зберігання змінних підпрограми тільки під час роботи підпрограми);

3) імена змінних в основній програмі і підпрограми незалежні (потр. змінна А програми і підпрограми можуть мати різні фізичні значення);

4) самостійний характер підпрограм дозволяє їм створення різними користувачами, що прискорює процес програмування.

В мові Паскаль виділяють два видм підпрограм:

- процедура (PROCEDURE);

- функція (FUNCTION).

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

Форми заголовків:

Program <ім’я> (список параметрів)

Procedure <ім’я> (список параметрів)

Function <ім’я> (список параметрів)

Блоки можуть бути не доложеними або вкладенеми один в одного. Відповідно вони носять назву зовнішнього або внутрішнього (рис.1).

Розглянемо принцип блочної побудови програми на рис.2.

Рис. 2.

Із рис.2 видно, що процедури і функції розміщуються в останньому розділі блоку опису програми. Таких процедур і функцій може бути декілька і розміщуються вони в довільному порядку. В свою чергу, в їх розділах опису можна розміщувати процедури і функції 2-го рівня і т.д.. Наприкінці процедури і функції після endстоїть “ ; ”.

В зв’язку з тим, що кожна процедура або функція може містити свій розділ опису, виникає так звана проблема локалізації імен змінних.

Змінні і константи можна описувати у зовнішніх або внутрішніх блоках. Тому виникає два поняття змінних і констант: локальні і глобальні.

Локальні – існують у рамках того блока, де вони описані. Тобто за межами даного блока їх використовувати не можливо.

Глобальні – описані у зовнішньому блоці але використовують у внутрішньому блоці.

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

Правила локалізації змінних:

1) змінна (константа) існує в рамках того блока де вона описана;

2) кожна змінна в межах блока повинна бути описана тільки один раз;

3) якщо у внутрішньому блоці використовується змінна, яка описана у зовнішніх блоках, то діє тільки опис самого внутрішнього блоку (найблищого);

4) якщо змінна описана як у внутрішньому так і у зовнішньому блоках, то при переході до внутрішнього блока опис зовнішнього блока не використовується, тобто діє опис внутрішнього блоку.

При переході до зовнішнього блока знову починається дія опису зовнішнього блока.

В мові Паскаль існує два типа процедур і функцій:

- з параметрами;

- без параметрів.

Вони відрізняються способом їх вмикання в основну програму.

6. Процедури з параметрами

Для успішної побудови блочних програм необхідно оволодіти двома методиками:

- розробки побудови процедури;

- використання процедури в програмі або в іншій процедурі.

a. Методика розробки процедури.

Як було сказано, процедура складається із заголовка і блока. Блок будується стандартно і не відрізняється від блока програми за винятком того, що наприкінці процедури ставиться крапка з комою.

Розглянемо заголовок (рис.1). ім’я вибирають довільно. Параметри, які містяться у списку параметрів, носять назву формальних – т.б. вони не приймають ніяких значень, а тільки позначають місця, на які далі будуть поставлені так звані фактичні параметри.

Параметри позначають початкові дані (аргументи) і результати виконання процедури.

Список параметрів складається із окремих секцій, які відокремлюють крапкою з комою ( ; ).

В секції вказується перелік (список) параметрів і через двокрапку їх тип. Наприклад:

Procedure R(x, y : real; k : integer; var s : real);

Тут параметри xіy вказують першу секцію, k – другу, s – третю. Розміщення секцій параметрів в них довільне. В даному прикладі x, y, k– параметри значення; s– оператор-змінна, перед яким повинно стояти службове слово var.

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