Advertisement
Guest User

Untitled

a guest
Dec 9th, 2011
168
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 3.68 KB | None | 0 0
  1. unit Unit2;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7.   Dialogs, StdCtrls, Grids, ComCtrls, Buttons;
  8.  
  9. type
  10.   zap = record
  11.     Number: Word;
  12.     Fam: string[25];
  13.     Adr: string[50];
  14.     Date: Integer;
  15.   end;
  16.   zapmas = array of zap;
  17.   T_13 = class(TObject)
  18.     A, B : zapmas;
  19.     Search : String;
  20.     Memo1 : TMemo;
  21.     Edit3 : TEdit;
  22.     n, SearchKey : Integer;
  23.     procedure Sort(p, q: Integer; A: zapmas);
  24.     procedure Sliv(p, q: Integer; A: zapmas);
  25.     procedure qSort(var iLo, iHi: Integer; A: zapmas);
  26.     procedure LineSearch(var A: zapmas);
  27.     function BinaryFind(X: Integer; const A: zapmas): Integer;
  28.   end;
  29.  
  30. implementation
  31.  
  32. var
  33.   _13: T_13;
  34.   A, B : zapmas;
  35.  
  36. procedure T_13.qSort(var iLo, iHi: Integer; A: zapmas);
  37. var
  38.   Lo, Hi, Pivot, TempNumber, TempDate: Integer; TempFam, TempAdr: String;
  39. begin
  40.   Lo := iLo;
  41.   Hi := iHi;
  42.   Pivot := A[(Lo + Hi) div 2].Date;
  43.   repeat
  44.     while A[Lo].Date < Pivot do Inc(Lo);
  45.     while A[Hi].Date > Pivot do Dec(Hi);
  46.     if Lo <= Hi then
  47.     begin
  48.       TempNumber := A[Lo].Number;
  49.       TempFam := A[Lo].Fam;
  50.       TempAdr := A[Lo].Adr;
  51.       TempDate := A[Lo].Date;
  52.  
  53.       A[Lo].Number := A[Hi].Number;
  54.       A[Lo].Fam := A[Hi].Fam;
  55.       A[Lo].Adr := A[Hi].Adr;
  56.       A[Lo].Date := A[Hi].Date;
  57.  
  58.       A[Hi].Number := TempNumber;
  59.       A[Hi].Fam := TempFam;
  60.       A[Hi].Adr := TempAdr;
  61.       A[Hi].Date := TempDate;
  62.  
  63.       Inc(Lo);
  64.       Dec(Hi);
  65.     end;
  66.   until Lo > Hi;
  67.   if Hi > iLo then _13.qSort(iLo, Hi, A);
  68.   if Lo < iHi then _13.qSort(Lo, iHi, A);
  69. end;
  70.  
  71. procedure T_13.LineSearch(var A: zapmas);
  72. var
  73.   i: Integer;
  74. begin
  75.   for i := 0 to (n-1) do begin
  76.     if Search = (IntToStr(A[i].Date)) then begin
  77.       SearchKey := 1;
  78.     end else if (Search = (A[i].Fam)) then begin
  79.       SearchKey := 2;
  80.     end else if (Search = (A[i].Adr)) then begin
  81.       SearchKey := 3;
  82.     end else if (Search = (IntToStr(A[i].Number))) then begin
  83.       SearchKey := 4;
  84.     end;
  85.   end;
  86.   if SearchKey = 1 then begin
  87.     ShowMessage('"'+Edit3.Text+'" íàéäåí â äàòå');
  88.   end else if SearchKey = 2 then begin
  89.     ShowMessage('"'+Edit3.Text+'" íàéäåí â ôàìèëèè');
  90.   end else if SearchKey = 3 then begin
  91.     ShowMessage('"'+Edit3.Text+'" íàéäåí â àäðåñå');
  92.   end else if SearchKey = 4 then begin
  93.     ShowMessage('"'+Edit3.Text+'" íàéäåí â íîìåðå');
  94.   end else begin
  95.     ShowMessage('"'+Edit3.Text+'" íå íàéäåí');
  96.   end;
  97. end;
  98.  
  99. function T_13.BinaryFind(X: Integer; const A: zapmas): Integer;
  100. var
  101.   i, j, m: Integer;
  102.   found: Boolean;
  103. begin;
  104.   found := False;
  105.   i := -1;
  106.   j := High(a);
  107.   while True do begin;
  108.     if i >= j then begin
  109.       ShowMessage('Íå íàéäåíî');
  110.       Break;
  111.     end;
  112.     m := (i + j + 1) shr 1;
  113.     if a[m].Date < x then i := m
  114.     else begin;
  115.       j := m - 1;
  116.       if a[m].Date = x then begin
  117.         found := True;
  118.         ShowMessage('Íàéäåíî');
  119.         Break;
  120.       end;
  121.     end;
  122.   end;
  123.   Result := i + 1;
  124.   if not found then dec(Result, MaxInt);
  125. end;
  126.  
  127. Procedure T_13.Sliv(p, q: Integer; A: zapmas); {ïðîöåäóðà ñëèâàþùàÿ ìàññèâû}
  128. Var r, i, j, k : Integer;
  129. Begin
  130.  r := (p+q) div 2;
  131.  i := p;
  132.  j := r+1;
  133.  for k := p to q do
  134.  if (i <= r) and ((j > q) or (a[i].Date<a[j].Date)) then
  135.   begin
  136.    b[k].Date:=a[i].Date;
  137.    i:=i+1;
  138.   end
  139.  else
  140.   begin
  141.    b[k].Date:=a[j].Date;
  142.    j:=j+1;
  143.   end ;
  144.  for k:=p to q do
  145.   a[k].Date:=b[k].Date;
  146. end;
  147.  
  148. Procedure T_13.Sort(p, q: Integer; A: zapmas);
  149. begin
  150.  if p < q then
  151.  begin
  152.   Sort(p, ((p+q) div 2), A);
  153.   Sort(((p+q) div 2 + 1), q, A);
  154.   Sliv(p, q, A);
  155.  end;
  156. end;
  157.  
  158. end.
  159.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement