Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
toster1432
0 / 0 / 0
Регистрация: 11.11.2015
Сообщений: 8
#1

Удалить из массива все нулевые элементы - C++

18.04.2016, 08:13. Просмотров 868. Ответов 5
Метки нет (Все метки)

Помогите кто знает. Пожалуйста.
Сформировать и распечатать динамический одномерный массив( число элементов запросить у пользователя). Заполнить случайными числами от -5 до 5. Удалить из массива все нулевые элементы. Новый массив должен занимать столько памяти, сколько ему необходимо. Распечатать новый массив. Буду очень благодарен т
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.04.2016, 08:13
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Удалить из массива все нулевые элементы (C++):

Удалить все нулевые элементы массива
Здравствуйте, вот задача: 1) Сформировать одномерный массив целых чисел,...

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

Все отрицательные элементы массива уменьшить в двое, а все нулевые элементы заменить на...
Задан массив М, состоящий из К строк и N столбцов. Все отрицательные элементы...

одномерный массив. Все его элементы, не равные нулю, переписать, сохраняя их порядок в начало массива, а нулевые элементы в конец массива in c++
одномерный массив. Все его элементы, не равные нулю, переписать, сохраняя их...

Списки двунаправленные. Удалить все нулевые элементы
Помогите на писать программу, которая в двунаправленном списке удаляет все...

Нужно из массива удалить нулевые элементы
Нужно из массива удалить нулевые элементы на примере 1 0 2 0 3 0 4 0 5 0 ->...

5
TimeTwo
71 / 71 / 97
Регистрация: 29.11.2009
Сообщений: 329
18.04.2016, 10:50 #2
toster1432,
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
#include <iostream>
using namespace std;
 
int main()
{
    int size, sum=0,j=0,size2;
    cout<<"enter array size: ";
    cin>>size;               // получение от пользователя размера массива
    int *a = new int[size]; // Выделение памяти для массива
    for(int i=0;i<size;i++){  // Заполнение массива и вывод значений его элементов
        a[i] = -5 + rand()%10;
        cout<<a[i]<<" ";
    }
    cout<<endl;
    for(int i=0;i<size;i++){
        if(!a[i]) sum++;
    }
    size2 = size-sum;
    int *b = new int[size2];
    for(int i=0;i<size;i++){
        if(a[i]){
            b[j]=a[i];
            j++;
        }
    }
    for(int i=0;i<size2;i++) cout<< b[i]<<" ";
    delete [] a; // очистка памяти
    delete [] b; // очистка памяти
    return 0;
}
0
maxm
63 / 35 / 25
Регистрация: 17.07.2014
Сообщений: 457
18.04.2016, 12:26 #3
Неудобно. Есть же STL.

Цитата Сообщение от TimeTwo Посмотреть сообщение
C++
1
a[i] = -5 + rand()%10
Тут от -5 до 4, а не до 5

Решение:
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 <iterator>
#include <time.h>
#include <vector>
 
int main()
{
    srand(time(NULL));
    int size;
    std::cin >> size;
    std::vector<int> in;
    for (int i = 0; i < size; ++i)
        in.push_back(rand() % 11  - 5); // получим от -5 д 5
 
    std::copy(in.begin(), in.end(), std::ostream_iterator<int>(std::cout, " "));
    std::cout << "\n";
 
    std::vector<int> out;
    for (auto elem : in)
        if (elem != 0)
            out.push_back(elem);
    in.clear();
    std::copy(out.begin(), out.end(), std::ostream_iterator<int>(std::cout, " "));
 
    system("pause");
}
0
TimeTwo
71 / 71 / 97
Регистрация: 29.11.2009
Сообщений: 329
18.04.2016, 12:30 #4
maxm, vector - не одномерный массив ... только гипотетически
0
Ilot
Эксперт С++
1826 / 1184 / 342
Регистрация: 16.05.2013
Сообщений: 3,119
Записей в блоге: 5
Завершенные тесты: 1
18.04.2016, 12:38 #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <algorithm>
#include <iterator>
#include <functional>
int generator() {
    return rand() % 11 - 5;
}
int main() {
    srand(time(NULL));
    int size;
    std::cin >> size;
    std::vector<int> vect(size);
    std::generate(vect.begin(), vect.end(), &generator);
    std::copy(vect.begin(), vect.end(), std::ostream_iterator<int>(std::cout, " "));
    std::endl(std::cout);
    std::vector<int>::const_iterator iter = std::remove(vect.begin(), vect.end(), 0);
    std::vector<int>(vect.cbegin(), iter).swap(vect);
    std::copy(vect.begin(), vect.end(), std::ostream_iterator<int>(std::cout, " "));
    return 0;
}
1
maxm
63 / 35 / 25
Регистрация: 17.07.2014
Сообщений: 457
18.04.2016, 12:41 #6
нам нужно больше std

Добавлено через 31 секунду
Цитата Сообщение от TimeTwo Посмотреть сообщение
vector - не одномерный массив ... только гипотетически
Вектор - одномерный массив.
0
18.04.2016, 12:41
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.04.2016, 12:41
Привет! Вот еще темы с решениями:

Удалить нулевые элементы из одномерного массива
Подкиньте программу удаляющую из одномерного массива все 0 элементы. Заранее...

Удалить из массива действительных чисел нулевые элементы
Удалить из массива действительных чисел нулевые элементы. Добавлено через 14...

В каждой строке все элементы, не равные нулю, переписать в начало строки, а нулевые элементы – в конец массива
Дан двумерный массив. В каждой строке все его элементы, не равные нулю,...

Замените все положительные элементы массива на нулевые
Дан массив. Замените все положительные элементы на нулевые.


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru