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

Class Marix - C++

Восстановить пароль Регистрация
 
Вася1q
 Аватар для Вася1q
21 / 21 / 0
Регистрация: 13.09.2011
Сообщений: 311
13.02.2012, 17:52     Class Marix #1
Добрый вечер программисты!
В очередной раз обращаюсь к вам с вопросом т.к. считаю ваш форум самым лучшим ресурсом по СИ++ и не только по тому что тут можно найти уже готовые лабы А еще по тому что здесь могут подробно и четко объяснить) даже лучше некоторых "преподавателей " универа. Так вот, сам вопрос.
Я попытался создать клаcc мaтрицa, и пытался найти кoличествo стрoк, кoличествo стoлбцoв, элeмeнты матрицы; мне нужно использовать метoды: вывoд матрицы и проверка: являeтся ли матрица симметричнoй (АТ = А) и пeрeгружeнные опeрации: слoжение, вычитание, деление, умнoжение матриц, умнoжение матрицы на числo.
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
Немного погуглил, немного попыхтел...и вот что у меня вышло:
#include <iostream>
#include <conio.h>
#include <string>
using namespace std;
//======= class  =================
class Matrix
{
//====== private =================
private:
int n,m;//размер матрицы
double **a, **c;
public:
Matrix::Matrix(int n, int m)
{
int i,j;
Matrix::n=n;
Matrix::m=m;
a=new double*[n];
for(i=0;i<n;i++)
a[i]=new double[m];
c=new double*[n];
for(int i=0; i<n; i++)
c[i]=new double[m];
// Заполнение массива
{puts("\nВведите эл-ты матрицы:");
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{
cout<<"a["<<i<<"]["<<j<<"]=";
cin>>a[i][j];}
cout<<endl;}
};
Matrix::~Matrix()
{
for(int i=0;i<n;i++)
delete []a[i];
delete []a;};
//Операция присваивания
Matrix &Matrix::operator =(const Matrix &A)
{for(int i=0; i<n; i++)
for(int j=0; j<m; j++)
a[i][j]=A.c[i][j];
return *this;
}
//Сложение матриц
Matrix & Matrix::operator +(Matrix &A)
{
for(int i=0; i<n; i++)
for(int j=0; j<m; j++)
c[i][j]=a[i][j]+A.a[i][j];
return *this;
}
//Вычитание
Matrix & Matrix::operator -(Matrix &A)
{
for(int i=0; i<n; i++)
for(int j=0; j<m; j++)
c[i][j]=a[i][j]-A.a[i][j];
return *this;
}
// Умножение
Matrix & Matrix::operator *(Matrix &A)
{
double s=0;
for(int i=0;i<n;i++)
 {
 int z=0;
 while(z<A.m)
  {
   c[i][z]=0;
   for(int j=0;j<m;j++)
   {
    s=GetI(i,j)*A.GetI(j,z);
    c[i][z]+=s;
   }
  z++;
  }
}
return *this;
}
//Сравнение
Matrix & Matrix::operator ==(Matrix &A)
{
int f=0;
for(int i=0; i<n; i++)
{
for(int j=0; j<m; j++)
if(a[i][j]!=A.a[i][j])
{
 cout<<"\nМатрицы не равны\n";
 f=1; 
 break;
}
if(f==1) break;
}
if(f==0) 
cout<<"\nМатрицы равны\n";
return *this;
}
P.S. прочитал кучу страниц, и даже главу книги Павловской...не получается.
Вот ссылки кому интересно.
http://www.cyberforum.ru/cpp-beginne...023-page3.html
http://www.cyberforum.ru/cpp-beginne...ead423161.html
Я не прошу готовый код, помогите хотя бы частично)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.02.2012, 17:52     Class Marix
Посмотрите здесь:

C++ Class
Class C++
CLASS МАТРИЦА C++
Class Complex C++
template <class T> C++
C++ derived class
Class C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор FAQ
13.02.2012, 18:51     Class Marix #2
Цитата Сообщение от Вася1q Посмотреть сообщение
P.S. прочитал кучу страниц, и даже главу книги Павловской...не получается.
Вот ссылки кому интересно.
- значит не все страницы перерыл
http://www.cyberforum.ru/faq/thread4...ml#post2471796
Вася1q
 Аватар для Вася1q
21 / 21 / 0
Регистрация: 13.09.2011
Сообщений: 311
14.02.2012, 07:31  [ТС]     Class Marix #3
-=ЮрА=-, Обижаешь! Твой FAQ я просмотрел в ПЕРВУЮ очередь))).
Но т.к. я пассажир бронированной техники, то не смог разобраться. Там по моему уделено внимание определителю. Да и по коду я пока плохо ориентируюсь, а там много довольно непонятного для меня.

Добавлено через 2 минуты
Например:
C++
1
2
ret_val.matrix[i][j]
ret_val.setMemory
Знаю что мэмори это память)) но что и как не пойму)) Гуру FAQ - выручай!

Добавлено через 1 час 49 минут
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
#include <iostream>
using namespace std;
int main ()
{
int A[10][10],i,j,p,k;
//Ââîä Г¬Г*òðèöû Г± ГЄГ«Г*ГўГЁГ*òóðû
cout<<"Ââåäèòå Г°Г*çìåðГ*îñòü Г¬Г*òðèö: "<<endl;
cin>>p>>k;
if (p==k&&p>0)
{
cout<<"===================="<<endl;
cout<<"ГЊГ*òðèöГ* ñèììåòðè÷Г*Г*!"<<endl;
cout<<"===================="<<endl;
}
else 
{
cout<<"======================="<<endl;
cout<<"ГЊГ*òðèöГ* Г*ГҐ ñèììåòðè÷Г*Г*!"<<endl;
cout<<"======================="<<endl;
cout<<"ÍåâîçìîæГ*Г» îïåðГ*öèè Г*Г*Г¤ Г¬Г*òðèöГ*ìè Г°Г*Г§Г*ûõ Г°Г*çìåðîâ!";
system ("pause");
return (-1);
}
cout<<"Г‡Г*ïîëГ*ГЁГІГҐ ïåðâóþ Г¬Г*òðèöó: "<<endl;
 for(i=0;i<p;i++)
 {
  for (j=0;j<k;j++)
  {
  cin>>A[i][j];    
  }
 cout<<endl;                
 }
int y,B[10][10],C[10][10];
cout<<"Г‡Г*ïîëГ*ГЁГІГҐ âòîðóþ Г¬Г*òðèöó: "<<endl;
 for(i=0;i<p;i++)
 {
  for (j=0;j<k;j++)
  {
  cin>>B[i][j];    
  }
 cout<<endl;                
 }
//Âûâîä ïåðâîé Г¬Г*òðèöû Г*Г* ГЅГЄГ°Г*Г*
cout<<"ÏåðâГ*Гї Г¬Г*òðèöГ*: "<<endl;
 for(i=0;i<p;i++)
 {
  for (j=0;j<k;j++)
  {
  cout<<A[i][j];
  cout<<" ";    
  }
 cout<<endl;                
 }
cout<<"ÂòîðГ*Гї Г¬Г*òðèöГ*: "<<endl;
//Âûâîä âòîðîé Г¬Г*òðèöû Г*Г* ГЅГЄГ°Г*Г* 
for(i=0;i<p;i++)
 {
  for (j=0;j<k;j++)
  {
  cout<<B[i][j];
  cout<<" ";    
  }
 cout<<endl;                
 }
cout<<"ÑóììГ* Г¬Г*òðèö: "<<endl;
//ñëîæåГ*ГЁГҐ äâóõ Г¬Г*òðèö
for (i=0;i<p;i++)
 {
 for (j=0;j<p;j++)
  {
  C[i][j]=A[i][j]+B[i][j];
  }   
 }
 
 for(i=0;i<p;i++)
 {
  for (j=0;j<k;j++)
  {
   cout<<C[i][j];
   cout<<" ";    
  }
 cout<<endl;                
 }
cout<<"ГђГ*Г§Г*îñòü Г¬Г*òðèö: "<<endl;
//âû÷èòГ*Г*ГЁГҐ äâóõ Г¬Г*òðèö
for (i=0;i<p;i++)
 {
 for (j=0;j<p;j++)
  {
  C[i][j]=A[i][j]-B[i][j];
  }   
 }
 
 for(i=0;i<p;i++)
 {
  for (j=0;j<k;j++)
  {
   cout<<C[i][j];
   cout<<" ";    
  }
 cout<<endl;
 }                
//ГіГ¬Г*îæåГ*ГЁГҐ äâóõ Г¬Г*òðèö
cout<<"ÓìГ*îæåГ*ГЁГҐ Г¬Г*òðèö: "<<endl;
for (i=0;i<p;i++)
 {
 for (j=0;j<p;j++)
  {
   C[i][j]=0;
   for (y=0;y<k;y++)
   {
    C[i][j]+=(A[i][y]*B[y][j]);
   }
  }   
 }
 
 for(i=0;i<p;i++)
 {
  for (j=0;j<k;j++)
  {
    cout<<C[i][j];
    cout<<" ";   
  }
 cout<<endl;
 }
//ГіГ¬Г*îæåГ*ГЁГҐ Г¬Г*òðèöû Г*Г* ÷èñëî
cout<<"===ÓìГ*îæåГ*ГЁГҐ Г¬Г*òðèöû Г*Г* ÷èñëî==="<<endl;
cout<<"Ââåäèòå ÷èñëî, Г*Г* êîòîðîå Г*ГіГ¦Г*Г® ГіГ¬Г*îæèòü Г¬Г*òðèöó: "<<endl;
int N;
cin>>N;
cout<<"ÓìГ*îæåГ*ГЁГҐ Г¬Г*òðèöû Г*Г* ÷èñëî: "<<endl;
for (i=0;i<p;i++)
 {
 for (j=0;j<p;j++)
  {
    C[i][j]=(N*A[i][j]);
  }   
 }
 
 for(i=0;i<p;i++)
 {
  for (j=0;j<k;j++)
  {
    cout<<C[i][j];
    cout<<" ";   
  }
 cout<<endl;
 }
system("pause");
return(0);  
}
Добавлено через 2 минуты
Писал около 3 часов! Помогите теперь с перегрузками,пожалуйста!!!

Добавлено через 49 секунд
Ах..да еще я память под матрицы глупо выделил..но это уж как умею((

Добавлено через 10 часов 16 минут
Покажите хотя бы на примере перегрузки одной операции
-=ЮрА=-
Заблокирован
Автор FAQ
14.02.2012, 10:05     Class Marix #4
Цитата Сообщение от Вася1q Посмотреть сообщение
Покажите хотя бы на примере перегрузки одной операции
Вася1q, ну у меня же перегрузка оператров +,-,* как для матриц так и для чисел, вот например перегрузка оператора умножения (матрица умножается на вещественное)

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
CMatrix
CMatrix::operator*(double val)
{
* * * * int i,j;
* * * * CMatrix ret_val(rows, cols);
* * * * if(ret_val.setMemory(rows,cols))
* * * * {
* * * * * * * * for(i = 0; i < rows; i++)
* * * * * * * * for(j = 0; j < cols; j++)
* * * * * * * * * * * * ret_val.matrix[i][j] = matrix[i][j] * val;
* * * * }
* * * * return ret_val;
}
PS:
Цитата Сообщение от Вася1q Посмотреть сообщение
Твой FAQ я просмотрел в ПЕРВУЮ очередь
Тёзка, не в обиду плохо смотрел
Вася1q
 Аватар для Вася1q
21 / 21 / 0
Регистрация: 13.09.2011
Сообщений: 311
14.02.2012, 11:25  [ТС]     Class Marix #5
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Тёзка, не в обиду плохо смотрел
не поспоришь)) просто это как смотреть на ноты...видишь разные символы, может даже немного понимаешь, а вот что да как именно не знаешь)

Добавлено через 33 минуты
Не догоняю... класс вроде получилось создать.
C++
1
2
3
4
5
6
7
class Matrix
{
private:
int A[10][10];
public:
int p,k;//размерность матрицы
};
а вот перегрузку...
даже по-твоему примеру, я не пойму что возвращает return.
-=ЮрА=-
Заблокирован
Автор FAQ
14.02.2012, 13:39     Class Marix #6
Цитата Сообщение от Вася1q Посмотреть сообщение
даже по-твоему примеру, я не пойму что возвращает return.
- возвращает новую матрицу элементы которой равны соотв суммам элементов исходной матрицы и числа.
IFree Host
14.02.2012, 13:48
  #7

Не по теме:

Цитата Сообщение от Вася1q Посмотреть сообщение
А еще по тому что здесь могут подробно и четко объяснить) даже лучше некоторых "преподавателей " универа.
Вот тут ты очень прав. Мой профессор половину вопросов не в состоянии ответить. Слишком узкий специалист

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.02.2012, 19:12     Class Marix
Еще ссылки по теме:

C++ class C++
class C++
C++ Class и char
Запись class X; C++
Class C++

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

Или воспользуйтесь поиском по форуму:
Вася1q
 Аватар для Вася1q
21 / 21 / 0
Регистрация: 13.09.2011
Сообщений: 311
14.02.2012, 19:12  [ТС]     Class Marix #8
Т.к. я все же не смог научиться работать с перегрузками (к моему всеобщему стыду), я продолжал гуглить... и нашел вот такую программку. Она почти полностью совпадает с моей. Но там нет описание что куда вводить и самих пояснений к программе. Жалко конечно, что со своим кодом ничего не смог сделать. В общем поясните пожалуйста код:
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
#include <iostream>
#include <conio.h>
class matrix
{
public:
    matrix ();
    matrix (int,int);
    matrix (const matrix &);
    ~matrix();
 
private:
    void matrix_destroy();              // очистить память
    void matrix_create(int, int);       // выделить память
    void matrix_copy(const matrix &);   // копирование матрицы
 
protected:
    int m,n;
    float **arr;
 
public:
    void input();
    void output();
 
public:
    matrix operator*(int k);
    matrix operator+(int k);
    matrix operator-(int k);
 
    friend matrix operator *(const matrix &a, const matrix &b)
    {
        if (a.n == b.n && a.m == b.m)
        {
            int i,j;
            matrix temp(a.m,a.n);
            for(i=0;i<a.m;i++)
                for(j=0;j<a.n;j++)
                {temp.arr[i][j]=a.arr[i][j]*b.arr[i][j];}
                return temp;
        }
        else
            return a;
    }
 
    friend matrix operator +(const matrix &a, const matrix &b)
    {
        if (a.n == b.n && a.m == b.m)
        {
            int i,j;
            matrix temp(a.m,a.n);
            for(i=0;i<a.m;i++)
                for(j=0;j<a.n;j++)
                {temp.arr[i][j]=a.arr[i][j]+b.arr[i][j];}
                return temp;
        }
        else
            return a;
    }
 
    friend matrix operator -(const matrix &a, const matrix &b)
    {
        if (a.n == b.n && a.m == b.m)
        {
            int i,j;
            matrix temp(a.m,a.n);
            for(i=0;i<a.m;i++)
                for(j=0;j<a.n;j++)
                {temp.arr[i][j]=a.arr[i][j]-b.arr[i][j];}
                return temp;
        }
        else
            return a;
    }
 
    matrix operator =(const matrix &b); 
 
};
 
matrix::matrix()
{
    arr=0;
    m=0;
    n=0;
}
 
matrix::matrix(int line,int column)
{
    matrix_create(line, column);
}
 
matrix::matrix(const matrix &b)
{
    arr=0;
    m=0;
    n=0;
    matrix_copy(b);
}
 
matrix::~matrix()
{
    matrix_destroy();
}
 
void matrix::matrix_destroy()
{
    if (arr)
    {
        for(int i=0; i<m; i++)
        {
            if (arr[i])
                free(arr[i]);
        }
        free(arr);
    }
    arr=0;
    m=0;
    n=0;
}
 
void matrix::matrix_create(int line,int column)
{
    m=line; n=column;
    arr=(float**)malloc(m*sizeof(float*));
    for(int i=0; i<m; i++)
        arr[i]=(float*)malloc(n*sizeof(float));
}
 
void matrix::matrix_copy(const matrix&b)
{
    matrix_destroy();
    matrix_create(b.m, b.n);
 
    // копирование
    for (int i=0;i<m;i++)
        for (int j=0;j<n;j++)
            arr[i][j]=b.arr[i][j];
}
//Ввод матрицы
void matrix::input()
{
    int i,j;
    for (i=0;i<m;i++)
        for (j=0;j<n;j++)
            std::cin >> arr[i][j];
}
//Вывод матрицы
void matrix::output()
{
    int i,j;
    for (i=0;i<m;i++)
        for (j=0;j<n;j++)
            printf("%5.2f",arr[i][j]); //помогите переписать эти строчки на си++
    printf("\n");
}
 
matrix matrix::operator+(int k)
{
    int i,j;
    matrix temp(m,n);
    for(i=0;i<m;i++)
        for(j=0;j<n;j++)
            {temp.arr[i][j]=arr[i][j]+k;}
    return temp;
}
 
matrix matrix::operator-(int k)
{
    int i,j;
    matrix temp(m,n);
    for(i=0;i<m;i++)
        for(j=0;j<n;j++)
            {temp.arr[i][j]=arr[i][j]-k;}
    return temp;
}
 
matrix matrix::operator*(int k)
{
    int i,j;
    matrix temp(m,n);
    for(i=0;i<m;i++)
        for(j=0;j<n;j++)
            {temp.arr[i][j]=arr[i][j]*k;}
    return temp;
}
 
matrix matrix::operator =(const matrix &b)
{
    matrix_copy(b);
    return *this;
}
 
int main()
{
    matrix a(1, 2),b(1, 2),c;
    a.input();
    b.input();
    c=a+b;
    c.output();
    system("pause");
    return (0); 
}
Yandex
Объявления
14.02.2012, 19:12     Class Marix
Ответ Создать тему
Опции темы

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