Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 30.12.2009, 11:20
Аватар для Aidar
Aidar Aidar вне форума
Прохожий
 
Регистрация: 30.12.2008
Сообщения: 7
Репутация: 10
По умолчанию Хеш - Функции

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

Последний раз редактировалось Admin, 30.12.2009 в 11:24.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 00:49.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025