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

Đề tài: Một số thắc mắc về struct trong C++

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

    Mặc định Một số thắc mắc về struct trong C++

    Các bạn ơi mình đang làm 1 bài tập về Struct và có 1 số thắc mắc sau mong các bạn giải đáp hộ.
    1) Giả sử mình tạo 1 struct Phanso như sau :
    struct Phanso
    {
    int tuso,mauso;
    };
    Tiếp theo mình muốn tạo 1 hàm để cộng trừ nhân chia các phân số...Mình thử 2 cách sau (giả sử là cộng ) :
    Cách 1:
    struct Phanso Cong(Phanso ps1,Phanso ps2,Phanso & ps3)
    {
    ps3.tuso = ps1.tuso * ps2.mauso + ps1.mauso * ps2.tuso;
    ps3.mauso = ps1.tuso * ps2.mauso;
    }
    Cách 2
    void Cong(Phanso ps1,Phanso ps2,Phanso & ps3)
    {
    ps3.tuso = ps1.tuso * ps2.mauso + ps1.mauso * ps2.tuso;
    ps3.mauso = ps1.tuso * ps2.mauso;
    }
    Cả 2 cách này đều cho ra kết quả như sau trong hàm main...Vấn đề là mình ko hiểu cách đầu tiên cho lắm...
    2) Sau các struct thường có dấu ;...Nhưng mình thử bỏ dấu ; (làm theo cách đầu tiên ở trên ) thì chương trình vẫn chạy bình thường.
    3) Giả sử mình muốn tạo 1 hàm theo dạng Phanso.Cong (Cộng các phân số ) thì phải làm cách nào

    Mình đang tự học C++ chưa được lâu nên có nhiều chỗ còn rất gà mờ..Mong các bạn chỉ bảo thêm

  2. #2
    Ngày gia nhập
    04 2008
    Bài viết
    336

    trong C thì ta có cú pháp của 1 hàm như sau:
    <Kiểu trả về> tên_hàm (<Kiểu của đối số> tên_đối_số,..)

    nên cách 1 có cái phanso &ps3 kia là thừa nếu bạn có ý định như sau
    ps3 = Cong(ps1,ps2);

    cách 2 thì ps3 chứa kết quả như bạn đã biết nhưng nó ko thể gán cho bất cứ ps nào khác vì nó trả về kiểu void

    và Phanso.Cong(cộng các ps) nghĩa là sao ? ...
    code ra gió bão

  3. #3
    Ngày gia nhập
    09 2008
    Nơi ở
    Kĩ viện
    Bài viết
    169

    C++ gì mà thế này ?. Ít ra cũng phải thế này chứ.

    C++ Code:
    1. #include <iostream>
    2. #include <conio.h>
    3.  
    4. class PhanSo
    5. {
    6. public:
    7.     PhanSo(int TuSo, int MauSo)
    8.     {
    9.         this->TuSo = TuSo;
    10.         this->MauSo = MauSo;
    11.     }
    12. public:
    13.     int TuSo, MauSo;
    14. public:
    15.     PhanSo operator + ( const PhanSo& rhs ) const
    16.     {
    17.         return PhanSo(this->TuSo * rhs.MauSo + rhs.TuSo * this->MauSo, this->MauSo * rhs.MauSo);
    18.     }
    19.     PhanSo operator - () const
    20.     {
    21.         return PhanSo(-TuSo, -MauSo);
    22.     }
    23.     PhanSo operator - ( const PhanSo& rhs ) const
    24.     {
    25.         return PhanSo(this->TuSo * rhs.MauSo - rhs.TuSo * this->MauSo, this->MauSo * rhs.MauSo);
    26.     }
    27.     PhanSo operator * ( const PhanSo& rhs ) const
    28.     {
    29.         return PhanSo(this->TuSo * rhs.TuSo, this->MauSo * rhs.MauSo);
    30.     }
    31.     PhanSo operator / ( const PhanSo& rhs ) const
    32.     {
    33.         return PhanSo(this->TuSo * rhs.MauSo, this->MauSo * rhs.TuSo);
    34.     }
    35. };
    36.  
    37. int main()
    38. {
    39.     PhanSo a = PhanSo(10, 5);
    40.     PhanSo b = PhanSo(20, 30);
    41.     std::cout << (a-b).TuSo << "/" << (a-b).MauSo;
    42.     _getch();
    43.     return 0;
    44. }
    THiếu tùm lum, nhưng đã nói là tớ đang xài C++ mà không được thế này thì ứ phải C++ nữa .
    Phá toái hư không - Bạch nhật thăng thiên.

  4. #4
    Ngày gia nhập
    04 2008
    Bài viết
    336

    bạn ấy mới học quăng 1 nùi code vào thì nhìn đuối lắm :P với lại cậu hướng đối tượng mà để các thành phần dữ liệu public thế kia thì dùng struct cho rồi :P
    code ra gió bão

  5. #5
    Ngày gia nhập
    09 2008
    Nơi ở
    Kĩ viện
    Bài viết
    169

    C++ Code:
    1. int main()
    2. {
    3.     PhanSo a = PhanSo(10, 5);
    4.     PhanSo b = PhanSo(20, 30);
    5.     PhanSo c = PhanSo(1, 15);
    6.     std::cout << ((a-b+c)*a + (c+a)*b).TuSo << "/" << ((a-b+c)*a + (c+a)*b).MauSo;
    7.     _getch();
    8.     return 0;
    9. }
    10. }

    .

    Bây giờ cậu thêm method RutGon() vào + các operator khi cộng trừ nhân chia với float int(tốt nhất xài template) + chống lỗi chia cho 0 nữa là ok.


    bạn ấy mới học quăng 1 nùi code vào thì nhìn đuối lắm :P với lại cậu hướng đối tượng mà để các thành phần dữ liệu public thế kia thì dùng struct cho rồi :P
    À ừ, nhưng tiếp cận dần đi cũng tốt .

    Edit:
    Mà cách một của câu chưa return kết quả kìa.
    Đã được chỉnh sửa lần cuối bởi NamVoDang : 28-09-2008 lúc 05:21 PM.
    Phá toái hư không - Bạch nhật thăng thiên.

  6. #6
    Ngày gia nhập
    09 2008
    Nơi ở
    Kĩ viện
    Bài viết
    169

    Mặc định Một số thắc mắc về struct trong C++

    Mình đang tự học C++ chưa được lâu nên có nhiều chỗ còn rất gà mờ..Mong các bạn chỉ bảo thêm
    Chỉ bảo thì không dám đâu, nhưng góp ý tý thì.
    Giả sử mình muốn tạo 1 hàm theo dạng Phanso.Cong (Cộng các phân số ) thì phải làm cách nào
    Không nên làm thế chút nào. Như vậy vừa mất tự nhiên lại vừa hạn chế, cậu mà muốn thực hiện một phép tính kiểu a+b+c hay a/b+c*a/c+...... thì cái biểu thức của cậu trông sẽ rất rối, Cong(phanso1,Cong(phanso2,phanso3)) (cái bt thứ hai tớ không dám viết .
    Phá toái hư không - Bạch nhật thăng thiên.

  7. #7
    Ngày gia nhập
    08 2008
    Bài viết
    3

    Hehe..mình mới post hum qua mà các bạn giúp đỡ tận tình thế này ^^
    Trùi 1 nùi code mà đụng phần Class thì mình mù tịt luôn..mình mới đọc đến struct thui
    Thực ra cái gọi là cách 1 là tại mình tình cờ đọc được code trên mạng...Ko hiểu tại sao lại thêm cái đuôi struct vào...
    Còn phần Phanso.Cong ý mình là hàm Cong cũng giống như 1 phương thức trong VB đối với đối tượng Phanso...(ko biết nhớ lầm ko...lâu rùi cũng ko đụng VB )
    Còn đây là đề bài mình lấy đại từ trên mạng xuống
    Bài 27: Xây dựng cấu trúc phân số gồm các thành phần:
    •Tử số (số nguyên)
    •Mẫu số (số nguyên)
    •Hàm nhập phân số từ bàn phím
    •Hàm viết phân số ra màn hình
    •Các hàm phép toán: +, -, *, /, <, >
    Sau khi xây dựng được cấu trúc trên, trong hàm main() phái làm các việc sau:
    •Khai báo và nhập 2 phân số
    •In ra tổng, hiệu, tích, thương của 2 phân số trên
    •In ra quan hệ giữa 2 phân số (phân số nào lớn hơn).
    Trong đề bài yêu cầu là xây dựng 1 struct gồm các thành phần....
    trong đó có các hàm tong hieu tich thuong hàm Nhap và cả hàm In ra màn hình. Mình mới học nên cũng lờ mờ về hàm trong struct ....
    cách 2 thì ps3 chứa kết quả như bạn đã biết nhưng nó ko thể gán cho bất cứ ps nào khác vì nó trả về kiểu void
    Thank góp ý của bạn...Giờ mới để ý cách viết kia của mình cũng hơi kì cục

  8. #8
    Ngày gia nhập
    08 2008
    Bài viết
    3

    À tiện cho mình hỏi luôn
    Thường sử dụng void main sẽ cho kết quả nhanh hơn int Main ... return 0 ko..Và vì sao...
    Mình học C thường thấy sử dụng void main...Lúc mon men tìm hiểu C+ đa số toàn sử dụng Int Main...Return 0
    Còn cách 1 tớ chạy được mà...ra kết quả okie luôn....:|

  9. #9
    Ngày gia nhập
    09 2008
    Nơi ở
    Kĩ viện
    Bài viết
    169

    Thằng VB nó không cho override operator nên mới nảy sinhn ra cái trò viết method cho class để thay thế , nhưng C++ thì khác..

    còn struct với class thì cũng chả khác nhau ngoài việc struct mặc định public. Mà code mình cũng ngắn mà bạn, chẳng qua mình viết cả nhân chia với trừ nên nó mới đẻ thêm ra 4 method nữa thôi.

    So sánh = hai phân số thì override operator "==" "!=". Lớn hơn nhỏ hơn cũng thế, ">', "<". ">=", "<=".

    Còn cách 1 tớ chạy được mà...ra kết quả okie luôn....:|
    Có warning không?. Làm thế là sai đấy.

    int main với void main cũng như nhau. return 0; là chương trình chạy không có lỗi gì.
    Phá toái hư không - Bạch nhật thăng thiên.

Các đề tài tương tự

  1. Bài tập C++ làm sao truy xuất biến của struct lồng trong struct
    Gửi bởi quangnam.tamky trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 10-04-2013, 05:22 PM
  2. Khai báo một struct trong 1 class như thế nào?
    Gửi bởi hoanglamth1 trong diễn đàn Thắc mắc CTDL & Giải thuật
    Trả lời: 1
    Bài viết cuối: 22-11-2011, 10:42 AM
  3. Lập trình C xóa 1 trường trong struct như thế nào?
    Gửi bởi dongthang00 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 10
    Bài viết cuối: 17-05-2011, 03:18 PM
  4. Lập trình C Gán giá trị cho kiểu struct trong C như thế nào?
    Gửi bởi nhiepphong200 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 4
    Bài viết cuối: 01-12-2010, 06:04 PM
  5. [VC] Trong VC++, kích thước struct được tính như thế nào ?
    Gửi bởi thuongshoo trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 6
    Bài viết cuối: 08-10-2006, 06:38 PM

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