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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.05.2011, 19:59   #1
rowlin
Пользователь
 
Регистрация: 14.12.2010
Сообщений: 31
По умолчанию массив в массиве

Доброго времени суток !
Помогите разобраться с закрытом хешировании:

Код:
...
#define HS 3000  //колличество элементов
#define empty  "       /0" /*7 пробелов*/
#define deleted "#######/0"// я правильно понял?
#define Max 100 //колличество попыток
int inz=0;
char *menu[7][40];
void main_menu(void);
int k =6;

typedef char *el;
char *key;//строка
el Hash[HS-1];//массив в котором ,содержится *key
int hx ,nk,inode;

int  hash(int hx) {
  const c=2,d=3;//hx -указатель на текущий элемент
  inode=nk+c*hx+d*hx*hx;
  inode =hx;
  if (inode> HS-1)
    inode=hx-HS;
  return inode;
  hx++;
}

void init(){
  int i;
  for (i=0;i<HS;i++)
    Hash[i]=empty;
  inz=1;
  printf("%d\n",inz);
}

int find(char key,el Hash,int x){
  int i=0;
  do{
    inode=hash(x);
    i=i+1;//для выявления max
  }
  while (Hash[inode]==key||Hash[inode]==empty||i>Max);// warning: comparison between pointer and integer [enabled by default]

  if (Hash[inode]==x) return 1;
  else return 0;
}

int add(int x,char key){
  int i=0;
  if (find(key,Hash, x)==0){
    do{
    inode=hash(x);
    i=i+1;
    }
    while (Hash[i]==empty||Hash[i]==deleted||i>Max);
      Hash[x]=key;
      return 1;}
    else {
      nk++;
      printf("Элемент уже содержится ");
      enter();
    }
}

int enter(){
  printf("Введите ключ в виде хххАхх:");
  scanf("%6s",&key);
  if (key == NULL) main_menu();
  else if (add(inode,key)==1) printf("\nзаписал");
  else printf("=(");
}
...

!)ругается на размер - ни пойму ,что не так..:
warning: character constant too long for its type [enabled by default]
warning: assignment makes pointer from integer without a cast [enabled by default]

Заранее спасибо ..

Последний раз редактировалось rowlin; 17.05.2011 в 00:34. Причина: добавление
rowlin вне форума Ответить с цитированием
Старый 16.05.2011, 20:06   #2
Ivan_32
somewhere else
Участник клуба
 
Аватар для Ivan_32
 
Регистрация: 17.07.2008
Сообщений: 1,409
По умолчанию

Навскидку:
#define empty ' ' /*7 пробелов*/
#define deleted '#######'

Двойные кавычки надо использовать или массив значений. В вашем случае лучше второй вариант, так как обычно литерал "somestring" дополняется нулем - символом окончания строки.
"Тяжело в учении, легко в бою" - А.В. Суворов
Ivan_32 вне форума Ответить с цитированием
Старый 17.05.2011, 00:50   #3
rowlin
Пользователь
 
Регистрация: 14.12.2010
Сообщений: 31
По умолчанию

спасибо - поправил ..
но вот еще какие-то непонятные однотипные ошибки(warning):

last_h.c: In function ‘find’:
last_h.c:43:39: warning: comparison between pointer and integer [enabled by default]
last_h.c: In function ‘add’:
last_h.c:50:3: warning: passing argument 2 of ‘find’ from incompatible pointer type [enabled by default]
last_h.c:37:5: note: expected ‘el’ but argument is of type ‘char **’
last_h.c:56:14: warning: assignment makes pointer from integer without a cast [enabled by default]
last_h.c: In function ‘enter’:
last_h.c:69:3: warning: passing argument 2 of ‘add’ makes integer from pointer without a cast [enabled by default]
last_h.c:48:5: note: expected ‘char’ but argument is of type ‘char *’
Compilation finished
rowlin вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Необходимо сделать удаление как в динамическом массиве, сложность в том что массив обычный Сеня2007 Помощь студентам 3 22.11.2010 08:31
Получить массив из элементов, встречающихся в исходном массиве ровно один раз без повторений Shikarmo4000 Помощь студентам 0 25.05.2010 01:27
Найти палиндромы в массиве элементов, записать их в другой массив! Lodyr Помощь студентам 1 19.02.2010 21:11
В двухмерном массиве все отрицательные элеметны заменить на их модули. А новый массив вывести на экран JulLy Паскаль, Turbo Pascal, PascalABC.NET 11 28.04.2009 08:13
необходимо сравнить массив С1-С50 на совпадение в массиве А1-А267 Бэн ай нид хелп Microsoft Office Excel 1 10.09.2007 20:10