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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.05.2013, 19:14   #1
Morpho
Пользователь
 
Регистрация: 22.07.2012
Сообщений: 29
По умолчанию Вопрос по коду бинарного поиска

Всем привет!
Делаю задачу, в которой требуется реализовать бинарный поиск.
Почему-то в цикле программа не обрабатывает if-ы, которые проверяют, больше ли серединный элемент требуемого числа, или нет...
Кто-нибудь может помочь найти, ошибку? Пробовал точки остановок использовать - программа даже не заходит в эти if-ы

Код:
#include "stdafx.h"
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <math.h>


#define M_PI 3.14

using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{
	setlocale(LC_ALL, "Russian");

	int n, mid;
	int querry;
	bool found = false;

	printf("Input count of the elements you're going to input: ");
	cin >> n;
	
	int *x = new int[n];

	printf("Now input all your elements: ");
	for(int i = 0; i <= (n-1); i++) cin >> x[i];
	printf("Input your request: ");
	cin >> querry;

	mid = n/2;
	for( ; found ; )
	{
		if(x[mid] < querry) mid = mid/2;
		if(x[mid] > querry)	mid += mid/2;		
		if(x[mid] == querry)
		{
			found = true;
			printf("Index of element you're looking for is %d \n", mid);
			system("pause");
			return 0;
		}

	}

	delete [] x;

	system("pause");
	return 0;
}
Morpho вне форума Ответить с цитированием
Старый 03.05.2013, 19:21   #2
kineziz
Форумчанин
 
Регистрация: 22.12.2011
Сообщений: 378
По умолчанию

Попробуйте пропустить код через отладчик и построчно его проходите.
Большинство хороших программистов делают свою работу не потому, что ожидают оплаты или признания, а потому что получают удовольствие от программирования.
kineziz вне форума Ответить с цитированием
Старый 03.05.2013, 22:35   #3
Morpho
Пользователь
 
Регистрация: 22.07.2012
Сообщений: 29
По умолчанию

Нашёл проблему. В цикле в if-ах я сравнивал x[mid] с querry, а надо было наоборот...
Вот как-то так:

Код:
#include "stdafx.h"
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <math.h>


#define M_PI 3.14

using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{
	setlocale(LC_ALL, "Russian");

	int n, mid;
	int querry;
	bool found = false;

	printf("Input count of the elements you're going to input: ");
	cin >> n;
	
	int *x = new int[n];

	printf("Now input all your elements: ");
	for(int i = 0; i <= (n-1); i++) cin >> x[i];
	printf("Input your request: ");
	cin >> querry;

	mid = n/2;
	for( ; ; )
	{
		if(querry < x[mid]) mid = mid/2;
		if(querry > x[mid])	mid += mid/2;		
		if(querry == x[mid])
		{
			found = true;
			printf("Index of element you're looking for is %d \n", mid);
			system("pause");
			return 0;
		}
	}

	delete [] x;

	system("pause");
	return 0;
}
Morpho вне форума Ответить с цитированием
Старый 03.05.2013, 22:42   #4
kineziz
Форумчанин
 
Регистрация: 22.12.2011
Сообщений: 378
По умолчанию

Да не, не в том дело. Вы просто знаки перепутали
Большинство хороших программистов делают свою работу не потому, что ожидают оплаты или признания, а потому что получают удовольствие от программирования.
kineziz вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Метод бинарного поиска Ксения Юрьевна Помощь студентам 10 16.06.2012 19:18
Дерево бинарного поиска vika911 Помощь студентам 3 17.03.2012 20:57
Распечатка бинарного дерева поиска xMURNx Помощь студентам 0 05.04.2011 22:59
Алгоритмы линейного и бинарного поиска. Seafulf Паскаль, Turbo Pascal, PascalABC.NET 4 01.03.2008 21:39