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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Вася1q
21 / 21 / 0
Регистрация: 13.09.2011
Сообщений: 311
#1

Class Marix - C++

13.02.2012, 17:52. Просмотров 374. Ответов 7
Метки нет (Все метки)

Добрый вечер программисты!
В очередной раз обращаюсь к вам с вопросом т.к. считаю ваш форум самым лучшим ресурсом по СИ++ и не только по тому что тут можно найти уже готовые лабы А еще по тому что здесь могут подробно и четко объяснить) даже лучше некоторых "преподавателей " универа. Так вот, сам вопрос.
Я попытался создать кла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
Я не прошу готовый код, помогите хотя бы частично)
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.02.2012, 17:52
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Class Marix (C++):

Разъясните код пжлст(выдает ошибку:cannot convert from 'class std::list<class c_bullet *,class std::allocator<class c_bullet *> >::iterator' to 'int') - C++
Есть такие строки: std::list&lt;c_bullet*&gt; Bullets; ... for(auto i = Bullets.begin(); i != Bullets.end(); /**/) В строке цикла вот...

Работа с class ами. Заполнение дин. массива типа class - C++
Всем доброго времени суток! Это моя первая тема на этом сайте, поэтому если что извините меня (за неточности итд итп). Мне нужно...

Create a programm that creates an object of created class Time and tests the member functions of class - C++
Time Class Create a class called Time that might be used to represent time. 1. Your class should include three data...

Нужно объект типа класс проинициализировать с помощью перегруженного конструктора Class::Class( bool a ) - C++
Плиз помогите. Не знал, что я такой чайник.) Итак: есть два класса: CMyClass.h CMyClass.cpp и

enum и class как составляющие другого class - C++
Как организовать ввод enuma с клавиатуры (51-я строка)? Как прикрепить класс date к employee в private? :wall: #include &lt;iostream&gt; ...

vector<[class]> in class и перегрузка (ostream) - C++
Доброе всем время суток ) столкнулся с проблемой Есть у меня несколько классов и есть класс внутри которого созданы векторы хранящие...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
-=ЮрА=-
Заблокирован
Автор FAQ
13.02.2012, 18:51 #2
Цитата Сообщение от Вася1q Посмотреть сообщение
P.S. прочитал кучу страниц, и даже главу книги Павловской...не получается.
Вот ссылки кому интересно.
- значит не все страницы перерыл
http://www.cyberforum.ru/faq/thread4...ml#post2471796
1
Вася1q
21 / 21 / 0
Регистрация: 13.09.2011
Сообщений: 311
14.02.2012, 07:31  [ТС] #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 минут
Покажите хотя бы на примере перегрузки одной операции
0
-=ЮрА=-
Заблокирован
Автор FAQ
14.02.2012, 10:05 #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 я просмотрел в ПЕРВУЮ очередь
Тёзка, не в обиду плохо смотрел
0
Вася1q
21 / 21 / 0
Регистрация: 13.09.2011
Сообщений: 311
14.02.2012, 11:25  [ТС] #5
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Тёзка, не в обиду плохо смотрел
не поспоришь)) просто это как смотреть на ноты...видишь разные символы, может даже немного понимаешь, а вот что да как именно не знаешь)

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

Не по теме:

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

0
Вася1q
21 / 21 / 0
Регистрация: 13.09.2011
Сообщений: 311
14.02.2012, 19:12  [ТС] #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); 
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.02.2012, 19:12
Привет! Вот еще темы с ответами:

Объяснить причины ошибки "Extra qualification 'CLASS CONSTRUCTOR' and 'CLASS' has incomplete type" - C++
Согласно синтаксису, вроде все правильно, но ошибка... что не так? Ошибки компилятора ниже на рисунке... #include &lt;iostream&gt; ...

Не пойму конструкцию template <template <class T> class X> - C++
Что это за шаблон такой?

public class && static class - C++
Вообщем у меня небольшая связка, которую я хотел бы использовать в программе своей, но компилятор мне выдает ошибку и я не знаю что все...

Friend template class with template class argument - C++
Помогите подружить 2 класса: Имеется класс Student: template &lt;class _T&gt; class Faculty; class Student{ friend...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
14.02.2012, 19:12
Ответ Создать тему
Опции темы

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