WWW.REFERATCENTRAL.ORG.UA - Я ТУТ НАВЧАЮСЬ

... відкритий, безкоштовний архів рефератів, курсових, дипломних робіт

ГоловнаІнформатика, Компютерні науки → ПАСКАЛЬ: область дії, модулі, структури - Реферат

ПАСКАЛЬ: область дії, модулі, структури - Реферат

{скорочений заголовок}
begin ... {повний блок; див. відповідь до задачі 3.21} end;
function oneside; {скорочений заголовок}
begin ... {повний блок; див. відповідь до задачі 3.19} end;
Якби в цих підпрограмах використовувалися підпрограми, не вказані в інтерфейсному розділі, то їх слід було б записати на початку розділу реалізації. У нас таких поки що немає.
Узагалі, імена, означені в розділі реалізації і не вказані в інтерфейсному розділі, називаються іменами, захованими в модулі. Вони призначені для використання всередині модуля, але не за його межами.
Відзначимо, що для модуля діють ті ж самі правила дії іменувань, що і для програм.
Розділ ініціалізації задає дії, що виконуються один разів на початку виконання програми, яка використовує означення модуля. Він має вигляд:
Begin послідовність операторів
У цих операторах, як правило, задається присвоювання початкових значень змінним, означеним у модулі (їх ініціалізація).У нашому прикладі ніякі початкові дії не задаються, і слово Begin з операторами відсутні.
Запис усього модуля з ім'ям PlaneGeo залишаємо як вправу.
Використання імен модуля в програмі або в іншому модулі називається успадкуванням, або використанням модуля й у діалекті Турбо Паскаль указується відразу після заголовка програми або слова Interface у модулі в такому вигляді:
uses ім'я-модуля;
Якщо програма або модуль використовує кілька інших модулів, то їх імена записуються через кому. Програма розв'язання задачі 3.21 із використанням модуля PlaneGeo стає істотно коротше:
program intriang(input, output);
uses PlaneGeo;
var x, y, {точка}
xt1, yt1, xt2, yt2, xt3, yt3, {вершини}
a1, b1, c1, a2, b2, c2,
a3, b3, c3 : real; {коефіцієнти прямих}
begin
writeln('задайте дві координати точки : ');
readln(x, y);
writeln('задайте 3 пари координат вершин трикутника : ');
readln(xt1, yt1, xt2, yt2, xt3, yt3);
normcoef(xt3, yt3, xt2, yt2, a1, b1, c1);
normcoef(xt3, yt3, xt1, yt1, a2, b2, c2);
normcoef(xt1, yt1, xt2, yt2, a3, b3, c3);
if oneside(x, y, xt1, yt1, a1, b1, c1) and
oneside(x, y, xt2, yt2, a2, b2, c2) and
oneside(x, y, xt3, yt3, a3, b3, c3)
then writeln('Так, точка всередині трикутника ')
else writeln('Ні, точка за межами трикутника ')
end.
Як бачимо, імена normcoef і oneside у програмі не означені, але використовуються завдяки тому, що на початку програми вказано використання модуля uses.
Подібно до Паскаль-програм, "Паскаль-модулі" записуються у файли з розширенням .pas. При трансляції модуля його означення транслюються в машинну мову й записуються у файл із розширенням .tpu. Спочатку треба транслювати модуль, і тільки після цього можна транслювати програми й інші модулі, що використовують його. Так, якщо модуль із прикладу 7.3 записаний у файлі з ім'ям PlaneGeo.pas, то в результаті його трансляції з'являється файл PlaneGeo.tpu. Після цього можна транслювати програму Intriang. У процесі її трансляції означення з модуля, а точніше, із файла PlaneGeo.tpu, додаються в машинну програму завдяки вказівці
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;
Компонент змінної-структури, тобто поле, позначається його ім'ям, яке записується після
Loading...

 
 

Цікаве