Сторінка
4

Паскаль: область дії, модулі, структури

uses PlaneGeo. Отже, використання модулів дозволяє не повторювати ті самі означення в різних програмах і цим істотно їх скорочувати. Відзначимо, що всі стандартні підпрограми та інші означення в системах програмування збираються в кілька модулів. Серед них, як правило, є один "найголовніший", що використовується практично кожною програмою. Він містить, наприклад, процедури читання й запису та математичні функції (записані машинною мовою). Означення з нього, що використовуються програмою, при її трансляції додаються неявно, тобто без указання uses. Використання всіх інших модулів треба задавати явно. Задача 5. Оформити модуль PlaneGeo і використати його в розв'язанні задач 3.20–3.22.

3. Структури, вони ж записи У програмі Intriang і підпрограмах модуля PlaneGeo із прикладу 7.3 точки площини подано двома дійсними числами, а прямі – трьома. Ці пари та трійки дійсних значень по суті подають два нових види об'єктів – точки та прямі. У модулі було також означено специфічні операції над цими об'єктами, наприклад, побудова коефіцієнтів рівняння прямої за парою точок. Ще раніш було означено функцію обчислення відстані між двома точками. Усе це дозволяє говорити про дві множини об'єктів і операції над ними, тобто про два нові типи. Елементами цих типів є точки площини та прямі на ній, або відповідно пари та трійки дійсних чисел. Для подання пар (трійок тощо) значень, типи яких уже означено (у тому числі базові типи), використовуються вирази вигляду record список означень імен полів end. Наприклад, тип точок площини, або пар дійсних, можна задати так: type Point =

record

x : real; y : real

end; Це означення задає ім'я типу Point для елементів, утворених парами дійсних значень. Змінна типу Point складається з двох компонентів – дійсних змінних, що називаються її полями та іменуються x і y. Слово record означає "запис", і цей термін не зовсім удалий. Слово structure (структура), напевно, було б краще. Значення типу "запис", тобто пари, трійки тощо значень, а також змінні таких типів називаються записами, або структурами. Типи структур називаються структурними. На відміну від скалярних типів, їх елементи складені з частин, які ідентифікуються окремо. Імена однотипних полів запису можна означити разом, подібно до імен однотипних змінних. Наприклад, в означенні типу Point можна було б написати x,y:real. Аналогічно, тип трійок дійсних коефіцієнтів рівнянь, якими задаються прямі на площині, можна означити так: type Line = record a, b, c: real end У загальному випадку вираз вигляду record ім'я1 : тип-1; ім'я2 : тип-2; . ім'яN : тип-N end задає структурний тип. Його носій – множина N-ок, у яких на першому місті стоїть значення типу-1, на другому – типу-2 тощо. Ця множина називається декартовим добутком носіїв типів, указаних у списку. Такий вираз можна використовувати в означеннях як типів, так і змінних. Наприклад, var lin : record a, b, c : real;

end; Компоненти структур можуть мати довільні типи, у тому числі структурні. Наприклад, можна означити тип "відрізок на площині", що задається парою точок – його кінців: type Segm = record

pe1, pe2 : Point

end; Компонент змінної-структури, тобто поле, позначається його ім'ям, яке записується після імені змінної та відокремлюється крапкою. Наприклад, якщо змінна pn має тип Point, то її компоненти позначаються pn.x і pn.y. Вирази такого вигляду прийнято називати селекторами запису, тому що ім'я поля задає його вибір, або селекцію, серед інших полів. Такі вирази використовуються так само, як і імена змінних відповідних типів. Наприклад, якщо є означення var p1, p2 : Point; то ми вправі написати p1.x:=1; p1.y:=sqr(p1. x) і т.п. Якщо поле саме є структурою, то його компоненти позначаються точно так само, через точку після імені поля. Наприклад, дійсні поля змінної sg типу Segm позначаються sg.pe1.x, sg.pe1.y тощо. Значення змінних-структур можна присвоювати змінним, однотипним із ними. Наприклад, якщо діють означення var a, b : Segm, то можна написати: a.pe1.x := 1; a.pe1.y := a.pe1.x+1; a.pe2 := a.pe1; b:=a. Очевидно, що ці оператори задають присвоювання обом відрізкам того самого значення [(1; 2); (1; 2)]. У мові Турбо Паскаль змінні структурних типів можна ініціалізувати. Стала структурного типу записується в дужках і схожа на вираз, що задає тип, тільки замість імен типів указуються значення. Наприклад,

const p1 : Point = ( x : 1; y : 2 ); Як бачимо, поля відокремлюються знаком ";" незалежно від того, як вони відокремлювалися в означенні типу. Аналогічно ініціалізується структура з полями-структурами, наприклад, типу відрізка площини: const z : Segm = (pe1 : (x : 1; y : 1); pe2 : (x : 2; y : 2)); Тут змінна z ініціалізується як відрізок [(1;1);(2;2)]. Операцій над структурами як цілісними значеннями в мові Паскаль немає. Тому обробка структур описується через обробку їх компонентів із застосуванням операцій базових типів. Тип значень, що повертаються з функції, не може бути структурним. Проте параметри підпрограм можуть бути довільними структурами. Єдине обмеження в мові Турбо Паскаль – тип параметра в заголовку підпрограми можна задавати лише ім'ям, а не довільним виразом. Таким чином, необхідні типи треба іменувати вище в програмі, до їх використання в заголовках підпрограм. Всі поля того самого списку означень імен полів повинні мати різні імена. Проте ім'я поля може повторюватися в інших списках або збігатися з ім'ям змінної. Наприклад, допустимі такі означення: type rectyp = record x : real; z : point end; var x : rectyp; Отже, ми маємо засоби для опису множин пар, трійок тощо, складених із компонентів базових типів. Проте означення типу (у математичному змісті) вимагає задання не тільки елементів множини, але й операцій над ними. Операції можна реалізувати у вигляді підпрограм, описавши обробку структур через обробку їх компонентів. Означення множин елементів і підпрограми можна зібрати в модулі – утвориться реалізація нестандартного типу елементів. Приклади такої реалізації типів ми розглянемо в наступному підрозділі. Задачі 6. Означити тип структури з мінімально можливим числом полів для подання: а) відрізка прямої; б) відрізка площини; в) кола на площині; г) трикутника на площині; д) прямокутника на площині; е) раціонального дробу; ж) прямокутника на площині зі сторонами, паралельними координатним осям. Написати функцію перевірки рівності двох елементів відповідного типу.

Перейти на сторінку номер:
 1  2  3  4  5 


Інші реферати на тему «Інформатика»: