Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МУ к ПЗ по программированию.doc
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
4 Мб
Скачать
☆

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

  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.

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

unit Unit1;

interface

implementation

end.

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

library SortLib;

{ Important note about DLL memory management ... }

uses

SortUtils in 'SortUtils.pas';

begin

end.

  1. Наберите исходный текст модуля 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';

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

  1. Сохраните все файлы проекта и выполните компиляцию. В результате вы получите на диске в своем рабочем каталоге двоичный файл библиотеки 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> ]

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

  2. Добавьте в программу 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.

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

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

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

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

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

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

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

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

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

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

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

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