5 / 5 / 1
Регистрация: 31.05.2011
Сообщений: 72
1

Создать класс CMatrix, описывающий объект – действительные матрицы заданного размера

21.05.2015, 13:49. Показов 4606. Ответов 6
Метки нет (Все метки)

Создать класс CMatrix (матрица), описывающий объект – действительные матрицы задан-ного размера NR (число строк)NC (число столбцов), состоящие из NR вектор-строк, описы-ваемых классом CVect, длины NC.
Поля класса:
Защищённые члены: число строк матрицы NR, число столбцов матрицы NC, массив из NR вектор-строк, принадлежащих классу CVect длины NC.
Методы класса:
Конструктор по умолчанию – создает матрицу нулевого размера, не выделяя память.
Конструктор первый – создаёт матрицу заданного размера и заполняет её нулями.
Конструктор второй – создаёт матрицу заданного размера и заполняет его числами типа double путём копирования их из двумерного массива.
Конструктор копирования первый– копирует одну матрицу в другую.
Конструктор копирования второй – создание матрицы, состоящей из одной строки или одного столбца, путём копирования элементов вектора. Ориентация вектора учитывается.
Конструктор третий – создание матрицы заданного размера NRNC со случайными дей-ствительными компонентами, заключёнными в пределах [–R, R], R – действительное число.
Конструктор четвёртый – создание диагональной матрицы, заполненной действительным числом fill_number.Встроенная функция определения числа строк матрицы.
Встроенная функция определения числа столбцов матрицы.
Функция транспонирования матрицы.Функция вычисления суммы элементов матрицы.
Функция вычисления следа матрицы (сумма элементов главной диагонали).
Функция произведения двух матриц.Функция умножения матрицы на скаляр.
Функция сложения двух матриц.Функция присвоения одной матрицы другой.
Функция печати матрицы в поток вывода.Функция сравнения двух матриц.
Функция перестановки местами строк матрицы с номерами first_row и second_row.
Функция перестановки местами столбцов матрицы с номерами first_col и second_col.
Функция сложения строк матрицы: к элементам строки с номером first_row прибавить эле-менты строки second_row, умноженные на скаляр fact в соответствии с выражением
[r1] = [r1] + fact*[r2]. Функция создания новой матрицы из фрагмента уже имеющейся: обра-зование новой матрицы путём копирования в неё прямоугольного фрагмента с координатами (индексами) верхнего левого углового элемента и размерами nrows ncols из уже имеющейся матрицы. Функция, размещающая в имеющейся матрице блок Block (из двумерного массива или матрицы) в позицию, определяемую верхним левым элементом [top][left].
Деструктор. Оператор индексации – возвращает номер вектор-строки в матрице, когда вы-ражение mat[i] относится ко всем элементам строки с номером i, чтобы с матрицей можно было работать, как с обычным массивом, обращаясь к её элементам в виде: mat[i][j].
Оператор транспонирования – транспонирует матрицу.
Бинарные операторы сложения и вычитания, чтобы матрицы одинаковых размеров мож-но было складывать и вычитать, как обычные переменные вида c = a + b.
Оператор произведения двух матриц (проверяющий, можно ли умножать данные матрицы).
Оператор умножения матрицы на число.
Оператор умножения вектора на матрицу (проверяющий, можно ли умножать данные век-тор и матрицу).
Оператор умножения матрицы на вектор (проверяющий, можно ли умножать данные мат-рицу и вектор).
Инкрементный оператор сложения матриц аналог инкрементного оператора в C: a+=b.
Декрементный оператор вычитания векторов аналог декрементного оператора в C: a-=b..
Инкрементный оператор умножения матрицы на скаляр аналог инкрементного оператора в C: a*=b..Оператор печати матрицы в поток вывода.
Оператор присваивания одной матрицы другой. Оператор сравнения матриц.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.05.2015, 13:49
Ответы с готовыми решениями:

Создать классы, описывающий прямоугольники и класс-наследник, описывающий прямоугольные параллепипеды
Создать классы, описывающий прямоугольники. Найти площадь прямоугольника. Создать класс-наследник,...

Создать класс, описывающий треугольник, и наследник, описывающий прямые треугольной призмы
Создать класс описывающий треугольник. найти площадь треугольника. создать класс наследник,...

Разработать класс, описывающий объект «книжный шкаф»
Разработать класс, описывающий объект «книжный шкаф». Объект «книжный шкаф» описывает шкаф с...

Класс: Разработать класс, описывающий объект "Телефонный звонок"
Всем добрый вечер))) Пожалуйста помогите, очень прошу Разработать класс, описывающий объект...

6
5 / 5 / 1
Регистрация: 31.05.2011
Сообщений: 72
21.05.2015, 13:51  [ТС] 2
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
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
#include <iostream>
#include <cstdlib>
#include <math.h>
using namespace std;
class CVect //Класс
{ protected:
int size;//Количество элементов
        bool isRow;//Строка или столбец
  public:
        double* elements; // Указатель на массив элементов
        CVect()//Конструктор по умолчанию 
        {
            size=0;
        }
        CVect(int s)//Конструктор первый – создаёт вектор-строку заданного размера и заполня-ет её нулями.
        {elements = new double[s];
            size=s;
            for (int i = 0; i < size; i++)
                elements[i]=0;
            isRow=true;
        }
        CVect(double* a, int s)//Конструктор второй – создаёт вектор-строку заданного размера и заполняет его числами типа double путём копирования их из заданного одномерного масси-ва.
        {elements = new double[s];
            size=s;
            for (int i = 0; i < size; i++)
                elements[i]=a[i];
            isRow=true;
        }
        CVect(const CVect &vect)//Конструктор копирования – копирует один вектор в другой.
        {size=vect.size;
            elements= new double[size];
            for (int i = 0; i < size; i++)
                elements[i]=vect.elements[i];
            isRow=vect.isRow;
        }
        CVect(int s, int R)//Конструктор третий – создание вектора размера N со случайными действительными ком-понентами, заключёнными в пределах [–R, R]
        {size=s;
            isRow=true;
            elements=new double[size];
            for (int i = 0; i < size; i++)
                elements[i]=rand()%(2*R)-R;
        }
        ~CVect()// Деструктор
        {delete elements;
            size=0;
        }
        int getSize()//Встроенная функция определения размера вектора
        {return size;
        }
        double* getElements()
        {return elements;
        }
        bool isItRow()//Встроенная функция определения ориентации вектора (столбец или строка)
        {return isRow;
        }
        void transpose()//Встроенная функция транспонирования вектора
        {if (isRow)
                isRow=false;
            else
                isRow=true;
        }
        double sumOfElements()//Функция вычисления суммы элементов вектора
        {double res=0;
            for (int i = 0; i < size; i++)
                res+=elements[i];
            return res;
        }
        double vectAbs()//Функция вычисления модуля вектора
        {double res=0;
            for (int i = 0; i < size; i++)
                res+=elements[i]*elements[i];
            return sqrt(res);
        }
        CVect multVect(const CVect &vect)//Функция скалярного произведения двух векторов
        {CVect res(size);
            res.isRow=isRow;
            for (int i = 0; i < size; i++)
                res.elements[i]=elements[i]*vect.elements[i];
            return res;
        }
        CVect multNum(double num)//Функция умножения вектора на скаляр
        {CVect res(size);
            res.isRow=isRow;
            for (int i = 0; i < size; i++)
                res.elements[i]=elements[i]*num;
            return res;
        }
        CVect sumVect(const CVect &vect)//Функция сложения двух векторов
        {CVect res(size);
            res.isRow=isRow;
            for (int i = 0; i < size; i++)
                res.elements[i]=elements[i]+vect.elements[i];
            return res;
        }
        CVect assignVect(const CVect &vect)//Функция присвоения одного вектора другому
        {delete elements;
            size=vect.size;
            isRow=vect.isRow;
            for (int i = 0; i < size; i++)
                elements[i]=vect.elements[i];
            return *this;
        }
        void print()//Функция печати вектора в поток вывода
        {for (int i = 0; i < size; i++)
                cout << elements[i] <<' ';
            cout << endl;
        }
        bool isEqual(const CVect &vect)//Функция сравнения двух векторов
        {bool res=true;
            if (size != vect.size)
                res=false;
            else
            {for (int i = 0; i < size; i++)
                {
                    if (elements[i]!=vect.elements[i])
                        res=false;
                }
            }
            return res;
        }
CVect operator+( CVect const &v2 ) //перегрузка оператора суммирования
        {CVect res(*this);
            if (size==v2.size)
            {for (int i = 0; i < size; i++)
                    res.elements[i]=elements[i]+v2.elements[i];
                return res;
            }
        }CVect operator-( CVect const &v2 ) //перегрузка оператора вычитания
        {
            CVect res(*this);
            if (size==v2.size)
            {for (int i = 0; i < size; i++)
                    res.elements[i]=elements[i]-v2.elements[i];
                return res;
            }
        }CVect operator*( CVect const &v2 ) //перегрузка оператора умножения на вектор
        {CVect res(*this);
            if (size==v2.size)
            {for (int i = 0; i < size; i++)
                    res.elements[i]=elements[i]*v2.elements[i];
                return res;
            }
        }
        CVect operator*( double num ) //перегрузка оператора умножения на число
        {CVect res(*this);
            for (int i = 0; i < size; i++)
                res.elements[i]=elements[i]*num;
            return res;
        }CVect operator+=( CVect const &v2 ) //перегрузка оператора суммирования
        {
            if (size==v2.size)
            {
                for (int i = 0; i < size; i++)
                    elements[i]+=v2.elements[i];
            return *this;
            }
        }CVect operator-=( CVect const &v2 ) //перегрузка оператора вычитания
        {if (size==v2.size)
            {for (int i = 0; i < size; i++)
                    elements[i]-=v2.elements[i];
            return *this;
            }
        }CVect operator*=( double num ) //перегрузка оператора умножения на число
        {for (int i = 0; i < size; i++)
                elements[i]*=num;
            return *this;
        }friend ostream & operator<< (ostream & output, CVect & v) // Перегрузка оператора выво-да
        {
            for (int i = 0; i < v.getSize(); i++)
                output <<  v.elements[i]<< " ";
            output << endl;
            return output;
        }
        bool operator==(CVect const &vect)//Перегрузка оператора сравнения
        {
            bool res=true;
            if (size != vect.size)
                res=false;
            else
            {for (int i = 0; i < size; i++)
                {
                    if (elements[i]!=vect.elements[i])
                        res=false;
                }
            }return res;
        }  CVect operator=(CVect const &vect)//Перегрузка оператора присваивания
        {delete elements;
            size=vect.size;
            elements = new double[size];
            isRow=vect.isRow;
            for (int i = 0; i < size; i++)
            {
                elements[i]=vect.elements[i];
            } return *this;
        } double& operator[](int i)//Перегрузка оператора индексирования
        {return elements[i];
        }CVect operator++(int) //Оператор транспонирования (кавычку) перегружать нельзя! Вместо него эту функцию выполняет оператор (++) 
        {if (isRow)
                isRow=false;
            else 
                isRow=true;
            
            return *this;
        }
};class CMatrix //Класс
{
    protected:
        int NR, NC;//Количество строк и столбцов
        CVect* elements;
 public:
        CMatrix()//Конструктор по умолчанию 
        {
            NR=NC=0;
        }
        CMatrix(int r, int c)//Конструктор первый – создаёт матрицу заданного размера и запол-няет её нулями.
        {
            NR=r;
            NC=c;
            elements = new CVect[NR];
            for (int i = 0; i < NR; i++)
            {
                CVect t(NC);//Используется консструктор из класса вектора
                elements[i] = t;
            }
        }
        CMatrix(double** a, int r, int c)//Конструктор второй – создаёт матрицу заданного разме-ра и заполняет его числами типа double путём копирования их из двумерного массива.
        {
            NR=r;
            NC=c;
            elements = new CVect[NR];
            for (int i = 0; i < NR; i++)
            {
                CVect t(*a, NC);
                elements[i] = t;
            }
        }
        CMatrix(const CMatrix &m)//Конструктор копирования первый– копирует одну матрицу в другую
        {
            NR=m.NR;
            NC=m.NC;
            elements= new CVect[NR];
            for (int i = 0; i < NR; i++)
                elements[i]=m.elements[i];
        }
        CMatrix(CVect &vect)//Конструктор копирования второй – создание матрицы, состоящей из одной строки или одного столбца, путём копирования элементов вектора
        {
            if (vect.isItRow())//Если строка - используем готовый конструктов из вектора
            {
                NR=1;
                NC=vect.getSize();
                elements = new CVect[1];
                elements[0]=vect;
            }
            else//Если нет, то поэдементно
            {
                NC=1;
                NR=vect.getSize();
                elements = new CVect[NR];
                for (int i = 0; i < NR; i++)
                {
                    CVect t(NC);
                    elements[i] = t;
                    elements[i].elements[0]=vect.elements[i];
                }
            }
        }
        CMatrix(int r, int c, int R)//Конструктор третий – создание матрицы заданного размера NR´NC со случайными дей-ствительными компонентами, заключёнными в пределах [–R, R]
        {
            NR=r;
            NC=c;
            elements = new CVect[NR];
            for (int i = 0; i < NR; i++)
            {
                CVect t(NC,R);
                elements[i] = t;
            }
        }
        CMatrix(int s, double fill_number)//Конструктор четвёртый – создание диагональной мат-рицы, заполненной действительным числом fill_number
        {
            NC=s;
            NR=s;
            elements = new CVect[NR];
            for (int i = 0; i < NR; i++)
            {
                CVect t(NC);
                elements[i] = t;
                elements[i].elements[i]=fill_number;
            }
        }
        
        ~CMatrix()// Деструктор
        {
            NR=NC=0;
        }
        int getNC()//Встроенная функция определения числа столбцов матрицы.
        {
            return NC;
        }
        int getNR()//Встроенная функция определения числа строк матрицы.
        {
            return NR;
        }
        CMatrix transpone()//Функция транспонирования матрицы.
        {
            CMatrix m(NC,NR);
            m.print();
            for (int i = 0; i < NR; i++)
            {
                for (int j = 0; j < NC; j++)
                {
                    m.elements[j].elements[i]=elements[i].elements[j];
                }
            }
            
            return m;
        }
        double sumOfElements()//Функция вычисления суммы элементов 
        {
            double res=0;
            for (int i = 0; i < NR; i++)
            {
                for (int j = 0; j < NC; j++)
                    res+=elements[i].elements[j];
            }
                
            return res;
        }
        double step()//Функция вычисления следа матрицы (сумма элементов главной диагона-ли)
        {
            double res=0;
            int i=0;
            while (i<NC && i<NR)
            {
                res+=elements[i].elements[i];
                i++;
            }
            return res;
        }
0
5 / 5 / 1
Регистрация: 31.05.2011
Сообщений: 72
21.05.2015, 13:51  [ТС] 3
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
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
CMatrix mult(CMatrix m)//Функция произведения двух матриц
        {
            CMatrix res(NR,m.NC);
            if (NC==m.NR)
            {
                for (int i = 0; i < NR; i++)
                {
                    for (int j = 0; j < m.NC; j++)
                    {
                        for (int k = 0; k < NC; k++)
                        {
                            res.elements[i].elements[j]+=elements[i].elements[k]*m.elements[k].elements[j];
                        }
                    }
                }
            }
            else
                cout<<"Impossible!";
            return res;
        }
        CMatrix multNum(double num)//Функция умножения матрицы на скаляр
        {
            CMatrix m(NR,NC);
            for (int i = 0; i < NR; i++)
            {
                for (int j = 0; j < NC; j++)
                    m.elements[i].elements[j]=elements[i].elements[j]*num;
            }
            return m;
        }
        CMatrix addMatrix(CMatrix m)//Функция сложения двух матриц
        {
            CMatrix res(NR,NC);
            if (NR==m.NR and NC==m.NC)
            {
                for (int i = 0; i < NR; i++)
                {
                    for (int j = 0; j < NC; j++)
                        res.elements[i].elements[j]=elements[i].elements[j]+m.elements[i].elements[j];
                }
                return res;
            }
            else
                cout<<"Impossible to sum matrix";
        }
        CMatrix assignMatrix(CMatrix m)//Функция присвоения одной матрицы другой
        {
            CMatrix res(m);
            return m;
        }
        void print()//Функция печати в поток вывода
        {
            for (int i = 0; i < NR; i++)
            {
                elements[i].print();
            }
                cout << endl;
        }
        bool isEqual(CMatrix m)//Функция сравнения двух матриц
        {
            bool res=true;
            if (NC!=m.NC or NR!=m.NR)
                res=false;
            else
            {
                for (int i = 0; i < NR; i++)
                {
                    for (int j = 0; j < NC; j++)
                    {
                        if (elements[i].elements[j]!=m.elements[i].elements[j])
                            res=false;
                    }
                }
            }
            return res;
        }
        CMatrix changeRows(int first_row, int second_row)//Функция перестановки местами строк матрицы с номерами first_row и second_row
        {
            CMatrix res(*this);
            CVect v(NC);
            v=res.elements[second_row];
            res.elements[second_row]=res.elements[first_row];
            res.elements[first_row]=v;
            return res;
        }
        CMatrix changeCols(int first_col, int second_col)//Функция перестановки местами столб-цов матрицы с номерами first_col и second_col
        {
            double temp;
            CMatrix res(*this);
            for (int i = 0; i < NR; i++)
            {
                temp=res.elements[i].elements[second_col];
                res.elements[i].elements[second_col]=res.elements[i].elements[first_col];
                res.elements[i].elements[first_col]=temp;
            }
            return res;
        }
        CMatrix sumRows(int first_row, int second_row, double fact)//Функция сложения строк матрицы: к элементам строки с номером first_row прибавить эле-менты строки second_row, умноженные на скаляр fact в соответствии с выражением
        {
            CMatrix res(*this);
            CVect v1(NC), v2(NC);
            v2=res.elements[second_row];
            v1=res.elements[first_row];
            v1=v1+v2.multNum(fact);//Используется перегрузка операторов класса вектора
            res.elements[first_row]=v1;
            return res;
        }
        CMatrix getBlock(int left, int top, int nRows, int nCols)//Функция создания новой матрицы из фрагмента уже имеющейся
        {
            CMatrix res(nRows,nCols);
            res.NC=nCols;
            res.NR=nRows;
            int i1,j1;//Индексы новой матрцы
            i1=0;
            j1=0;
            for (int i = top; i < top+nRows; i++)
                {
                    j1=0;
                    for (int j = left; j < left+nCols; j++)
                    {
                        res.elements[i1].elements[j1]=elements[i].elements[j];
                        j1++;
                    }
                    i1++;
                }
            return res;
        }
        CMatrix putBlock(double** a, int top, int left, int nCols, int nRows)//Функция, размещаю-щая в имеющейся матрице блок Block 
        {
            CMatrix res(*this);
            int i1,j1;//Индексы новой матрцы
            i1=0;
            j1=0;
            for (int i = top; i < top+nRows; i++)
                {
                    j1=0;
                    for (int j = left; j < left+nCols; j++)
                    {
                        res.elements[i].elements[j]=a[i1][j1];
                        j1++;
                    }
                    i1++;
                }
            return res;
        }
        CVect& operator[](int i)//Перегрузка оператора индексирования
        {
            return elements[i];
        }
        CMatrix operator++(int) //Оператор транспонирования (кавычку) перегружать нельзя! Вместо него эту функцию выполняет оператор (++) 
        {
            CMatrix res(NC,NR);
            for (int i = 0; i < NR; i++)
            {
                for (int j = 0; j < NC; j++)
                {
                    res.elements[j].elements[i]=elements[i].elements[j];
                }
            }
            return res;
        }
        CMatrix operator+( CMatrix const &m2 ) //перегрузка оператора суммирования
        {
            CMatrix res(*this);
            if (NC==m2.NC and NR==m2.NR)
            {
                for (int i = 0; i < NR; i++)
                {
                    for (int j = 0; j < NC; j++)
                        res.elements[i].elements[j]=elements[i].elements[j]+m2.elements[i].elements[j];
                }
                return res;
            }
            else
                cout<< "Impossible!";
            return res;
        }
        CMatrix operator-( CMatrix const &m2 ) //перегрузка оператора вычитания
        {
            CMatrix res(*this);
            if (NC==m2.NC and NR==m2.NR)
            {
                for (int i = 0; i < NR; i++)
                {
                    for (int j = 0; j < NC; j++)
                        res.elements[i].elements[j]=elements[i].elements[j]-m2.elements[i].elements[j];
                }
                return res;
            }
            else
                cout<< "Impossible!";
            return res;
        }
        CMatrix operator*( CMatrix const &m ) //перегрузка оператора умножения 
        {
            CMatrix res(NR,m.NC);
            if (NC==m.NR)
            {
                for (int i = 0; i < NR; i++)
                {
                    for (int j = 0; j < m.NC; j++)
                    {
                        for (int k = 0; k < NC; k++)
                        {
                            res.elements[i].elements[j]+=elements[i].elements[k]*m.elements[k].elements[j];
                        }
                    }
                }
            }
            else
                cout<<"Impossible!";
            return res;
        }
  CMatrix operator*( CVect &m ) //перегрузка оператора умножения на вектор
        {
            CMatrix res(NR,1);
            
            if (!m.isItRow())
            {
            if (NC==m.getSize())
            {
                for (int i = 0; i < NR; i++)
                {
                    for (int j = 0; j < 1; j++)
                    {
                        for (int k = 0; k < NC; k++)
                        {
                            res.elements[i].elements[j]+=elements[i].elements[k]*m.elements[k];
                        }
                    }
                }
                return res;
            }
            else
                cout<<"Impossible!";
            
            }
            else
                cout<<"Impossible!";
            
        }
        CMatrix operator*( double num ) //перегрузка оператора умножения на число
        {
            CMatrix m(NR,NC);
            for (int i = 0; i < NR; i++)
            {
                for (int j = 0; j < NC; j++)
                    m.elements[i].elements[j]=elements[i].elements[j]*num;
            }
            return m;
        }
        CMatrix operator+=( CMatrix const &m ) //перегрузка оператора суммирования
        {
            
            if (NC==m.NC and NR==m.NR)
            {
                for (int i = 0; i < NR; i++)
                {
                    for (int j = 0; j < NC; j++)
                        elements[i].elements[j]+=m.elements[i].elements[j];
                }
                return *this;
            }
            else
                cout<< "Impossible!";
            
        }
        CMatrix operator-=( CMatrix const &m ) //перегрузка оператора вычитания
        {
            
            if (NC==m.NC and NR==m.NR)
            {
                for (int i = 0; i < NR; i++)
                {
                    for (int j = 0; j < NC; j++)
                        elements[i].elements[j]-=m.elements[i].elements[j];
                }
                return *this;
            }
            else
                cout<< "Impossible!";
        }
        CMatrix operator-=( double num ) //перегрузка оператора вычитания числа
        {
                for (int i = 0; i < NR; i++)
                {
                    for (int j = 0; j < NC; j++)
                        elements[i].elements[j]*=num;
                }
                return *this;
        }
        friend ostream & operator<< (ostream & output, CMatrix & m) // Перегрузка оператора вы-вода
        {
            for (int i = 0; i < m.NR; i++)
            {
                m.elements[i].print();
            }
                cout << endl;
            return output;
        }
        CMatrix operator=(CMatrix const & m)//Перегрузка оператора присваивания
        {
            delete elements;
            elements = new CVect[m.NR];
            NR=m.NR;
            NC=m.NC;
            for (int i = 0; i < m.NR; i++)
            {
                elements[i]=m.elements[i];
            }
            
        }
        bool operator==(CMatrix const &m)//Перегрузка оператора сравнения
        {
            bool res=true;
            if (NC!=m.NC or NR!=m.NR)
                res=false;
            else
            {
                for (int i = 0; i < NR; i++)
                {
                    for (int j = 0; j < NC; j++)
                    {
                        if (elements[i].elements[j]!=m.elements[i].elements[j])
                            res=false;
                    }
                }
            }
            return res;
        }
        double maxSumFromDiag()//Функция поиска наибольшей суммы элементов диагоналей. Число строк д.б. больше числа столбцов(такое задание)
        {double temp=0;
            double res=0;
            int k=0;
            while (k<NC and k<NR)
            {
                res+=elements[k].elements[k];//Сумма элементов главной диагонали, чтоб было от чего оталкиваться при дальнейших сравнениях
                k++;
            }
            if (NR>NC)
            {
                for (int i = 0; i < NR-NC; i++)//Проход по всем возможным диагоналям длинны NC
                {
                    temp=0;
                    for (int j = 0; j < NC; j++)
                        temp+=elements[j+i].elements[j];//Сумма диагональных элементов
                    if (temp>res)//Заменяем результат, если нашли большую сумму
                        res=temp;
                }
                return res;
            }
            else
                cout<<"Out of task!";
        }
};
int main()
{  CMatrix m(10,5,10.7);//Создание матрицы одним из конструкторов
    m.print();//Вывод на экран
    cout<<m.maxSumFromDiag();//Провека функции
    
   return 0;
}
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16842 / 6720 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
21.05.2015, 14:13 4
Так вы уверены, что требуется на C# ? Код на C++
0
5 / 5 / 1
Регистрация: 31.05.2011
Сообщений: 72
21.05.2015, 14:40  [ТС] 5
Уверена Си с элементами ооп
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16842 / 6720 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
21.05.2015, 15:04 6
Си != С++ != C#.
Си с элементами ООП - это вообще Objective C. В чистом си нет никаких элементов ООП.
0
Администратор
Эксперт .NET
9346 / 4628 / 755
Регистрация: 17.04.2012
Сообщений: 9,485
Записей в блоге: 14
21.05.2015, 19:22 7
Цитата Сообщение от Зайка43 Посмотреть сообщение
Уверена Си с элементами ооп
Ну значит "Си с классами", прямо как Страуструп прописал.
Тема перемещена.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.05.2015, 19:22
Помогаю со студенческими работами здесь

Класс: Создать класс, описывающий цех завода...
Создать класс, описывающий цех завода (количество единиц заготовок, поступающих на производство,...

Реализовать класс, описывающий целочисленное число произвольного размера (размер в байтах задается при инициализации)
Всем привет, помогите написать программу на C++. Реализовать класс, описывающий целочисленное...

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

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

Создать класс, описывающий комплексные числа
Помогите, пожалуйста! Нужно создать класс, описывающий комплексные числа. Класс содержит два...

Создать класс, описывающий библиотечную карточку
Создать класс, описывающий библиотечную карточку. Данные класса: имя, фамилия, количество взятых...


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

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

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