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

Поиск:

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


Новичок



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

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



Нужно написать функцию которая возвращает индекс элемента в массиве который мы  ищем.  Массив наполнять вручную..  Если такого значения нет , повернуть  размер  массива. Массив  отсортирован. Я  без понятия как  делать.  Помогите написать. 
PM MAIL   Вверх
feodorv
Дата 2.11.2015, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(vovamakr @  2.11.2015,  22:05 Найти цитируемый пост)
Массив  отсортирован

Бинарный поиск?


Цитата(vovamakr @  2.11.2015,  22:05 Найти цитируемый пост)
повернуть  размер  массива

Что сделать?

Это сообщение отредактировал(а) feodorv - 2.11.2015, 22:15


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


Новичок



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

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



feodorv,  хз, препод сказа цыклом пройтись  и найти индекс 
повернуть  что то чтобы не перепутать с индексом


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


Эксперт
****


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

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



Цитата(vovamakr @  3.11.2015,  10:39 Найти цитируемый пост)
повернуть  что то чтобы не перепутать с индексом
Может, всё-таки вернуть из функции? Вам абсолютно всё равно, что и как, лишь бы сдать? Тогда Вам в "Центр помощи". По ссылке, что я Вам дал, можно найти код на C и C++, нужно будет только изменить возвращаемое из функции значение.



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


Новичок



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

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



feodorv, я  там не нашел ничего про массив(
PM MAIL   Вверх
feodorv
Дата 3.11.2015, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(vovamakr @  3.11.2015,  11:00 Найти цитируемый пост)
feodorv, я  там не нашел ничего про массив( 

По ссылке? Не нашли???
Цитата

Пример кода на языке программирования Си для поиска элемента x в массиве a[n], отсортированного в возрастающем порядке:

А в "Центр помощи" скопируйте своё первое сообщение. Не забудьте указать в заголовке в квадратных скобках язык программирования.


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


Новичок



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

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



сделал:
Код

int Array(int* array, int value, int size)
{
 
    
    for (int index = 0; index < size; ++index)
    {
        if (array[index] == value)
            return index;
        else
            return size;
    }
}
int main()
{
    int array[10] = { 1, 3, 5, 7, 8 };
 
    int pr = Array(array, 5, 10);
    printf("Value index:%d\n", pr);
 
}

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


Эксперт
****


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

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



Код

#include <stdio.h>

unsigned int binarySearch( int m[], unsigned int size, int value)
{
    unsigned int first = 0;
    unsigned last = size;

    while( first < last ) 
    {
        unsigned int mid = (first + last) / 2;

        if( value == m[mid] ) return mid;

        if( value < m[mid] )
            last = mid;
        else
            first = mid + 1;
    }

    return size;
}

int main()
{
    int mass[] = { 2, 3, 5, 7, 11, 13, 17, 19, 23, 29 };
    unsigned int index = binarySearch( mass, 10, 13);
    if( index < 10 )
      printf( "Found, index = %u\n", index);
    else
      printf( "Not found\n" );
    return 0;
}




Цитата(vovamakr @  3.11.2015,  11:48 Найти цитируемый пост)
сделал

А если:
Цитата(vovamakr @  3.11.2015,  11:48 Найти цитируемый пост)
    int pr = Array(array, 5, 3);



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


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


Новичок



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

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



Код

#include <cstdio>

int Array(int* array, int value)
{
    int size = (sizeof (array)) / sizeof(array[0]);
    for (int index = 0; index < size; ++index)
    {
        if (array[index] == value)
            return index;
    }
    return size;
}
int main()
{
    int array[10] = { 1, 3, 5, 7, 8 };

    int pr = Array(array, 3);
    printf("Value index:%d\n", pr);

}

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


Эксперт
****


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

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



Цитата(vovamakr @  3.11.2015,  12:02 Найти цитируемый пост)
Код

int size = (sizeof (array)) / sizeof(array[0]);

Так можно писать когда array объявлен как массив (в main).
В Array он передается как указатель. Поэтому size получится равным 1 (на 32-разрядной ОС)
PM   Вверх
vovamakr
Дата 3.11.2015, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



math64,  а как сделать чтобы норм работало?
PM MAIL   Вверх
rudolfninja
Дата 3.11.2015, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(vovamakr @  3.11.2015,  12:20 Найти цитируемый пост)
а как сделать чтобы норм работало? 

Передавать в функцию размер массива. Это вполне нормальная и распространенная практика.
PM MAIL Skype   Вверх
feodorv
Дата 3.11.2015, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(vovamakr @  3.11.2015,  12:20 Найти цитируемый пост)
а как сделать чтобы норм работало? 
Передавать размер массива дополнительным аргументом функции:
Цитата(vovamakr @  3.11.2015,  12:02 Найти цитируемый пост)
int Array(int* array, int size, int value)



Ну, и осталось учесть, что
Цитата(vovamakr @  2.11.2015,  22:05 Найти цитируемый пост)
Массив  отсортирован
 smile 




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


Опытный
**


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

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



Я думаю, что раз ему сказали в цЫкле  smile  пробежать по массиву и найти индекс, то факт, что массив отсортирован - бесполезный. Да и не думаю, что автор сам сможет бинарный поиск реализовать.
PM MAIL Skype   Вверх
vovamakr
Дата 3.11.2015, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



feodorv
Код

#include <cstdio>

 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;
}
int main()
{
    int array[5] = { 1, 3, 5, 7, 8 };

    int pr = FindValueInArray(array, 8, 5);
    printf("Value index:%d\n", pr);

}

PM MAIL   Вверх
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   Вверх
feodorv
Дата 3.11.2015, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(vovamakr @  3.11.2015,  18:04 Найти цитируемый пост)
у Вас в коде mid что это? 

Индекс элемента, лежащего ровно посередине между first и last.


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


Новичок



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

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




Модератор: Сообщение скрыто.

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

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

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

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

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


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

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


 




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


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

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