Форум программистов, компьютерный форум CyberForum.ru

Исключить из массива все повторяющиеся элементы - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
Fobos315
2 / 2 / 0
Регистрация: 25.04.2014
Сообщений: 68
16.05.2014, 12:16     Исключить из массива все повторяющиеся элементы #1
Дан массив. Допустим я ввожу элементы 1,2,3,2,4 И нужно создать новый массив чтобы одинаковых элементов в нем не было, то есть чтобы мне вывел 1,2,3,4 Как это сделать? Желательно без векторов и т.п, т.к студент начального курса, хотелось бы разобраться на более простом примере.

Добавлено через 19 часов 27 минут
актуально.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.05.2014, 12:16     Исключить из массива все повторяющиеся элементы
Посмотрите здесь:

C++ Удалить из массива повторяющиеся элементы
C++ Дан одномерный массив, элементы которого - целые числа. Удалите из него все повторяющиеся элементы, оставив только их первые вхождения.
C++ Повторяющиеся элементы массива
Сформировать и вывести на экран новый массив, который будет содержать вначале все элементы массива A(0), затем все элементы массива B(4) C++
C++ Исключить повторяющиеся элементы из списка
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vergil
42 / 36 / 14
Регистрация: 11.11.2009
Сообщений: 238
16.05.2014, 12:47     Исключить из массива все повторяющиеся элементы #2
Вы уверены, что такое задание? Например, у меня с такой формулировкой требовали 1 3 4. Второй вопрос, какой должен быть порядок символов? Можно ли выводить их в порядке возрастания?

Кстати, чем быстрее освоите вектор, тем лучше.
virtuos553
 Аватар для virtuos553
48 / 3 / 1
Регистрация: 18.12.2012
Сообщений: 247
Записей в блоге: 1
16.05.2014, 13:55     Исключить из массива все повторяющиеся элементы #3
Порядок обязателен?
Fobos315
2 / 2 / 0
Регистрация: 25.04.2014
Сообщений: 68
16.05.2014, 14:36  [ТС]     Исключить из массива все повторяющиеся элементы #4
В задании ничего не сказано но я думаю что да.
virtuos553
 Аватар для virtuos553
48 / 3 / 1
Регистрация: 18.12.2012
Сообщений: 247
Записей в блоге: 1
16.05.2014, 14: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
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include <iostream>
using namespace std;
 
int main()
{
 
    int n,i,k,p,j,chet,i1;
    p=0;
    k=0;
    cout<<"vvedite kolvo elementov massiva"<<"\n";
    cin>>n;
    int* mas= new int [n];//заводим массив для первоначального массива который будем считывать
    for(i=0;i<n;i++)//заполняем его
        {
            
        cin>>mas[i];
        if (mas[i]==0)
        { 
            chet=1;
            i1=i;
        }
    }
 
 
    int *new_mas=new int [n];//массив в котором будут хранится элементы без повтора
    for(i=0;i<n;i++)
        new_mas[i]=0;
 
    for(i=0;i<n;i++)//берем каждый элемент массива и проверяем был ли он до него в массиввке, если его не было, тогда записываем его в наш новый массив, если был , то пропускаем.
    {
        for(j=0;j<i;j++)
        {
            if(mas[i]==new_mas[j])
            k=1;//счетчик повтора элемента
        }
 
        if(k==0)
            new_mas[p]=mas[i];
        p++;
        k=0;
    }
 
    for(i=0;i<n;i++)
    {
        if(new_mas[i]!=0)
        cout<<new_mas[i]<<" ";
        
    }
    if(chet==1)
            cout<<0;
    cout<<"\n";
 
    system("pause");
 
}


Работающий код, с правильным порядком кроме 0., если он был в массиве, то он будет в конце.

Добавлено через 1 минуту
так пойдет?
Fobos315
2 / 2 / 0
Регистрация: 25.04.2014
Сообщений: 68
16.05.2014, 15:19  [ТС]     Исключить из массива все повторяющиеся элементы #6
Да, большое спасибо! Вечером приду зайду, есть пару вопросов по коду.
virtuos553
 Аватар для virtuos553
48 / 3 / 1
Регистрация: 18.12.2012
Сообщений: 247
Записей в блоге: 1
16.05.2014, 16:06     Исключить из массива все повторяющиеся элементы #7
Хорошо, задавай, отвечу на все)
Fobos315
2 / 2 / 0
Регистрация: 25.04.2014
Сообщений: 68
16.05.2014, 20:06  [ТС]     Исключить из массива все повторяющиеся элементы #8
Не понятно тело условия, а именно: chet=1; i1=i; что взято за эти переменные, помимо i,j и n
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
16.05.2014, 20:35     Исключить из массива все повторяющиеся элементы #9
Fobos315, А структуры хотя бы учили?

Добавлено через 37 секунд
Если инкапсулировать часть кода можно упростить логику программы.
Vergil
42 / 36 / 14
Регистрация: 11.11.2009
Сообщений: 238
16.05.2014, 20:52     Исключить из массива все повторяющиеся элементы #10
Fobos315, не совсем уверен, но там, вроде, запоминается был ли в вашем массиве 0, потому что массив без повторений заполняется 0. Т.е. при массиве 1 2 3 2 без повторений будет выглядеть так 1 2 3 0, а до этого 0 0 0 0.
Если мы будем проверять и в исходном будет 0, то он посчитает, что число уже повторялось и не запишет его
i1 я при беглом просмотре больше нигде не увидел, так что думаю, что он был написан, что бы вставить 0 не в конец, а в нужное место, но потом virtuos553 передумал.
Fobos315
2 / 2 / 0
Регистрация: 25.04.2014
Сообщений: 68
16.05.2014, 21:02  [ТС]     Исключить из массива все повторяющиеся элементы #11
outoftime ещё нет.

Добавлено через 3 минуты
Vergil с нас больше требуют чем что то дают, зато матан дают как будто преподами будем))
Vergil
42 / 36 / 14
Регистрация: 11.11.2009
Сообщений: 238
16.05.2014, 21:07     Исключить из массива все повторяющиеся элементы #12
Fobos315, не совсем понял к чему это?
Vergil с нас больше требуют чем что то дают, зато матан дают как будто преподами будем))
Если вы думаете, что один такой, то все так мучаются. Инженеру вполне может понадобится матан. Например для написания какого-нибудь мат пакета.
Если бы вы поучились на матфаке,
зато матан дают как будто преподами будем
, наверное, не писали бы

кстати, на векторах эта программа была бы легче. Советую досрочно их изучить самостоятельно.
Fobos315
2 / 2 / 0
Регистрация: 25.04.2014
Сообщений: 68
16.05.2014, 21:27  [ТС]     Исключить из массива все повторяющиеся элементы #13
Vergil может вы мне какую нибудь книгу посоветуете по С++ Где доступно для начинающего объясняются массивы, функции, векторы и т.д..
virtuos553
 Аватар для virtuos553
48 / 3 / 1
Регистрация: 18.12.2012
Сообщений: 247
Записей в блоге: 1
16.05.2014, 21:35     Исключить из массива все повторяющиеся элементы #14
да , верно, хотел написать код чтобы вставить в нужное место, но времени было в обрез, поэтому в конец вставил)
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
16.05.2014, 21:39     Исключить из массива все повторяющиеся элементы #15
Цитата Сообщение от Fobos315 Посмотреть сообщение
Vergil может вы мне какую нибудь книгу посоветуете по С++ Где доступно для начинающего объясняются массивы, функции, векторы и т.д..
Могу написать пару вариантов, в ты потом методом упорного гугление, и вопросов, если не понятно, все будешь знать (:
virtuos553
 Аватар для virtuos553
48 / 3 / 1
Регистрация: 18.12.2012
Сообщений: 247
Записей в блоге: 1
16.05.2014, 21:40     Исключить из массива все повторяющиеся элементы #16
С++ для чайников, там с нуля все хорошо написано
Vergil
42 / 36 / 14
Регистрация: 11.11.2009
Сообщений: 238
16.05.2014, 23:41     Исключить из массива все повторяющиеся элементы #17
Литература C++
+ на этом форуме есть различные решения. Ну help и гугл
Вот вариант кода с использованием вектора. Проверять досконально нет времени, но на первом, что пришло в голову, сработало
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
//---------------------------------------------------------------------------
#include <iostream.h>
#include <vcl.h>
#include <vector>  //подключаем для рабоы с вектором
#include <algorithm>  //для функций sort и unique
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
//отс сих
char bufRus[256];
char* Rus(const char* text)
{CharToOem(text, bufRus);
return bufRus;}
//до сих, что бы рус язык отображался
int main(int argc, char* argv[])
{int n, k=0;
cout<<Rus("Введите количество элементов")<<endl;
cin>>n;
int* mas= new int [n];//заводим массив для первоначального массива который будем считывать
for(int i=0;i<n;i++)//заполняем его
{cin>>mas[i];}
std::vector<int> mass (mas, mas+n); //создаем вектор и заносим в него значения из массива
std::vector<int> mass1 (mass);   //создаем второй вектор
sort(mass1.begin(), mass1.end());  //сортируем по возрастанию переданный вектор
mass1.erase( unique(mass1.begin(), mass1.end() ), mass1.end() ); //удаляемповторяющиеся элементы
//erase удаляет, unique выдает вектор уникальных символов
for (int i = 0; i < mass1.size(); i++)  //в этом цикле берем уникальные элементы
{
k=0;//сбрасываем счетчик повторения на 0, т.к. берется новое число.
for (int j = 0; j < mass.size(); j++)  //тут проходим по нашему первоночальному вектору
{if(mass[j]==mass1[i]){if(k==0){k++;}//если встречается первый раз увеличиваем счетчик
else{mass.erase(mass.begin() + j);}}}//если нет, то удаляем из вектора.
}
for (int j = 0; j < mass.size(); j++){cout<<mass[j]<<" ";}//выводим то, что получилось
system("PAUSE");
    return 0;
}
//---------------------------------------------------------------------------
Миниатюры
Исключить из массива все повторяющиеся элементы  
virtuos553
 Аватар для virtuos553
48 / 3 / 1
Регистрация: 18.12.2012
Сообщений: 247
Записей в блоге: 1
17.05.2014, 00:11     Исключить из массива все повторяющиеся элементы #18
он же без векторов просил)Так то конечно легче)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.05.2014, 06:43     Исключить из массива все повторяющиеся элементы
Еще ссылки по теме:

C++ Найти все повторяющиеся элементы вектора
C++ Преобразовать массив, удалив из него все повторяющиеся элементы
C++ Удалить все повторяющиеся элементы в векторе

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

Или воспользуйтесь поиском по форуму:
Vergil
42 / 36 / 14
Регистрация: 11.11.2009
Сообщений: 238
17.05.2014, 06:43     Исключить из массива все повторяющиеся элементы #19
virtuos553, Это если он вдруг решит осваивать их(не сейчас, так потом). Для того, я и прокомментировал.
Кстати, вот доделанная прога. 0 теперь будет на своем месте.
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
#include <iostream>
//---------------------------------------------------------------------------
 
#pragma argsused
 
using namespace std;
 
int main()
{
 
    int n,i,k,p,j,chet,i1;
    p=0;
    k=0;
    cout<<"vvedite kolvo elementov massiva"<<"\n";
    cin>>n;
    int* mas= new int [n];//заводим массив для первоначального массива который будем считывать
    for(i=0;i<n;i++)//заполняем его
        {
            
        cin>>mas[i];
        if (mas[i]<=0)
        {mas[i]--;}
    }
 
 
    int *new_mas=new int [n];//массив в котором будут хранится элементы без повтора
    for(i=0;i<n;i++)
        new_mas[i]=0;
 
    for(i=0;i<n;i++)//берем каждый элемент массива и проверяем был ли он до него в массиввке, если его не было, тогда записываем его в наш новый массив, если был , то пропускаем.
    {
        for(j=0;j<i;j++)
        {
            if(mas[i]==new_mas[j])
            k=1;//счетчик повтора элемента
        }
 
        if(k==0)
            new_mas[p]=mas[i];
        p++;
        k=0;
    }
 
    for(i=0;i<n;i++)
    {   if (new_mas[i]!=0) {
 
        
        if(new_mas[i]<0)
        {cout<<new_mas[i]+1<<" ";}
        else
        {cout<<new_mas[i]<<" ";} }
 
    }
    cout<<"\n";
 
    system("pause");
 
}
а вот альтернативный вариант использующий только один массив.
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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
#include <iostream>
//---------------------------------------------------------------------------
 
#pragma argsused
 
using namespace std;
 
int main()
{  int n,i,k,p,j,chet,i1, tmp;
    p=0;
    k=1;
    cout<<"vvedite kolvo elementov massiva"<<"\n";
    cin>>n;
    int* mas= new int [n];//заводим массив для первоначального массива который будем считывать
    for(i=0;i<n;i++)//заполняем его
        { tmp=0;
    cin>>mas[i];
    if (i!=0) {    
    for (int j = 0; j < k; j++) {
    if(mas[i]==mas[j]){tmp=1;}
    if (j==k-1&&tmp==0) {
     mas[k]=mas[i];k++;}}}}
 
    for(i=0;i<k;i++)
    { cout<<mas[i]<<" "; }
    cout<<"\n";
    system("pause");
    }
Yandex
Объявления
17.05.2014, 06:43     Исключить из массива все повторяющиеся элементы
Ответ Создать тему
Опции темы

Текущее время: 01:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru