Добавил:
Hist
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Программы c++ (сортировка, хэширование) / 3 / old1 / 3
.2.cpp#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
int hash_calc(char x[],const int size)
{
int StringLength,HashKey,i,tmp;
//cout<<x<<"\n";
StringLength=strlen(x); //Начало вычисления ключа
HashKey=0;
if (StringLength%2==0) //Чётный случай
{
for (i=0; i<StringLength; i=i+2)
{
tmp=x[i];
tmp=tmp*1000;
tmp=tmp+x[i+1];
HashKey=HashKey+tmp;
}
}
if (StringLength%2!=0) //Нечётный случай
{;
for (i=1; i<=StringLength; i=i+2)
{
tmp=x[i];
tmp=tmp*1000;
tmp=tmp+x[i+1];
HashKey=HashKey+tmp;
}
HashKey=HashKey+x[0];
} //конец вычисления ключа
return (HashKey);
}
int main(void)
{
char st[19][10];
int i,j,k,n,keyd[19],ht1[19],ht2[19],ArrOfSin[19];
bool sin_chk;
strcpy(st[0],"zero");
strcpy(st[1],"one");
strcpy(st[2],"twoa");
strcpy(st[3],"three");
strcpy(st[4],"four");
strcpy(st[5],"five");
strcpy(st[6],"six");
strcpy(st[7],"seven");
strcpy(st[8],"eight");
strcpy(st[9],"nine");
strcpy(st[10],"ten");
strcpy(st[11],"eleven");
strcpy(st[12],"twelve");
strcpy(st[13],"thirteen");
strcpy(st[14],"fourteen");
strcpy(st[15],"fifteen");
strcpy(st[16],"sixteen");
strcpy(st[17],"seventeen");
strcpy(st[18],"eighteen");
strcpy(st[19],"nineteen");
//strcpy(st[20],"twenty");
for (j=0; j<=19; j++) //Вычисление хэш кода
{
n=strlen(st[j]);
keyd[j]=hash_calc(st[j],n)%20; //Свёртка 2
cout<<j<<") "<<keyd[j]<<"\n";
}
keyd[2]=12;
// создание хэш таблицы
for (j=0; j<=19; j++)
{
ht1[j]=-1;
ht2[j]=-1;
ArrOfSin[j]=-1;
}
k=0;
for (j=0; j<=19; j++)
{
if (ht1[keyd[j]]==-1)
{
ht1[keyd[j]]=j;
}
else
{
if (ht2[keyd[j]]==-1)
{
ht2[keyd[j]]=j;
}
else
{
ArrOfSin[k]=j;
k++;
}
}
}
cout<<"\n";
for (j=0; j<=19; j++) {cout<<j<<") "<<ht1[j]<<" * "<<ht2[j]<<"\n";}
cout<<"\n";
for (j=0; j<=19; j++) {cout<<j<<") "<<ArrOfSin[j]<<"\n";}
}