ArfIsAToe

rech dichotomique

Feb 11th, 2019
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 1.43 KB | None | 0 0
  1. program dichotomique ;
  2. uses WinCrt;
  3. type
  4.     Tab = array [1..100] of integer;
  5. var
  6.     t : tab ;
  7.     n : byte;
  8.     k : integer;
  9.  
  10. Procedure inpn(var n : byte);
  11.     begin
  12.         Repeat
  13.             ClrScr;
  14.             Write('N= ');
  15.                 Readln(n);
  16.         Until n in [5..10] ;
  17.     end;
  18.  
  19.     Procedure fillT (var t : tab ; n : byte ) ;
  20.         var
  21.             a : integer;
  22.         Begin
  23.             for a:=1 to n do
  24.              t[a]:=random(101);
  25.         end;
  26.  
  27.         Procedure afft(t : tab ; n : byte );
  28.             var
  29.                 a : Integer;
  30.             Begin
  31.                 for a:=1 to n do
  32.                   Write(t[a]:5);
  33.                 writeln;
  34.             End;
  35.  
  36.             Procedure trins(var t : tab ; n : byte );
  37.                 var
  38.                  a,b,stor : Integer;
  39.                  
  40.                 begin
  41.                     a:=2 ;
  42.                     while a<=n do
  43.                         Begin
  44.                             b:= a;
  45.                          while (b>1 ) and (t[b-1] > t[b]) do
  46.                             begin
  47.                                 stor:=t[b];
  48.                                 t[b]:=t[b-1];
  49.                                 t[b-1]:=stor;
  50.  
  51.                                 b:=b-1;
  52.                             end;
  53.                             a:=a+1;
  54.                         end;
  55.                 end;
  56.  
  57.                 Function rech(t : tab ; n : byte ; k : integer):Boolean;
  58.                     var
  59.                         st,mid,en : Integer;    // start , middle , End
  60.                     Begin
  61.                         st:=1;
  62.                         en:=n;
  63.                         Repeat
  64.                             mid := (st+en) div 2;
  65.                             if k < t[mid] then
  66.                                 en:=mid-1
  67.                             else
  68.                                 st:=mid+1;
  69.                         until (k = t[st]) or (k = t[en]) or (k = t[mid]) or (en<st);
  70.                         rech:= en>st;
  71.                        
  72.                     end;
  73.  
  74. begin
  75.     inpn(n);
  76.     fillt(t,n);
  77.     afft(t,n);
  78.     trins(t,n);
  79.     write('k= ');
  80.      readln(k);
  81.     writeln('Does ',k,' exist in T ? ',rech(t,n,k));
  82. End.
Add Comment
Please, Sign In to add comment