0 / 0 / 0
Регистрация: 03.05.2017
Сообщений: 6
1

Удалить из массива все элементы, равные заданному числу

03.05.2017, 15:20. Показов 5987. Ответов 16
Метки нет (Все метки)

Задано натуральное число n и массив из n целых чисел a0,a1,...,an-1, а также a*. Написать программу, которая удаляет из массива все элементы, равные a*. При этом на место каждого удаленного элемента записывается элемент справа от него. Образовавшиеся в конце массива свободные места заполнить нулевым значением. Напечатать полученный массив.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.05.2017, 15:20
Ответы с готовыми решениями:

Удалить из массива все элементы, последняя цифра которых равна заданному числу D
Помогите с решением. Дан одномерный массив, элементы которого - целые числа, а также цифра D ....

Удалить из вектора все элементы, которые кратны заданному числу
Добрый вечер/ночь/день, помогите пожалуйста исправить ошибки #include <iostream> #include...

Функция дублирующая в целочисленном массиве элементы равные заданному числу
Описать процедуру DoubleX(A, N, X), дублирующую в целочисленном массиве A размера N элементы,...

Удалить из массива все элементы, равные заданному числу
1. Дан целочисленный массив размера N. Удалить из массива все элементы, равные заданному числу 6, и...

16
835 / 638 / 940
Регистрация: 26.06.2015
Сообщений: 1,409
03.05.2017, 17:50 2
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
#include <iostream>
 
template<typename T>
T* array_remove(T* _f, T* _l, const T& v){
    while((_f != _l) && (*_f != v))
        ++_f;
 
    T* p = _f;
    for(; _f != _l; *p = *_f++){
        if(*_f != v)
            *p++ = *_f;
    }
    
    //обнуление
    for(T* i = p; i != _l; *i++ = 0)
        ;
    return p;
}
 
int main(void){
    int a[] = { 3, 8, 3, 1, 3, 3, 5, 6, 3, 3, 9, 3 };
    int n   = sizeof(a)/sizeof(a[0]);
 
    const int* e = array_remove(a, a + n, 3);
    for(const int* p = a; p != e; ++p)
        std::cout << *p << ' ';
    std::cout << std::endl;
 
    //вывести весь массив
    e = a + n;
    for(const int* i = a; i != e; ++i)
        std::cout << *i << ' ';
    std::cout << std::endl;
 
    std::cin.get();
    return 0;
}
1
0 / 0 / 0
Регистрация: 03.05.2017
Сообщений: 6
07.06.2017, 07:30  [ТС] 3
Спасибо большое за ответ. А можно ли как нибуть упростить это (к примеру без шаблонной функции или же ее упростить )?
0
с++
1282 / 523 / 225
Регистрация: 15.07.2015
Сообщений: 2,562
07.06.2017, 07:34 4
Цитата Сообщение от DarkFOX305 Посмотреть сообщение
без шаблонной функции
там где большая Т заменить на тип
1
0 / 0 / 0
Регистрация: 03.05.2017
Сообщений: 6
07.06.2017, 07:49  [ТС] 5
Цитата Сообщение от Antikl Посмотреть сообщение
там где большая Т заменить на тип
Мне сказали что можно написать эту программу проще и практически без шаблонной функции. Только вот как я это не совсем понял. Ну и еще + эта программа почему-то не завершается. Хотя я запускаю у себя и у мня все нормально( возможно дело в версии QT Creator)
0
с++
1282 / 523 / 225
Регистрация: 15.07.2015
Сообщений: 2,562
07.06.2017, 07:55 6
Цитата Сообщение от DarkFOX305 Посмотреть сообщение
практически без шаблонной функции
так шаблонная функция значит что можно ее применять к любому типу
вот как у меня она сработала, было так 3, 8, 3, 1, 3, 3, 5, 6, 3, 3, 9, 3 а стало
Изображения
 
1
Любитель чаепитий
3726 / 1786 / 561
Регистрация: 24.08.2014
Сообщений: 5,983
Записей в блоге: 1
07.06.2017, 08:00 7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <algorithm>
#include <iterator>
#include <iostream>
 
int main()
{
    int n = 0;
    std::cin >> n;
    
    int * arr = new int[n];
    
    std::copy_n(std::istream_iterator<int>(std::cin), n, arr);
    
    int a = 0;
    
    std::cin >> a;
    
    std::fill(std::remove(arr, arr + n, a), arr + n, 0);
    
    std::copy(arr, arr + n, std::ostream_iterator<int>(std::cout, " "));
}
1
0 / 0 / 0
Регистрация: 03.05.2017
Сообщений: 6
07.06.2017, 08:15  [ТС] 8
Цитата Сообщение от DarkFOX305 Посмотреть сообщение
практически без шаблонной функции
Это не мои слова и я сам как бы не понимаю о чем мне говорили поэтому я и спросил
Цитата Сообщение от DarkFOX305 Посмотреть сообщение
А можно ли как нибуть упростить это (к примеру без шаблонной функции или же ее упростить )?
0
Заблокирован
07.06.2017, 08:36 9
C++
1
2
3
4
5
6
7
8
9
10
11
//init
    const int n = 12;
    int init[n] = {3, 0, 3, 1, 3, 3, 5, 0, 3, 3, 9, 3};
    int result[n] = {};
    int a = 3;
 
    //calculate
    std::copy_if(init, init + n, result, std::bind(std::not_equal_to<int>(), std::placeholders::_1, a));
 
    //result
    for (const int& elem : result)cout << elem << " ";
0
0 / 0 / 0
Регистрация: 03.05.2017
Сообщений: 6
07.06.2017, 09:47  [ТС] 10
Не подскажите в чем тут ошибка ( или чего тут не хватает )?

C++ (Qt)
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
#include <iostream>
 
 
template<typename T>
T* array_remove(T* _f, T* _l, const T& v)
{
    while((_f != _l) && (*_f != v))++_f;
 
    T* p = _f;
    for(; _f != _l; *p = *_f++)
    {
        if(*_f != v)
            *p++ = *_f;
    }
 
    //обнуление
    for(T* i = p; i != _l; *i++ = 0);
    return p;
}
int main(void){
    int a[] = { 7, 8, 7, 1, 3, 1, 5, 6, 2, 3, 9, 7 };
    int n   = sizeof(a)/sizeof(a[0]);
 
    const int* e = array_remove(a, a + n, 7);
    for(const int* p = a; p != e; ++p);
 
 
    //вывести весь массив
    e = a + n;
    for(const int* i = a; i != e; ++i)
        std::cout << *i << ' ';
    std::cout << std::endl;
 
    std::cin.get();
    return 0;
}
0
с++
1282 / 523 / 225
Регистрация: 15.07.2015
Сообщений: 2,562
07.06.2017, 09:50 11
ошибок нету вы удаляете в массиве все 7
1
435 / 427 / 159
Регистрация: 21.05.2016
Сообщений: 1,338
07.06.2017, 09:56 12
Можно спросить автора кода, зачем новую тему открывать
1
0 / 0 / 0
Регистрация: 03.05.2017
Сообщений: 6
07.06.2017, 10:07  [ТС] 13
Цитата Сообщение от Antikl Посмотреть сообщение
ошибок нету вы удаляете в массиве все 7
а может быть то что между 17 и 18 строчками чего-то не хватает т.к при проверки у меня не отображается ничего? (чтобы получить ответ мне нужно пропустить то что идет после строчки 17 )
0
с++
1282 / 523 / 225
Регистрация: 15.07.2015
Сообщений: 2,562
07.06.2017, 10:14 14
Цитата Сообщение от DarkFOX305 Посмотреть сообщение
17 и 18 строчками
там же комент обнуление тоисть обнуляет выбраные элементы
0
с++
1282 / 523 / 225
Регистрация: 15.07.2015
Сообщений: 2,562
07.06.2017, 10:17 15
вот та функция находит 7 и в конце их значение по идексу обнуляет вот
Изображения
 
0
с++
1282 / 523 / 225
Регистрация: 15.07.2015
Сообщений: 2,562
07.06.2017, 10:18 16
а так только создать новый массив нужно что бы у вас там нулей не было
0
MrGluck
07.06.2017, 11:06     Удалить из массива все элементы, равные заданному числу
  #17
 Комментарий модератора 
DarkFOX305, запрещено дублировать темы.
Называйте темы осмысленными названиями
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.06.2017, 11:06

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

В массиве, заполненном случайными числами, найти все элементы, равные заданному числу
Заполните массив случайными числами в интервале . Введите число X и найдите все значения, равные X.

Удалить элементы, равные числу Х, из массива А целых чисел
Описать процедуру Remove X (A,N,X) удаляющию элементы, равные числу Х, из массива А целых чисел...

Удалить элементы массива равные заданному значению
Здравствуйте, хочу исправить программу с несколькими ошибками, кучу всего передалал и все равно не...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru