Từ 1 tới 9 trên tổng số 9 kết quả

Đề tài: Toán tử + để nối 2 mảng phân số ?

  1. #1
    Ngày gia nhập
    03 2009
    Bài viết
    16

    Mặc định Toán tử + để nối 2 mảng phân số ?

    Đề bài là như vầy :
    Code:
     Xậy dựng lớp mảng phân số, danh sách các phần tử là mảng động, với đầy đủ các toán tử <<, >> và các hàm cần thiết để thực hiện các hành động sau:
    
        * Thực hiện nhập hai mảng a và b
        * Sử dụng toán tử + để nối hai mảng a và b
        * Sắp xếp mảng vừa tạo
    Còn đây là code của em là, nhưng ko hiểu sao sau khi sắp xếp in ra mà hình là giá trị rác. Mọi người chỉ giúp em chỗ sai, thank all !

    Class
    PHP Code:
    #include <iostream>
    using namespace std;
    class 
    PhanSo
    {
    private:

        
    int m_iTuSo;
        
    int m_iMauSo;

    public:
        
    PhanSo();
        
    PhanSo(int);
        
    PhanSo(int,int);
        
    friend istream operator >> (istream &is,PhanSo &ps);
        
    friend ostream operator << (ostream &os,const PhanSo &ps);
        
    PhanSo operator =(const PhanSo &ps);

    };

    class 
    PSArray
    {
    private:

        
    PhanSo *psarr;
        
    int m_iSize;

    public:

        
    PSArray();
        ~
    PSArray();

        
    PSArray operator =(const PSArray &psarr);

        
    friend ostream operator <<(ostream &os,const PSArray &psarr);
        
    friend istream operator >>(istream &is,PSArray &psarr);
        
    PhanSo operator [](int iViTri)
        {
            
    PhanSo kq;
            
    kq this->psarr[iViTri];
            return 
    kq;
        }
        
    PSArray operator +(const PSArray &psarr);
        
    PSArray sapXepMang(PSArray &psarr);

    }; 
    Thân hàm :

    PHP Code:
    #include "stdafx.h"
    #include "class.h"
    #include <iostream>
    using namespace std;

    //-------- Khoi tao phan so ---------------
    PhanSo::PhanSo()
    {
        
    m_iTuSo 0;
        
    m_iMauSo 1;
    }
    //---- Khoi tao mang PhanSo ------------------
    PSArray::PSArray()
    {
        
    m_iSize 0;
        
    psarr = new PhanSo[0];
    }
    //-------------------- Ham huy mang phan so --------------
    PSArray::~PSArray()
    {
        
    m_iSize 0;
        
    delete psarr;
    }
    //---------- Toan tu >> va << cho class PhanSo ------------
    istream operator >>(istream &is,PhanSo &ps)
    {
        
    cout << "Nhap tu so va mau so : ";
        
    is >> ps.m_iTuSo >> ps.m_iMauSo;
        return 
    is;
    }

    ostream operator <<(ostream &os,const PhanSo &ps)
    {
        
    os << ps.m_iTuSo << '/' << ps.m_iMauSo;
        return 
    os;
    }

    PhanSo PhanSo::operator =(const PhanSo &ps)
    {
        
    m_iTuSo ps.m_iTuSo;
        
    m_iMauSo ps.m_iMauSo;
        return *
    this;
    }


    // ---------------- Toan tu << va >> cho PSArray --------------
    istream operator >>(istream &is,PSArray &psarr)
    {
        
    cout << "Nhap kich thuong mang : ";
        
    is >> psarr.m_iSize;
        
    psarr.psarr = new PhanSo[psarr.m_iSize];
        for (
    int i=0psarr.m_iSizei++)
            
    is >> psarr.psarr[i];
        return 
    is;
    }

    ostream operator <<(ostream &os,const PSArray &psarr)
    {
        for (
    int i 0psarr.m_iSizei++)
            
    os << psarr.psarr[i] << "    ";
        return 
    os;
    }

    PSArray PSArray::operator +(const PSArray &psarr)
        {
            
    PSArray kq;
            
    kq.m_iSize m_iSize psarr.m_iSize;
            
    kq.psarr = new PhanSo[kq.m_iSize];

            
    // Gan phan tu cua this->psarr cho kq.psarr
            
    for (int i=0;i<m_iSize;i++)
            
    kq.psarr[i] = this->psarr[i];

            
    // Gan phan tu cua psarr.psarr cho kq.psarr
            
    for (int im_iSizekq.m_iSize i++)
                
    kq.psarr[i] = psarr.psarr[i];

            return 
    kq;
        } 

  2. #2
    Ngày gia nhập
    03 2009
    Bài viết
    16

    Up cho mọi người giúp em

  3. #3
    Ngày gia nhập
    02 2008
    Nơi ở
    Việt Nam
    Bài viết
    577

    C++ Code:
    1. // Gan phan tu cua psarr.psarr cho kq.psarr
    2.         for (int i= m_iSize; i < kq.m_iSize ; i++)
    3.             kq.psarr[i] = psarr.psarr[i];
    Cả bài khá là ổn, sai mỗi đoạn trên.
    C++ Code:
    1. // Gan phan tu cua psarr.psarr cho kq.psarr
    2.         for (int i= m_iSize; i < kq.m_iSize ; i++)
    3.             kq.psarr[i] = psarr.psarr[i-m_iSize];

  4. #4
    Ngày gia nhập
    03 2009
    Bài viết
    16

    Trích dẫn Nguyên bản được gửi bởi QuangHoang Xem bài viết
    C++ Code:
    1. // Gan phan tu cua psarr.psarr cho kq.psarr
    2.         for (int i= m_iSize; i < kq.m_iSize ; i++)
    3.             kq.psarr[i] = psarr.psarr[i];
    Cả bài khá là ổn, sai mỗi đoạn trên.
    C++ Code:
    1. // Gan phan tu cua psarr.psarr cho kq.psarr
    2.         for (int i= m_iSize; i < kq.m_iSize ; i++)
    3.             kq.psarr[i] = psarr.psarr[i-m_iSize];
    Em thấy đoạn này đâu có sai ạ. Code này để nối 2 mảng, vòng For đầu tiền em gán các phần tử của mảng 1 cho kq, sau đó gán tiếp các phần tử của mảng 2 cho kq chứ như anh nói là gán các phần tử của mảng 2 cho kq, tức là vòng lặp for đầu tiên ko có tác dụng

  5. #5
    Ngày gia nhập
    12 2008
    Bài viết
    10

    Ê xà bông cục, bài tập yêu cầu làm mảng động cơ mà
    PHP Code:
    // Không có chữ ký 

  6. #6
    Ngày gia nhập
    12 2008
    Bài viết
    10

    Mặc định Toán tử + để nối 2 mảng phân số ?

    Xin trả lời câu hỏi của ông cucxabong luôn: Khi cài đặt toán tử +, ông đã tạo một biến kiểu PSArray để lưu kết quả cộng 2 mảng. Biến này sau khi ra khỏi hàm sẽ bị hủy (vì đã cài đặt hàm hủy), cho nên giá trị mà biến ở ngoài nhận được toàn là giá trị rác.
    Cách khắc phục: Theo tui thì dùng chính biến mảng truyền vào (đối số của toán tử + ) để làm kết quả, chính vì thế nên ta chọn cách truyền đối số là truyền giá trị mà thôi

    PHP Code:
    PSArray PSArray::operator +(PSArray psarr
    Lưu ý, khi làm theo cách này, vì ta đã dùng đối số truyền vào làm kết quả cho nên phải tạo một biến tạm lưu lại đối số (để mà còn dữ liệu để cộng nữa chứ)

    P/S: À quên, kết hợp với cái sai mà Mod QuangHoang nói nữa
    Đã được chỉnh sửa lần cuối bởi akhoi90 : 27-03-2009 lúc 10:56 AM.
    PHP Code:
    // Không có chữ ký 

  7. #7
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    to QH : 1 trong những lỗi này hôm bữa chính em mới bị xong !
    Lớp có dữ liệu cấp phát động thì cần 3 điều :
    1. Toán tử gán.
    2. Hàm hủy
    3. Và.....
    Hơn nữa code này hơi bị quái, hàm tạo cấp phát size = 0. Sau đó bằng cách nào khởi tạo lại size cho mãng bên trong ? Thông qua >> thì ai delete thằng đã cấp phát rồi, cậu xbc xem kĩ lại xem.
    to xbc : nick dễ xương quá !

  8. #8
    Ngày gia nhập
    03 2009
    Bài viết
    16

    Làm dc òi, thank mọi người nhiều
    Đã được chỉnh sửa lần cuối bởi cucxabong : 27-03-2009 lúc 09:31 PM.

  9. #9
    Ngày gia nhập
    12 2008
    Bài viết
    1

    class
    PHP Code:
    #include <iostream>
    #include <conio.h>
    using namespace std;

    class 
    PhanSo
    {    
        private:
            
    int tu;
            
    int mau;
            
    int n;
            
    PhanSo *a;
            
    //PhanSo *b;
        
    public:
            
    void Nhap();
            
    void Xuat();
            
    friend istreamoperator >> (istreamis,PhanSo &x);
            
    friend ostreamoperator << (ostreamos,PhanSo x);
    }; 
    định nghĩa hàm
    PHP Code:
    #include "PhanSo.h"

    void PhanSo::Nhap()
    {
        
    cout << "Nhap tu so: ";
        
    cin >> tu;
        
    cout << "Nhap mau so: ";
        
    cin >> mau;
    }

    void PhanSo::Xuat()
    {
        
    cout << tu << "/" << mau <<endl;
    }


    istreamoperator >> (istreamis,PhanSo &x)
    {
        
        
    cout << "\nNhap so luong mang cua phan so ";
        
    is >> x.n;
        
    x.= new PhanSo [x.n];
        for  (
    int i=1;i<=x.n;i++)
        {
    x.a[i].Nhap();}
        return 
    is;
    }

    ostreamoperator << (ostreamos,PhanSo x)
    {
        for (
    int i=1;i<=x.n;i++)
            
    x.a[i].Xuat();
        return 
    os;

    main
    PHP Code:
    #include "PhanSo.h"

    void main()
    {
        
    PhanSo ps1,ps2,ps3;
        
    cout << "Khai bao mang phan so thu 1: ";
        
    cin >> ps1;
        
    cout << "Mang phan so thu 1 la: ";
        
    cout << ps1;
        
    cout << "Khai bao mang phan so thu 2: ";
        
    cin >> ps2;
        
    cout << "Mang phan so thu 2 la: ";
        
    cout << ps2;
        
    getch();

    Em có cách làm khác, nhưng mà trong cách này em ko biết nối 2 mảng như thế nào cả, mong các bạn giúp

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn