Важная информация
Показано с 1 по 7 из 7

Тема: Нужно применить бинарный поиск к коду, но у меня что-то не получается

  1. #1 Нужно применить бинарный поиск к коду, но у меня что-то не получается 
    Новичок
    Регистрация
    27.06.2018
    Сообщений
    4
    Сказал(а) спасибо
    1
    Поблагодарили 0 раз(а) в 0 сообщениях
    C++ Code:
    1.  
    2. #include <iostream>
    3. using namespace std;
    4.  
    5. int main()
    6. {
    7.     int n, ieven=0, tmp;
    8.     cout <<"n="; cin >>n;
    9.  
    10.     int*a = new int[n]; // объявление динамического массива 'a' размером n
    11.     int*b = new int[n-1]; // // объявление динамического массива 'b' размером n-1
    12.  
    13.     cout <<"Enter "<<n<<" elements:\n";
    14.     for (int i = 0; i < n; i++)      
    15.       cin >>a[i];  // заполнение массива 'a' значениями с клавиатуры  
    16.       
    17.     for (int i = 0; i < n; i++)
    18.     if(a[i]%2==0) {ieven=i; break;} // нахождение индекса первого чётного элемента
    19.     // как только первый чётный элемент найден вываливаемся из цикла c помощью break
    20.     
    21.     for (int i = 0; i < ieven; i++)
    22.     b[i]=a[i]; // копируем в массив 'b' элементы массива 'a' до первого чётного                    
    23.     
    24.     for (int i = ieven; i < n-1; i++)
    25.     b[i]=a[i+1]; // копируем в массив 'b' элементы массива 'a' после первого чётного
    26.     
    27.     delete[]a; // освобождаем память массива 'a'
    28.     
    29.     a=b; // присваиваем указателю 'a' значение указателя 'b'
    30.     
    31.     cout <<"Modified matrix:\n";
    32.     for (int i = 0; i < n-1; i++)      
    33.       cout <<a[i]<<" ";    // выводим на экран модифицированный массив (массив 'a' без первого чётного)
    34.     
    35.     cout <<"\nSorted modified matrix:\n";
    36.       for (int i = 1, j; i < n-1; i++) // блок сортировки массива вставками по возрастанию
    37.     {
    38.         tmp = a[i];
    39.         for (j = i - 1; j >= 0 && a[j] > tmp; j--)  
    40.             a[j + 1] = a[j];    
    41.         a[j + 1] = tmp;    
    42.     }
    43.     
    44.     for (int i = 0; i < n-1; i++)      
    45.       cout <<a[i]<<" ";  // выводим на экран отсортированный модифицированный массив    
    46.     cout <<endl;
    47.     
    48.     delete[]b; // освобождаем память массива 'b'
    49. system("pause");
    50. return 0;
    51. }
    Последний раз редактировалось >Quiet Snow<; 27.06.2018 в 13:18. Причина: теги
    Ответить с цитированием  
     

  2. #2  
    Профи Аватар для rrrFer
    Регистрация
    01.08.2013
    Сообщений
    561
    Сказал(а) спасибо
    34
    Поблагодарили 249 раз(а) в 164 сообщениях
    Начни с описания задачи. Сейчас ты выложил код, причем совершенно не понятный.

    Бинарный поиск - это поиск значения в отсортированном массиве. У тебя же массива два. Что там с четными и прочими элементами - вообще не понятно.

    В коде есть ляпы.

    Цитата Сообщение от Саша Малахов Посмотреть сообщение
    // нахождение индекса первого чётного элемента
    Корректный ли результат вернет программа если четных элементов в массиве вообще нет?

    Цитата Сообщение от Саша Малахов Посмотреть сообщение
    'b' размером n-1
    почему не выделяется память под столько элементов, сколько нужно скопировать?

    Цитата Сообщение от Саша Малахов Посмотреть сообщение
    cout <<"Modified matrix:\n";
    У тебя не матрица, а одномерный массив. Несколько раз встречается.

    Ну ладно, ты взял массив, вырезал из него часть. Затем отсортировал и вывел на экран. Где твоя попытка реализовать бинарный поиск? (все что ты тут выложил как минимум с названием темы не связано)
    [Ссылки могут видеть только зарегистрированные пользователи. ] // программирование на Prolog, Erlang, C++
    Ответить с цитированием  
     

  3. 3 пользователя(ей) сказали cпасибо:

    >Quiet Snow< (27.06.2018), Free Admin (05.07.2018), Саша Малахов (29.06.2018)

  4. #3  
    Новичок
    Регистрация
    27.06.2018
    Сообщений
    4
    Сказал(а) спасибо
    1
    Поблагодарили 0 раз(а) в 0 сообщениях
    В том то и дело что тут нет поиска, но я могу выложить уже споиском но в программе находит кучу ошибок, а исправить не получается
    Ответить с цитированием  
     

  5. #4  
    Новичок
    Регистрация
    27.06.2018
    Сообщений
    4
    Сказал(а) спасибо
    1
    Поблагодарили 0 раз(а) в 0 сообщениях
    C++ Code:
    1. #include <iostream>
    2. using namespace std;
    3.  
    4. int main()
    5. {
    6.     int n, ieven=0, tmp;
    7.     cout <<"n="; cin >>n;
    8.  
    9.     int*a = new int[n];
    10.     int*b = new int[n-1];
    11.  
    12.     cout <<"Enter "<<n<<" elements:\n";
    13.     for (int i = 0; i < n; i++)      
    14.       cin >>a[i];  
    15.       
    16.     for (int i = 0; i < n; i++)
    17.     if(a[i]%2==0) {ieven=i; break;}  
    18.     
    19.     for (int i = 0; i < ieven; i++)
    20.     b[i]=a[i];                      
    21.     
    22.     for (int i = ieven; i < n-1; i++)
    23.     b[i]=a[i+1]; /
    24.     
    25.     delete[]a;
    26.     
    27.     a=b;
    28.     
    29.     cout <<"Modified massiv:\n";
    30.     for (int i = 0; i < n-1; i++)      
    31.       cout <<a[i]<<" ";    
    32.     
    33.     cout <<"\nSorted modified massiv x:\n";
    34.       for (int i = 1, j; i < n-1; i++)
    35.     {
    36.         tmp = a[i];
    37.         for (j = i - 1; j >= 0 && a[j] > tmp; j--)  
    38.             a[j + 1] = a[j];    
    39.         a[j + 1] = tmp;    
    40.     }
    41.     
    42.     for (int i = 0; i < n-1; i++)      
    43.       cout <<a[i]<<" ";      
    44.     cout <<endl;
    45.     
    46.     
    47.     
    48.     
    49.    {
    50.  
    51.     int binsearch(int x, int v[], int n)
    52.  
    53.     int low, high, mid;
    54.  
    55.     low = 0;
    56.     high = n;
    57.     while(low <= high) {
    58.         mid = (low + high) / 2;
    59.         if(x < v[mid])              
    60.             high = mid - 1;
    61.         else if(x > v[mid])
    62.             low = mid + 1;
    63.         else
    64.             return mid;
    65.     }
    66.     return -1;
    67. }
    68.  
    69. int main()
    70. {
    71.     int i, ret, num, nsize = 6, a[6];
    72.     
    73.     
    74.     for(i = 0; i < nsize; i++) {
    75.         a[i] = i;
    76.         cout<< a[i];
    77.     }
    78.     
    79.     num = 1;
    80.  
    81.     
    82.     if( (ret = binsearch(num, a, nsize)) < 0)
    83.         cout<< num);
    84.     else
    85.        cout<< num<< ret;}
    86. system("pause");
    87. return 0;
    88. }
    Последний раз редактировалось >Quiet Snow<; 30.06.2018 в 04:42. Причина: Выделяем код в сообщении и нажимаем на тег, теги должны "оборачивать" код, а не ставиться перед ним!
    Ответить с цитированием  
     

  6. #5 Бинарный поиск 
    Новичок
    Регистрация
    27.06.2018
    Сообщений
    4
    Сказал(а) спасибо
    1
    Поблагодарили 0 раз(а) в 0 сообщениях
    Вот я поиск реализовал но все равно не работает
    C++ Code:
    1.  
    2. #include <iostream>
    3. using namespace std;
    4.  
    5. int main()
    6. {
    7. int n, ieven=0, tmp;
    8. cout <<"n="; cin >>n;
    9.  
    10. int*a = new int[n];
    11. int*b = new int[n-1];
    12.  
    13. cout <<"Enter "<<n<<" elements:\n";
    14. for (int i = 0; i < n; i++)
    15. cin >>a[i];
    16.  
    17. for (int i = 0; i < n; i++)
    18. if(a[i]%2==0) {ieven=i; break;}
    19.  
    20. for (int i = 0; i < ieven; i++)
    21. b[i]=a[i];
    22.  
    23. for (int i = ieven; i < n-1; i++)
    24. b[i]=a[i+1]; /
    25.  
    26. delete[]a;
    27.  
    28. a=b;
    29.  
    30. cout <<"Modified massiv:\n";
    31. for (int i = 0; i < n-1; i++)
    32. cout <<a[i]<<" ";
    33.  
    34. cout <<"\nSorted modified massiv x:\n";
    35. for (int i = 1, j; i < n-1; i++)
    36. {
    37. tmp = a[i];
    38. for (j = i - 1; j >= 0 && a[j] > tmp; j--)
    39. a[j + 1] = a[j];
    40. a[j + 1] = tmp;
    41. }
    42.  
    43. for (int i = 0; i < n-1; i++)
    44. cout <<a[i]<<" ";
    45. cout <<endl;
    46.  
    47.  
    48.  
    49.  
    50. {
    51.  
    52. int binsearch(int x, int v[], int n)
    53.  
    54. int low, high, mid;
    55.  
    56. low = 0;
    57. high = n;
    58. while(low <= high) {
    59. mid = (low + high) / 2;
    60. if(x < v[mid])
    61. high = mid - 1;
    62. else if(x > v[mid])
    63. low = mid + 1;
    64. else
    65. return mid;
    66. }
    67. return -1;
    68. }
    69.  
    70. int main()
    71. {
    72. int i, ret, num, nsize = 6, a[6];
    73.  
    74.  
    75. for(i = 0; i < nsize; i++) {
    76. a[i] = i;
    77. cout<< a[i];
    78. }
    79.  
    80. num = 1;
    81.  
    82.  
    83. if( (ret = binsearch(num, a, nsize)) < 0)
    84. cout<< num);
    85. else
    86. cout<< num<< ret;}
    87. system("pause");
    88. return 0;
    89. }
    Последний раз редактировалось >Quiet Snow<; 03.07.2018 в 10:20.
    Ответить с цитированием  
     

  7. #6  
    Admin
    Регистрация
    09.04.2014
    Сообщений
    1,220
    Сказал(а) спасибо
    781
    Поблагодарили 493 раз(а) в 405 сообщениях
    Цитата Сообщение от Саша Малахов Посмотреть сообщение
    все равно не работает
    для вставки программного кода существует специальная панель в сообщении...!
    Уважайте тех у кого просите помощи!
    Ответить с цитированием  
     

  8. #7  
    Профи Аватар для rrrFer
    Регистрация
    01.08.2013
    Сообщений
    561
    Сказал(а) спасибо
    34
    Поблагодарили 249 раз(а) в 164 сообщениях
    В коде даже фигурные скобки стоят неверно. Какой "бинарный поиск" - откройте первую главу учебника по С++.

    C++ Code:
    1. {
    2.  
    3. int binsearch(int x, int v[], int n)
    4.  
    5. int low, high, mid;


    Фигурная скобка ставится после описания аргументов функции, а не перед именем функции. Должно быть так:

    C++ Code:
    1. int binsearch(int x, int v[], int n) {
    2.   int low, high, mid;


    Решать за вас задачу мне лень, а нормально помочь человеку, который ничего не понимает невозможно.

    Да, и функцию внутри другой функции в С++ описывать нельзя. Можно только лямбда-функцию, но это не так как у вас делается.

    Все, что вы сделали - бездумно накопипастили код из нескольких источников, естественно он не скомпилируется.
    [Ссылки могут видеть только зарегистрированные пользователи. ] // программирование на Prolog, Erlang, C++
    Ответить с цитированием  
     

  9. Пользователь сказал cпасибо:

    Free Admin (05.07.2018)

Информация о теме
Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Не получается вызов _ftelli64
    от Сионист в разделе C/C++
    Ответов: 1
    Последнее сообщение: 30.05.2017, 20:52
  2. Комменты к коду
    от Игорь Левин в разделе Assembler
    Ответов: 0
    Последнее сообщение: 23.11.2013, 18:43
  3. Комментарии к коду
    от Ксю Логинова в разделе Assembler
    Ответов: 3
    Последнее сообщение: 18.09.2013, 11:36
  4. Не получается программу написать
    от Катюша Суворова в разделе QBasic
    Ответов: 6
    Последнее сообщение: 08.04.2013, 02:47
  5. Ответов: 5
    Последнее сообщение: 18.12.2011, 01:15
Ваши права
  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •