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

3. Разработка модулей.

Разработка модуля включает создание текста модуля, компиляцию модуля и его отладку на примерах использования в тестовых программах.

А) Создание текста модуля. Текст модуля подобен тексту программы, поэтому к его разработке применима в целом та же методика, что и для разработки программ с подпрограммами.

Б) Компиляция и отладка модуля. Для использования разработанного модуля (в том числе и для его отладки на программах-примерах) необходимо получить откомпилированный код модуля. Эта операция легко выполняется с помощью интегрированной среды Турбо Паскаля. Результатом компиляции модуля является одноименный с модулем файл с расширением tpu (сокращение от TURBO PASCAL Unit). Этот файл следует поместить в папку, доступную при компиляции.

Отладка модуля обычно предполагает выполнение тестовой программы, в которой имеются, по меньшей мере, обращения ко всем компонентам, описанным в спроектированном модуле. Более качественное тестирование должно следовать соответствующим критериям тестирования.

4. Примеры модулей.

Приведем примеры разработанных модулей на Турбо Паскале.

Примером простого модуля является модуль points, содержащий некоторые подпрограммы работы с точками на плоскости, константу null - начало координат, а также тип point, представляющий координаты точки. Инициализирующая часть модуля содержит оператор randomize. Тестом этого модуля является программа test_points.

UNIT points;{Точки на плоскости}

Interface

type point = array[1..2] of real;{координаты точки}

const null:point =(0,0);{начало координат}

procedure rpoint(var x:point); {случайная точка}

procedure r(x:point;var d:real);{расстояние точки х от null}

function dist(x,y:point):real;{расстояние между точками x и y}

function line(x,y,z:point):Boolean;{точки x,y,z на одной прямой}

Implementation

procedure rpoint;

begin x[1]:=random(100)/10;x[2]:=random(90)/10 end{rpoint};

procedure r;

begin d:=sqrt(sqr(x[1])+sqr(x[2])) end {r};

function dist;

begin dist:=sqrt(sqr(x[1]-y[1]) + sqr(x[2]-y[2])) end {dist};

function line;

begin line:=false;if (dist(x,y)=dist(x,z)+dist(y,z)) then line:=true;

if (dist(x,z)=dist(x,y)+dist(y,z)) then line:=true;

if (dist(z,y)=dist(x,z)+dist(x,z)) then line:=true;

end {line};

begin randomize;

END {points}.

program test_points; {Тест модуля points}

uses points;

var a,b,c:point;s:string[1];ra,rb,rc:real;

begin repeat writeln('Генерация точек a,b,c:');

rpoint(a);rpoint(b);rpoint(c);

writeln('a[1] a[2] b[1] b[2] c[1] c[2] ');

writeln(a[1]:2:2,' ',a[2]:2:2,' ',b[1]:2:2,' ',b[2]:2:2,' ',c[1]:2:2,' ',c[2]:2:2);

writeln('Расстояния от начала координат:');r(a,ra);r(b,rb);r(c,rc);

writeln('ra=',ra:2:2,' rb=',rb:2:2, ' rc=',rc:2:2);

writeln('Расстояния между точками:');

writeln('dist(a,b)=',dist(a,b):2:2);

writeln('dist(b,c)=',dist(b,c):2:2);

writeln('dist(a,c)=',dist(a,c):2:2);

if line(a,b,c) then

writeln('line(a,b,c)=true {Точки а,в,с -лежат на одной прямой}')

else

writeln('line(a,b,c)=false {Точки а,в,с -не лежат на одной прямой}');

a:=b; writeln('a:=b; dist(a,b)=',dist(a,b):2:2);

if line(a,b,c) then writeln(' line(a,b,c)=true');readln(s);

until s=' ';

end {test_points}.

Представленный ниже модуль convert содержит два компонента: тип - массив из 5 строк и процедуру преобразования целого числа в название числа. Для тестирования этого модуля использована программа demo_conv_int, позволяющая в цикле вводить исходные числа и выводить их названия на экран.

UNIT convert; {Преобразование целого числа в строку - название числа}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]