- 001
- 002
- 003
- 004
- 005
- 006
- 007
- 008
- 009
- 010
- 011
- 012
- 013
- 014
- 015
- 016
- 017
- 018
- 019
- 020
- 021
- 022
- 023
- 024
- 025
- 026
- 027
- 028
- 029
- 030
- 031
- 032
- 033
- 034
- 035
- 036
- 037
- 038
- 039
- 040
- 041
- 042
- 043
- 044
- 045
- 046
- 047
- 048
- 049
- 050
- 051
- 052
- 053
- 054
- 055
- 056
- 057
- 058
- 059
- 060
- 061
- 062
- 063
- 064
- 065
- 066
- 067
- 068
- 069
- 070
- 071
- 072
- 073
- 074
- 075
- 076
- 077
- 078
- 079
- 080
- 081
- 082
- 083
- 084
- 085
- 086
- 087
- 088
- 089
- 090
- 091
- 092
- 093
- 094
- 095
- 096
- 097
- 098
- 099
- 100
#include <iostream>
#include <cmath>
using namespace std;
#define EXIT 10
#define CMATRIX_ROW_SIZE 2
#define CMATRIX_COL_SIZE 2
class Matrix
{
float M[CMATRIX_ROW_SIZE][CMATRIX_COL_SIZE];
public:
Matrix(){
for(int i=0;i<CMATRIX_ROW_SIZE;i++){
for(int j=0;j<CMATRIX_COL_SIZE;j++){
M[i][j]=0;
}
}
}
Matrix(const Matrix &m){
for(int i=0;i<CMATRIX_ROW_SIZE;i++){
for(int j=0;j<CMATRIX_COL_SIZE;j++){
this->M[i][j]=m.M[i][j];
}
}
}
Matrix(float a_11,float a_12,float a_21,float a_22){
this->M[0][0]=a_11;
this->M[0][1]=a_12;
this->M[1][0]=a_21;
this->M[1][1]=a_22;
}
void print()const{cout<<" ("<<M[0][0]<<" "<<M[0][1]<<")\n"<<" ("<<M[1][0]<<" "<<M[1][1]<<")"<<endl;}
float determinant()const{return (M[0][0]*M[1][1] - M[0][1]*M[1][0]);}
bool compare(Matrix &m1,Matrix &m2)const{return (m1==m2) ? true : false;}
template <class Matrix> float get_ij (Matrix &m,int i,int j){
if( (i>=0 && i<CMATRIX_ROW_SIZE) && (j>=0 && j<CMATRIX_COL_SIZE ) ) return m.M[i][j];
else return 0;
}
template <class Matrix> void set_ij (Matrix &m,int i,int j,float setter){
if( (i>=0 && i<CMATRIX_ROW_SIZE) && (j>=0 && j<CMATRIX_COL_SIZE ) ) this->M[i][j]=setter;
}
friend istream &operator >>(istream &in,Matrix &m){
cout<<" Input [i][j]"<<endl;
for(int i=0;i<CMATRIX_ROW_SIZE;i++){
for(int j=0;j<CMATRIX_COL_SIZE;j++){
in>>m.M[i][j];
}
}
return in;
}
friend Matrix operator * (const Matrix &m,int degree){
if(degree>0){
Matrix temp;
for(int k=0;k<degree-1;k++){
temp.M[0][0] = temp.M[0][0] + m.M[0][0]*m.M[0][0] + m.M[0][1]*m.M[1][0];
temp.M[0][1] = temp.M[0][1] + m.M[0][0]*m.M[0][1] + m.M[0][1]*m.M[1][1];
temp.M[1][0] = temp.M[1][0] + m.M[1][0]*m.M[0][0] + m.M[1][1]*m.M[1][0];
temp.M[1][1] = temp.M[1][1] + m.M[1][0]*m.M[0][1] + m.M[1][1]*m.M[1][1];
}
return temp;}
else if(degree==0){
Matrix temp(1,0,0,1);
return temp;}
else {
Matrix temp;
return temp;
}
}
friend Matrix operator * (float lambda,const Matrix &m){
Matrix temp;
for(int i=0;i<CMATRIX_ROW_SIZE;i++){
for(int j=0;j<CMATRIX_COL_SIZE;j++){
temp.M[i][j] = lambda*m.M[i][j];
}
}
return temp;}
Matrix operator * (const Matrix &m){
Matrix temp;
temp.M[0][0] = temp.M[0][0] + M[0][0]*m.M[0][0] + M[0][1]*m.M[1][0];
temp.M[0][1] = temp.M[0][1] + M[0][0]*m.M[0][1] + M[0][1]*m.M[1][1];
temp.M[1][0] = temp.M[1][0] + M[1][0]*m.M[0][0] + M[1][1]*m.M[1][0];
temp.M[1][1] = temp.M[1][1] + M[1][0]*m.M[0][1] + M[1][1]*m.M[1][1];
return temp;}
Matrix operator + (const Matrix &m){
Matrix temp;
for(int i=0;i<CMATRIX_ROW_SIZE;i++){
for(int j=0;j<CMATRIX_COL_SIZE;j++){
temp.M[i][j] = M[i][j] + m.M[i][j];
}
}
return temp;}
bool operator == (const Matrix &m){
bool flag;
for(int i=0;i<CMATRIX_ROW_SIZE;i++){
for(int j=0;j<CMATRIX_COL_SIZE;j++){
flag = (M[i][j]==m.M[i][j]) ? true : false;
}
}
return temp;
}
};
Простите ради Бога за лабу. Просто очень хочется узнать мнение общественности. Заранее спасибо, за любую оценку!
Esper 14.07.2011 17:59 # +2
>#define CMATRIX_ROW_SIZE 2
>#define CMATRIX_COL_SIZE 2
Это что еще за дерьмо? Почему размеры матрицы захардкожены?
>template <class Matrix> float get_ij
нафига шаблон? Просто потому что умеем?
>friend Matrix operator * (const Matrix &m,int degree){
Это что за херня? При виде "M*n" никто не подумает, что это возведение матрицы M в степень n. Почему degree знаковое? Почему не сигнализируется невозможность корректно посчитать результат?
>float determinant()const{return (M[0][0]*M[1][1] - M[0][1]*M[1][0]);}
Почему не проверяется "квадратность" матрицы? Почему определитель любой матрицы считается как определитель матрицы 2x2?
И т. д. и т. п.
Автор - тупица и разгильдяй, которому плевать на пользователей его высеров.
PS Минуснул. Это тупо и печально.
absolut 14.07.2011 18:00 # 0
Xom94ok 14.07.2011 18:03 # −1
Три с минусом и смачный подзатыльник.
Xom94ok 14.07.2011 18:06 # −1
tpuctah 15.07.2011 00:08 # −1
void print()const{cout<<" ("<<M[0][0]<<" "<<M[0][1]<<")\n"<<" ("<<M[1][0]<<" "<<M[1][1]<<")"<<endl;}
а если я хочу в файл написать например мне что делать?
ну и тп и тд.
и вообще дизайн идет от использования а не с написания реализации.
напиши на бамаге как пользователь будет использовать класс, что будет удобней\понятней\лаконичней
набросай пример использование, покажи кому нибудь, все ли понятно человеку. переделай.
и вот только потом начинай код писать :)
удачи.
помни - не ошибается тот кто ничего не делает.
ps задрали лабораторки давайте продакшн код уже смешной )