Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Нужно написать функцию которая возвращает индекс 
:(
    Опции темы
rudolfninja
Дата 3.11.2015, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 341
Регистрация: 19.2.2013
Где: г. Минск

Репутация: 1
Всего: 6



Цитата(vovamakr @  3.11.2015,  13:05 Найти цитируемый пост)
(int index = 0; index < array[value]; ++index)

Что-то тут не так.
Допустим, у нас массив 10, 20, 30, 40. Как видно массив состоит из 4 элементов. Мы хотим найти индекс элемента со значением 30.
Как думаете, что будет в случае array[30]? Будет совсем не то, что вы планируете.

PM MAIL Skype   Вверх
vovamakr
Дата 3.11.2015, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 2.11.2015

Репутация: нет
Всего: нет



rudolfninja,  А как написать? Я  только учу  и не знаю как правильно( 
будет array[30] а у нас arra[4]

Это сообщение отредактировал(а) vovamakr - 3.11.2015, 13:15
PM MAIL   Вверх
rudolfninja
Дата 3.11.2015, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 341
Регистрация: 19.2.2013
Где: г. Минск

Репутация: 1
Всего: 6



Цитата(vovamakr @  3.11.2015,  13:05 Найти цитируемый пост)
 int FindValueInArray(const int* array, int value, int size)
{
    for (int index = 0; index < array[value]; ++index) // бинарный поиск я спрашывал в  препода следущее задание. А  тут  нужно пройтись покы етот елемент  больше следущих  
    {
        if (array[index] == value)
            return index;
    }
    return size;
}


Смотрите, зачем в эту функцию, по-вашему, передается размер массива? - Не только для того, чтоб вернуть его в случае, когда в массиве нет искомого элемента, но и для того, чтобы знать, когда заканчивать цикл обработки массива. 
PM MAIL Skype   Вверх
vovamakr
Дата 3.11.2015, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 2.11.2015

Репутация: нет
Всего: нет



rudolfninja, )) посмотрите мои посты ранее. но мне  нужно чтобы  не  доходил цикл до конца а    до индекса значения   value
PM MAIL   Вверх
rudolfninja
Дата 3.11.2015, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 341
Регистрация: 19.2.2013
Где: г. Минск

Репутация: 1
Всего: 6



Цитата(vovamakr @  3.11.2015,  13:23 Найти цитируемый пост)
но мне  нужно чтобы  не  доходил цикл до конца а    до индекса значения   value 

А как быть, если этого значения нет в массиве?
Не говорите, что вернуть размер массива =) Я имею в виду, как ваша программа узнает это?
PM MAIL Skype   Вверх
vovamakr
Дата 3.11.2015, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 2.11.2015

Репутация: нет
Всего: нет



Цитата(rudolfninja @  3.11.2015,  13:25 Найти цитируемый пост)
 как быть, если этого значения нет в массиве?
Не говорите, что вернуть размер массива =) Я имею в виду, как ваша программа узнает это? 

я об  этом  не  подумал.... но зачем  препод дал такое.  только не говорите чтобы  мены  проверить. я  только 2 месяца  учусь (1 курс)
PM MAIL   Вверх
rudolfninja
Дата 3.11.2015, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 341
Регистрация: 19.2.2013
Где: г. Минск

Репутация: 1
Всего: 6



Что то я не могу придумать как в данном случае использовать то, что массив отсортирован. Единственный вариант, который приходит на ум, это то, что написал federov, то есть использование бинарного поиска.
Даже если массив отсортирован, то мы, не зная его размер, можем с легкостью выйти за пределы массива.
PM MAIL Skype   Вверх
feodorv
Дата 3.11.2015, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Было же так:
Цитата(vovamakr @  3.11.2015,  12:02 Найти цитируемый пост)
    for (int index = 0; index < size; ++index)

А вообще, можно же прекратить ползать по массиву, если искомое значение стало меньше значения в массиве:
Код

int FindValueInArray(const int* array, int value, int size)
{
    for (int index = 0; index < size && value >= array[index]; ++index)
    {
        if (array[index] == value) return index;
    }
    return size;
}


Это сообщение отредактировал(а) feodorv - 3.11.2015, 13:42


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
rudolfninja
Дата 3.11.2015, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 341
Регистрация: 19.2.2013
Где: г. Минск

Репутация: 1
Всего: 6



Цитата(feodorv @  3.11.2015,  13:40 Найти цитируемый пост)
 можно же прекратить ползать по массиву, если искомое значение стало меньше значения в массиве:

Но если искомого значения нет в массиве и оно больше максимального элемнта (например, в массиве 1 2 3 4 5 ищем 10), то цикл будет бесконечный.

Я это к тому, что не зная размер массива никак не получится сделать требуемое задание.

Это сообщение отредактировал(а) rudolfninja - 3.11.2015, 13:49
PM MAIL Skype   Вверх
feodorv
Дата 3.11.2015, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(rudolfninja @  3.11.2015,  13:43 Найти цитируемый пост)
то цикл будет бесконечный

Почему?
Цитата(feodorv @  3.11.2015,  13:40 Найти цитируемый пост)
index < size && value >= array[index]





--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
rudolfninja
Дата 3.11.2015, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 341
Регистрация: 19.2.2013
Где: г. Минск

Репутация: 1
Всего: 6



feodorv, совершенно верно! =) Я исправлся в прошлом сообщении. Имел в виду, что не используя размер массива может произойти такая ситуация.
vovamakr, я предлагаю вам использовать вариант, который предложил feodorv. По-моему, он наиболее подходящий в вашем случае.

Это сообщение отредактировал(а) rudolfninja - 3.11.2015, 13:53
PM MAIL Skype   Вверх
feodorv
Дата 3.11.2015, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(rudolfninja @  3.11.2015,  13:52 Найти цитируемый пост)
Имел в виду, что не используя размер массива может произойти такая ситуация.

Нет, нет, без размера никак)))


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
math64
Дата 3.11.2015, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 12
Всего: 72



Цитата(feodorv @  3.11.2015,  14:11 Найти цитируемый пост)
Нет, нет, без размера никак))) 

Можно в конец массива одавить ещё один элемент 0x7FFFFFFF, явлаяющийся признаков конца массива (как '\0' для строк). Но при этом в массиве значение 0x7FFFFFFF будет запрещено.

PM   Вверх
feodorv
Дата 3.11.2015, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(math64 @  3.11.2015,  15:07 Найти цитируемый пост)
Можно в конец массива одавить ещё один элемент 0x7FFFFFFF

Можно))) Но возвращать-то в случае быстрого выхода из цикла по условию value < array[index] всё равно размер массива, что заставляет нас продолжать просматривать массив до конца, что делает применение этого условия бесполезным (да и отсортированность массива тоже))))



--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
vovamakr
Дата 3.11.2015, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 2.11.2015

Репутация: нет
Всего: нет



Цитата(feodorv @  3.11.2015,  11:50 Найти цитируемый пост)
unsigned int mid = (first + last) / 2;
        if( value == m[mid] ) return mid;

у Вас в коде mid что это?
PM MAIL   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

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


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1094 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.