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

Алгоритмы

Программа:

Рисунок 4.3

Рисунок 4.4

Модуль:

Рисунок 4.5

Рисунок 4.6

Рисунок 4.7

Рисунок 4.8

Лабораторная работа №8

Использование динамически подключаемой библиотеки (DLL)

Задание: Создать программу, согласно варианту задания предыдущей лабораторной. Необходимые подпрограммы разместить в библиотеке DLL.

Интерфейс программы

Интерфейс программы идентичен предыдущей работе.

Код программы

Исходный код библиотеки DLL:

library Project1;

uses SysUtils,Classes,UnitType in 'UnitType.pas';

function MidArray ( Masr : TExt) : extended; // среднее арифметическое положительных элементов массива

var mid,sym: extended;

col,n: integer;

begin

n:=0;

sym:=0;

for col:=0 to length(masr)-1 do

if masr[col]>0 then

begin

sym:= sym + masr[col];

n:=n+1;

end;

if sym=0 then mid:=0 else

mid:= sym/n;

midarray:= mid;

end;

Function DiagSum (A:TMas):extended;//вход: 2мерный массив extended'ов выход: extended

var

Sum: extended;

i,j: integer;

begin

Result:=0;

if Length (A[0])>Length (A) then

for j := 0 to Length (A)-1 do

result:=result+A[j,j]

else

for i := 0 to Length(A[0])-1 do

result:=result+A[i,i];

DiagSum:=result;

End;

procedure GenMas(Ncol,Nrow:word; var Zap:TMas);

var col,row:integer;

begin

SetLength(Zap,Nrow,Ncol);

for col:=0 to Ncol-1 do

for row := 0 to Nrow - 1 do

Zap[row,col]:=(random(100)-random(50));

end;

procedure GenMasO(Nocol:integer; var Zapo:TExt);

var col:integer;

begin

randomize;

SetLength(Zapo,Nocol);

for col:=0 to Nocol-1 do

Zapo[col]:=(random(100)-random(50));

end;

{$R *.res}

exports

MidArray name 'Mid',

DiagSum name 'D1',

GenMasO name 'Gen1',

GenMas name 'Gen2';

begin

end.

Исходный код программы:

procedure TForm2.Button1Click(Sender: TObject);

begin

H:=LoadLibrary('Project1.dll');

if H=0 then

showmessage('ошибка dll');

@Mid:=GetProcAddress(H,'Mid');

if @Mid<>nil then

begin

ShowMessage('Ср. арифметическое положит элементов:'+FloatToStr(Mid(Mas2)));

end

else

showmessage('ошибка адреса');

exit;

end;

procedure TForm2.Button2Click(Sender: TObject);

begin

H:=LoadLibrary('Project1.dll');

if H=0 then

showmessage('ошибка dll');

@D1:=GetProcAddress(H,'D1');

if @D1<>nil then

begin

ShowMessage('Сумма элементов главной диагонали: '+FloatToStr(D1(Mas1)));

end

else

showmessage('ошибка адреса');

exit;

end;

procedure TForm2.Button3Click(Sender: TObject);

var col:integer;

begin

H:=LoadLibrary('Project1.dll');

if H=0 then

showmessage('ошибка dll');

@Gen1:=GetProcAddress(H,'Gen1');

if @Gen1<>nil then

begin

SG2.ColCount:=SE3.Value;

Gen1(SE3.Value,Mas2);

for col := 0 to SE3.Value - 1 do

SG2.Cells[col,0]:=FloatToSTR(Mas2[col]);

Button1.Enabled:= true;

end

else

showmessage('ошибка адреса');

exit;

end;

procedure TForm2.Button4Click(Sender: TObject);

var col,row:integer;

begin

H:=LoadLibrary('Project1.dll');

if H=0 then

showmessage('ошибка dll');

@Gen2:=GetProcAddress(H,'Gen2');

if @Gen2<>nil then

begin

SG1.ColCount:=SE1.Value;

SG1.RowCount:=SE2.Value;

Gen2(SE1.Value,SE2.Value,Mas1);

for col := 0 to SE1.Value - 1 do

for row := 0 to SE2.Value - 1 do

SG1.Cells[col,row]:=FloatToSTR(Mas1[row,col]);

Button2.Enabled:= true;

end

else

showmessage('ошибка адреса');

Exit;

end;

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);

begin

FreeLibrary(H);

end;

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