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

C++ перегрузка операторов, комплексные числа - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Динамический массив http://www.cyberforum.ru/cpp-beginners/thread579888.html
В динамическом массиве(одномерном или двумерном) добавить после каждого негативного элемента его модуль.
C++/CLI WinForms Как сделать в программе задержку между кликом по кнопке и выполнением определенного кода Здравствуйте! подскажите пожалуйста как сделать чтоб при нажатии на кнопку в progressbar отсчитывалось 20сек а потом в textbox выводилось слово?? #pragma once namespace Restoration { using namespace System; using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; http://www.cyberforum.ru/cpp-beginners/thread579882.html
Перевод из десятичной в двоичную, восьмеричную и шестнадцатиричную систему C++
Задание: написать программу которая переводит десятичное число в 2, 8 и 16 систему счисления. #include "stdafx.h" #include <iostream.h> void main() { int var, dvo, vos, she, var1, var2; cout << "Vvedite chislo v desyatichnoi sisteme: ";
C++ Сортировка Шелла
Отсортировать по возрастанию динамический одномерный массив целых чисел.
C++ Подпрограммы работы с деком http://www.cyberforum.ru/cpp-beginners/thread579856.html
Здравствуйте, помогите разработать программу. Разработать подпрограммы работы с деком. Дек организован в массиве с циклическим заполнением и с использованием двунаправленного списка. Операции выполняются с разных концов дека.Для организации указанных структур использовать массивы или списки.
C++ Рекурсия Посчитать рекурсивно ∑ от (i=1) до n,формула n^2/(x-n) подробнее

Показать сообщение отдельно
Belaya_pantera
0 / 0 / 0
Регистрация: 12.12.2010
Сообщений: 6
19.05.2012, 22:24     C++ перегрузка операторов, комплексные числа
Помогите разобраться в предоставленной программе..

Сама программа(не сначала..до этого всё вроде понятно):

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
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
// Вспомогательная функция
//------------------------------------------------------------------------------
template <class TVal> void Rand(TVal *i)
{
 *i = (random(20)-10)/10.0;
};
 
// Вспомогательная функция для класса Complex
void Rand(Complex *i)
{
 double x,y;
 Rand(&x);
 Rand(&y);
 if (i == NULL) {i = new Complex(x, y);} [B]что здесь задается?[/B]
 i->re = x;
 i->im = y;
}; 
 
// Описание шаблона класса Matrix
//------------------------------------------------------------------------------
template <class TMatr> class Matrix
{
private:
 int Size;
 TMatr **Buf;
 int CoordTest(int i, int j){
 if ((i >= 0) && (i < Size) && (j >= 0) && (j < Size)) return 1;
 else return 0;}
public:
 Matrix();
 Matrix(int tSize);
 ~Matrix();
 // Методы получения информации из матрицы
 int GetLength(); // Получение размера матрицы
 TMatr GetVal(int i, int j); // Получить значение элемента матрицы
 void OutputMatr(); // Вывести на дисплей список значений матрицы
 // Методы добавление информации в матрицу
 void SetVal(int i, int j, TMatr val); // Присвоить новое значение элементу матрицы
 void InputMatr(); // Последовательный ввод всех значений массива с клавиатуры
 void RandomMatr(); // Заполнение массива случайными значениями
 void Add(Matrix&); // Сложение матриц
 void Mul(TMatr*); // Запись в массив произведения положительных элементов столбцов
 Matrix<TMatr> &operator = (Matrix<TMatr>&);
 bool operator > (Matrix<TMatr>&);
 // Оператор вывода
 friend ostream& operator << (ostream &arg1, Matrix<TMatr> &arg2)
 {
 for (int i=0; i < arg2.Size; i++)
 {
 for (int j=0; j < arg2.Size; j++) [B]и здесь???[/B]
 arg1 << arg2.Buf[i][j] << " ";
 arg1 << endl;
 }
 return(arg1);
 }
};
 
// Реализация методов шаблона класса Matrix
//------------------------------------------------------------------------------
 
template<class TMatr> Matrix<TMatr>::Matrix(){
Buf = NULL;
Size = 0;}
 
template<class TMatr> Matrix<TMatr>::Matrix(int tSize){
Size = tSize;
Buf = new TMatr *[Size];
for (int i=0; i < Size; i++)
 Buf[i] = new TMatr[Size];}
 
template<class TMatr> Matrix<TMatr>::~Matrix(){
if (Buf != NULL){
 for (int n = 0; n < Size; n++)
 delete [] Buf[n]; [B]что должно удалиться? [/B]
 delete [] Buf;}}
 
template<class TMatr> int Matrix<TMatr>::GetLength(){
 return Size;}
 
template<class TMatr> TMatr Matrix<TMatr>::GetVal(int i, int j){
 if (CoordTest(i,j)) return Buf[i][j]; [B]????[/B]
 else return 0;}
 
template<class TMatr> void Matrix<TMatr>::OutputMatr(){
 for (int i=0; i < Size; i++){
 for (int j=0; j < Size; j++){
 cout << Buf[i][j] << " ";}
 cout << "\n";}}
 
template<class TMatr> void Matrix<TMatr>::SetVal(int i, int j, TMatr val){
 if (CoordTest(i,j)) Buf[i][j]=val;}
 
template<class TMatr> void Matrix<TMatr>::InputMatr(){
 for (int i=0; i < Size; i++)
 for (int j=0; j < Size; j++){
 cout << "Input [" << i << "][" << j << "]: ";
 cin >> Buf[i][j];}}
 
template<class TMatr> void Matrix<TMatr>::RandomMatr(){
 for (int i=0; i < Size; i++){
 for (int j=0; j < Size; j++)
 Rand(&Buf[i][j]);}}
 
template<class TMatr> void Matrix<TMatr>::Add(Matrix &arg2)
{
if (Size != arg2.Size) return;
for (int i = 0; i < Size; i++) [B]???[/B]
 for (int j = 0; j < Size; j++)
 Buf[i][j] += arg2.Buf[i][j];
};
 
template<class TMatr> void Matrix<TMatr>::Mul(TMatr* arr)
{
for (int j = 0; j < Size; j++)
 {
 arr[j] = 1;
 for (int i = 0; i < Size; i++)
 if (Buf[i][j] > 0) arr[j] *= Buf[i][j];
 }
};
 
template<class TMatr>
 Matrix<TMatr> &Matrix<TMatr>::operator = (Matrix<TMatr>& arg2)
{
if (Buf != NULL)
 {
 for (int n = 0; n < Size; n++)
 delete [] Buf[n];
 delete [] Buf;
 }
Size = arg2.Size;
Buf = new TMatr *[Size];
for (int i=0; i < Size; i++) [B]?????[/B]
 Buf[i] = new TMatr[Size];
for (int i = 0; i < Size; i++)
 for (int j = 0; j < Size; j++)
 Buf[i][j] = arg2.Buf[i][j];
return(*this);
};
 
template<class TMatr> bool Matrix<TMatr>::operator > (Matrix<TMatr>& arg2)
{
TMatr s1 = Buf[0][0] * Buf[0][0];
TMatr s2 = arg2.Buf[0][0] * arg2.Buf[0][0];
for (int n = 1; n < Size; n++)
 s1 += Buf[n][n] * Buf[n][n];
for (int n = 1; n < arg2.Size; n++)
 s2 += arg2.Buf[n][n] * arg2.Buf[n][n]; [B]?????[/B]
return(s1 > s2);
};
// Шаблон класса Vector
//------------------------------------------------------------------------------
template <class Element>
class Vector
{
private:
 int size;
 Element *array;
public:
 Vector();
 Vector(int sz);
 ~Vector();              [B]???[/B]
 void Sort();
 void Print();
 Element& operator [] (int i);
 Vector<Element>& operator = (Vector<Element> &arg2);
 bool operator < (Vector<Element> &arg2);
};
 
// Конструктор по умолчанию
template<class Element> Vector<Element>::Vector()
{
 size = 0;
 array = NULL;
};
 
// Конструктор с параметром размера массива
template<class Element> Vector<Element>::Vector(int sz)
{
 size = sz;
 array = new Element[size];
};
 
// Деструктор
template<class Element> Vector<Element>::~Vector()
{
if(array != NULL) delete [] array;
};
 
// Сортировка массива
template<class Element> void Vector<Element>::Sort()
{
for(int i=0; i < size-1; i++)
 for(int j = i; j < size-1; j++)
 if(array[j] > array[j+1])
 {                                   [B]что за сортировка?[/B]
 Element *e = new Element;
 *e = array[j];
 array[j] = array[j+1];
 array[j+1] = *e;
 delete e;
 }
};
 
// Вывод на дисплей
template<class Element> void Vector<Element>::Print()
{
for(int i=0; i<size; i++)
 {cout << "[" << i << "]=" << endl << array[i];}
};
 
// Перегрузка оператора "[]"
template<class Element> Element& Vector<Element>::operator [] (int i)
{
return array[i];
};
 
// Перегрузка оператора "="
template<class Element>
 Vector<Element>& Vector<Element>::operator = (Vector<Element> &arg2)
{
if(array != NULL) {delete [] array;}
size = arg2.size;                     [B]?????[/B]
array = new Element[size];
for(int i=0; i<size; i++)
 array[i] = arg2.array[i];
return(*this);
};
 
// Перегрузка оператора "<"
template<class Element> bool Vector<Element>::operator < (Vector<Element> &arg2)
{
int minSize = size < arg2.size ? size : arg2.size;
for(int i = 0; i < minSize; i++)
 {
 if((*this)[i] > arg2[i]){return(true);} [B]??????[/B]
 }
return(false);
};
 
// Функции для демонстрации шаблона Vector, параметризованного шаблоном TList
//------------------------------------------------------------------------------
template <class TVal> void TestVector(int v1, int v2, int s)
{
clrscr();
cout << "Test object Vector:" << endl;
Vector<Matrix<TVal> > vect1(v1), vect2(v2);
Matrix<TVal> TmpMatr(s); [B]?????[/B]
// Заполняем Vect1
for (int n = 0; n < v1; ++n)
 {
 vect1[n] = TmpMatr;
 vect1[n].RandomMatr();
 }
cout << "vect1: " << endl;
vect1.Print();
cout << endl;
// Заполняем Vect2
for (int n = 0; n < v2; ++n) [B]??????[/B]
 {
 vect2[n] = TmpMatr;
 vect2[n].RandomMatr();
 }
cout << "vect2: " << endl;
vect2.Print();
cout << endl;
// Проверка перегруженного оператора сравнения
cout << "vect1 < vect2 = " << (vect1 < vect2) << endl << endl;
vect1 = vect2;
cout << "vect1 = vect2" << endl << endl; [B]???????[/B]
vect1.Sort();
cout << "Sorted array vect1: " << endl;
vect1.Print();
cout << endl << "Press any key..";
getch();
clrscr();
};
 
#pragma argsused
// Головная функция
//------------------------------------------------------------------------------
int main(int argc, char* argv[])
{
TestVector<Complex>(4, 5, 4);
return(0);
};
//------------------------------------------------------------------------------
Еще программа делает параметризацию вектором. Её быть не должно, что конкретно нужно убрать чтобы этого не происходило?
Задание: 1.Вставить в шаблонный класс TMatr. TMatr - квадратная матрица – то оператор сравнения можно реализовать, как сравнение суммы квадратов главных диагоналей.
2. Определить требования к типу, которым должен параметризоваться TMatr. Дополнить поведение класса TMatr необходимыми операторами.
4. TMatr, должен параметризоваться классом Complex.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 22:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru