Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.08.2012, 00:37   #1
koshkarjov
Пользователь
 
Аватар для koshkarjov
 
Регистрация: 31.01.2009
Сообщений: 26
По умолчанию [C++/Delphi] Бесконфликтная хеш-таблица

Здравствуйте!
У меня есть исходный код программы на c++. Нужно этот код переделать в Delphi.

Задание
Построить бесконфликтную хеш-таблицу для заданного набора текстовых ключей. Число ключей (и размер таблицы) равен 10. В качестве ключей можно взять 10 любых служебных слов языка Паскаль. Для преобразования текстовых ключей в числовые значения использовать суммирование кодов символов текстового ключа: код (End) = код (E) + код (n) + код (d). Преобразование числового кода ключа в значение индекса выполнить с помощью простейшей хеш-функции, которая берет остаток от целочисленного деления кода на размер хеш-таблицы (в задании – 10).

Для подсчета индексов ключей написать вспомогательную программу, которая в диалоге многократно запрашивает исходный текстовый ключ (служебное слово языка Паскаль) и подсчитывает значение хеш-функции. Программа должна в цикле вычислять сумму кодов всех символов ключа и брать остаток от деления этой суммы на 10.

Если некоторые исходные ключи будут конфликтовать друг с другом, можно изменить исходное слово, например – сменить регистр начальной буквы или всех букв в слове, полностью заменить слово на близкое по значению (End на Stop и.т.д.), ввести какие-либо спецсимволы или придумать другие способы

После подбора неконфликтующих ключей написать основную программу, которая должна:
• ввести подобранные ключи и расположить их в ячейках хеш-таблицы в соответствии со значением хеш-функции
• вывести хеш-таблицу на экран
• организовать циклический поиск разных ключей, как имеющихся в таблице (с выводом местоположения), так и отсутствующих: вычислить для ключа значение хеш-функции и сравнить содержимое соответствующей ячейки таблицы с исходным ключом

Код:
#include <iostream>
#include <string>
using namespace std;

int Hash(string key, int n)
 {
int sum=0;
for (int i=0; i<key.size(); i++)
 sum+=key[i];
return sum%n;


 }

string *Create(int n)
 {
 string *Table = new string [n];
for (int i=0; i<n; i++)
 Table[i].empty();
int i=0;
while (i<n)
 {
 string key;
 cout << endl << "key = ";
 cin >> key;
int hash = Hash(key, n);
if (Table[hash].empty())
 Table[hash] = key;
else
 {
 cout << endl << "Конфликтная ситуация. Замените слово" << endl;
continue;
 }
 i++;


 }
return Table;

 }

int Search(string key, string *Table, int n)
 {
int hash=Hash(key, n);
if (Table[hash]==key)
return hash;
else
return -1;


 }

void Show(string *Table, int n)
 {
for (int i=0; i<n; i++)
 cout << "Table[" << i << "] = " << Table[i] << endl;


 }

int main()
 {
 setlocale(LC_ALL,"Russian");
 string *Table=NULL;
 string key;
int n=0;
char action;
do
 {
 cout << "1. Создать таблицу" << endl
 << "2. Поиск" << endl
 << "3. Показать" << endl
 << "0. Выход" << endl
 << " = ";
 cin >> action;
switch(action)
 {
case ‘1′:
if (Table!=NULL)
delete[] Table;
 cout << endl << "Введите размер таблицы = ";
 cin >> n;
 Table=Create(n);
 cout << endl << "Таблица создана" << endl;
break;


case ‘2′:
if (n!=0)
 {
 cout << endl << "Введите значение ключа = ";
 cin >> key;
if (Search(key, Table, n)!=-1)
 cout << endl << "Индекс = " << Search(key, Table, n) << endl;
else
 cout << endl << "Не найдено" << endl;
 }
else
 cout << endl << "Создайте таблицу" << endl;
break;


case ‘3′:
if (n!=0)
 Show(Table, n);
else
 cout << endl << "Создайте таблицу" << endl;
break;


case ‘0′:
break;


default:
 cout << endl << "Ошибка" << endl;
 break;


 }

 }while(action!=’0′);
 cin.get();

 }
Ни у кого случайно не завалялось исходников такой программы на Delphi?
Заранее спасибо за помощь!
koshkarjov вне форума Ответить с цитированием
Старый 21.08.2012, 09:47   #2
Johnson
кривокодер ;)
Форумчанин
 
Аватар для Johnson
 
Регистрация: 20.06.2008
Сообщений: 707
По умолчанию

С хеш-таблицами в дельфи всё печально...
Слышал, что они появились в RAD2010, но подробности не знаю.
"А как написать праграму?, "ришыти задачьку очинь нада" ©с форума. Жить становится интереснее, жить становится веселее...
{Быть или не быть} {Неуспешный суицид}
Johnson вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Хеш таблица C++ Jirogirg Общие вопросы C/C++ 19 24.08.2012 22:15
хеш-таблица с разрешением коллизий связыванием Ovis Помощь студентам 0 18.05.2012 00:36
Хеш-таблица на основе стеков. Dephi Satevg Помощь студентам 1 17.04.2011 23:48
хеш-таблица CHUCKe Помощь студентам 2 17.11.2010 23:30
ХЕШ-таблица iceman2112 Общие вопросы C/C++ 0 09.05.2010 13:07