Порядок выполнения работы

1. Изучите теоретический материал.

2. Запустите систему Delphi и выберите в меню команду File | New | Other... . В диалоговом окне, которое откроется на экране, выберите значок с подписью DLL Wizard и нажмите кнопку OK:


Рисунок. Окно выбора нового проекта, в котором выделен пункт DLL Wizard

 

Среда Delphi создаст новый проект со следующей заготовкой библиотеки:

library Project1;

 

{ Important note about DLL memory management ... }

 

uses

SysUtils,

Classes;

 

begin

end.

3. С помощью команды File | New | Unit создайте в проекте новый программный модуль. Его заготовка будет выглядеть следующим образом:

unit Unit1;

 

interface

 

implementation

 

end.

4. Сохраните модуль под именем SortUtils.pas, а проект — под именем SortLib.dpr. Прейдите к главному файлу проекта и удалите из секции uses модули SysUtils и Classes (они сейчас не нужны). Главный программный модуль должен стать следующим:

library SortLib;

 

{ Important note about DLL memory management ... }

 

uses

SortUtils in 'SortUtils.pas';

 

begin

end.

5. Наберите исходный текст модуля SortUtils:

unit SortUtils;

 

interface

 

procedure BubleSort(var Arr: array of Integer); stdcall;

procedure QuickSort(var Arr: array of Integer); stdcall;

 

exports

BubleSort name 'BubleSortIntegers',

QuickSort name 'QuickSortIntegers';

 

implementation

 

procedure BubleSort(var Arr: array of Integer);

var

I, J, T: Integer;

begin

for I := Low(Arr) to High(Arr) - 1 do

for J := I + 1 to High(Arr) do

if Arr[I] > Arr[J] then

begin

T := Arr[I];

Arr[I] := Arr[J];

Arr[J] := T;

end;

end;

 

procedure QuickSortRange(var Arr: array of Integer; Low, High: Integer);

var

L, H, M: Integer;

T: Integer;

begin

L := Low;

H := High;

M := (L + H) div 2;

repeat

while Arr[L] < Arr[M] do

L := L + 1;

while Arr[H] > Arr[M] do

H := H - 1;

if L <= H then

begin

T := Arr[L];

Arr[L] := Arr[H];

Arr[H] := T;

if M = L then

M := H

else if M = H then

M := L;

L := L + 1;

H := H - 1;

end;

until L > H;

if H > Low then QuickSortRange(Arr, Low, H);

if L < High then QuickSortRange(Arr, L, High);

end;

 

procedure QuickSort(var Arr: array of Integer);

begin

if Length(Arr) > 1 then

QuickSortRange(Arr, Low(Arr), High(Arr));

end;

 

end.

В этом модуле процедуры BubleSort и QuickSort сортируют массив чисел двумя способами: методом «пузырька» и методом «быстрой» сортировки соответственно

Директива stdcall, использованная при объявлении процедур BubleSort и QuickSort,

procedure BubleSort(var Arr: array of Integer); stdcall;

procedure QuickSort(var Arr: array of Integer); stdcall;

позволяет вызывать процедуры не только из программ на языке Delphi, но и из программ на языках C/C++ (далее мы покажем, как это сделать).

Благодаря присутствию в модуле секции exports,

exports

BubleSort name 'BubleSortIntegers',

QuickSort name 'QuickSortIntegers';

подключение модуля в главном файле библиотеки автоматически приводит к экспорту процедур.

6. Сохраните все файлы проекта и выполните компиляцию. В результате вы получите на диске в своем рабочем каталоге двоичный файл библиотеки SortLib.dll. Соответствующее расширение назначается файлу автоматически, но если вы желаете, чтобы компилятор назначал другое расширение, воспользуйтесь командой меню Project | Options… и в появившемся окне Project Options на вкладке Application впишите расширение файла в поле Target file extension (рисунок).


Рисунок. Окно настройки параметров проекта

С помощью полей LIB Prefix, LIB Suffix и LIB Version этого окна вы можете задать правило формирования имени файла, который получается при сборке библиотеки. Имя файла составляется по формуле:

<LIB Prefix> + <имя проекта> + <LIB Suffix> + ’.’ + <Target file extention> + [ ’.’ + <LIB Version> ]

7. Создайте новую консольную программу. Для этого выберите в меню команду File | New | Other... и в открывшемся диалоговом окне выделите значок Console Application. Затем нажмите кнопку OK.

8. Добавьте в программу external-объявления процедур BubleSort и QuickSort, а также наберите приведенный ниже текст программы. Сохраните проект под именем TestStaticImport.dpr.

program TestStaticImport;

 

{$APPTYPE CONSOLE}

 

procedure BubleSort(var Arr: array of Integer); stdcall;

external 'SortLib.dll' name 'BubleSortIntegers';

procedure QuickSort(var Arr: array of Integer); stdcall;

external 'SortLib.dll' name 'QuickSortIntegers';

 

var

Arr: array [0..9] of Integer;

I: Integer;

 

begin

// Метод «пузырька»

Randomize;

for I := Low(Arr) to High(Arr) do

Arr[I] := Random(100); // Заполнение массива случайными числами

BubleSort(Arr);

for I := Low(Arr) to High(Arr) do

Write(Arr[I], ' ');

Writeln;

// Метод быстрой сортировки

for I := Low(Arr) to High(Arr) do

Arr[I] := Random(100); // Заполнение массива случайными числами

QuickSort(Arr);

for I := Low(Arr) to High(Arr) do

Write(Arr[I], ' ');

Writeln;

Writeln('Press Enter to exit...');

Readln;

end.

9. Выполните компиляцию и запустите программу. Если числа печатаются на экране по возрастанию, то сортировка работает правильно.

 

Варианты заданий:

Форма отчёта:Отчет выполняется в тетрадях по практическим работам в письменном виде. Программа отлаживается в IDE Delphi и в виде файлов копируется на сетевой диск.

 

Содержание отчета:

13. Тема работы.

14. Цель работы.

По каждому из заданий:

15. Условие задачи.

16. Постановка задачи.

17. Текст программного кода на языке OBJECT PASCAL.

18. Результаты расчетов (входные и выходные данные).

 

Система оценки:двухбалльная.

 

 

Контрольные вопросы

 

25. Что такое модуль?26. Каковы основные составные части модуля?27. Что собой представляет заголовок модуля?28. Как оформляется интерфейсная часть?29. Как оформляется реализационная часть?30. Как оформляется инициализационная часть?

 

Список использованной литературы

 

8. Голицина О.Л., Попов И.И. Основы алгоритмизации и программирования: Учебное пособие. - М.: Форум: Инфра-М, 2002.

9. Фленов М.Е. Библия Delphi. - 3-е изд. Перераб. И доп. - СПб.: БХВ-Петербург, 2011.