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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.09.2010, 20:16   #1
sabaton
Пользователь
 
Регистрация: 14.03.2010
Сообщений: 25
Смущение [B]Не работает бинарный поиск![/B]

Не могу найти ошибки..Программа работает не совсем корректно) Нужно реализовать поиск..линейный и бинарный...
Код:
# include <iostream>
# include <conio.h>
using namespace std;

class Laba
{
      public:
             int *A, n, i, j;
             void Enter () // функция ввода масива
             {
                  cout <<"Enter amount of masiv" << endl; // вводиться размер масива
                  cin >> n;
                  A=new int[n];
                  cout <<"Enter data" << endl; // вводятся данные масива 
                  for (i=0;i<n;i++)
                  cin >>A[i];
             };
             void Sorting () // функция сортировки (реализован пузырьковый алгоритм)
             {
                 int k ;
                 for (i=0;i<n;i++)
                 {
                     for (j=i+1;j<n;j++) 
                     {
                         if (A[j]<A[i]) 
                         {
                          k=A[j];
                          A[j]=A[i];
                          A[i]=k;
                          }
                     }
                 }
                 cout << "Sort data" << endl;
                 for (i=0;i<n;i++)
                 cout << A[i] << endl;
             };
             void Linear_Search () // функция линейного поиска
             {
                  int k, x;
                  int flag=0;
                  cout << "Enter number" << endl;
                  cin >> k;
                  for (i=0;i<n;i++)
                  {
                      if (A[i]==k)
                      {
                       x=i;
                       flag=1;
                       break;
                      }
                  }
                  if (flag==1) {
                  cout << "Found in: " << x << endl;
                  }
                  else {
                  cout << "Not Found" << endl;} // ЗДЕСЬ у меня почему-то, если я введу елемент, которого нет в масиве, то должен работать "else", но он не срабатывает и прога виснет.. ПОМОГИТЕ ПЛЗ
             };
             void Binary_Search () // функция бинарного поиска..Работает некорректно..Только если размер масива почему-то не больше 3..И то, если я ищу первый елемент, то программа зависает..=(
             {
               int a=0, z=n, Average=0, k, u=1, flag=0;
               cout << "Enter Number" << endl;
               cin >> k;
               while ((a<z)&&(u))
               {
                     Average=(a+z)/2;
                     if (A[Average]== k)
                     u--;
                     if (A[Average]>k)
                     n=Average-1;
                     else
                     a=Average+1;
                     flag=1;
               }
               if (A[Average]==k){
               cout << "Found in" << endl << Average;}
               else{
               cout << "Not Found";} // тоже елс не работает=(
               } 
};
int main (void) 
{
 int e, search;
 Laba P;
// здесь реализация меню
 cout << "1 - Enter data \n2 - Sorting \n3 - Search \n0 - Exit \n" ;
 do
 {
      cout <<"->";
      cin >> e;
      while ((e!=1)&&(e!=2)&&(e!=3)&&(e!=0))
      {
            cout << "Wrong Input! Enter Again" << endl;
            cin >> e;
      }
 if (e==1)
 {
          
          P.Enter ();
 }
 if (e==2)
 {
          P.Sorting (); 
 } 
 if (e==3)
 {
          cout << "Select for Search:\n 1 - Linear \n 2 - Binary (At First sort out) \n";
          cin >> search;
          while ((search!=1)&&(search!=2))
          {
                cout <<" Wrong Input! Enter Again" << endl;
                cin >> search;
          }
          if (search==1)
          {
                        P.Linear_Search ();
          }
          if (search==2)
          {
                        P.Binary_Search ();
          }
 }
}
while (e!=0);
getch ();
}
Чтобы лучше понять в чем проблема, пожалуйста, откомпилируйте..


Буду очень благодарен за помощь! Заранее спасибо
sabaton вне форума Ответить с цитированием
Старый 21.09.2010, 20:42   #2
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

Линейный поиск у меня работает отлично, а вот в бинарном нашел пару ошибок:
Код:
# include <iostream>
# include <conio.h>
using namespace std;

class Laba
{
      public:
             int *A, n, i, j;
             void Enter () // функция ввода масива
             {
                  cout <<"Enter amount of masiv" << endl; // вводиться размер масива
                  cin >> n;
                  A=new int[n];
                  cout <<"Enter data" << endl; // вводятся данные масива 
                  for (i=0;i<n;i++)
					cin >>A[i];
             };
             void Sorting () // функция сортировки (реализован пузырьковый алгоритм)
             {
                 int k ;
                 for (i=0;i<n;i++)
                 {
                     for (j=i+1;j<n;j++) 
                     {
                         if (A[j]<A[i]) 
                         {
                          k=A[j];
                          A[j]=A[i];
                          A[i]=k;
                          }
                     }
                 }
                 cout << "Sort data" << endl;
                 for (i=0;i<n;i++)
                 cout << A[i] << endl;
             };
             void Linear_Search () // функция линейного поиска
             {
                  int k, x;
                  int flag=0;
                  cout << "Enter number" << endl;
                  cin >> k;
                  for (i=0;i<n;i++)
                  {
                      if (A[i]==k)
                      {
                       x=i;
                       flag=1;
                       break;
                      }
                  }
                  if (flag==1) {
                  cout << "Found in: " << x << endl;
                  }
                  else {
                  cout << "Not Found" << endl;} // ЗДЕСЬ у меня почему-то, если я введу елемент, которого нет в масиве, то должен работать "else", но он не срабатывает и прога виснет.. ПОМОГИТЕ ПЛЗ
             };
             void Binary_Search () // функция бинарного поиска..Работает некорректно..Только если размер масива почему-то не больше 3..И то, если я ищу первый елемент, то программа зависает..=(
             {
               int a=0, z=n, Average=0, k, u=1, flag=0;
               cout << "Enter Number" << endl;
               cin >> k;
               while ((a<=z)&&(u))
               {
                     Average=(a+z)/2;
                     if (A[Average]== k)
						u--;
					 else if (A[Average]>k)
						z=Average-1;
                     else
						a=Average+1;
                     flag=1;
               }
               if (A[Average]==k){
               cout << "Found in" << endl << Average;}
               else{
               cout << "Not Found";} // тоже елс не работает=(
               } 
};

int main (void) 
{
	int e, search;
	Laba P;
	// здесь реализация меню
	cout << "1 - Enter data \n2 - Sorting \n3 - Search \n0 - Exit \n" ;
	do
	 {
      cout <<"->";
      cin >> e;
      while ((e!=1)&&(e!=2)&&(e!=3)&&(e!=0))
      {
            cout << "Wrong Input! Enter Again" << endl;
            cin >> e;
      }
	if (e==1)
	{          
          P.Enter ();
	}
	if (e==2)
	{
          P.Sorting (); 
	} 
	if (e==3)
	{
          cout << "Select for Search:\n 1 - Linear \n 2 - Binary (At First sort out) \n";
          cin >> search;
          while ((search!=1)&&(search!=2))
          {
                cout <<" Wrong Input! Enter Again" << endl;
                cin >> search;
          }
          if (search==1)
          {
                        P.Linear_Search ();
          }
          if (search==2)
          {
                        P.Binary_Search ();
          }
	}
	}
	while (e!=0);
	return 0;
}
Цитата:
Рейтинг темы: голосов - 1, средняя оценка - 5.00
Чего тут на "5", честно говоря, не понял.
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Syuf вне форума Ответить с цитированием
Старый 21.09.2010, 20:51   #3
sabaton
Пользователь
 
Регистрация: 14.03.2010
Сообщений: 25
Хорошо

Спасибо большое!!!Понял..Уже работает!!!

ПС: На счет оценки это я утрировал=))
sabaton вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Бинарный поиск CraZZZy-GameRRR Общие вопросы Delphi 8 25.05.2010 14:57
Рекурсивной бинарный поиск Stranger333 Помощь студентам 4 07.05.2010 20:48
Бинарный поиск 0IceCube0 Паскаль, Turbo Pascal, PascalABC.NET 1 13.04.2010 15:52
Бинарный поиск Gendalf Помощь студентам 1 07.07.2007 22:09