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

Сформировать список L, включив в него по одному разу элементы, которые входят одновременно в оба списка L1 и L2. - C++

Восстановить пароль Регистрация
 
Kosotornov
1 / 1 / 0
Регистрация: 24.05.2013
Сообщений: 41
25.12.2013, 07:30     Сформировать список L, включив в него по одному разу элементы, которые входят одновременно в оба списка L1 и L2. #1
Ребят я запутался окончательно.Пытался сам разобраться,но увы только все хуже стало.
задание:
Кликните здесь для просмотра всего текста
Сформировать список L, включив в него по одному разу элементы, которые входят
одновременно в оба списка L1 и L2.

Элементы я отсортировал,но как затереть одинаковые,не могу понять.
Кликните здесь для просмотра всего текста
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
#include <iostream>
using namespace std;
template<class TYPE>
struct link
{
       TYPE data;
       link* next;
};
template<class TYPE>
class linklist
{
      private:
              link<TYPE>* first;
      public:
             linklist()
                       {first=NULL;}
      void additem(TYPE d);
      void display();
      void sort1(TYPE &);
      void dlinna(TYPE &);
      void elim (TYPE d,TYPE &);
      void sort2(TYPE &,TYPE &,TYPE &);
};
template<class TYPE>
void linklist<TYPE>::additem (TYPE d)
{
     link<TYPE>* newlink = new link<TYPE>;
     newlink->data=d;
     newlink->next=first;
     first=newlink;
}
template <class TYPE>
void linklist<TYPE>::dlinna(TYPE &d)
{
     link<TYPE>* current=first;
     cout<<endl;
     d=0;
     while(current!=NULL)
     {
            d++;
            current=current->next;
     }
}
template <class TYPE>
void linklist<TYPE>::display()
{
     link<TYPE>* current=first;
     cout<<endl;
     while(current!=NULL)
     {
            cout<<' '<<current->data;
            current=current->next;
     }
}
template <class TYPE>
void linklist<TYPE>::elim(TYPE i,TYPE &r)
{
     link<TYPE>* current=first;
     for(int j=0;j<i;j++){
     current=current->next;}
     r=current->data;
}
template <class TYPE>
void linklist<TYPE>::sort1(TYPE &d)
{bool flag=false;TYPE x;
     link<TYPE>* current=first;
     cout<<endl;
     while(current!=NULL)
     {
            x=current->data;
            if (x==d) {flag=true;};
            current=current->next;
     };
if (flag==true){d=1;}     
}
template <class TYPE>
void linklist<TYPE>::sort2(TYPE &i,TYPE &z,TYPE &n)
{
 link<TYPE>* current=first;
 link<TYPE>* cur;
 for (int j=0;j<=i;j++)
 {
 current=current->next;  
 }
 for (int j=i;j<=n;j++)
 {   
     if(z==current->data)
     {cur = current; 
     current = current -> next; 
     delete(cur); 
     cur = NULL; 
     n--;
     }
     else{current=current->next;}
 }
}
 
int main ()
{int e=1,x,n,z,k;
    setlocale(0, "rus" );
    linklist<int> ld;
    linklist<int> ls;
    linklist<int> li;
    cout<<"Формируем перввый список"<<endl;
    while(e==1){
    cout<<"Введите элемент"<<endl;
    cin>>x;   
    ld.additem(x);
    cout<<"Добавить еще элемент?"<<endl;
    cout<<"1.Да"<<endl;
    cout<<"2.Нет"<<endl;
    cin>>e;
    }
    e=1;
    cout<<"Формируем второй список"<<endl;
    while(e==1){
    cout<<"Введите элемент"<<endl;
    cin>>x;   
    ls.additem(x);
    cout<<"Добавить еще элемент?"<<endl;
    cout<<"1.Да"<<endl;
    cout<<"2.Нет"<<endl;
    cin>>e;
    }
    cout<<endl<<"Первый список:"<<endl;
    ld.display();
    cout<<endl<<"Второй список:"<<endl;
    ls.display();
    ls.dlinna(n);
    for (int i=0;i<n;i++){
        ls.elim(i,z);
        k=z;
        ld.sort1(z);
    if (z==1){li.additem(k);}}
    li.dlinna(n);
    for (int i=0;i<n;i++){
        li.elim(i,z);
        li.sort2(i,z,n);
    }
    cout<<endl<<"Результирующий список имеет вид:"<<endl;
    li.display();
    cin>>e;
    return 0;
}


PS может кто подскажет,если ли более легкий способ работать со списками.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.12.2013, 07:30     Сформировать список L, включив в него по одному разу элементы, которые входят одновременно в оба списка L1 и L2.
Посмотрите здесь:

C++ Напечатать в алфавитном порядке все буквы, которые входят в текст по одному разу
C++ Сформировать список L включив в него по одному разу элементы, которые входят в один из списков L1 и L2, но в то же время не входит во второй из них
C++ Сформировать список l, включив в него по одному разу элементы, которые входят. В один из списков l1 или l2. Но не входят в другой
Описать функцию, которая формирует список Common, включив в него элементы, ко-торые входят одновременно в список М1 и М2 C++
Сформировать список L, включив в него положительные элементы списка L1 и отрицательные элементы списка L2 C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
SatanaXIII
25.12.2013, 17:05
  #2
 Комментарий модератора 
Kosotornov, пункт 5.5 Правил: Запрещено дублировать тему.
Kosotornov
1 / 1 / 0
Регистрация: 24.05.2013
Сообщений: 41
25.12.2013, 19:12  [ТС]     Сформировать список L, включив в него по одному разу элементы, которые входят одновременно в оба списка L1 и L2. #3
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Kosotornov, пункт 5.5 Правил: Запрещено дублировать тему.
Лучше подсказал библиотеку для работы со списками
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5548 / 2562 / 233
Регистрация: 01.11.2011
Сообщений: 6,333
Завершенные тесты: 1
25.12.2013, 19:23     Сформировать список L, включив в него по одному разу элементы, которые входят одновременно в оба списка L1 и L2. #4
Цитата Сообщение от Kosotornov Посмотреть сообщение
библиотеку для работы со списками
stl

А вообще почитайте пожалуйста правила форума. Там всего одна страничка. Но зато написано про то что делать, чтобы поднять свою тему в общем списке. И про обсуждение действий администрации тоже написано.
Kosotornov
1 / 1 / 0
Регистрация: 24.05.2013
Сообщений: 41
25.12.2013, 21:50  [ТС]     Сформировать список L, включив в него по одному разу элементы, которые входят одновременно в оба списка L1 и L2. #5
Цитата Сообщение от SatanaXIII Посмотреть сообщение
stl

А вообще почитайте пожалуйста правила форума. Там всего одна страничка. Но зато написано про то что делать, чтобы поднять свою тему в общем списке. И про обсуждение действий администрации тоже написано.
Прочитал,принято.
Можешь написать какую библиотеку подключить надо,и какие функции есть и что они делают.
я гуглю найти не могу =(
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
25.12.2013, 23:20     Сформировать список L, включив в него по одному разу элементы, которые входят одновременно в оба списка L1 и L2. #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <iterator>
#include <algorithm>
#include <set>
#include <vector>
 
int main()
{
    std::set<int> l1 = {1,5,1,3,6,76,2231,6,6,223,34,6,2343,6,4},
        l2 = {521,5,6,214,6,7,41,6,7,12421,654,132312,65,6213,5,6};
    std::vector<int> res;
    std::merge(l1.begin(), l1.end(), l2.begin(), l2.end(), std::back_inserter(res));
    std::copy(res.begin(), res.end(), std::ostream_iterator<int>(std::cout, " "));
    
    return EXIT_SUCCESS;
}
Добавлено через 1 минуту
Kosotornov,
Bash
1
2
D:\Projects\c++\help>make
g++ cyberforum.cpp -o run.exe -std=c++11 -I"%BOOST_HOME%" -L"%BOOST_HOME%\lib"
Добавлено через 12 минут
Ошибка, надо сливать в std::set что-бы не было повторов.

Добавлено через 1 минуту
Вот так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <iterator>
#include <algorithm>
#include <set>
 
int main()
{
    std::set<int> l1 = {1,5,1,3,6,76,2231,6,6,223,34,6,2343,6,4},
        l2 = {521,5,6,214,6,7,41,6,7,12421,654,132312,65,6213,5,6};
    std::set<int> res;
    std::merge(l1.begin(), l1.end(), l2.begin(), l2.end(), std::inserter(res, res.begin()));
    std::copy(res.begin(), res.end(), std::ostream_iterator<int>(std::cout, " "));
    
    return EXIT_SUCCESS;
}
Kosotornov
1 / 1 / 0
Регистрация: 24.05.2013
Сообщений: 41
26.12.2013, 00:09  [ТС]     Сформировать список L, включив в него по одному разу элементы, которые входят одновременно в оба списка L1 и L2. #7
а можешь расписать что делает каждая функция???
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
26.12.2013, 00:29     Сформировать список L, включив в него по одному разу элементы, которые входят одновременно в оба списка L1 и L2. #8
std::set
http://en.cppreference.com/w/cpp/container/set
http://www.cplusplus.com/reference/set/set/

std::initializer_list
http://en.cppreference.com/w/cpp/uti...itializer_list

std::merge
http://en.cppreference.com/w/cpp/algorithm/merge

std::begin
http://en.cppreference.com/w/cpp/iterator/begin

std::end
http://en.cppreference.com/w/cpp/iterator/end

std::inserter
http://en.cppreference.com/w/cpp/iterator/inserter

std::copy
http://en.cppreference.com/w/cpp/algorithm/copy

std::ostream_iterator
http://en.cppreference.com/w/cpp/ite...tream_iterator
Kosotornov
1 / 1 / 0
Регистрация: 24.05.2013
Сообщений: 41
26.12.2013, 01:37  [ТС]     Сформировать список L, включив в него по одному разу элементы, которые входят одновременно в оба списка L1 и L2. #9
А почему он ошибку выдает???
Кликните здесь для просмотра всего текста
`l1' must be initialized by constructor, not by `{...}'
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.12.2013, 01:57     Сформировать список L, включив в него по одному разу элементы, которые входят одновременно в оба списка L1 и L2.
Еще ссылки по теме:

Сформировать список L, включив в него положительные элементы списка L1 и отрицательные элементы списка L2 C++
C++ Написать программу, формирующую список, куда входят по одному разу элементы, присутствующие в обоих списках
Получить числа, которые входят в массив по одному разу C++

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

Или воспользуйтесь поиском по форуму:
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
26.12.2013, 01:57     Сформировать список L, включив в него по одному разу элементы, которые входят одновременно в оба списка L1 и L2. #10
Цитата Сообщение от outoftime Посмотреть сообщение
g++ cyberforum.cpp -o run.exe -std=c++11
Цитата Сообщение от outoftime Посмотреть сообщение
Найди соответствие.

Добавлено через 2 минуты
Если в 2ух словах, в с++11 есть фишка - список инициализации, который позволяет инициализировать объекты с меньшим количеством кода.
Yandex
Объявления
26.12.2013, 01:57     Сформировать список L, включив в него по одному разу элементы, которые входят одновременно в оба списка L1 и L2.
Ответ Создать тему
Опции темы

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