Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- unit Unit2;
- interface
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, StdCtrls, Grids, ComCtrls, Buttons;
- type
- zap = record
- Number: Word;
- Fam: string[25];
- Adr: string[50];
- Date: Integer;
- end;
- zapmas = array of zap;
- T_13 = class(TObject)
- A, B : zapmas;
- Search : String;
- Memo1 : TMemo;
- Edit3 : TEdit;
- n, SearchKey : Integer;
- procedure Sort(p, q: Integer; A: zapmas);
- procedure Sliv(p, q: Integer; A: zapmas);
- procedure qSort(var iLo, iHi: Integer; A: zapmas);
- procedure LineSearch(var A: zapmas);
- function BinaryFind(X: Integer; const A: zapmas): Integer;
- end;
- implementation
- var
- _13: T_13;
- A, B : zapmas;
- procedure T_13.qSort(var iLo, iHi: Integer; A: zapmas);
- var
- Lo, Hi, Pivot, TempNumber, TempDate: Integer; TempFam, TempAdr: String;
- begin
- Lo := iLo;
- Hi := iHi;
- Pivot := A[(Lo + Hi) div 2].Date;
- repeat
- while A[Lo].Date < Pivot do Inc(Lo);
- while A[Hi].Date > Pivot do Dec(Hi);
- if Lo <= Hi then
- begin
- TempNumber := A[Lo].Number;
- TempFam := A[Lo].Fam;
- TempAdr := A[Lo].Adr;
- TempDate := A[Lo].Date;
- A[Lo].Number := A[Hi].Number;
- A[Lo].Fam := A[Hi].Fam;
- A[Lo].Adr := A[Hi].Adr;
- A[Lo].Date := A[Hi].Date;
- A[Hi].Number := TempNumber;
- A[Hi].Fam := TempFam;
- A[Hi].Adr := TempAdr;
- A[Hi].Date := TempDate;
- Inc(Lo);
- Dec(Hi);
- end;
- until Lo > Hi;
- if Hi > iLo then _13.qSort(iLo, Hi, A);
- if Lo < iHi then _13.qSort(Lo, iHi, A);
- end;
- procedure T_13.LineSearch(var A: zapmas);
- var
- i: Integer;
- begin
- for i := 0 to (n-1) do begin
- if Search = (IntToStr(A[i].Date)) then begin
- SearchKey := 1;
- end else if (Search = (A[i].Fam)) then begin
- SearchKey := 2;
- end else if (Search = (A[i].Adr)) then begin
- SearchKey := 3;
- end else if (Search = (IntToStr(A[i].Number))) then begin
- SearchKey := 4;
- end;
- end;
- if SearchKey = 1 then begin
- ShowMessage('"'+Edit3.Text+'" íàéäåí â äàòå');
- end else if SearchKey = 2 then begin
- ShowMessage('"'+Edit3.Text+'" íàéäåí â ôàìèëèè');
- end else if SearchKey = 3 then begin
- ShowMessage('"'+Edit3.Text+'" íàéäåí â àäðåñå');
- end else if SearchKey = 4 then begin
- ShowMessage('"'+Edit3.Text+'" íàéäåí â íîìåðå');
- end else begin
- ShowMessage('"'+Edit3.Text+'" íå íàéäåí');
- end;
- end;
- function T_13.BinaryFind(X: Integer; const A: zapmas): Integer;
- var
- i, j, m: Integer;
- found: Boolean;
- begin;
- found := False;
- i := -1;
- j := High(a);
- while True do begin;
- if i >= j then begin
- ShowMessage('Íå íàéäåíî');
- Break;
- end;
- m := (i + j + 1) shr 1;
- if a[m].Date < x then i := m
- else begin;
- j := m - 1;
- if a[m].Date = x then begin
- found := True;
- ShowMessage('Íàéäåíî');
- Break;
- end;
- end;
- end;
- Result := i + 1;
- if not found then dec(Result, MaxInt);
- end;
- Procedure T_13.Sliv(p, q: Integer; A: zapmas); {ïðîöåäóðà ñëèâàþùàÿ ìàññèâû}
- Var r, i, j, k : Integer;
- Begin
- r := (p+q) div 2;
- i := p;
- j := r+1;
- for k := p to q do
- if (i <= r) and ((j > q) or (a[i].Date<a[j].Date)) then
- begin
- b[k].Date:=a[i].Date;
- i:=i+1;
- end
- else
- begin
- b[k].Date:=a[j].Date;
- j:=j+1;
- end ;
- for k:=p to q do
- a[k].Date:=b[k].Date;
- end;
- Procedure T_13.Sort(p, q: Integer; A: zapmas);
- begin
- if p < q then
- begin
- Sort(p, ((p+q) div 2), A);
- Sort(((p+q) div 2 + 1), q, A);
- Sliv(p, q, A);
- end;
- end;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement