Announcement

Collapse
No announcement yet.

[help me] Class Matrix?????? Mong được các cao thủ chỉ giáo...:)

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • [C++] [help me] Class Matrix?????? Mong được các cao thủ chỉ giáo...:)

    Mình viết code này vẫn chạy bình thường nhưng không xuất ra kết quả cộng 2 matrix được. Mong cả nhà ai biết chỉ giáo giúp vớ, hôm trước mình code nối 2 chuỗi vẫn không xuất ra được kết quả. Code of mình ở dưới:

    #include <iostream>
    #include <cstdlib>
    #include <iomanip>
    using namespace std;

    //--------Menu------------------
    void menu()
    {
    cout<<"\n0: Thoat";
    cout<<"\n1: Nhap, xuat ma tran bang toan tu";
    cout<<"\n2: Nhap, xuat ma tran bang ham";
    cout<<"\n3: Toan tu cong 2 ma tran";
    }

    //-----------khai báo class------------------------
    class matrix
    {
    private:
    int **a;
    int ****ng, socot;
    public:
    matrix(); //constructor mặc định
    matrix(matrix &); //constructor sao chép
    ~matrix(); //destructor
    friend istream& operator>> (istream &, matrix &); //nhập bằng toán tử
    friend ostream& operator<< (ostream &, matrix &); //xuất bằng toán tử
    void xoabonho(); //hàm xóa bộ nhớ
    void nhap(); //hàm nhập
    void xuat(); //hàm xuất
    friend matrix operator +(matrix &, matrix &); //toán tử cộng


    };

    //----constructor mặc định--------
    matrix::matrix()
    {
    ****ng=0;
    socot=0;
    a= NULL;
    }

    //---------constructor sao chép----------
    matrix::matrix(matrix &m)
    {
    ****ng=m.****ng;
    socot= m.socot;
    a= new int*[****ng];
    if(a==NULL)
    cout<<"\nKhong du bo nho ";
    for(int i=0; i< ****ng; ++i)
    a[i]= new int[socot];
    for(int i=0; i<****ng; ++i)
    for(int j=0; j<socot; ++j)
    a[i][j]=m.a[i][j];
    }
    //------destructor-------------
    matrix::~matrix()
    {
    xoabonho();
    }

    //-------hàm xóa bộ nhớ---------
    void matrix:: xoabonho()
    {
    if(a)
    {
    for(int i=0; i<****ng; ++i)
    if(a[i])
    delete []a[i];
    delete []a;

    }
    }

    //--------toán tử nhập-------------
    istream& operator >>(istream & input, matrix &m)
    {
    m.xoabonho();
    do
    {
    cout<<"\nNhap so dong: ";
    cin>>m.****ng;
    }while(m.****ng<1);
    m.a= new int*[m.****ng];
    if(m.a==NULL)
    {
    cout<<"\nKhong du bo nho";
    }
    do
    {
    cout<<"\nNhap so cot: ";
    cin>>m.socot;
    }while(m.socot<1);
    for(int i=0; i< m.****ng; ++i)
    {
    m.a[i]= new int[m.socot];
    }
    for(int i=0; i<m.****ng; ++i)
    {
    for(int j=0; j< m.socot; ++j)
    {
    cout<<"\nNhap a["<<i+1<<"]["<<j+1<<"]= ";
    cin>>m.a[i][j];
    }
    }
    return input;
    }

    //--------toán tử xuất-------------------------
    ostream& operator <<(ostream &output, matrix &m)
    {
    for(int i=0; i<m.****ng; i++)
    {
    for(int j=0; j< m.socot; j++)
    {
    cout<<setw(5)<<m.a[i][j];
    }
    cout<<"\n";
    }
    return output;
    }

    //-------hàm nhập---------------
    void matrix::nhap()
    {
    xoabonho();
    do
    {
    cout<<"\nNhap so dong: ";
    cin>>****ng;
    }while(****ng<1);
    a= new int*[****ng];
    if(a==NULL)
    {
    cout<<"\nKhong du bo nho";
    }
    do
    {
    cout<<"\nNhap so cot: ";
    cin>>socot;
    }while(socot<1);
    for(int i=0; i< ****ng; ++i)
    {
    a[i]= new int[socot];
    }
    for(int i=0; i<****ng; ++i)
    {
    for(int j=0; j< socot; ++j)
    {
    cout<<"\nNhap a["<<i+1<<"]["<<j+1<<"]= ";
    cin>>a[i][j];
    }
    }
    }

    //---------hàm xuất-------------
    void matrix::xuat()
    {
    for(int i=0; i<****ng; i++)
    {
    for(int j=0; j< socot; j++)
    {
    cout<<setw(5)<<a[i][j];
    }
    cout<<"\n";
    }
    }

    //-----------toán tử cộng----------
    matrix operator+(matrix & m1, matrix &m2)
    {
    matrix kq;
    for(int i=0; i<m1.****ng; ++i)
    for(int j=0; j< m1.socot; ++j)
    kq.a[i][j]=m1.a[i][j] + m2.a[i][j];
    cout<<kq;
    return kq;

    }
    int main()
    {
    matrix m, m1, m2, m3;
    int chon;
    menu();
    while(1)
    {
    do
    {
    cout<<"\nMoi ban chon chuc nang: ";
    cin>>chon;
    }while(chon<0 || chon >3);
    if(chon==0)
    break;
    switch(chon)
    {
    case 1:
    {
    cout<<"\nNhap ma tran: ";
    cin>>m;
    cout<<"\nMa tran sau khi nhap: "<<"\n";
    cout<<m;
    }
    break;
    case 2:
    {
    cout<<"\nNhap ma tran: ";
    m.nhap();
    cout<<"\nMa tran sau khi nhap: "<<"\n";
    m.xuat();
    }
    break;
    case 3:
    {
    cout<<"\nNhap ma tran 1: ";
    cin>>m1;
    cout<<"\nNhap ma tran 2: ";
    cin>>m2;
    m3=m1+m2;
    cout<<"\nMa tran tong: "<<"\n";
    cout<<m3;
    }
    break;
    }
    }
    return 1;
    }

    Tks nhiều.....

  • #2
    Nhìn đuối chết mất, cậu bỏ vào trong code php hoăc up file cpp lên đi

    Comment


    • #3
      Có một trang web rất hay để hỏi và học tập kiến thức về lập trình này đó là:http://congdongcviet.com/
      :baffle:Khi Một cánh cửa đóng lại thì sẽ có một cánh cửa khác mở ra :funny:
      F-page: https://www.facebook.com/St.Bull

      Comment


      • #4
        Code của bạn sai ở chỗ:
        + Trong phương thức định nghĩa toán tử +, khi bạn khai báo ma trận kq dùng hàm khởi tạo matran() thì khi đó **a của kq không được khởi tạo -> khi bạn gán
        kq.a[i][j]=m1.a[i][j] + m2.a[i][j]; dẫn đến sai.
        => thiếu cấp phát bộ nhớ
        Last edited by 11520317; 25-11-2012, 11:25.
        Top Best Online - The Best Products Review Website

        Comment


        • #5
          của bạn đây :haha:
          thiếu cấp phát bộ nhớ cho kq thôi

          Code:
          matrix operator+(const matrix &m1,const matrix &m2)
          {
          	matrix kq;
          	kq.a=new int*[m1.****ng];
          	for(int i=0; i<m1.****ng; i++)
          	{
          		kq.a[i]=new int[m2.socot];
          		for(int j=0; j< m2.socot; j++)
          		{
          			kq.****ng=m1.****ng;
          			kq.socot=m2.socot;
          			if(m1.socot!=m2.****ng)
          				break;
          			else
          			{
          				kq.a[i][j]=m1.a[i][j] + m2.a[i][j];
          			}
          		}
          	}	
          	return kq;
          
          }

          Comment


          • #6
            mình thêm cấp phát bộ nhớ vào cũng không chạy được mấy U ui.

            Comment


            • #7
              Originally posted by 11520506 View Post
              mình thêm cấp phát bộ nhớ vào cũng không chạy được mấy U ui.
              Ở hàm main bạn để cout<<(m1+m2) nhé vì operator+ , giá trị biến trả về thì bộ nhớ của matrix kq không được gán "=" cho m3 , thay vào đó phải cấp phát riêng cho m3 1 vùng nhớ nữa . Lỗi run-time xảy ra là do m3 không có bộ nhớ :shy:

              Comment


              • #8
                bạn ơi. Cho mình hỏi thêm chỗ này nữa nha. Sao mình khai báo const matrix &m1, const matrix &m2 thì chương trình báo lỗi là không thể truy xuất đến phần private của class matrix z. tks

                Comment


                • #9
                  Originally posted by 11520506 View Post
                  bạn ơi. Cho mình hỏi thêm chỗ này nữa nha. Sao mình khai báo const matrix &m1, const matrix &m2 thì chương trình báo lỗi là không thể truy xuất đến phần private của class matrix z. tks
                  Bạn khai báo thêm const ở phần header của class chưa ?
                  class { ........ friend operator+(const matrix&,const matrix&); ... } :salute:

                  Comment


                  • #10
                    mình khai báo rồi nhưng vẫn bị.

                    Comment


                    • #11
                      Originally posted by 11520506 View Post
                      mình khai báo rồi nhưng vẫn bị.
                      Mình đã thử khai báo const matrix& nhưng không thấy báo lỗi như cậu nói :|

                      Comment


                      • #12
                        Originally posted by 11520506 View Post
                        mình khai báo rồi nhưng vẫn bị.
                        bạn đưa source code lên đây xem ? :badsmell:

                        Comment


                        • #13
                          ak, đc rồi, project mh bị lỗi.. tks bạn nhìu nha..

                          Comment

                          LHQC

                          Collapse
                          Working...
                          X