Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции_Паскал.doc
Скачиваний:
2
Добавлен:
21.09.2019
Размер:
1.21 Mб
Скачать

If підходить тнеn

BEGIN

його запис;

IF i<n THEN Try(i+1) ELSE друк рішення ;

стирання запису

END

END

END;

Зверніть увагу: через те, що умова закінчення в процесі вибору звелася до одного відношення k = m, оператор повторення зі словом REPEAT заміниться на оператор циклу з FOR. Дивно, що пошук усіх можливих рішень виконується більш простою програмою, чим у випадку пошуку одного єдиного рішення.

Узагальнений алгоритм, відшукує 92 рішення задачі про вісьмох ферзів. Однак принципово різних рішень усього 12.

Спробуйте самостійно розробити програму пошуку всіх розв’язків.

Модулі в Турбо Паскалі

У Турбо Паскалі допускається розбивати програми на частині і зберігати ці частини в окремих файлах на диску. Крім основної програми з'являються так називані модулі, що надають основній програмі чи іншим модулям свої змінні, константи, типи, процедури, функції і т.п.  Щоб використовувати модуль у програмі, потрібно вказати його ім'я після uses.

При написанні модуля спочатку описується те, що він надає для загального користування (секція інтерфейсу), а потім – як він улаштований (секція реалізації). Іноді існує секція ініціалізації, де записані дії, що виконуються при підключенні цього модуля. Записується це все так:

unit MyUnit;

interface

(*Интерфейсная секція*)

uses ...;

const ...;

type ...;

procedure ...; {Тільки

function ...; заголовки}

implementation

(*Секція реалізації*)

uses ...;

const ...;

type ...;

procedure ...; {Реалізація всіх описаних

begin процедур і функцій}

...

end;

function ...;

begin

...

end;

[begin]

(*Секція ініціалізації*)

end.

Розглянемо частини модуля докладніше. Uses у интерфейсній секції може бути потрібний, якщо в ній використовуються які-небудь ресурси з інших модулів. Процедури і функції тут тільки описуються, але не реалізуються, тобто не записуються тіла процедур і функцій (begin ... end;). У секції реалізації можна також підключати інші модулі; створювати змінні, константи, типи, процедури і функції, що «видні» тільки усередині цього модуля, ніякий інший модуль чи програма на може ними користатися. Тут же обов'язково повинні бути записані всі процедури і функції (цілком). Параметри (у дужках) після імені процедури і функції в секції реалізації можна не вказувати.

Секція ініціалізації містить ті дії, що повинні виконуватися коли наш модуль підключається до програми, тобто до того як почне працювати сама програма. Модуль graph, наприклад встановлює в секції ініціалізації значення за замовчуванням кольору ліній і фону, стиль ліній, стиль заливання т.п.

При збереженні модуля йому потрібно дати таке ж ім'я, як і після unit у тексті модуля. Імена файлів, що містять модулі, повинні мати розширення «pas», також як і програми.

Розглянемо приклад. Наш модуль призначається для операцій із тривимірними векторами:

unit Vectors;

interface

type tVec3D = record

x,y,z: real;

end;

procedure VecAdd(a,b: tVec3D; var c: tVec3D);

procedure VecSub(a,b: tVec3D; var c: tVec3D);

procedure VecMultNum(k: real; a: tVec3D; var b: tVec3D);

function ScalarProduct(a,b: tVec3D): real;

implementation

procedure VecAdd(a,b: tVec3D; var c: tVec3D);

begin

c.x:=a.x+b.x;

c.y:=a.y+b.y;

c.z:=a.z+b.z;

end;

procedure VecSub(a,b: tVec3D; var c: tVec3D);

begin

c.x:=a.x-b.x;

c.y:=a.y-b.y;

c.z:=a.z-b.z;

end;

procedure VecMultNum(k: real; a: tVec3D; var b: tVec3D);

begin

b.x:=k*a.x;

b.y:=k*a.y;

b.z:=k*a.z;

end;

function ScalarProduct(a,b: tVec3D): real;

begin

ScalarProduct:=a.x*b.x+a.y*b.y+a.z*b.z;

end;

end.

У програмі наш модуль можна використовувати, наприклад, так:

program xxx;

uses Vectors;

var v1,v2,res: tVec3D;

...

begin

...

VecMultNum(0.2,v1,res);

VecSub(v2,res,res);

{у результаті res = v2-0.2v1}

...

end.

У випадках, коли кілька модулів містять об'єкти з однаковими іменами, звертатися до них потрібно з вказівкою імені модуля: <ім'я модуля>.<ім'я об'єкта>. Нехай, наприклад, модулі unit1 і unit2 містять процедури з однаковими іменами proc1, тоді звертатися до них слід так: unit1.proc1; і unit2.proc2; .

Переваги модулів:

  1. Засоби, узяті з модулів дозволяють не повторювати в програмах ті самі фрагменти.

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

  3. Модулі компілюються окремо від головної програми, тому при компіляції всієї програми обробляється тільки головна програма (менші витрати часу при налагодженні програм). Це особливо важливо для великих програм.

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