DevioLab CRYPTO TRADING AUTOMATION
LIVE
AUTOMATED CRYPTO TRADING • BINANCE
Автоматизуйте свій криптопортфель
Торгові боти DevioLab аналізують крипторинок, автоматично відкривають і закривають позиції та керують вашим портфелем на Binance 24/7.
CRYPTO 80 Bots
BINANCE Spot Trading
TRADING 24 / 7
Спробувати DevioLab
deviolab.com

Розробка DLL-бібліотек

Інформація про навчальний заклад

ВУЗ:
Інші
Інститут:
Не вказано
Факультет:
КН
Кафедра:
Не вказано

Інформація про роботу

Рік:
2013
Тип роботи:
Лабораторна робота
Предмет:
Програмування

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти і науки України Хмельницький національний університет Кафедра системного програмування Лабораторна робота №7 з програмування на тему: «Розробка DLL-бібліотек» Лабораторна робота №7 Тема: Розробка DLL-бібліотек. Мета: навчитись створювати DLL-бібліотеки та використовувати їх в додатках, засвоїти навички експорту функцій. Завдання Розробити DLL-бібліотеку для виконання операцій над динамічним однозв’язним списком. DLL-бібліотека Project1.lpr library project1; {$mode objfpc}{$H+} uses Classes, sysutils { you can add units after this }; type vkaz=^spysok; spysok=record num:real; next:vkaz; end; {$IFDEF WINDOWS}{$R project1.rc}{$ENDIF} procedure add(var a,head:vkaz; D:real); export; begin if a<>nil then while a^.next<>nil do a:=a^.next; if a=nil then begin new(a); head:=a; end else begin new(a^.next); a:=a^.next; end; a^.num:=D; a^.next:=nil; end; exports add name 'add'; procedure Free(var a:vkaz; var head:vkaz); export; var temp:vkaz; begin a:=head; while a<>nil do begin temp:=a; a:=a^.next; dispose(temp); end; a:=nil; head:=nil; end; exports Free name 'Free'; procedure searchPos(var a:vkaz; head:vkaz; D:real; var N:integer); export; begin n:=1; a:=head; while (a<>nil) and (a^.num<>D) do begin a:=a^.next; inc(n); end; if a=nil then n:=0; end; exports searchPos name 'searchPos'; function search(var a:vkaz; head:vkaz; D:real):vkaz; begin a:=head; if a<>nil then while (a<>nil) and (D<>a^.num) do a:=a^.next; Search:=a; end; Procedure DelElem(var a,head:vkaz;tmp:vkaz); var tempa:vkaz; begin a:=head; if (a<>nil) and (tmp<>nil) then begin if tmp=a then begin a:=tmp^.next; dispose(tmp); head:=a; end else begin tempa:=a; while tempa^.next<>tmp do tempa:=tempa^.next; tempa^.next:=tmp^.next; dispose(tmp); end; end; end; procedure DelElemZnach(var a,head:vkaz; D:real); export; var temp:vkaz; begin if a<>nil then begin temp:=Search(a,head,D); if temp<>nil then DelElem(a,head,temp); end; end; exports DelElemZnach name 'delnum'; Procedure DelElemPos(var a,head:vkaz;pos:integer); export; var i:integer; tmp:vkaz; begin if (pos>0) and (a<>nil) then begin i:=1; tmp:=head; while (tmp<>nil) and (i<>pos) do begin tmp:=tmp^.next; inc(i) end; if tmp<>nil then DelElem(a,head,tmp); end; end; exports DelElemPos name 'delpos'; begin end. Програма з використанням бібліотеки Project1.lpr program lab7; {$mode objfpc}{$H+} uses {$IFDEF UNIX}{$IFDEF UseCThreads} cthreads, {$ENDIF}{$ENDIF} Interfaces, // this includes the LCL widgetset Forms, Unit1, LResources { you can add units after this }; {$IFDEF WINDOWS}{$R lab7.rc}{$ENDIF} begin Application.Title:='Однозвязні списки'; {$I lab7.lrs} Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; end. Unit1.pas unit Unit1; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls; type vkaz=^spysok; spysok=record num:real; next:vkaz; end; { TForm1 } TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; CB1: TCheckBox; Edit1: TEdit; Label1: TLabel; Label2: TLabel; Memo1: TMemo; R1: TRadioButton; R2: TRadioButton; R3: TRadioButton; R4: TRadioButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure CB1Change(Sender: TObject); procedure Edit1Change(Sender: TObject); procedure Edit1KeyPress(Sender: TObject; var Key: char); procedure FormCloseQuery(Sender: TObject; var CanClose: boolean); procedure FormCreate(Sender: TObject); private { private declarations } public { public declarations } end; var Form1: TForm1; list,head:vkaz; implementation procedure add(var a,head:vkaz; D:real); external 'project1.dll' name 'add'; procedure Freem(var a:vkaz; var head:vkaz); external 'project1.dll' name 'Free'; procedure output(head:vkaz; var n:string); external 'project1.dll' name 'output'; procedure delnum(var a,head:vkaz; D:real); external 'project1.dll' name 'delnum'; procedure delhead(var a,head:vkaz; t:integer); external 'project1.dll' name 'delhead'; procedure searchPos(var a:vkaz; head:vkaz; D:real; var N:integer); external 'project1.dll' name 'searchPos'; { TForm1 } procedure output(head:vkaz); begin Form1.Memo1.Clear; while head<>nil do begin Form1.Memo1.Caption:=Form1.Memo1.Caption+(FloatToStr(head^.num)+' '); head:=head^.next; end; end; procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: boolean); begin CanClose:=MessageDlg('Однозвязний список', 'Дійсно закрити?', mtConfirmation, [mbYes,mbNo], 0)=mrYes; Freem(list,head); end; procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: char); begin case Key of #8,'0'..'9': ; '-': if Edit1.Text<>'' then Key:=#0; ',': begin if Length(Edit1.Text)-pos('-',Edit1.Text)=0 then Key:=#0; if pos(',',Edit1.Text)<>0 then Key:=#0; end else Key:=#0; end; end; procedure TForm1.Button3Click(Sender: TObject); var i,n:integer; ch:real; begin ch:=StrToFloat(Edit1.Text); if R1.Checked then begin add(list,head,ch); Button2.Enabled:=True; ShowMessage('елемент '+FloatToStr(ch)+' додано.'); if CB1.Checked then Button1Click(Sender); end else if R2.Checked then begin delnum(list,head,ch); ShowMessage('елемент '+FloatToStr(ch)+' видалено.'); if CB1.Checked then Button1Click(Sender); end else if R3.Checked then begin i:=StrToInt(Edit1.Text); delhead(list,head,i); if n>0 then ShowMessage('елемент номер '+FloatToStr(i)+' видалено.'); if CB1.Checked then Button1Click(Sender); end else begin searchPos(list,head,ch,n); if n=0 then ShowMessage('Елемент відсутній у списку') else ShowMessage('Елемент у списку номер '+IntToStr(n)); end; Edit1.Clear; end; procedure TForm1.CB1Change(Sender: TObject); begin if CB1.Checked then Button1Click(Sender) else Memo1.Clear; end; procedure TForm1.Button1Click(Sender: TObject); begin output(head); end; procedure TForm1.Button2Click(Sender: TObject); begin Freem(list,head); Button2.Enabled:=False; Memo1.Clear; end; procedure TForm1.Edit1Change(Sender: TObject); begin Button3.Enabled:=not(Edit1.Text=''); end; procedure TForm1.FormCreate(Sender: TObject); begin list:=nil; head:=nil; Button2.Enabled:=False; Button3.Enabled:=False; R1.Checked:=True; end; initialization {$I unit1.lrs} end. Висновок. Виконавши лабораторну роботу, я засвоїв принципи створення DLL-бібліотек, зрозумів методи імпорту та експорту процедур і функцій з бібліотек, та на прикладі перевірив їх виконання. Також було закріплено навички щодо опрацювання однозв’язних динамічних списків, а саме додавання, пошук, видалення знайденого елемента, звільнення пам’яті (очищення списку). / / /
Антиботан аватар за замовчуванням

28.03.2013 22:17

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!