![]() |
|
#1
|
||||
|
||||
![]() Помогите пожалуйста исправить прогу.
Задание: Реализовать метод внутреннего хеширования. Исходные ключи – любые слова (например – фамилии). Размер хеш-таблицы должен задаваться в программе с помощью константы 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, 30.12.2009 в 11:24. |