Advertisement
ipilot

Lab2_Fixed

Nov 7th, 2012
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 3.72 KB | None | 0 0
  1. label lab2;
  2.  
  3. procedure fullsearch(a:integer);
  4.  
  5. var i,k,n:integer;
  6.  
  7.     s:string;
  8.  
  9.     f, t:text;
  10.  
  11.     m:array[1..15] of string;
  12.  
  13.  
  14.  
  15. begin
  16.  
  17.   writeln('Selected method: Full search. Processing...');
  18.  
  19.   assign(t,'test.txt');
  20.  
  21.   assign(f,'result_fullsearch.txt');
  22.  
  23.   reset(t);
  24.  
  25.   rewrite(f);
  26.  
  27.   i:=1;
  28.  
  29.   readln(t, s);
  30.  
  31.   writeln(f,'Äëÿ ñòðîêè "',s,'" - 0 ñðàâíåíèé');
  32.  
  33.   m[i]:=s;
  34.  
  35.   while (i<15) do
  36.  
  37.   begin
  38.  
  39.     readln(t, s);
  40.  
  41.     k:=1;
  42.  
  43.     n:=0;
  44.  
  45.     while (k <= i) and (s <> m[k]) do
  46.  
  47.     begin
  48.  
  49.       inc(k);
  50.  
  51.       inc(n);
  52.  
  53.     end;
  54.  
  55.     if (k > i) then
  56.  
  57.     begin
  58.  
  59.       inc(i);
  60.  
  61.       m[i]:=s;
  62.  
  63.     end
  64.  
  65.     else inc(n);
  66.  
  67.     writeln(f,'Äëÿ ñòðîêè "',s,'" - ',n,' ñðàâíåíèé');
  68.  
  69.   end;
  70.  
  71.   close(t);
  72.  
  73.   close(f);
  74.  
  75. end;
  76.  
  77.  
  78.  
  79. procedure binsearch(a:integer);
  80.  
  81. var s:string;
  82.  
  83.     m:array[1..15] of string;
  84.  
  85.     i,k,n,l,r,x:integer;
  86.  
  87.     f:boolean;
  88.  
  89.     t, ft:text;
  90.  
  91.  
  92.  
  93. begin
  94.  
  95.   writeln('Selected method: Binary search. Processing...');
  96.  
  97.   assign(ft,'test.txt');
  98.   reset(ft);
  99.   assign(t,'result_binsearch.txt');
  100.   rewrite(t);
  101.   i:=1;
  102.  
  103.   readln(ft,s);
  104.  
  105.   writeln(t,'Äëÿ ñòðîêè "',s,'" - 0 ñðàâíåíèé');
  106.  
  107.   m[i]:=s;
  108.  
  109.   while (i < 15) do
  110.  
  111.   begin
  112.  
  113.     readln(ft,s);
  114.  
  115.     n:=0;
  116.  
  117.     l:=1;
  118.  
  119.     r:=i;
  120.  
  121.     f:=false;
  122.  
  123.     while (l <= r) do
  124.  
  125.     begin
  126.  
  127.       x:=(l+r) div 2;
  128.  
  129.       if (m[x] = s) then
  130.  
  131.       begin
  132.  
  133.         l:=r+1;
  134.  
  135.         f:=true;
  136.  
  137.       end
  138.  
  139.       else
  140.  
  141.         if (m[x] > s) then r:=x-1
  142.  
  143.         else l:=x+1;
  144.  
  145.       inc(n);
  146.  
  147.     end;
  148.  
  149.     if not f then
  150.  
  151.     begin
  152.  
  153.       k:=i;
  154.  
  155.       while (k > 0) and (m[k] > s) do
  156.  
  157.       begin
  158.  
  159.         m[k+1]:=m[k];
  160.  
  161.         dec(k);
  162.  
  163.       end;
  164.  
  165.       m[k+1]:=s;
  166.  
  167.       inc(i);
  168.  
  169.     end;
  170.  
  171.     writeln(t,'Äëÿ ñòðîêè "',s,'" - ',n,' ñðàâíåíèé');
  172.  
  173.   end;
  174.  
  175.   close(ft);
  176.  
  177.   close(t);
  178.  
  179. end;
  180.  
  181.  
  182.  
  183. procedure hash(a:integer);
  184.  
  185. var s:string;
  186.  
  187.     hash:array[0..14] of boolean;
  188.  
  189.     m:array[0..14] of string;
  190.  
  191.     i,k,n,l,h,u:integer;
  192.  
  193.     f:boolean;
  194.  
  195.     t, ft:text;
  196.  
  197.  
  198.  
  199. begin
  200.  
  201.   writeln('Selected method: Hashing. Processing...');
  202.  
  203.   assign(ft,'test.txt');
  204.   reset(ft);
  205.   assign(t,'result_hash.txt');
  206.   rewrite(t);
  207.   for i:=0 to 14 do hash[i]:=false;
  208.   i:=0;
  209.  
  210.   while (i < 15) do
  211.  
  212.   begin
  213.  
  214.     readln(ft, s);
  215.  
  216.     n:=0;
  217.  
  218.     l:=length(s);
  219.  
  220.     h:=0;
  221.  
  222.     for u := 1 to l do
  223.  
  224.        h :=(h + ord(s[u])) mod 15;
  225.  
  226.     if (not hash[h]) then
  227.  
  228.     begin
  229.  
  230.       hash[h]:=true;
  231.  
  232.       m[h]:=s;
  233.  
  234.       inc(i);
  235.  
  236.     end
  237.  
  238.     else
  239.  
  240.     begin
  241.  
  242.       inc(n);
  243.  
  244.       f:=false;
  245.  
  246.       k:=1;
  247.  
  248.       if (m[h] <> s) then
  249.  
  250.       while not f do
  251.  
  252.       begin
  253.  
  254.         if ((h - k) >= 0) then
  255.  
  256.           if (not hash[h-k]) then
  257.  
  258.           begin
  259.  
  260.             hash[h-k]:=true;
  261.  
  262.             m[h-k]:=s;
  263.  
  264.             inc(i);
  265.  
  266.             f:=true;
  267.  
  268.           end
  269.  
  270.           else
  271.  
  272.           begin
  273.  
  274.             inc(n);
  275.  
  276.             if (m[h-k] = s) then f:=true;
  277.  
  278.           end;
  279.  
  280.         if (not f) then
  281.  
  282.           if ((h + k) <= 14) then
  283.  
  284.             if (not hash[h+k]) then
  285.  
  286.             begin
  287.  
  288.               hash[h+k]:=true;
  289.  
  290.               m[h+k]:=s;
  291.  
  292.               inc(i);
  293.  
  294.               f:=true;
  295.  
  296.             end
  297.  
  298.             else
  299.  
  300.             begin
  301.  
  302.               inc(n);
  303.  
  304.               if (m[h+k] = s) then f:=true;
  305.  
  306.             end;
  307.  
  308.         inc(k);
  309.  
  310.       end;
  311.  
  312.     end;
  313.  
  314.     writeln(t,'Äëÿ ñòðîêè "',s,'" - ',n,' ñðàâíåíèé');
  315.  
  316.   end;
  317.  
  318.   close(ft);
  319.  
  320.   close(t);
  321.  
  322. end;
  323.  
  324.  
  325.  
  326. var k:char; a:integer;
  327.  
  328. begin
  329.  
  330.   writeln('Select the method of data processing:');
  331.  
  332.   writeln('1. Full search');
  333.  
  334.   writeln('2. Binary search');
  335.  
  336.   writeln('3. Hashing');
  337.  
  338.   lab2:
  339.  
  340.   readln(k);
  341.  
  342.   case k of
  343.  
  344.     '1': fullsearch(a);
  345.  
  346.     '2': binsearch(a);
  347.  
  348.     '3': hash(a);
  349.  
  350.     else
  351.  
  352.     begin
  353.  
  354.       writeln('Error! Please type the number from 1 to 3!');
  355.  
  356.       goto lab2;
  357.  
  358.     end;
  359.  
  360.   end;
  361.  
  362.   writeln('All data were processed.');
  363.  
  364. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement