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

Класс матриц - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Найти сумму элементов строки матрицы, в которой расположен элемент с наименьшим значением http://www.cyberforum.ru/cpp-beginners/thread210108.html
ребята очень нужна помощь при выводе матрицы.Кто сможет помоч если сможет.Нада MFC AppWizard.exe проект и вот задание Дана действительная матрица размера m*n. Найти сумму элементов строки, в которой расположен элемент с наименьшим значением. Предполагается, что такой элемент един-ственный. С меня пивко... Добавлено через 5 часов 59 минут откликнетесь кто нибудь))
C++ перевести код с паскаля на С++ Доброго времени суток! у меня большая просьба: имеется код на паскале, программа, которая рисует дерево, из каждой ветки растут новые 2. Помогите пожалйста перевести этот код на С++. Заранее спасибо! Добавлено через 36 секунд Program Tree; Uses Graph, CRT; var D, R, e : Integer; i, j : Word; Ar : array of Real; Ar1 : array of Real; http://www.cyberforum.ru/cpp-beginners/thread210092.html
C++ "Замок" (на перебор с возвратом)
Написать программу, которая определяет: количество комнат в замке; площадь наибольшей комнаты; какую стену в замке следует удалить, чтобы получить комнату наибольшей площади. Замок условно разделен на M*N клеток (М<=50, N<=50). Каждая такая клетка может иметь от 0 до 4 стен.
Модуль расчёта пространственного заряда C++
Модуль расчёта пространственного заряда PIC-методом для ячеек конечно-разностной схемы и CIC-методом для конечно-разностной ячейки Исходные данные: 1) Координаты и размеры ячеек-параллелепипедов. 2) Набор трубок тока в виде последовательностей отрезков прямой с заданными параметрами: – координаты концов отрезков; – распределение заряда на каждом отрезке. парни может ктонибудь...
C++ Надо решить "Дано трехзначное число. Определить входит ли в него цифра 4." http://www.cyberforum.ru/cpp-beginners/thread209921.html
Дано трехзначное число. Определить входит ли в него цифра 4.
C++ Фундоментальные циклы графа Нужна программа на C\C++.по фундоментальным циклам графа,есть прога подобная на паскале но она у меня почемуто не работает...хотя пример взят из книжки где автор утверждает что она работает))) вот она помогите кто чем сможет((( Program GraphCycle; {Фундаментальные циклы графа} uses CRT,DOS; Const nVertex=100; {Максимальное количество вершин} nAdjacent=1000; {Максимальная длина списка... подробнее

Показать сообщение отдельно
lemegeton
 Аватар для lemegeton
2910 / 1339 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
15.12.2010, 02:33     Класс матриц
Не лишним, не лишним. Перегружайте =, [] (в двух видах -- const и обычный). Пригодится.
Цитата Сообщение от Gabberr Посмотреть сообщение
Matrix & Matrix::operator = (const Matrix & T)
{
* *if (this == &T)
* * * return *this;
* *else
* *{
* * * *delete a; // неправильно удалили двойной массив.
* * * *nstr=T.nstr;
* * * *nstl=T.nstl;
* * * *a=new int *[nstr];
* * *for (int j=0;j<nstr;j++)
* * *{
* * * * a[j]=new int[nstl];
* * * * for (int i=0;i<nstl;i++)
* * * * * *a[j][i]=T.a[i][j]; * *
* * *}
return *this;
* *} * * * *
}
Цитата Сообщение от Gabberr Посмотреть сообщение
Matrix::~Matrix()
{
* * for (int i=0;i<nstr;i++) // сколько-сколько раз вы удаляете одно и то же?!
* * * *delete []a; * * * * * * //
}
Добавлено через 1 минуту
И там и там должно быть что-то вроде
C++
1
2
3
for (int i=0;i<nstr;i++)
     delete [] a[i];
delete [] a;
Добавлено через 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
#include <iostream>
#include <iomanip>
 
using namespace std;
 
class Matrix
{
protected:
        double** _data;
        unsigned int _size;
public:
        Matrix(void) : _data(0), _size(0) {}
        Matrix(unsigned int size) : _size(size), _data(0)
        {
                if (_size>0)
                {
                        _data = new double*[_size];
                        for (int i=0; i<_size; i++)
                                _data[i] = new double[_size];
                }
        }
        Matrix(const Matrix& other)
        {
                Matrix(other.size());
                for (int i=0; i<_size; i++)
                for (int j=0; j<_size; j++)
                        _data[i][j] = other._data[i][j];
        }
 
        const unsigned int size() const { return _size; }
        double* operator[](int i) { return _data[i]; }
        double& at(int i, int j) { return _data[i][j]; }
 
        Matrix& operator=(const Matrix& other)
        {
                if (this!=&other)
                {
                        for (int i=0; i<_size; i++)
                                delete [] _data[i];
                        delete [] _data;
                        _size = other.size();
                        if (_size>0)
                        {
                                _data = new double*[_size];
                                for (int i=0; i<_size; i++)
                                {
                                        _data[i] = new double[_size];
                                        for (int j=0; j<_size; j++)
                                                _data[i][j] = other._data[i][j];
                                }
                        }
                }
                return *this;
        }
 
        ~Matrix()
        {
                for (int i=0; i<_size; i++)
                        delete [] _data[i];
                delete [] _data;
        }
};
. Вдруг что новое почерпнете?

Добавлено через 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
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <ctime>
#include <exception>
#include <stdexcept>
 
using namespace std;
 
class Array
{
protected:
        int** _data;
        int _cols, _rows;
public:
        Array(void) : _data(0), _rows(0),_cols(0) {};
        Array(int rows, int cols, bool fill=false, int filler=0)
                : _rows(rows), _cols(cols), _data(0)
        {
                _data = new int* [_rows];
                for (int i=0; i<_rows; i++)
                {
                        _data[i] = new int[_cols];
                        if (fill)
                                for (int j=0; j<_cols; j++)
                                        _data[i][j] = filler;
                }
        }
 
        Array(const Array& other) :
                _cols(other.cols()),
                _rows(other.rows())
        {
                _data = new int* [_rows];
                for (int i=0; i<_rows; i++)
                {
                        _data[i] = new int[_cols];
                        for (int j=0; j<_cols; j++)
                                _data[i][j] = other._data[i][j];
                }
        }
 
        const Array transpon() const
        {
                Array C(_cols, _rows);
                for (int i=0; i<_cols; i++)
                        for (int j=0; j<_rows; j++)
                                C[i][j] = _data[j][i];
                return C;
        }
 
        const Array operator+(const Array& other) const
        {
                if ((_cols != other.cols()) || (_rows != other.rows()))
                        throw out_of_range("Multiplied matrixes do not have same number of cols and rows.");
                Array C(_rows, _cols);
                for (int i=0; i<C.rows(); i++)
                        for (int j=0; j<C.cols(); j++)
                                C._data[i][j] = _data[i][j] + other._data[i][j];
                return C;
        }
 
        const Array operator*(const Array& other) const
        {
                if (_cols != other.rows())
                        throw out_of_range("Multiplied matrixes do not have same number of cols and rows.");
                Array C(_rows, other.cols(), true);
                for (int i=0; i<C.rows(); i++)
                        for (int j=0; j<C.cols(); j++)
                                for (int k=0; k<_cols; k++)
                                C[i][j] += _data[i][k]*other._data[k][j];
                return C;
        }
 
        Array& operator= (const Array& other)
        {
                if (this!=&other)
                {
                        if (_data!=0)
                        {
                                for (int i=0; i<_rows; i++)
                                        delete [] _data[i];
                                delete [] _data;
                        }
                        _rows = other.rows();
                        _cols = other.cols();
 
                        _data = new int* [_rows];
                        for (int i=0; i<_rows; i++)
                                _data[i] = new int[_cols];
 
                        for (int i=0; i<_rows; i++)
                                for (int j=0; j<_cols; j++)
                                        _data[i][j] = other._data[i][j];
                }
                return *this;
        }
 
        friend ostream& operator<< (ostream& o, const Array& a)
        {
                for (int i=0; i<a._rows; i++)
                {
                        for (int j=0; j<a._cols; j++)
                                o << setw(4) << a._data[i][j];
                        o << endl;
                }
                return o;
        }
 
        void fill_random()
        {
                for (int i=0; i<_rows; i++)
                        for (int j=0; j<_cols; j++)
                                _data[i][j] = rand()%100+1;
        }
 
        int* operator[](int i) { return _data[i]; }
        int& at(int i, int j) { return _data[i][j]; }
 
        const int cols() const { return _cols; }
        const int rows() const { return _rows; }
 
        ~Array()
        {
                if (_data!=0)
                {
                        for (int i=0; i<_rows; i++)
                                delete [] _data[i];
                        delete [] _data;
                }
        }
};
 
// пример
int main()
{
        srand(static_cast<unsigned int>(time(0)));
 
        Array a(5, 5);
        a.fill_random();
        cout << a << endl;
 
        int* max_cols = new int[a.cols()];
        for (int i=0; i<a.cols(); i++)
        {
                max_cols[i] = a[i][0];
                for (int j=1; j<a.rows(); j++)
                        if (max_cols[i] < a[i][j])
                                max_cols[i] = a[i][j];
                cout << setw(4) << max_cols[i];
        }
        cout << endl << endl;
 
        int min = max_cols[0];
        for (int i=1; i<a.cols(); i++)
                if (min > max_cols[i])
                        min = max_cols[i];
 
        cout << setw(4) << min << endl;
        delete [] max_cols;
        Array x(3, 3, true, 1);
        Array y(3, 3, true, 1);
        Array z(3, 5);
        z.fill_random();
        cout << (x*y) << endl;
        cout << (x+y) << endl;
        cout << z << endl << z.transpon() << endl;
 
        return 0;
}
 
Текущее время: 07:11. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru