PDA

View Full Version : سوال: تابع سازنده برای کلاس ماتریس



alirezabe
یک شنبه 20 دی 1388, 19:57 عصر
سلام
من قبلا برای کلاس ماتریس یک تابع سازنده نوشته بودم ولی الان که فکر می کنم می بینم اشتباه بوده است زیرا الان درایه های ماتریس را فقط مقدار صفر می دهد ولی اصلا ماتریسی نیست که مقدار صفر دهد یعنی اصلا در تابع سازنده ماتریس ساخته نمی شود که بخواهد مفدار به آن دهد می خواستم بدونم چگونه این مشکل را برطرف کنم چون باید موقع ساختن یک شی باید سطر و ستون را بگیرد
امیدوارم فهمیده باشید منظورم چی است

#include<iostream>
#include"MATRIX.h"

using namespace std;

/*################################################# ##########################*/
MATRIX:: MATRIX()
{
for (int i=0 ; i<row ; i++)
{
for (int j=0 ;j<column ; j++)
{
MatrixArray[i][j]=0;
}
}
}
/*################################################# ###########################*/
void MATRIX::getMatrix()
{
cout << "please enter number of the matrix row: " ;
cin >> row ;
cout << "please enter number of the matrix column: " ;
cin >> column;

MatrixArray = new int *[row];
for (int i=0 ; i<row ; i++)
{
MatrixArray[i] = new int [column];
}

cout << "palease enter the dray of matrix: " << endl ;
for (int j=0 ; j<row ; j++)
{
for (int k=0 ; k<column ; k++)
{
cout << "dray["<<j+1<<"]"<<"["<<k+1<<"]=";
cin>> MatrixArray[j][k];
}
}
}
/*################################################# ##############################*/
void MATRIX::setMatrix()
{
for(int i=0 ; i<row ; i++)
{
for (int j=0 ; j<column ; j++)
{
cout << MatrixArray[i][j]<< "\t"/*?*/ ;
}
cout << endl;
}
}
/*################################################# ##############################*/
MATRIX MATRIX::operator +(MATRIX mat)
{
MATRIX tempMAT;
if ( row != mat.row && column != mat.column)
{
cout << "I can not + these Matrixs!" << endl ;
return tempMAT;
}
tempMAT.row = row;//?
tempMAT.column = column;//?
tempMAT.MatrixArray =new int *[row];

cout << endl;
cout << "this is the + of two matrixs:" << endl ;
cout << endl;
for (int i=0 ; i<row ; i++)
{
tempMAT.MatrixArray[i] = new int [column];
}


for (int j=0 ; j<row ; j++)
{
for ( int k=0 ; k<column ; k++)
{
tempMAT.MatrixArray[j][k] = MatrixArray[j][k] + mat.MatrixArray[j][k];
}
}
tempMAT.setMatrix();
return tempMAT;//?
}
/*################################################# #############################*/
MATRIX MATRIX::operator -(MATRIX mat)
{
MATRIX tempMAT;
if ( row != mat.row && column != mat.column)
{
cout << "I can not - these Matrixs! " << endl ;
return tempMAT;
}
cout << endl;
cout << "this is the - of two matrixs:" << endl ;
cout << endl;
tempMAT.row = row ;
tempMAT.column = column;
tempMAT.MatrixArray = new int *[row];
for (int i=0 ; i<row ; i++)
{
tempMAT.MatrixArray[i] = new int [column];
}


for (int j=0 ; j<row ; j++)
{
for (int k=0 ; k<column ; k++)
{
tempMAT.MatrixArray[j][k] = MatrixArray[j][k] - mat.MatrixArray[j][k];
}
}
tempMAT.setMatrix();
return tempMAT;
}
/*################################################# ###########################*/
MATRIX MATRIX::operator *(MATRIX mat)
{
MATRIX tempMAT;
if ( column != mat.row)
{
cout << "I can not * these Matrixs! " << endl ;
return tempMAT;
}
cout << endl;
cout << "this is the * of two matrixs:" << endl ;
cout << endl;
tempMAT.row = row;
tempMAT.column = mat.column;
tempMAT.MatrixArray = new int *[row];
for (int i=0 ; i<row ; i++)
{
tempMAT.MatrixArray[i] = new int [mat.column];
}


for (int j=0 ; j<row ; j++)
{
for (int k=0 ; k<mat.column ; k++)
{
tempMAT.MatrixArray[j][k]=0;//?
for (int l=0 ; l<mat.column ; l++)
{
tempMAT.MatrixArray[j][k] += (MatrixArray[j][l]) * (mat.MatrixArray[l][k]);
}
}
}
tempMAT.setMatrix();
return tempMAT;
}
/*################################################# ###########################*/
MATRIX MATRIX::operator* (int k)
{
MATRIX tempMAT;
tempMAT.row = row;
tempMAT.column = column;
tempMAT.MatrixArray = new int *[row];
for (int i=0 ; i<row ; i++)
{
tempMAT.MatrixArray[i] = new int [column];
}
for (int ii=0 ; ii<row ; ii++)
{
for (int j=0 ; j<column ; j++)
{
tempMAT.MatrixArray[ii][j]=0;
}
}

for (int j=0 ; j<row ; j++)
{
for (int jj=0 ; jj<column ; jj++)
{
tempMAT.MatrixArray[j][jj] = (MatrixArray[j][jj] * k);
}
}
return tempMAT;
}
/*################################################# ########################*/
int* MATRIX::operator[](int num)
{
return MatrixArray[num];
}

Salar Ashgi
یک شنبه 20 دی 1388, 20:10 عصر
اصول شی گرایی که برای این برنامه طی کرده اید ، کمی نادرست است . چون هر آبجکت

ماتریس شامل یکسری توابع عضو کلاس (Member Functions ) و شامل یکسری اعضای داده ای

(Data Members ) هست ، اعضای داده بهتره شامل تعداد سطر ، تعداد ستون و یک آرایه دوبعدی

برای نگهداری اعضای ماتریس باشه .

کد آموزشی زیر بررسی کنید :



#include <iostream>
#include <conio>
class Matrix{
public:
Matrix(int,int);
void Mat_get();
void Print();
private:
int **a;
int row;
int col;
};
//====================
Matrix::Matrix(int r,int c){
row = r;
col = c;
a = new int*[row];
for(int i=0;i<row;i++)
a[i] = new int[col];
}
//====================
void Matrix::Mat_get(){
cout<<"Enter Matrix :\n";
for(int i=0;i<row;i++){
for(int j=0;j<col;j++){
cin>>a[i][j];
}
}
}
//=====================
void Matrix::Print(){
cout<<"Your Matrix :\n";
for(int i=0;i<row;i++){
for(int j=0;j<col;j++){
cout<<a[i][j]<<" ";
}
cout<<endl;
}
}
//=====================
int main(){
Matrix m1(3,3);
m1.Mat_get();
m1.Print();
getch();
}


موفق باشید .

alirezabe
یک شنبه 20 دی 1388, 20:34 عصر
دست شما درد نکنه ولی اگر بخواهم بدونه پارامتر ارسال کنم باید چگونه بنویسم راستی هدر فایل کلاس جداست و فکر کنم به خاطر همینه که فکر کردید از اصول شی گرایی کمی مشکل داره ولی بازهم خیلی ممنون تا حدودی مشکلم بر طرف شد