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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.05.2010, 21:47   #1
DartDayring
Пользователь
 
Регистрация: 10.02.2010
Сообщений: 55
Вопрос Вопрос о bsearch

не знаю почему не работает

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

struct f
 {
	 int N;
 };

int compareints (const void * a, const void * b)
{
   return ( *(int*)a - *(int*)b );
}

int main ()
{
	f values[6];
	for(int i=0; i<6; i++)
	{
		printf("N = "); scanf("%d",&values[i].N);
		printf("\n----------\n");
	}
  int * pItem;
  int key;
  printf("Введите N для поиска = "); scanf_s("%d",&key);
  pItem = (int*) bsearch (&key, values, 6, sizeof (int), compareints);
  if (pItem != NULL)
    printf ("%d да.\n",*pItem);
  else
    printf ("%d нет.\n",key);
  return 0;
}
DartDayring вне форума Ответить с цитированием
Старый 13.05.2010, 22:00   #2
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Сомневаюсь, что sizeof(f) == sizeof(int)
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 13.05.2010, 22:23   #3
DartDayring
Пользователь
 
Регистрация: 10.02.2010
Сообщений: 55
По умолчанию

Ни чего не понял.
Мне нужно определить есть ли в структуре введенный key
DartDayring вне форума Ответить с цитированием
Старый 13.05.2010, 22:40   #4
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

С алгоритмом bsearch не сталкивался, но чисто из общей эрудиции после взгляда на код советую попробовать поменять sizeof(int) на sizeof(f). Это - первое, что приходит в голову из самых общих соображений.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 13.05.2010, 22:52   #5
DartDayring
Пользователь
 
Регистрация: 10.02.2010
Сообщений: 55
По умолчанию

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

struct f
 {
	 int N;
 };

int compareints (const void * a, const void * b)
{
   return  (*(f*)a).N - (*(f*)b).N;
}

int main ()
{
	f values[6];
	for(int i=0; i<6; i++)
	{
		printf("N = "); scanf("%d",&values[i].N);
		printf("\n----------\n");
	}
  int * pItem;
  int key;
  printf("Введите N для поиска = "); scanf_s("%d",&key);
  pItem = (int*) bsearch (&key, values, 6, sizeof (f), compareints);
  if (pItem != NULL)
    printf ("%d yes.\n",*pItem);
  else
    printf ("%d net.\n",key);
  return 0;
}
я поставил в (*(f*)a).N - (*(f*)b).N , .N ?
DartDayring вне форума Ответить с цитированием
Старый 13.05.2010, 23:09   #6
DartDayring
Пользователь
 
Регистрация: 10.02.2010
Сообщений: 55
По умолчанию

А вообще в bsearch можно работать со структурой ? Или она производит поиск только в массивах?
DartDayring вне форума Ответить с цитированием
Старый 14.05.2010, 02:33   #7
kedbl4
Пользователь
 
Регистрация: 09.09.2009
Сообщений: 28
По умолчанию

Цитата:
Сообщение от DartDayring Посмотреть сообщение
А вообще в bsearch можно работать со структурой ? Или она производит поиск только в массивах?
ищет в массиве.
и самый главный фактор чтоб искало: массив должен быть отсортирован!
двоичный поиск работает так: берется серединый элемент и сравнивается с искомым...если искомый больше серединного то правая часть массива делится еще раз пополам и уже сверяется с другим серединным элементом.
соответсвенно есть меньше то уходим влево и так пока не найдем.

если не разобрались как работает, то в гуглите и там научным языком все напишут.
kedbl4 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос по VB 6 JackRND Помощь студентам 0 17.02.2010 20:33
Вопрос по mySQL + Вопрос по RichEdit HTL Общие вопросы Delphi 4 01.01.2010 20:22
Вопрос наверное про функции, а так точно даже не знаю про что. (Вопрос начинющего #6) Albert2008 Общие вопросы Delphi 4 21.08.2008 15:33
вопрос по сокетам и общение как в ICQ.Сложный вопрос... Руслантус Общие вопросы C/C++ 2 12.08.2008 21:10
bsearch в С++ Иллидан Помощь студентам 5 25.04.2008 20:34