Radon & Radium Ответов: 3

Ожидаемое '(' приведение стиля функции или построение типа


Когда я отлаживаю код здесь, он показывает ошибку, упомянутую выше.
int search(int A[],int N) {
    int item, i, beg = 0, mid, end;
    std::cout << "Enter the element";
    std::cin >> item;
    for (i = 0; i < N; i++) {
        end = N - 1;
        mid = (beg + end) / 2;
        if (A[mid] == item) {
            std::cout << "Search found";
            return item;
        } else if (A[mid] > item) {
            beg = mid + 1;
        } else end = mid - 1;
    }
    return -1;
}

int main() {
    int A[90],item,i,N,R;
    std::cout<<"Enter element to be searched";
    std::cin>>item;

    std::cout<<"Enter size of the array";
    std::cin>>N;

    std::cout<<"enter array";
    for(i=0;i<N;i++)
        std::cin>>A[i];

    R=search(int A[],int item);

    if(R!=1)
        std::cout<<"Success";
    else std::cout<<"Try again";
    return 0;
}

я совершенно не имею об этом ни малейшего представления.. Это код для двоичного поиска,,

Что я уже пробовал:

объявление массива без параметров

3 Ответов

Рейтинг:
20

PIEBALDconsult

Заменять:
R=search(int A[],int item);
с:
R=search( A , item);
?

И заменить;
if(R!=1)
с:
if(R!=-1)
?

И заменить:
return item;
с:
return mid;

Кроме того, ваш учитель ожидает, что вы будете использовать рекурсию?


Radon &amp; Radium

нет,она не знает.

Рейтинг:
2

Patrice T

Цитата:
Когда я отлаживаю код здесь, он показывает ошибку, упомянутую выше.

Это сообщение об ошибке не приходит во время отладки. Он исходит от компилятора, чтобы сообщить вам, что существует синтаксическая ошибка. Вы охотитесь за синтаксическими ошибками.
Отладка происходит после этого, когда больше нет синтаксической ошибки.
Отладчик предназначен для того, чтобы показать вам, что ваш код действительно делает, и вы должны сравнить его с тем, что вы ожидаете от него сделать.
int search(int A[],int N) {
    int item, i, beg = 0, mid, end;
    std::cout << "Enter the element";
    std::cin >> item;
    for (i = 0; i < N; i++) { // wrong kind of loop
        end = N - 1;  // this should not be inside the loop
        mid = (beg + end) / 2;
        if (A[mid] == item) {
            std::cout << "Search found";
            return item;
        } else if (A[mid] > item) {
            beg = mid + 1;
        } else end = mid - 1;
    }
    return -1;
}

Как только синтаксические ошибки будут исправлены, используйте отладчик и наблюдайте за поведением кода, вам, несомненно, будет интересно.


Рейтинг:
11

CPallini

Обратите внимание, что упорядоченный массив является предварительным условием двоичного поиска.
Чтобы исправить свой код, вы можете написать:

#include <iostream>
#include <algorithm>

bool search(int a[], size_t size, int item)
{
  int beg = 0;
  int end = size-1;

  while (true)
  {
    if ( (beg + 1) >=  end)  
      return (item == a[end] || item ==a[beg]);
    int mid = (beg+end)/2;
    if ( item == a[mid])
      return true; 
    else if ( item < a[mid] )
      end = mid;
    else  
      beg = mid;
  }
}
enum { max_size = 90 };
int main()
{

  int a[max_size];

  int item;
  std::cout << "Enter the item to search for ";
  std::cin >> item;

  size_t size;
  std::cout << "Enter the array size ";
  std::cin >> size;

  if ( size > max_size)
  {
    std::cerr << "wrong input\n";
    return -1;
  }

  std::cout << "Enter the array elements\n";

  for (size_t n = 0; n< size; ++n)
    std::cin >> a[n];

  std::sort( &a[0], &a[size]);

  bool found  = search( a, size, item);
  std::cout << "The item is " << (found ? "found\n" : "not found\n");
}



Однако во всех программах, кроме упражнений, я бы использовал огневую мощь стандартной библиотеки C++ :
#include <iostream>
#include <algorithm>
#include <vector>

int main()
{
  int item;
  std::cout << "Enter the item to search for ";
  std::cin >> item;

  size_t size;
  std::cout << "Enter the array size ";
  std::cin >> size;

  std::cout << "Enter the array elements\n";
  std::vector<int> v;
  v.resize(size);

  for (auto & x : v)
    std::cin >> x;

  sort(v.begin(), v.end());

  auto found =  binary_search(v.begin(), v.end(), item);
  std::cout << "The item is " << (found ? "found\n" : "not found\n");

}