Помогите пожалуйста исправить прогу.
Задание:
Реализовать метод внутреннего хеширования. Исходные ключи – любые слова (например – фамилии). Размер хеш-таблицы должен задаваться в программе с помощью константы m. В случае возникновения конфликта при попытке размещения в таблице нового ключа, для него ищется первое свободное по порядку место по формуле
j = (( h (ключ) + i ) mod m ) + 1, где i = 0, 1, 2, . . . , m-2
Программа должна выполнять следующие действия:
• добавление нового ключа в таблицу с подсчетом сделанных при этом сравнений
• поиск заданного ключа в таблице с подсчетом сделанных при этом сравнений
• вывод текущего состояния таблицы на экран
Ошибка состоит в том, что при добавлении ключей (например добавляем var, avr, arv и avr) программа выводит одинаковые ключи. По сути при вводе одинаковых ключей должен выводить сообщение "Kluch uge dobavlalsa!!.".
Фрагмент программы:
Код:
function AddToHAsh(str : String; var arr : array of String) : Integer;
var hsh, cmp, r, i, m, j : Integer;
Free : Boolean;
begin
hsh := Hash(str);
Cmp := 0;
j := 0;
R := 1;
Inc(Cmp);
Free := False;
If (arr[hsh] = str)
then
begin
writeln('Kluch uge dobavlalsa!!.');
end
else
begin
if (Arr[hsh] = '')
then
begin
arr[hsh] := str;
end
else
begin
for i := 1 to (m - 1) do
begin
Inc(Cmp);
j := (hsh + i) mod m;
if (Arr[j] = '')
then
begin
Arr[j] := str;
Break;
end;
end;
end;
end;
writeln('Comparies: ', Cmp);
Result := R;
end;
Admin: Не забываем про теги!