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

Указатели и списки

12.06.2019, 21:15. Показов 783. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Нужно максимально подробно прокомментить работу в данной проге циклов, функций и тд.
Тема: Указатели и списки
Необходимо описать тип данных, соответствующий предложенному представлению многочленов, а также разработать следующие функции и процедуры для работы с этими списками-многочленами:

- логическую функцию Equality(p,q), проверяющую равенство многочленов p и q;
- функцию Meaning(p, x), вычисляющую значение многочлена в целочисленной точке х;
- процедуру Add(p,q,r) вычисления суммы многочленов q и r, результат – многочлен p.
Указатели и списки


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
182
183
184
185
186
187
188
#include <iostream>
#include <windows.h>
#include <math.h>
#include <stdlib.h>
using namespace std; 
struct spis
{
int koef; 
int pow; 
spis *next; 
};
bool Equality(spis*, spis*); 
double Meaning(spis*, double); 
void Add(spis*, spis*); 
void russia(const char* rus); 
void printPxQx(spis*, spis*);
void init(spis*, spis*, int, int); 
spis* headPx; 
spis* headQx;
spis* headRx;
spis* lastPtrPx; 
spis* lastPtrQx;
spis* Px; 
spis* Qx;
spis* Rx;
int main()
{
int kolEl = 4; 
int x = 0; 
Px = new spis; 
Qx = new spis;
init(Px, Qx, kolEl, kolEl); 
Px = headPx; 
Qx = headQx;
printPxQx(Px, Qx); 
Px = headPx; 
Qx = headQx;
if (Equality(Px, Qx)) 
russia("Многочлены равны \n");
else 
russia("Многочлены не равны \n");
russia("Введите значение x = ");
cin >> x; 
cout << "P(" << x << ")=" << Meaning(Px, x) << endl; 
cout << "Q(" << x << ")=" << Meaning(Qx, x) << endl;
Add(Px, Qx); 
system("pause"); 
return 0;
}
bool Equality(spis* Px, spis* Qx) 
{
bool equa = true; 
while (Px->next != 0) 
{
if ((Px->pow != Qx->pow) && (Px->koef != Qx->koef)) 
{
equa = false;
break; 
}
Px = Px->next;
}
return equa; 
}
double Meaning(spis* Mx, double x) 
{
double mean = 0; 
while (Mx->next != 0)
{
mean += Mx->koef*pow(x, Mx->pow);
Mx = Mx->next;
}
return mean; 
}
void Add(spis* Px, spis* Qx) 
{
Rx = new spis;
int Arr[20][2];
bool log = false; 
int kolX = 0, koly = 0, k;
while ((Px->next != NULL)) 
{
 
Arr[kolX][0] = Px->pow;
Arr[kolX][1] = Px->koef;
 
kolX++;
Px = Px->next;
}
k = 0;
kolX--;
koly = kolX;
while ((Qx->next != 0))
{
while (k < kolX)
{
if (Arr[k][0] == Qx->pow)
{
log = true;
if (Qx->koef + Arr[k][1] != 0)
Arr[k][1] += Qx->koef;
else
{
for (int i = k; i <= kolX; i++)
{
Arr[i][0] = Arr[i + 1][0];
Arr[i][1] = Arr[i + 1][1];
}
kolX--; 
koly--; 
}
}
k++;
}
if (!log) 
{
 
Arr[koly + 1][0] = Qx->pow;
Arr[koly + 1][1] = Qx->koef;
koly++; 
}
k = 0;
Qx = Qx->next;
log = false;
}
cout << "Px+Qx=";
for (int i = 0; i <= koly; i++)
{
 
Rx = new spis;
Rx->pow = Arr[i][0];
Rx->koef = Arr[i][1];
cout << Rx->koef << "x^" << Rx->pow << " "; 
if (headRx == 0) 
headRx = Rx; 
}
}
void init(spis* Px, spis* Qx, int m, int n) 
{
int ArrPx[4][2] = { { 4, 7 },{ 2, 3 },{ 1, -1 },{ 0, 2 } };
int ArrQx[4][2] = { { 5, -2 },{ 3, 2 },{ 1, 1 },{ 0, -6 } };
for (int i = 0; i <= m; i++)
{
Px = new spis; 
Qx = new spis;
Px->pow = ArrPx[i][0]; 
Px->koef = ArrPx[i][1];
Qx->pow = ArrQx[i][0]; 
Qx->koef = ArrQx[i][1];
Px->next = NULL;
Qx->next = NULL;
if (headPx == 0)
{
headPx = Px; 
lastPtrPx = Px; 
headQx = Qx;
lastPtrQx = Qx;
}
else
{
lastPtrPx->next = Px; 
lastPtrPx = Px; 
lastPtrQx->next = Qx;
lastPtrQx = Qx;
}
}
}
void printPxQx(spis* Px, spis* Qx) // вывод Px и Qx
{
cout << "P(x) = ";
while (Px->next != 0)
{
cout << Px->koef << "x^" << Px->pow << " ";
Px = Px->next;
}
cout << endl << "Q(x) = ";
while (Qx->next != 0)
{
cout << Qx->koef << "x^" << Qx->pow << " ";
Qx = Qx->next;
}
cout << endl;
}
void russia(const char* rus) 
{
char word[100];
CharToOemA(rus, word);
cout << word;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.06.2019, 21:15
Ответы с готовыми решениями:

Указатели и двусвязные списки
Уважаемые форумчане! Учусь по книжке Страструпа для начинающих. Вот пример кода: #include...

Указатели,стеки списки.
Здравствуйте помогите решить две задачи на Си++,заранее спасибо! Указатели, работа с...

Указатели, работа с динамическими структурами данных и динамические списки, стеки
1)Указатели, работа с динамическими структурами данных. Динамическое управление памятью...

Списки, динамическая память и указатели
Нужна помощь! Требуется написать функцию rearrangment( ), меняющую i-ю и j-ю строки текста. То...

0
12.06.2019, 21:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.06.2019, 21:15
Помогаю со студенческими работами здесь

Списки и указатели
Про TObjectList и прочее знаю, но хочу свой велосипед :umnik: Идея такова: есть мой вариант...

Задача на указатели и списки
Описать процедуру, которая вставляет: а) Новый элемент E после первого элемента непустого списка...

Задача на указатели и списки
Описать процедуру, которая вставляет: а) Новый элемент E после первого элемента непустого списка...

Нужна помощь с реализацией программы, использующей списки и указатели
Ситуация такая. Работаю в Lasarus. Нужна помощь с реализацией программы. Задание: Разработать...


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

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

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