Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка Програмування.doc
Скачиваний:
7
Добавлен:
19.11.2019
Размер:
742.91 Кб
Скачать

3. Основні принципи модульного програмування

Якщо в деякій програмі використовуються власні процедури досить великого розміру, то ці процедури найкраще оформити в вигляді окремого модуля. Існує декілька причин для створення такого модуля. По-перше, модуль може зберігатися як в вихідному виді в PAS-файлі, так і в відкомпільованому файлі з розширенням TPU (Turbo Pascal Unit - модуль ТУРБО ПАСКАЛЬ). Усі процедури не компілюються щораз при перекомпіляції основної програми, а просто їхній код, що міститься в tpu-файлі, компонується з кодом основної програми. Це значно заощаджує час загальної компіляції задачі. По-друге, винесення множини процедур в окремий модуль розвантажує текст основної програми від зайвої захаращеності, робить його більш компактним і зрозумілим для сприйняття. По-третє, модулі з процедурами, що часто зустрічаються в різноманітних програмах, заощаджують час при написанні нових програм. Для цього достатньо помістити потрібний tpu-файл в каталог із новим проектом, в основній програмі підключити цей модуль в рядку uses і далі просто використовувати процедури з цього модуля в тексті основної програми. Будова модуля нагадує створення нової програми. в окремому pas-файлі записується заголовок модуля, константи, змінні, процедури і функції, які використовуються в цьому модулеві:

Unit ім'я_модуля; {це ж ім'я повинно бути іменем файла} Interface {розділ описів}

Const глобальні_константи;

Var глобальні_змінні;

Procedure Ім’я1 (параметри);

Procedure Ім’я2 (параметри); ..

.Procedure Ім’яM (параметри);

Function Ім’я11 (параметри): тип; ...

Function Имя1N (параметри): тип;

Implementation {розділ реалізації};

Const локальні_константи;

Var локальні_змінні;

Procedure Ім’я1; ...

Begin ...End;

Procedure Ім’я2; ...

Begin ...End; ...

Function Ім’я11; ...

Begin ...End; ...

End.

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

3.1. Приклад програми

unit mmm;

interface

procedure str(var a:array of integer);

procedure sts(var a:array of integer);

procedure bub(var a:array of integer);

procedure qui(var a:array of integer);

implementation

procedure str;

var

x,i,j:integer;

n1,n:integer;

begin

n:=high(a);

n1:=low(a);

for i:=n1 to n do

begin

x:=a[i];

j:=i-1;

while (j>=n1) and (a[j]>x) do

begin

a[j+1]:=a[j];

j:=j-1;

end;

a[j+1]:=x;

end;

end;

procedure sts;

var

x,k,i,j:integer;

n1,n:integer;

begin

n:=high(a);

n1:=low(a);

for i:=n1 to n-1 do

begin

k:=i;

for j:=i+1 to n do

if a[k]>a[j] then k:=j;

if k<>i then

begin

x:=a[i];a[i]:=a[k];a[k]:=x;

end;

end;

end;

procedure bub;

var

x,i,j:integer;

n1,n:integer;

begin

n:=high(a);

n1:=low(a);

for i:=n1 to n-1 do

for j:=n downto i+1 do

if a[j-1]>a[j] then

begin

x:=a[j];a[j]:=a[j-1];

a[j-1]:=x;

end;

end;

procedure qui;

var n1,n:integer;

procedure sort(l,r:integer);

var

x,w,i,j:integer;

begin

i:=l;j:=r;

x:=a[(i+j) div 2];

repeat

while a[i]<x do i:=i+1;

while a[i]>x do j:=j-1;

if i<=j then

begin

w:=a[i];

a[i]:=a[j];

a[j]:=w;

i:=i+1;

j:=j-1;

end;

until i>j;

if i<r then sort(i,r);

if j>l then sort(l,j)

end;

begin

n:=high(a);

n1:=low(a);

sort(n1,n);

end;

end.

program test;

uses mmm;

const n=100;

var a:array[1..n] of integer;

i:integer;

begin randomize;

for i:=1 to n do

a[i]:=random(100);

writeln('неупорядкований масив:');

for i:=1 to n do

write(a[i]:4);

writeln;

sts(a);

writeln('упорядкований масив :');

for i:=1 to n do

write(a[i]:4);

writeln;

end.

Список рекомендованої літератури

1. Сердюченко В.Я. Розробка алгоритмів та програмування мовою Turbo Pascal,- Харків: Паритет, 1995. - 352 с.

2. Фаронов В. В. Турбо Паскаль 7.0. Начальный курс. - М.: Нолидж,1997. - 616 с.

3. Марченко А.И. Программирование в среде Borland Pascal v 7.0.-К.: Век, 1997. - 480 с.

4. Епанешников AM, Епанешников В.А. Программирование в среде Turbo Pascal 7.0. - М.: Диалог -МИФИ , 1993. - 228 с.

5. Бородин Ю.С, Вальвачев А.Н. и др. Паскаль для персональных компьютеров.- Минск: Высш. шк„ 1991. - 364 с.

6. Поляков Д.Б. , Круглов И.Ю. Программирование в среде Турбо-Паскаль. -М.: МАИ , 1992. - 576 с.

7. Довгаль С.И. и др. Персональные ЭВМ: Турбо-Паскаль v 6.0. Объектное программирование и локальные сети,- К.: Информсистема сервис, 1993. - 440 с.

8. Абрамов С.А. и др. Задачи по программированию.-М.: Наука, 1988. - 280 с.

Додаток 1 Процедури та функції модуля GRAPH

Ініціалізація графіки

Initgraph

ініціалізація графічного режиму

lnitGraph(var GraphDriverlnteger; var GraphMode: Integer; PathToDriver: string);

Graphresult

помилки при ініціалізації графічного режиму

function GraphResult: Integer;

Detectgraph

перевірка параметрів Hardware

DetectGraph(var GraphDriver, GraphMode: Integer);

Setgraphmode

встановити графічний режим після текстового режиму

SetGraphMode(Mode: Integer);

Restorecrtmode

відновити текстовий режим

restorecrtmode;

Closegraph

закрити граф. режим

closegraph;

Графічні примітиви

Arc

дуга кола

АРС(х,у,початковий кут, кінцевий кут, радіус)

bar (bar3d)

заштрихован. прямокут.

Ваг(х1, у1, х2, у2);

Circle

коло

Circle(X,Y: Integer; Radius: Word);

Drawpoly

многокутник

DrawPoly(NumPoints: Word; var PolyPoints);

Fillellipse

еліпс

FillEllipse(X, Y: Integer; XRadius, YRadius: Word)

Line

лінія

Line(X1,Y1, X2, Y2: Integer);

Lineto

лінія до курсора

LINETO(x,y)

Rectangle

прямокутник

Rectangle( XI, Y1, X2, Y2: Integer)

Putpixel

точка

PutPixel(X, Y: Integer; Pixel: Word);

Sector

сектор

Sector(x, y: Integer; StAngle,

EndAngle, XRadius, YRadius: Word);

Setlinestyle

стиль лінії

SetlineStyle(LineStyle: Word; Pattern: Word; Thickness: Word);

Вікна перегляду

Setviewport

встановити вікно перегляду

SetViewPort(x1, у1, х2, у2: Integer; Clip: Boolean);

Clearviewport

очистити вікно

clearviewport;

Cleardevice

очистити екран

cleardevice;

Кольорове забарвлення

Getbkcolor

видати колір фона

function getbkcolor;

Getcolor

видати колір ліній

function getcolor;

Getmaxcolor

видати максим.колір

function getmaxcolor;

Floodfill

заповнити фігуру кольором

FloodFill(X, Y: Integer; Color: TColorRef);

Setbkcolor

встановити колір фону

SetBkColor(; Color: TColorRef);

Setcolor

встановити колір ліній

SetColor(; Color: TColorRef);

Setfillstyle

встановити стиль заповнювача

SetFillStyle( Pattern: Word; Color: Word);

Графічне зображення

Getimage

розмістити в ОП зображення

Getlmage(x1, у1, х2, yZ Integer; var BitMap);

Putimage

видати зображення на екран

Putlmage(X, Y: Integer; var BitMap; BitBIt: Word);

Imagesize

визначити розмір зо­браження в оператив­ній пам'яті

function lmageSize(x1, у1, х2, у2: Integer): Word;

Обробка тексту

Settextstyle

встановити стиль тексту

SetTextStyle(Font, Direction: Word; CharSize: Word);

settext justify

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

SetTextJustify(Horiz, Vert: Word);

Textheight

висота тексту

function TextHeight(TextString: string): Word;

Textwidth

ширина текту

function TextWidth(TextString: string): Word;

Outtext

видати текст на екран

OutText(TextString: string);

Outtextxy

видати текст на екран в координатах

OutTextXY(X,Y: Integer; TextString: string);

Визначення положення курсора, координат вікна, переміщення курсора

getx ,gety

видати координати курсора

function GetX: Integer; function GetY; Integer;

getmaxy getmaxx

видати максимальні координати курсора

function GetMaxX: Integer; function GetMaxY: Integer;

Moveto

перемістити курсор

MoveTo(X, Y: Integer);

2