Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
26
Добавлен:
21.05.2015
Размер:
101.38 Кб
Скачать

Пример модуля для вычисления расстояний между точками на плоскости и площади треугольника, заданного тремя точками.

Приведем пример модуля Lib, содержащего описание типа и две функции для вычисления расстояния между двумя точками на плоскости и площади треугольника, и программы, использующей этот модуль.

Листинг модуля Lib.pas

Unitlib;

Interface

Type

Tdot=Record

x,y:Real;//координаты точки x и y

end;

Function Distance(d1,d2:Tdot):real; // расстояние между точками d1 и d2

FunctionSquareT(d1,d2,d3:Tdot):real; // площадь треугольника, заданного 3-мя точками

Implementation

Function Distance(d1,d2:Tdot):real;

begin

Result := Sqrt(Sqr(d1.x-d2.x)+Sqr(d1.y-d2.y));

end;

FunctionSquareT(d1,d2,d3:Tdot):real;

var a, b, c, p : Real;

begin

a:=Distance(d1,d2);// находим расстояние между точками d1 и d2

b:=Distance(d2,d3); // находим расстояние между точками d2 и d3

c:=Distance(d3,d1); // находим расстояние между точками d3 и d1

p := (a + b + c)/2)

Result := Sqrt(p * ( p – a ) * ( p – b ) * ( p – c ) );

end;

end.

Листинг программы TesLib, использующей модуль Lib.pas

{Программе доступны: тип Tdot и функции Distance, SquareT. Программа считывает с клавиатуры координаты трех вершин треугольника, вычисляет и выводит на экран площадь треугольника и его периметр.}

program TestLib;

{$APPTYPE CONSOLE}

uses

SysUtils,

Lib; // подключение модулей SysUtils и Lib

var a, b, c : Tdot;

s : real;

begin

write(Введите координаты X иY1-й вершины треугольника -);

readln(a.x, a.y);

write(Введите координаты X иY2-й вершины треугольника -);

readln(b.x, b.y);

write(Введите координаты X иY3-й вершины треугольника -);

readln(c.x, c.y);

s := SquareT(a, b, c);

writeln(‘Площадь треугольника = ’,s:6:2);

p:= Distance(a, b)+ Distance(b, c)+ Distance(c, a);

writeln(‘Периметр треугольника = ’,p:6:2);

readln;

end.

Пример модуля, реализующего стек с целыми числами.

Приведем пример модуля Steck, который содержит минимальный набор процедур и функций для работы со стеком и сами данные. Стек можно организовать на основе массива из целых чиселM. Для контроля над заполнением массива новыми значениями введем целочисленную переменнуюtop, которая всегда будет хранить номер свободной ячейки массива. Причем данные опишем в исполнительной части массива, исключив прямое обращения к ним из программы, использующей модуль. Обращаться к ним будем только с помощью процедур и функций. Таким скрытием данных можно дополнительно гарантировать корректность работы пользователя со стеком (при прямом неправильном изменении переменнойtopможно потерять некоторые данные из стека, например операторtop:=0 очистит весь стек). Пользователям, подключающим модуль необходимо предоставить методы для работы со стеком: поместить число в стек, извлечь число из стека, проверить стек на пустоту и т.д. Эти процедуры и функции необходимо поместить в интерфейсную часть модуля. Так как, структура хранения данных стека не доступна из программы, то физическая реализация стека может быть совершено различной: динамический массив, связный список. Но программы, которые будут использовать этот модуль не должны изменяться при изменении реализации стека. Они будут пользоваться одним и тем же набором процедур и функций, описанных в интерфейсной части. То есть при изменении способа реализации стека интерфейсная часть модуля остается неизменной, а меняется текст и данные в исполнительной части.

Структура стека на базе массива изображена на рис.1. Новый элемент будет добавляться на место с номером top, после этогоtopнеобходимо увеличить на единицу. При извлечении элемента из стекаtopуменьшается на единицу и из этой позиции извлекается очередное число. Теперь эта позиция считается пустой. Стек пустой – если значениеtopравно 0. Для инициализации стека (его очистки) достаточно переменнойtop присвоить 0. В программе извлечение числа из пустого стека приведет к ошибке, поэтому перед такой операцией пользователь должен убедиться, что в стеке есть элементы. Стек организуем на базе динамического массива. Его размер можно увеличивать по мере заполнения стека новыми значениями. Массив окажется полностью заполненным, если число элементов совпадет сtop. Это необходимо проверять перед добавлением нового элемента.

Рис.1 Структура стека на базе массива

Листинг модуля Steck.

UnitSteck; {файлSteck.pas}