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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 4.88
FREEMEN
2 / 2 / 0
Регистрация: 09.01.2010
Сообщений: 47
#1

Описать функцию, которая определяет, входят ли все элементы первого списка в состав второго списка. - C++

14.01.2010, 19:43. Просмотров 1152. Ответов 12
Метки нет (Все метки)

Описать функцию, которая определяет, входят ли все элементы первого списка в состав второго списка.
на с++
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.01.2010, 19:43
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Описать функцию, которая определяет, входят ли все элементы первого списка в состав второго списка. (C++):

Описать функцию, которая удаляет все минимальные элементы из списка - C++
Помогите пожалуйста. Я студент второго курса. (Не программист ни разу >.<") Мне нужна помощь в написании программы. Завтра уже нужно...

Описать функцию, которая удаляет из списка L первый отрицательный элемент - C++
Добрый день, у меня возник вопрос по задаче: У меня есть нужная программа, но она удаляет не те значения. Прошу указать на ошибки. ...

Описать функцию, которая объединяет два упорядоченных по возрастанию списка в один - C++
2)Описать функцию, которая объединяет два упорядоченных по возрастанию списка в один. не знаю как делать помогите пожалуйста!!!!

Описать процедуру или функцию, которая находит max элемент не пустого списка L - C++
Задание: описать процедуру или функцию, которая находит max элемент не пустого списка L (инф. часть списка содержит real) P.S.: Помогите...

Описать функцию, которая удаляет из списка L первый неположительный элемент, если такой есть - C++
Доброго времени суток, возникли затруднения с одной задачей, вот собственно она: Странно что в заголовке темы нельзя использовать...

Описать функцию, которая формирует список Common, включив в него элементы, ко-торые входят одновременно в список М1 и М2 - C++
Описать функцию, которая формирует список Common, включив в него элементы, ко-торые входят одновременно в список М1 и М2.

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Genius Ignat
1236 / 774 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
14.01.2010, 20:35 #2
Если речь идет о динамических структурах данных то мой ответ правильный.

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


Подсказка:
Функция должна выглядеть так:
int equeal(Node *pbeg1 , Node *pbeg2);
Первый параметр, указатель на начало одного списка.
Второй параметр, указатель на начало другого списка.

//Реализация функции--------------------------------
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int equeal(Node *pbeg1 , Node *pbeg2){
//По не доходим до концов списков
while((pbeg1!=NULL)||(pbeg2!=NULL)){
 
if(pbeg1->data!=pbeg2->data)return 0; //какой- то элемент списка не равен другому элементу списка
 
//К следующим элементам списков
pbeg1=pbeg1->next;
pbeg2=pbeg2->next;
 
}
return 1;            //все элементы списков равны между собой
 
 
}
Добавлено через 1 минуту
Желательно одинаковые размеры списков.
1
FREEMEN
2 / 2 / 0
Регистрация: 09.01.2010
Сообщений: 47
14.01.2010, 20:51  [ТС] #3
если можно то полностью текс проги можна !
спс зарание!
0
Genius Ignat
1236 / 774 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
14.01.2010, 21:17 #4
Ладно ща сделаем:
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
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
#include <iostream.h>
#include <stdlib.h>
 
//Возвращаемые значения
//----------------------------------------------------------
//Для функции: long Create(Node **pbeg, Node **pend, DATA d)
#define OK_CREATE 0x000       //список создан
#define LIST_IS   0x100       //список уже существует, его повторное создание невозможно
 
//Для функции: long add(Node  **pend, DATA d)
#define OK_ADD       0x300          //добавили в конец списка
#define LIST_IS_NOT  0x003          //список пуст создайте его заново
//---------------------------------------------------------------------------
 
//описываем узел
struct Node {
int dan;
Node *prev;
Node *next;
};
 
//Основные функции по работе со списком----------------------------------------------------------------------------------------
long Create (Node **pbeg, Node **pend, int d);     //создание списка
long add    (Node  **pbeg, Node **pend ,int d);    //добавление в конец
Node * Find (Node*pbeg, int key);                  //поиск узла по ключу
bool deleteU(Node **pbeg, Node **pend ,  int key);           //удаление по ключу
void Print(Node *pbeg);                                      //показ списка сначала
int equeal(Node *pbeg1 , Node *pbeg2);             //Поэлементное сравнение списков
//-----------------------------------------------------------------------------------------------------------------------------
 
void main(){
//Указатели для операций-------------------------------------------------------------------------------------------------------
Node *pbeg1 = NULL;
Node *pend1 = NULL;
//-----------------
Node *pbeg2 = NULL;
Node *pend2 = NULL;
//---------------------------------------------
Create(&pbeg1,&pend1,-30);   //создаём список: 1
int mas1[5]={-8,-4,5,7,3};
for(int i=0;i<5;i++)add(&pbeg1,&pend1,mas1[i]);
//---------------------------------------------
Create(&pbeg2,&pend2,-30);   //создаём список: 2
int mas2[5]={-8,-4,5,7,3};
for(i=0;i<5;i++)add(&pbeg2,&pend2,mas2[i]);
//---------------------------------------------
//СРавниваем списки
int mes = equeal(pbeg1,pbeg2);
if(mes==1)cout<<"Списки равны\n";
else cout<<"списки не равны\n";
 
 
//Освобождаем память из под списков.
//Из под первого
while(pbeg1){
Node*tmp=pbeg1;
pbeg1=pbeg1->next;
delete tmp;
}
//Из под второго
while(pbeg2){
Node*tmp=pbeg2;
pbeg2=pbeg2->next;
delete tmp;
}
 
return;
}
 
//---------------------------------------------------------------------------------------------------------------------
 
 
 
//создание списка-----------------------------
long Create (Node **pbeg, Node **pend, int d){
//Безопасное создание списка, если список пуст создаём его
if((*pbeg)==NULL||(*pend)==NULL) {
 
Node *pv = new Node;  //создаём узел
pv->dan = d;          //присваиваем основным данным узла, значения
pv->next = NULL;      //следующего  узла нет
pv->prev = NULL;      //предыдущего узла нет
(*pbeg)=pv;           //это узел начальный
(*pend)=(*pbeg);      //начало-конец списка
return OK_CREATE;     //создали список
}
//иначе
else return LIST_IS;  //список существет создавать его не надо
 
 
}
 
//добавление в конец очереди
long add(Node  **pbeg, Node **pend, int d){
if((*pbeg)==NULL||(*pend)==NULL)return LIST_IS_NOT;
Node *pv = new Node;  //создаём узел
pv->dan = d;          //присваиваем основным данным узла, значения
pv->next = NULL;      //следующего  узла ещё нет
pv->prev =(*pend);    //связываемя с последним
(*pend)->next = pv;   //последний связывается с новым
(*pend)=pv;           //новый становится последним.
return  OK_ADD ;
 
 
}
 
 
 
//Поиск-----------------------------------
Node * Find (Node* pbeg, int key){
Node *pv=NULL;
while(pbeg){
    if(key==pbeg->dan){
    pv=pbeg;
    return pv;
    }
pbeg=pbeg->next;  //следующий
}
return NULL;      //Не найден(Когда список пустой поиск делать не стоит, или проверяйте после вызова на NULL)
}
 
 
//удалить узел
bool deleteU(Node **pbeg, Node **pend, int key){
if((*pbeg)==NULL||(*pend)==NULL)return false;
Node * temp = *pbeg;
//выполяем поиск по ключу
while(temp){
    //Если нашли
    if(key==temp->dan){
    
        //если удаляемый узел это конец
        if(temp ==(*pend)){
        (*pend)=(*pend)->prev;
        (*pend)->next=NULL;
        }
        //если удаляемый узел начало
        else if(temp ==(*pbeg)){
        (*pbeg)=(*pbeg)->next;
        (*pbeg)->prev=NULL;
        }
        //иначе удаляем из середины
        else  {      
        (temp->prev)->next=temp->next;
        (temp->next)->prev=temp->prev;  }
  
        delete temp;  //удаляем узел 
        temp = NULL;  //в ноль на всякий
        return true;
    }
temp=temp->next; //следующий
}
 
return false;
}
 
 
//показать список на экран--------------------
void Print(Node *pbeg){
    
    while(pbeg){
        cout<<pbeg->dan<<'\n';
        pbeg=pbeg->next;
    }
}
 
 
 
//Поэлементное сравнение списков
int equeal(Node *pbeg1 , Node *pbeg2){
 
while((pbeg1!=NULL)||(pbeg2!=NULL)){
 
if(pbeg1->dan!=pbeg2->dan)return 0; 
pbeg1=pbeg1->next;
pbeg2=pbeg2->next;
}
return 1;          
 
 
}
1
FREEMEN
2 / 2 / 0
Регистрация: 09.01.2010
Сообщений: 47
14.01.2010, 21:28  [ТС] #5
ошибка в строке
for(i=0;i<5;i++)add(&pbeg2,&pend2,mas2[i]);
ответ кампилятора
+ необъявленный ин-тор - i
0
Genius Ignat
1236 / 774 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
14.01.2010, 21:50 #6
//напиши так:
for(int i=0;i<5;i++)add(&pbeg2,&pend2,mas2[i]);

Добавлено через 2 минуты
Всё зависит от компилятора:
Допустим Visual C++ компилирует,
А C++ из Visual Studio нет.
Это связано с областями видимости переменных счётчиков цикла.
Это недоговорённость между разработчиками компиляторов.
1
FREEMEN
2 / 2 / 0
Регистрация: 09.01.2010
Сообщений: 47
14.01.2010, 21:50  [ТС] #7
прога запускается и сразу исчезает!!!
0
Darky
Быдлокодер
507 / 294 / 45
Регистрация: 22.11.2009
Сообщений: 892
Завершенные тесты: 1
14.01.2010, 21:52 #8
FREEMEN, Во дела, да?
А getch(); уже не в моде? Или там system("pause");
0
Genius Ignat
1236 / 774 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
14.01.2010, 21:53 #9
У меня запускается я тут не причём.
0
FREEMEN
2 / 2 / 0
Регистрация: 09.01.2010
Сообщений: 47
14.01.2010, 21:56  [ТС] #10
поставил я system("pause");
и прога пишет только
для прод ........ ....... и т.д
а как она работает?
0
Genius Ignat
1236 / 774 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
14.01.2010, 22:00 #11
Может вначале main(), scanf вызвать с какой-нибудь переменной
0
FREEMEN
2 / 2 / 0
Регистрация: 09.01.2010
Сообщений: 47
14.01.2010, 22:06  [ТС] #12
не понял?
0
Genius Ignat
1236 / 774 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
15.01.2010, 09:42 #13
А что непонятного, если вызывается scanf передаётя управление на ввод значения,
когда передано управление на ввод программа не вылетает, у меня такое было.
А scanf лучше напиши перед выходом из main
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.01.2010, 09:42
Привет! Вот еще темы с ответами:

Написать функцию, которая из списка образует два новых списка. Один содержит нечетные числа, а второй - парные - C++
Помогите закончить одно из заданий по работе со списком: Написать функцию, которая использует первоначальный список L и образует два...

Списки. Как создать одновременно 2 списка? Как из второго списка поместить элементы в первый? - C++
2 самых главных вопроса: как создать одновременно 2 списка? как из второго списка поместить элементы в первый? Вообще нигде не могу...

Динамические структуры данных. Сформировать динамический список, описать функцию, которая удаляет из списка за каждым вхождением элемента Е - C++
Сформировать динамический список (стек или очередь), считая, что длина списка (количество элементов) задана. Описать функцию, которая...

Напишите функцию, упорядочивающую элементы массива по сумме первого и второго поля, которая записывается в третье поле, в порядке возрастания - C++
Парни проверьте. Все правильно работает, но выдает небольшие касяки, какие думаю вы сами увидите если у себя прокомпилируите. Задание...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
15.01.2010, 09:42
Ответ Создать тему
Опции темы

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