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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.10.2017, 13:58   #1
Кристина1998
Форумчанин
 
Регистрация: 01.11.2016
Сообщений: 110
По умолчанию Исправить программу

Задание:цццБцц - формат ключа 3000 - кол-во сегментов Квадратичное опробование - метод хеширования
Где «ц» – это цифра 0…9; «A» – это большая буква латиницы A…Z.

Код:
int data;

char key[6];

};

void test() //тестит созданную хеш-функцию

{

FILE *put;

 char key[6],trans[2]; //trans поможет с выводом в файл

trans[1]='\0';

 put=fopen("Коллизия.txt","w");

 int A[3000],heshkey;

srand(time(NULL)); //ставит начальным значением для rand реальное время

for(int i=0;i<2999;i++)A[i]=0; //обнуляет массив отчётности для коллизий

for(int i=0;i<6000;i++) //отвечает за генерацию ключей для проверки коллизий

{

for(int y=0;y<3;y++)key[y]=(48+((rand()*10)/RAND_MAX));

key[3]=(66+((rand()*26)/RAND_MAX)); //Принцип генерации одного символа

for(int y=4;y<6;y++)key[y]=(66+((rand()*26)/RAND_MAX));

 heshkey=hesh(key); //отправка в функцию хеширования

A[heshkey]+=1; //соответствует колич

}

trans[0]=48;

for(int i=0;i<2999;i++) //вывод в файл

{

trans[0]=48;

 for(int y=0;y
fputs(trans,put);

fputs("\n",put);

 }

fclose(put);

}

int hesh(char *key)

{

int k=((key[0]*key[5]+key[1]*key[4]+key[2]*key[3])%3000);//генерация ключа

return k;

}

int searchhesh(heshic *heshtable,heshic keyplus)//Функция поиска

{

int i=0,n,heshkey;//i-переменная для метода квадратичного

heshkey=hesh(keyplus.key); //хеширование ключа

for(;;)

{ 

n=((heshkey+3*i+2*i*i)/3000+(heshkey+3*i+2*i*i)%3000)%3000; 

 if((strcmp(heshtable[n].key,keyplus.key))&&(strcmp(heshtable[n].key," ")))//если не нашли и там не пусто

i=i+1; //увеличиваем шаг

else

{

if(strcmp(heshtable[n].key," "))//если там не пусто

{

return n; //Если найден аргумент поиска

}else return -1; // //-// не найден

} 

}

}

bool kill(heshic *heshtable,heshic keyplus)//функция удаления

{

int i=searchhesh(heshtable,keyplus); //номер ячейки, где лежат значения

if(i+1)//если не false

{

 strcpy(heshtable[i].key,"delete"); //записываем,что элемент удален

return true; 

 }else return false; //если ключ был не найден

}

int dobavka(heshic *heshtable,heshic keyplus) //добавляет keyplus в heshtable 

{ //и возвращает номер коллизии при добавлении

int i=0,n,heshkey;

heshkey=hesh(keyplus.key);

for(;;)

 { //Вычисляем heshkey 

n=((heshkey+3*i+2*i*i)/3000+(heshkey+3*i+2*i*i)%3000)%3000; 

if((strcmp(heshtable[n].key,"delete"))&&(strcmp(heshtable[n].key," ")))

 i++; //Если не нашли пустого места-идём дальше

else

{//нашли и добавляем элимент

strcpy(heshtable[n].key,keyplus.key);

heshtable[n].data=keyplus.data;

 return i+1;//количество коллизий

} 

}

}

_____
Код программы нужно выделять (форматировать) тегами [CODE] (читать FAQ)
Модератор

Последний раз редактировалось Serge_Bliznykov; 05.10.2017 в 16:24.
Кристина1998 вне форума Ответить с цитированием
Старый 05.10.2017, 15:25   #2
eko_knopka
 
Регистрация: 05.10.2017
Сообщений: 7
По умолчанию

ты хотя бы выдели код, чтобы был код, а не как текст простой!
eko_knopka вне форума Ответить с цитированием
Старый 05.10.2017, 15:49   #3
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

И что это значит? В чем проблема то?
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 05.10.2017, 15:56   #4
Кристина1998
Форумчанин
 
Регистрация: 01.11.2016
Сообщений: 110
По умолчанию

Цитата:
Сообщение от WorldMaster Посмотреть сообщение
И что это значит? В чем проблема то?
проблема, что сейчас программа не работает. Подправить, чтобы заработала
Кристина1998 вне форума Ответить с цитированием
Старый 05.10.2017, 16:05   #5
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Че это она не работает? Мы гадать должны?
И код не оформили как положено.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 06.10.2017, 21:30   #6
Кристина1998
Форумчанин
 
Регистрация: 01.11.2016
Сообщений: 110
По умолчанию

Цитата:
Сообщение от WorldMaster Посмотреть сообщение
Че это она не работает?
мне нужно помочь исправить код, если вы не знаете, то почему бы просто не пройти мимо?
Кристина1998 вне форума Ответить с цитированием
Старый 06.10.2017, 21:58   #7
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

Цитата:
Сообщение от Кристина1998 Посмотреть сообщение
мне нужно помочь исправить код
У Вас спрашивают что в нем не так-то?
Croessmah вне форума Ответить с цитированием
Старый 06.10.2017, 22:20   #8
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Цитата:
Сообщение от Кристина1998 Посмотреть сообщение
мне нужно помочь исправить код, если вы не знаете, то почему бы просто не пройти мимо?
Да код то рабочий. У меня все заработало. )
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 06.10.2017, 23:39   #9
Кристина1998
Форумчанин
 
Регистрация: 01.11.2016
Сообщений: 110
По умолчанию

Цитата:
Сообщение от Croessmah Посмотреть сообщение
У Вас спрашивают что в нем не так-то?
Правилен ли принцип генерации одного символа?
И тут же в форе должно быть условие, что писать: for(;

{

n=((heshkey+3*i+2*i*i)/3000+(heshkey+3*i+2*i*i)%3000)%3000 ;
И тут : for(;

{ //Вычисляем heshkey
И вот тут:trans[0]=48;

for(int y=0;y
Кристина1998 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Исправить программу на С# AMinaew Фриланс 3 30.05.2017 13:51
Исправить программу Smile189 Общие вопросы Delphi 0 13.12.2016 11:22
Исправить программу linass Фриланс 8 14.05.2013 15:22
исправить программу МихаилД Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 21.06.2011 12:23
Исправить программу. Си. Erkon Помощь студентам 3 01.11.2010 16:47