Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
0 / 0 / 3
Регистрация: 31.08.2015
Сообщений: 49

Линейный поиск с 2 указателями

02.09.2015, 22:40. Показов 1478. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Выдает ошибку, что я first не могу возвращать. Как подскажите выправить ошибку?
Сама функция:
C++
1
2
3
4
5
6
7
8
9
10
int find(int* array, int* afterLast, int value)
{
    int* afterLast = array + sizeof(array) / sizeof(array[0]);
    for (int*first = array; first != afterLast; ++first)
    {
        if (array[first] == value)
            return first;
    }
    return -1;
}
Кусок кода: Вывод на екран
C++
1
2
printf("find: %d\n", find(array, first - array, 8));
    printf("find: %d\n", find(array, (first - array) - 1, 8));
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.09.2015, 22:40
Ответы с готовыми решениями:

Поиск в контейнере с указателями
Например, имеется класс, конструктор которого принимает два параметра. И контейнер - мультимножество, который хранит указатели на этот...

Линейный поиск
Помогите сделать. Функция принимает число. Возвращает индекс этого числа в массиве. Или -1, если число не найдено

линейный поиск
Написать программу, решающую задачу линейного поиска элемента в заданном вещественном массиве. ошибку выдает: #include...

22
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
02.09.2015, 22:45
Цитата Сообщение от sswt Посмотреть сообщение
Как подскажите выправить ошибку?
Подсказать как исправить ошибку, или подсказать из-за чего она проявляется?
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
02.09.2015, 22:46
first - указатель
C++
1
2
        if ( *first == value)
            return *first;
0
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
02.09.2015, 22:47
sswt, у Вас вся функция неверно работает, не говоря уже о том, что вернуть Вы пытаетесь указатель, а возвращаемое значение функции - целое число.
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
02.09.2015, 22:48
ну и это:
C++
1
int* afterLast = array + sizeof(array) / sizeof(array[0]);
работать будет, но не так, как ожидается. array - указатель, так что получите
C++
1
sizeof(int*) / sizeof(int)
0
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
02.09.2015, 22:49
Цитата Сообщение от sswt Посмотреть сообщение
C++
1
int* afterLast = array + sizeof(array) / sizeof(array[0]);
в afterLast будет лежать второй элемент массива, а не тот, что после последнего, как Вам хотелось бы.
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
02.09.2015, 22:50
Цитата Сообщение от Kerry_Jr Посмотреть сообщение
лежать второй элемент массива
не обязательно второй
0
0 / 0 / 3
Регистрация: 31.08.2015
Сообщений: 49
02.09.2015, 22:52  [ТС]
Снова таки у меня указатель afterLast и я понимаю что не могу с индексом его сравнивать. Но я незнаю как по другому сделать(((
C++
1
2
3
4
5
6
7
8
9
10
int find(int* array, int* afterLast, int value)
{
    int* afterLast = array + sizeof(array) / sizeof(array[0]);
    for (int index = 0; index != afterLast; ++index)
    {
        if (array[index] == value)
            return index;
    }
    return -1;
}
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
02.09.2015, 22:52
Цитата Сообщение от Croessmah Посмотреть сообщение
не обязательно второй
и не обязательно лежать
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
02.09.2015, 22:58
Предлагаю такой вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
//Title of this code
//g++  4.9.2
 
#include <iostream>
 
 
 
int * find(int * begin, int * end, int value)
{
   while ( begin != end && *begin != value )
      ++begin ;
   return begin ;
}
 
 
 
int main()
{
    int arr[] = { 10 , 32 , 11 , 26 } ;
    int * arrEnd = arr + sizeof(arr)/sizeof(*arr) ;
    int * pFind1 = find ( arr , arrEnd , 11 ) ;
    int * pFind2 = find ( arr , arrEnd , 31 ) ;
    if ( pFind1 == arrEnd )
    {
        std::cout << "not found" << std::endl ;
    }
    else
    {
        std::cout << *pFind1 << std::endl ;
    }
    
    if ( pFind2 == arrEnd )
    {
        std::cout << "not found" << std::endl ;
    }
    else
    {
        std::cout << *pFind2 << std::endl ;
    }
}
http://rextester.com/MCD50559

А еще лучше использовать готовенькое из STL
0
0 / 0 / 3
Регистрация: 31.08.2015
Сообщений: 49
02.09.2015, 23:02  [ТС]
Croessmah понимаете я хочу написать функцию в которой все будет. Не в меине проверку делать а в функции . А в меине только выводить на екран.
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
02.09.2015, 23:09
Croessmah, вы что, действительно не понимаете?
0
0 / 0 / 3
Регистрация: 31.08.2015
Сообщений: 49
02.09.2015, 23:13  [ТС]
castaway, это сарказм?
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
02.09.2015, 23:15
Цитата Сообщение от castaway Посмотреть сообщение
вы что, действительно не понимаете?
неть

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream>
#include <limits>
 
const size_t invalid_index = std::numeric_limits<size_t>::max() ;
 
 
int * find( int * begin, int * end, int value)
{
   while ( begin != end && *begin != value )
      ++begin ;
   return begin ;
}
 
 
 
size_t find_index ( int * arr , size_t count , int value )
{
    int * arrEnd = arr + count ;
    int * pFind = find ( arr , arrEnd , value ) ;
    if ( pFind != arrEnd )
        return static_cast<size_t>(pFind - arr) ;
    return invalid_index ;
}
 
 
 
int main()
{
    int arr[] = { 10 , 32 , 11 , 26 } ;
    size_t count = sizeof(arr)/sizeof(*arr) ;
    std::cout << find_index ( arr , count , 11 ) << std::endl ;
    std::cout << find_index ( arr , count , 31 ) << std::endl ;
}
Добавлено через 1 минуту
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
#include <limits>
 
const size_t invalid_index = std::numeric_limits<size_t>::max() ;
 
 
 
size_t find_index ( int * arr , size_t count , int value )
{
    for ( size_t i = 0 ; i < count ; ++i )
    {
        if ( arr[i] == value )
            return i ;
    }
    return invalid_index ;
}
 
 
 
int main()
{
    int arr[] = { 10 , 32 , 11 , 26 } ;
    size_t count = sizeof(arr)/sizeof(*arr) ;
    std::cout << find_index ( arr , count , 11 ) << std::endl ;
    std::cout << find_index ( arr , count , 31 ) << std::endl ;
}
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
02.09.2015, 23:17
sswt,
а что выводить на экран, если value в массиве нет?
0
0 / 0 / 3
Регистрация: 31.08.2015
Сообщений: 49
02.09.2015, 23:19  [ТС]
Croessmah, спасибо, но я хочу сделать с 2 указателями а у Вас в последнем коде с 1 идет. Ладно, завтра с утра на свежую олову еще подумаю как сделать)
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
02.09.2015, 23:21
Цитата Сообщение от sswt Посмотреть сообщение
castaway, это сарказм?
Что именно?
0
0 / 0 / 3
Регистрация: 31.08.2015
Сообщений: 49
02.09.2015, 23:22  [ТС]
Даценд, я ж написал в 1 посте что это часть кода.
C++
1
2
3
4
5
6
7
8
9
10
int main()
{
int array[5];
array[0] = 2;
array[1] = 5;
array[2] = 2;
array[3] = 3;
array[4] = 8;
printf("find: %d\n", find(array, (first - array) - 1, 8));
}
Добавлено через 44 секунды
castaway, ваш пост про непонимание

Ладно парни, спасибо что отклыкнулись. Завтра еще раз посмотрю где я натупил
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
02.09.2015, 23:23
sswt, да.
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
02.09.2015, 23:37
sswt,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int find(int* first, int* last, int value)
{
   int index = 0;
   while (first+index!=last)
   {
       if (first[index]==value)
           return index;
       index++;
   }
   return -1;
}
//...
    int arr[] = { 10 , 32 , 11 , 26 } ;
    int* last = arr + sizeof(arr)/sizeof(arr[0]) ;
    int Find1 = find ( arr , last , 26 ) ;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.09.2015, 23:37
Помогаю со студенческими работами здесь

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

Линейный поиск в потоках
кому не сложно и у кого есть IDE просто посмотрите прикрепленный проект не понимаю где ошыбка... имееться базовый класс MyThread...

Линейный поиск в массиве
Адекватно не работает линейный поиск, при вводе любого элемента, кроме первого, выводит результат как на картинке. В чем проблема? ...

Линейный поиск в массиве
Подскажите пожалуйста ,что нужно сделать для реализации линейного поиска в данном массиве? Буду очень признателен. #include...

Линейный поиск(рекурсия)
Добрый день. Разбираюсь с рекурсией, и столкнулся с некоторой проблемой. У Дейтлов есть задача по написанию программы линейного поиска...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru