نمایش نتایج 1 تا 5 از 5

نام تاپیک: ضرب عدد در ماتریس

Threaded View

پست قبلی پست قبلی   پست بعدی پست بعدی
  1. #4
    کاربر دائمی آواتار clover
    تاریخ عضویت
    خرداد 1388
    محل زندگی
    اصفهان - اراک
    پست
    646

    نقل قول: ضرب عدد در ماتریس

    کد زیر به درستی کار میکنه اما این کد هنوز هم ایراداتی داره که ممکنه منجر به بروز خطا بشه از جمله:
    1 - عدم بررسی سایز و تطبیق آرایه ها در هنگام ضرب (برای جمع و تفریق به صورت ساده اضافه شد)
    2 - عدم پیاده سازی سازنده کپی (عملگر انتساب به صورت ساده سربار گذاری شد، در کار با کلاس هایی که عضو داده ای اشاره گر دارند حتما سازنده کپی و عملگر انتساب را تعریف کنید)
    3 - عدم آزاد سازی حافظه های تخصیص داده شده

    البته اشکالات دیگه ای هم ممکنه داشته باشه که من فرصت نکردم بررسی کنم و به خودتون واگذار می کنم.
    موفق باشید.

    #include <iostream>

    using namespace std;


    class MATRIX
    {
    private:
    int row;
    int column;
    int **MatrixArray;
    public:
    MATRIX();
    void getMatrix();
    void setMatrix();
    MATRIX operator=(MATRIX mat);
    MATRIX operator+(MATRIX mat);
    MATRIX operator-(MATRIX mat);
    MATRIX operator*(MATRIX mat);
    MATRIX operator*(int k);
    };

    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<<"]"<<"["<<k<<"]=";
    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) // Added
    {
    cout << "Error: operator+ !";
    return 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 j=0 ; j<row ; j++)
    {
    for ( int k=0 ; k<column ; k++)
    {
    tempMAT.MatrixArray[j][k] = MatrixArray[j][k] + mat.MatrixArray[j][k];
    }
    }
    return tempMAT;//?
    }

    /*################################################# ##############################*/
    MATRIX MATRIX::operator =(MATRIX mat)
    {
    row = mat.row;//?
    column = mat.column;//?
    MatrixArray =new int *[row];
    for (int i=0 ; i<row ; i++)
    {
    MatrixArray[i] = new int [column];
    }

    for (int j=0 ; j<row ; j++)
    {
    for ( int k=0 ; k<column ; k++)
    {
    MatrixArray[j][k] = mat.MatrixArray[j][k];
    }
    }
    return *this;//?
    }

    /*################################################# #############################*/
    MATRIX MATRIX::operator -(MATRIX mat)
    {
    MATRIX tempMAT;

    if (row != mat.row || column != mat.column) // Added
    {
    cout << "Error: operator+ !";
    return 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 j=0 ; j<row ; j++)
    {
    for (int k=0 ; k<column ; k++)
    {
    tempMAT.MatrixArray[j][k] = MatrixArray[j][k] - mat.MatrixArray[j][k];
    }
    }
    return tempMAT;
    }
    /*################################################# ###########################*/
    MATRIX MATRIX::operator *(MATRIX mat)
    {
    MATRIX tempMAT;
    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]);
    }
    }
    }
    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 i=0 ; i<row ; i++) // Fixed
    {
    for (int j=0 ; j<column ; j++) // Fixed
    {
    tempMAT.MatrixArray[i][j]=0; // Fixed
    }
    }

    for (int i=0 ; i<row ; i++)
    {
    for (int j=0 ; j<column ; j++) // Fixed
    {
    tempMAT.MatrixArray[i][j] = MatrixArray[i][j]* k; // Fixed
    }
    }
    return tempMAT;
    }
    /*################################################# #########################*/
    void main()
    {
    MATRIX mat1;
    MATRIX mat2;
    MATRIX mat3;
    MATRIX mat4;
    MATRIX mat5;
    MATRIX mat6;
    int kk;
    cin >> kk;

    mat1.getMatrix();
    mat2.getMatrix();
    mat3 = mat2 + mat1;
    mat4 = mat2 - mat1;
    mat5 = mat2 * mat1;
    mat6 = mat2 * kk;
    mat1.setMatrix();
    cout<<endl;
    mat2.setMatrix();
    cout<<endl;
    mat3.setMatrix();
    cout<<endl;
    mat4.setMatrix();
    cout<<endl;
    mat5.setMatrix();
    cout<<endl;
    mat6.setMatrix();

    }
    آخرین ویرایش به وسیله clover : پنج شنبه 03 دی 1388 در 23:16 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •