home *** CD-ROM | disk | FTP | other *** search
- unit uhash;
-
-
- interface
- {------------------------------------------------------------------------------}
- const delka=997;
- type interval=1..delka;
- zaznam=record
- slovo,preklad:string;
- end;
- ukprvek=^prvek;
- hashtable=array[interval] of ukprvek;
- prvek=record
- dalsi:ukprvek;
- data :zaznam;
- end;
- var tab:hashtable;
-
- procedure init(var tab:hashtable);
- function hash(u:ukprvek):interval;
- procedure pridej_do_hashtable(var tab:hashtable; z:zaznam);
- procedure hledej(tab:hashtable; s:string; var u:ukprvek);
-
-
- implementation
- {------------------------------------------------------------------------------}
-
- procedure init(var tab:hashtable);
- var i:interval;
- begin for i:=1 to delka do tab[i]:=nil end;
-
- {------------------------------------------------------------------------------}
-
- function hash(u:ukprvek):interval;
- const j=10; {pocet znaku klice pro hash}
- var s:string; {klic}
- ordinal:longint; {soucet ord j znaku}
- i:integer; {citac}
- begin
- ordinal:=0;
- s:=u^.data.slovo;
- if length(s)<j then for i:=length(s)+1 to j do s:=s+' ';
- for i:=1 to j do inc(ordinal,ord(s[i]));
- hash:=((ordinal mod delka)+1);
- end;
-
- {------------------------------------------------------------------------------}
-
- procedure pridej_do_hashtable(var tab:hashtable; z:zaznam);
- var u:ukprvek; h:interval;
- begin
- new(u);
- u^.dalsi:=nil;
- u^.data:=z;
- h:=hash(u);
- u^.dalsi:=tab[h];
- tab[h]:=u;
- end;
-
- {------------------------------------------------------------------------------}
-
- procedure hledej(tab:hashtable; s:string; var u:ukprvek);
- var v:ukprvek;
- begin
- new(v);
- v^.data.slovo:=s;
- u:=tab[hash(v)];
- while ((u<>nil) and (u^.data.slovo<>s)) do u:=u^.dalsi;
- end;
-
- {------------------------------------------------------------------------------}
-
- begin
- init(tab);
- end.