Сторінка
3

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

Суміщення імен a і ps.b в одній колонці вказує, що цим іменам зіставлена та сама ділянка пам'яті. У результаті виконання буде надруковано 5 5 6. Задачі 1.* Укажіть помилкове використання імен у програмі: program AB(input, output); function A : integer; function B : integer; function A : integer; begin A:=1 end begin A := 2; B := A end; begin A := 3 end; begin writeln(A); writeln(B) end. 2. Імітувати виконання програми: program (input, output); var a, b : integer; procedure badswap(var a : integer; t : integer); var d : integer; begin d := t; t := a; a := d end; begin a := 1; b := 3; badswap(a, b); writeln(a, b) end. 3.* Написати програму, за допомогою якої можна встановити, чи завжди обчислюються праві операнди бульових операцій and і or. 4.* Дописати необхідні означення до тіла програми, щоб при її виконанні було надруковано не "0", а "1": begin

writeln(b*c-c*b) end.

2. Модуль – збірник означень Повернемося до задач 3.19–3.22. У програмах для їх розв'язання використовуються ті самі підпрограми обчислення коефіцієнтів рівняння прямої та перевірки, чи лежать точки по один бік прямої. Ці спільні підпрограми, а також інші означення, можна вилучити з програм і зібрати в спеціальному "збірнику означень". Цьому збірнику можна дати ім'я і вказувати його в програмах замість вилучених означень, помітно скорочуючи текст програм. Стандарт мови Паскаль, правда, такої можливості не дає, але всі системи програмування її забезпечують. Збірник означень називається модулем; конкретний його синтаксис залежить від системи програмування. Розглянемо модулі на прикладі діалекту Турбо Паскаль. Приклад 7.3. Напишемо модуль з означеннями імен normcoef і oneside – імен підпрограм обчислення коефіцієнтів нормалізованого рівняння та перевірки, чи лежать дві точки по один бік прямої (див. відповідь до задачі 3.19). Модуль має загальний вигляд: Unit ім'я-модуля; Інтерфейсний розділ; Розділ реалізації; Розділ ініціалізації end. Інтерфейсний розділ починається службовим словом Interface і містить означення імен, призначених для використання за межами модуля. Проте замість підпрограм тут записуються тільки їх заголовки. У нашому прикладі цей розділ виглядає так: Interface procedure normcoef(x1, y1, x2, y2 : real; var a, b, c : real); function oneside(x1, y1, x2, y2, a, b, c : real) : boolean; Слово "інтерфейс" перекочувало з англійської. Одне з його значень – точка з'єднання, взаємодії різноманітних систем. Інше – спосіб сприйняття і виразу даних, заданий програмою. Інтерфейс програми можна розуміти як "зовнішній вигляд її виконання". Відповідно інтерфейс модуля – це "те, що в ньому видно ззовні". У даному прикладі це заголовки двох підпрограм. Розділ реалізації починається службовим словом Implementation і містить підпрограми, вказані в інтерфейсному розділі, але зі скороченими заголовками – за словом function або procedure записується тільки ім'я. У нашому випадку вигляд цього розділу такий: Implementation {"втілення", "реалізація"} procedure normcoef; {скорочений заголовок} 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, додаються в машинну програму завдяки вказівці

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


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