home *** CD-ROM | disk | FTP | other *** search
/ PC World 2003 January / PCWorld_2003-01_cd.bin / Software / Vyzkuste / htmltocz / uhash.pas < prev    next >
Pascal/Delphi Source File  |  2002-09-29  |  2KB  |  75 lines

  1. unit uhash;
  2.  
  3.  
  4. interface
  5. {------------------------------------------------------------------------------}
  6. const delka=997;
  7. type interval=1..delka;
  8.      zaznam=record
  9.               slovo,preklad:string;
  10.             end;
  11.      ukprvek=^prvek;
  12.      hashtable=array[interval] of ukprvek;
  13.      prvek=record
  14.              dalsi:ukprvek;
  15.              data :zaznam;
  16.            end;
  17. var tab:hashtable;
  18.  
  19. procedure init(var tab:hashtable);
  20. function hash(u:ukprvek):interval;
  21. procedure pridej_do_hashtable(var tab:hashtable; z:zaznam);
  22. procedure hledej(tab:hashtable; s:string; var u:ukprvek);
  23.  
  24.  
  25. implementation
  26. {------------------------------------------------------------------------------}
  27.  
  28. procedure init(var tab:hashtable);
  29. var i:interval;
  30. begin  for i:=1 to delka do tab[i]:=nil end;
  31.  
  32. {------------------------------------------------------------------------------}
  33.  
  34. function hash(u:ukprvek):interval;
  35. const j=10;             {pocet znaku klice pro hash}
  36. var   s:string;         {klic}
  37.       ordinal:longint;  {soucet ord j znaku}
  38.       i:integer;        {citac}
  39. begin
  40.    ordinal:=0;
  41.    s:=u^.data.slovo;
  42.    if length(s)<j then for i:=length(s)+1 to j do s:=s+' ';
  43.    for i:=1 to j do inc(ordinal,ord(s[i]));
  44.    hash:=((ordinal mod delka)+1);
  45. end;
  46.  
  47. {------------------------------------------------------------------------------}
  48.  
  49. procedure pridej_do_hashtable(var tab:hashtable; z:zaznam);
  50. var u:ukprvek; h:interval;
  51. begin
  52.   new(u);
  53.   u^.dalsi:=nil;
  54.   u^.data:=z;
  55.   h:=hash(u);
  56.   u^.dalsi:=tab[h];
  57.   tab[h]:=u;
  58. end;
  59.  
  60. {------------------------------------------------------------------------------}
  61.  
  62. procedure hledej(tab:hashtable; s:string; var u:ukprvek);
  63. var v:ukprvek;
  64. begin
  65.   new(v);
  66.   v^.data.slovo:=s;
  67.   u:=tab[hash(v)];
  68.   while ((u<>nil) and (u^.data.slovo<>s)) do u:=u^.dalsi;
  69. end;
  70.  
  71. {------------------------------------------------------------------------------}
  72.  
  73. begin
  74.   init(tab);
  75. end.