Форум программистов, компьютерный форум CyberForum.ru

Хеш функция и хеш таблица. Проверка на наличие уже существующего таб номера - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Переменные в динамической памяти! http://www.cyberforum.ru/cpp-beginners/thread1078858.html
подскажите как реализовать такое задание: Разместите в динамической памяти две переменные типа структура, содержащую информацию о преподавателе: Фамилия, Кафедра, Должность, Зарплата. Одну переменную заполните следующей информацией: Иванов, ИКС, Доцент, 5000. Затем скопируйте значение заполненной первой переменной во вторую и только поменяйте значение поля Фамилия на «Петров»....
C++ Определить сумму элементов каждого столбца левой половины и сумму элементов каждого четного столбца правой половины матрицы A Матрица A (M кратно 4) разделена по вертикали на две половины. Определить сумму элементов каждого столбца левой половины и сумму элементов каждого четного столбца правой половины матрицы A. http://www.cyberforum.ru/cpp-beginners/thread1078851.html
Как передать значение переменной из одной функции в другую функцию C++
нужно передать значение sum1 , sum2 , sum3 из каждой функции в главную . помогите , пожалуйста . #include "stdafx.h" #include <iostream> #include <cstdlib> #include <ctime> #include <iomanip> using namespace std; typedef int Matrix; //тип матриці Matrix A; //вихідна матриця typedef int MatrixB; //тип матриці
Задача с использованием шаблонов классов в С++ C++
Помогите пожалуйста подредактировать задачу: Разработайте программу, которая бы выполняла одно из указанных пользователем арифметических действий над двумя числовыми значениями. Сам код программы: #include <iostream.h> #include <conio.h> template <class T> struct func{ T add(T fNum, T sNum){ return fNum + sNum; }
C++ Найти номера пары точек, расстояние между которыми наибольшее (считать, что такая пара единственная). http://www.cyberforum.ru/cpp-beginners/thread1078836.html
Доброго времени, никак не могу понять как делать эти две программки. Во второй меня интересует как разделить матрицу пополам, а потом работать на их половинках. 1)Даны координаты n точек на плоскости: (X1; Y1); ...; (Xn; Yn) (n <= 30). Найти номера пары точек, расстояние между которыми наибольшее (считать, что такая пара единственная). одна тема - одна задача, читайте правила форума
C++ Реализовать данный код через функцию Делаю лабу...Все время сидел на Паскаль, а тут вдруг нужно на с++...Медленно, но уверенно, с синтаксисом разбираюсь. Сделал часть лабы... #include "stdafx.h" #include <iostream> #include <iomanip> using namespace std; const int size = 3; const int n = 2; подробнее

Показать сообщение отдельно
Fintt
 Аватар для Fintt
10 / 10 / 0
Регистрация: 13.02.2012
Сообщений: 94
23.01.2014, 10:38     Хеш функция и хеш таблица. Проверка на наличие уже существующего таб номера
Есть рабочий код, всё работает и записывает в файл. Задача такова! Есть некий список сотрудников, фам, оклад ,таб номер, инд номер получаем с помощью функции хеширования.
Код
6256	Mihin		        4560
4322	Muhin		        4500
7756	Kuzin		        1900
4622	Komarov		9000
3322	kyznec		4000
Так выглядит в файле. Защита от коллизии стоит. Кто может подскажите, как сделать и куда засунуть проверку на наличии уже существующего таб номера? Я пробовал варианты и не получилось, и ещё препод говорит засунуть защиту от коллизий в функцию поиска, чтобы функция удаления знала точно что удалять, хотя я не понимаю зачем эту защиту ставить в поиск, если будет предусмотрено, что при вводе таб номера, программа дальше не даст ввести такой же номер, если уже есть в файле.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#include <stdlib.h>
#include <fstream.h>
#include <conio.h>
#include <stdio.h>
#define N 103
 
struct info
    {
     int tab;
     char fam[20];
     float oklad;
     info()
     {
      tab=0; oklad=0;
     }
    }; info T[N];
 
int hesh(int key){ return key % N;}
void forms(char fl[]);//formiruet hesh tabl T iz faila fl
void vivod();//vivod mas T na ekran
int poisk(int p);//funkc vozvrash index zapisi s tab nomerom=p ili -1
void add (info g);//dobavl zapic g v tabl T
void del (info g);
 
void main()
    {
     int z,k;
     info m,n;
     clrscr();
     forms("1.txt");
     cout<<endl;
     vivod();
     cout<<"Vvedidet tab fam oklad novogo sotr:"<<endl;
     cin>>m.tab>>m.fam>>m.oklad;
     add(m);
     ofstream f("1.txt",ios::app);
     f<<m.tab<<'\t'<<m.fam<<'\t'<<'\t'<<m.oklad<<endl;
     vivod();
     for (int i=0; i<3; i++)
     {
     cout<<"\n\nVvedite tab nom poiska:";
     cin>>z;
     k=poisk(z);
     if (k==-1) cout<<"Ne naiden"; else
     cout<<T[k].tab<<'\t'<<T[k].fam<<'\t'<<T[k].oklad<<'\n';
     }
     cout<<endl<<"Vvedidet tab nomer del:"<<endl;
     cin>>n.tab;
     del(n);
     vivod();
     getch();
    }
/////////////////////////////////////////////////////////////////////////////
void add (info g)
    {
     int j=0;
     int i=hesh(g.tab);
     while (T[i].tab!=0 && j<N)
        {
         i=hesh(i+1);
         j++;
        }
     if (j==N){ cout<<"Tabl perepolnena";getch(); exit (0);}
        else T[i]=g;
    }
/////////////////////////////////////////////////////////////////////////////
void forms(char fl[])
    {
     ifstream F(fl);
     info x;
     while (F>>x.tab>>x.fam>>x.oklad)
     add(x);
    }
/////////////////////////////////////////////////////////////////////////////
void vivod()
      {
       cout<<"index tab fam oklad   "<<endl;
       for (int i=0; i<N; i++)
       if (T[i].tab!=0)
       cout<<i<<'\t'<<T[i].tab<<'\t'<<T[i].fam<<'\t'<<T[i].oklad<<'\n';
      }
/////////////////////////////////////////////////////////////////////////////
int poisk(int p)
      {
       int i=hesh(p);
       if (T[i].tab==p) return i; else return -1;
      }
/////////////////////////////////////////////////////////////////////////////
void del (info g)
      {
       int i=hesh(g.tab);
       if (poisk) T[i].tab=NULL;
      }
Функцию проверки на совпадение табельных номеров сделал, теперь мне нужно всего лишь правильно её засунуть, чтобы если совпадения есть, ввести заново данные, иначе всё нормально.
C++
1
2
3
4
5
6
int prov (info r)
    {
     int i=hesh(r.tab);
     if (T[i].tab==r.tab) cout<<"Takou tab nomer cuwectByet"<<endl;
     return 0;
    }
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 05:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru