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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.12.2008, 05:40   #1
Zid@ne
Пользователь
 
Регистрация: 18.01.2008
Сообщений: 49
По умолчанию Двоичный поиск элемента в массиве (Си под DOS)

Нужно выполнить двоичный поиск элемента в массиве... код сложный...

примерно вот так:
Код:
#include <stdlib.h>
#include <stdio.h>

#define NELEMS(arr)   (sizeof(arr) / sizeoff(arr[0]))
                   
int numarray[] = {123, 145, 512, 627, 800, 993};
int numeric(int *pl, int *p2)
{
   return(*p1 - *p2);
}
int lookup(int key)
{
   int *itemptr;
   /* явное преобразование
      необходимо для исключения ошибки несовпадения типов, воз-
      никающей во время компиляции */
   itemptr = bsearch(&key, numarray, NELEMS(numarray),
       sizeof(int), (int (*)(const void *,const void *))numeric);
   return (itemptr != NULL);
}
int main(void)
{
   if(lookup(512))
      printf("В таблице есть элемент 512\n");
   else
      printf("В таблице нет элемента 512\n");
   return 0;
}
взял код из Инета, так и не разобрался в нём... подскажите может его можно переделать под версию Си досовского? или как вобще написать код для ДОСа??
Zid@ne вне форума Ответить с цитированием
Старый 24.12.2008, 08:45   #2
como
Форумчанин
 
Регистрация: 26.07.2008
Сообщений: 116
По умолчанию

Попробуй как есть откомпилировать сначала.
como вне форума Ответить с цитированием
Старый 24.12.2008, 15:53   #3
Zid@ne
Пользователь
 
Регистрация: 18.01.2008
Сообщений: 49
По умолчанию

не компилится...
вот что выдаёт:
Zid@ne вне форума Ответить с цитированием
Старый 24.12.2008, 16:18   #4
ActioNs
Пользователь
 
Регистрация: 17.07.2008
Сообщений: 38
По умолчанию

попробуй так:

Код:
#include <stdlib.h>
#include <stdio.h>

#define NELEMS(arr)   (sizeof(arr) / sizeof(arr[0]))
                   
int numarray[] = {123, 145, 512, 627, 800, 993};
int numeric(int * p1, int * p2)
{
   return( *p1 - *p2 );
}
int lookup(int key)
{
   int *itemptr;
   /* явное преобразование
      необходимо для исключения ошибки несовпадения типов, воз-
      никающей во время компиляции */
   itemptr = (int*) bsearch(&key, numarray, NELEMS(numarray), sizeof(int), (int (*)(const void *,const void *))numeric);
   return (itemptr != NULL);
}

int main(void)
{
   if(lookup(512))
      printf("В таблице есть элемент 512\n");
   else
      printf("В таблице нет элемента 512\n");
   return 0;
}
P.S.: VS2005 компилится
ActioNs вне форума Ответить с цитированием
Старый 24.12.2008, 16:26   #5
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Цитата:
Сообщение от Обьявление
Темы без конкретного вопроса улетают в неизвестном направлении.
Так что не обессудьте.
MaTBeu вне форума Ответить с цитированием
Старый 24.12.2008, 16:53   #6
Zid@ne
Пользователь
 
Регистрация: 18.01.2008
Сообщений: 49
По умолчанию

Цитата:
#include <stdlib.h>
#include <stdio.h>

#define NELEMS(arr) (sizeof(arr) / sizeof(arr[0]))

int numarray[] = {123, 145, 512, 627, 800, 993};
int numeric(int * p1, int * p2)
{
return( *p1 - *p2 );
}
int lookup(int key)
{
int *itemptr;
/* явное преобразование
необходимо для исключения ошибки несовпадения типов, воз-
никающей во время компиляции */
itemptr = (int*) bsearch(&key, numarray, NELEMS(numarray), sizeof(int), (int (*)(const void *,const void *))numeric);
return (itemptr != NULL);
}

int main(void)
{
if(lookup(512))
printf("В таблице есть элемент 512\n");
else
printf("В таблице нет элемента 512\n");
return 0;
}
а как сделать так, чтобы при компиляции она как бы не вылетала? (прога не то чтобы вылетает, а просто напросто сразу же выходит из рабочего режима...)
Zid@ne вне форума Ответить с цитированием
Старый 24.12.2008, 16:58   #7
ActioNs
Пользователь
 
Регистрация: 17.07.2008
Сообщений: 38
По умолчанию

Цитата:
Сообщение от Zid@ne Посмотреть сообщение
а как сделать так, чтобы при компиляции она как бы не вылетала? (прога не то чтобы вылетает, а просто напросто сразу же выходит из рабочего режима...)
выходит из режима при компиляции? O_o
имеете ввиду при запуске проги она отображает ответ и сразу закрывается? тогда добавьте getch() перед return; эта функция будет ждать ввода любого символа с клавиатуры

Код:
int main(void)
{
if(lookup(512))
printf("В таблице есть элемент 512\n");
else
printf("В таблице нет элемента 512\n");

getch();
return 0;
}
ActioNs вне форума Ответить с цитированием
Старый 24.12.2008, 18:07   #8
Zid@ne
Пользователь
 
Регистрация: 18.01.2008
Сообщений: 49
По умолчанию

разобрался)) <conio.h> не подключил - вот и не работало))
Zid@ne вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C++ под DOS. Функции Xeon332 Общие вопросы C/C++ 34 29.11.2008 18:01
Написать подпрограмму-процедуру поиска максимального элемента в массиве Noxil Паскаль, Turbo Pascal, PascalABC.NET 3 27.11.2008 21:39
borland C++под DOS Xeon332 Помощь студентам 9 20.09.2008 20:50
Существование элемента в массиве Carbon Помощь студентам 10 31.03.2008 19:03