Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.97/34: Рейтинг темы: голосов - 34, средняя оценка - 4.97
2 / 2 / 0
Регистрация: 15.12.2018
Сообщений: 222

Как написать программу поиска элемента в массиве

28.11.2019, 15:39. Показов 7090. Ответов 36
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Параметры:
• [in] begin — указатель на нулевой элемент массива
• [in] end — указатель на элемент, расположенный за последним
• [in] value — значение искомого элемента
Возвращаемое значение: указатель на найденный элемент. Если элемент не найден, вернуть NULL .
Подготовить тестовое приложение. Выполнить поиск заданного элемента в массиве. Изменить его знак,
используя возвращаемое значение функции find_element
Пример
Enter array size: 5
Enter array elements: 5 4 3 4 5
Enter element to find: 4
Result: 5 -4 3 4 5
Enter array size: 5
Enter array elements: 5 4 3 4 5
Enter element to find: 42
Element 42 not found
Result: 5 4 3 4 5

 Комментарий модератора 
Не дублируйте темы - это нарушает правила форума.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.11.2019, 15:39
Ответы с готовыми решениями:

Написать функцию поиска заданного элемента в целочисленном массиве
Написать функцию поиска заданного элемента в целочисленном массиве. Отсортировать по возрастанию все элементы справа от найденного методом...

Функция поиска максимального элемента в массиве
Составьте функцию maxarray, возвращающую индекс максимального элемента произвольного массива. Функция должна быть объявлена как int...

Функция поиска максимального элемента в массиве
Необходимо составить функцию поиска индекса макс. эл-та в массиве. int max (void *arr, unsigned long n, unsigned long w, int...

36
2 / 2 / 0
Регистрация: 15.12.2018
Сообщений: 222
28.11.2019, 19:22  [ТС]
Студворк — интернет-сервис помощи студентам
Но разве это имеет смысл? Просто я потом даже не представляю, как поместить переделанное число в массив на то же место, где было то этого
Миниатюры
Как написать программу поиска элемента в массиве  
0
2 / 2 / 0
Регистрация: 15.12.2018
Сообщений: 222
28.11.2019, 19:23  [ТС]
Так, тогда надо что то придумать. Мне надо вывести уже новый массив, но с элементом, отличающимся по знаку. Сейчас подумаю...
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
28.11.2019, 19:23
Да в самой функции и меняешь
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
28.11.2019, 19:28
Причем все, равные данному числу

Добавлено через 4 минуты
Впрочем, можно поменять и по полученному адресу элемента. Ведь это адрес в массиве. Там и поменяется.
Но тогда можно будет поменять только один элемент. Ну или повторять поиск со следующего элемента, до тех пор, пока находится... Немного неуклюже... Но вполне возможно
0
2 / 2 / 0
Регистрация: 15.12.2018
Сообщений: 222
28.11.2019, 19:28  [ТС]
То я должен изменить это в find_elements, а не в int main()?
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
28.11.2019, 19:30
Цитата Сообщение от RumeOne Посмотреть сообщение
То я должен изменить это в find_elements
именно так. Ибо так проще всего.
0
2 / 2 / 0
Регистрация: 15.12.2018
Сообщений: 222
28.11.2019, 19:32  [ТС]
Ыыыы, почему это все так сложно для восприятия, вы не знаете?
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
28.11.2019, 19:35
Такое было, наверное, у всех, кто только начал изучать. Я уверяю, это пройдет, терпение и труд все перетрут...
0
2 / 2 / 0
Регистрация: 15.12.2018
Сообщений: 222
28.11.2019, 19:41  [ТС]
Даже представить не могу, как в функции изменить уже данный массив, причем изменить именно то число, которое нашлось(
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
28.11.2019, 19:52
RumeOne, Ладушки, держи...
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
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
 
#define N 5
 
bool find_element(int* begin, int* end, int value) 
{
    int* i;
    bool res = false;
 
    for (i = begin; i < end; i++) 
    {
        if (*i == value)
        {
            *i *= -1;
            res = true;
            break;
        }
    }
    return res;
}
int main() 
{
    int array[N], value;
    printf("Enter array elements:\n");
    for (int i = 0; i < N; i++) 
        scanf("%d", &array[i]);
 
    printf("Enter element to find: ");
    scanf("%d", &value);
    if (!find_element(array, &array[N], value))
        printf("\nElement %d not found", value);
 
    printf("\nResult: ");
    for (int i = 0; i < N; i++)
        printf("%d ", array[i]);
    printf("\n");
}
Судя по второй картинке, надо поменять знак только у первого найденного элемента (а не у всех)
0
2 / 2 / 0
Регистрация: 15.12.2018
Сообщений: 222
28.11.2019, 19:54  [ТС]
А зачем нам тип bool? Я даже с таким не сталкивался(
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
28.11.2019, 19:59
RumeOne, не нравится bool, тогда держи такое решение.
С учетом того, что меняем только первое найденное
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
41
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
 
#define N 5
 
int*  find_element(int* begin, int* end, int value) 
{
    int* result = NULL;
    int* i;
 
    for (i = begin; i < end; i++) 
    {
        if (*i == value)
        {
            result = i;
            break;
        }
    }
    return result;
}
int main() 
{
    int array[N], value, *result;
    printf("Enter array elements:\n");
    for (int i = 0; i < N; i++) 
        scanf("%d", &array[i]);
 
    printf("Enter element to find: ");
    scanf("%d", &value);
    result = find_element(array, &array[N], value);
    if (!result)
        printf("\nElement %d not found", value);
    else
        *result *= -1;
 
    printf("\nResult: ");
    for (int i = 0; i < N; i++)
        printf("%d ", array[i]);
    printf("\n");
}
Добавлено через 1 минуту
И кроме того, в задании сказано, что функция должна возврвщать адрес элемента
1
2 / 2 / 0
Регистрация: 15.12.2018
Сообщений: 222
28.11.2019, 20:05  [ТС]
Сейчас я напишу смысл вашей функции, и вы, пожалуйста, скажите правильно ли я понял. Мы создали переменную *result и присвоили ей значение NULL(если честно, не понял зачем мы сделали ее указателем) и создали переменну *i(зачем ей указатель тоже не очень понял, дурацкая тема ;( ). Далее пробегаемся по массиву и ищем чтобы наше i было равно нашему введенному числу (value), если такое находится, то мы result присваиваем i(то есть то число, которое совпало с нашим введенным). Ломаем цикл и возвращаем result
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
28.11.2019, 20:09
RumeOne, ну или так, как было изначально:
C
1
2
3
4
5
6
7
8
9
10
int* find_element(int* begin, int* end, int value) 
{
    int* i;
    for (i = begin; i < end; i++) 
    {
        if (*i == value)
            return i;
    }
    return NULL;
}
Так понятнее?
1
2 / 2 / 0
Регистрация: 15.12.2018
Сообщений: 222
28.11.2019, 20:25  [ТС]
Cейчас, пытаюсь экспериментировать , но картина проясняется))

Добавлено через 3 минуты
Так, я все вроде бы понял, но остались пару вопросов:
1) Почему же все таки в функции мы сделали *int i; все таки указателем? Как он работает?
2) Насколько я понял в функции возвращаемое значение будет i, это некоторое число. А в int main() i у нас заменяется на result, я правильно понял?

Добавлено через 8 минут
liv, liv, Спасибо вам огромное! Вы мне очень очень помогли!
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
28.11.2019, 20:33
Цитата Сообщение от RumeOne Посмотреть сообщение
Почему же все таки в функции мы сделали *int i; все таки указателем? Как он работает?
В задании сказано, что функция должна вернуть указатель на найденный элемент.
Цитата Сообщение от RumeOne Посмотреть сообщение
Насколько я понял в функции возвращаемое значение будет i, это некоторое число
Возвращается АДРЕС элемента или 0, если не найдено.
Цитата Сообщение от RumeOne Посмотреть сообщение
в int main() i у нас заменяется на result
В main() в result записывается возвращаемый адрес, который в функции у нас в i. Никакого i после выхода из функции уже не существует.
0
2 / 2 / 0
Регистрация: 15.12.2018
Сообщений: 222
28.11.2019, 20:39  [ТС]
Спасибо, что помогли решить задачу, и спасибо вашему большому терпению за мои глупые вопросы) Надо мне почитать про указатели. Хотя я читал Керниган и Ричи, но там не очень понял(
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.11.2019, 20:39

Функция поиска элемента в массиве без индексов
Доброго времени суток, прошу помощи в моем коде. Нужно написать функцию, которая принимает начальный адрес и конечный адрес фрагмента...

Функция для поиска мин и макс элемента в массиве
Разработать функцию min_max_elems, выполняющую поиск минимального и максимального элементов в массиве. Параметры функции: • Массив...

Написать программу, решающую задачу линейного поиска элемента вещественном массиве
Написать программу, решающую задачу линейного поиска элемента вещественном массиве вот... double mass; print2(n,mass); ...

Написать программу поиска номеров строки и столбца минимального и максимального элемента в заданном двухмерном массиве целых чисел
Написать программу поиска номеров строки и столбца минимального и максимального элемента в заданном двухмерном массиве целых чисел....

Создать программу для поиска первого нечетного элемента в заданном массиве методом бинарного поиска
Бинарный поиск Первый нечетный, помогите пожалуйста.


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

Или воспользуйтесь поиском по форуму:
37
Ответ Создать тему
Новые блоги и статьи
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru