cân giúp về lập trình hướng đối tượng

Thảo luận trong 'Lập trình & Đồ hoạ' bắt đầu bởi killeroflove1989, 11/10/08.

  1. killeroflove1989

    killeroflove1989 Youtube Master Race

    Tham gia ngày:
    26/4/06
    Bài viết:
    35
    mình đang học lập trình hướng đối tượng trên C++, có 1 bài tập như thế này:
    xây dựng class sinh viên với các thành phần tên, mã sinh viên,điểm trung bình, các hàm thành phần làm nhiệm vụ nhập,hiển thị dữ liệu của sinh viên, sau đó viết hàm main() thực hiện các công việc sau: đưa ra danh sách các sinh viên có điểm trung bình lớn nhất, đưa ra danh sách các sinh viên có điểm trung bình trên 5.
    đây là code mà mình viết:

    #include<iostream.h>
    #include<conio.h>

    enum sosanh{nhohon,lonhon,bang};
    class sinh_vien
    {private:
    int MaSV;
    char HoTen[50];
    float DiemTB;
    public:
    void Nhap();
    void HT();
    int KiemTraDiem();
    sosanh SoSanhDiem(sinh_vien);
    };

    void sinh_vien::Nhap()
    {cout<<"ten : ";cin>>HoTen;cout<<"\n";
    cout<<"diem : ";cin>>DiemTB;cout<<"\n";}

    void sinh_vien::HT()
    {cout<<"ten : "<<HoTen<<"\n";
    cout<<"diem : "<<DiemTB<<"\n";

    int sinh_vien::KiemTraDiem()
    { if(DiemTB>5)
    return(1);
    else
    return(0);}

    sosanh sinh_vien::SoSanhD(sinh_vien p)
    {if(DiemTB<p.DiemTB)
    return(nhohon);
    else
    if(DiemTB>p.DiemTB)
    return(lonhon);
    else
    return(bang);}


    main()
    { clrscr();
    sinh_vien SinhVien[100];
    sinh_vien MaxDiem;
    int i,n;
    cout<<"hay cho biet so sinh vien : ";cin>>n;
    cout<<"\n";
    cout<<"hay cho biet ten va diem trung binh tung nguoi: \n";
    for(i=0;i<n;i++)
    {cout<<"sinh vien thu"<<(i+1);
    SinhVien.Nhap();}

    cout<<"danh sach sinh vien co diem trung binh tren 5 la: ";
    for(i=0;i<n;i++)
    if(SinhVien.KiemTraDiem()==1)
    {cout<<"sinh vien thu "<<(i+1);
    SinhVien.HT();}

    MaxDiem=SinhVien[0];
    for(i=1;i<n;i++)
    if(MaxDiem.SoSanhDiem(SinhVien)==nhohon)
    MaxDiem=SinhVien;

    cout<<"danh sach sinh vien co diem trung binh lon nhat la: \n";
    for(i=0;i<n;i++)
    if(SinhVien.SoSanhDiem(MaxDiem)==bang)
    SinhVien.HT(); }

    sau khi chạy chương trình thì nó báo lỗi là giới hạn đối với hàm SoSanhDiem(); mình đã chạy trên turbo c++ và dev C++; ai biết lỗi nằm ở đâu và cách khắc phục thì vào chỉ mình với
    .
    ___________Auto Merge________________

    .
    ah nhầm,sorry là lỗi với hàm KiemTraDiem() chứ ko phải SoSanhDiem() ai biết giúp mình với nha, thanks::)
     
  2. toi5

    toi5 Try Hard Moderator Lão Làng GVN

    Tham gia ngày:
    27/5/03
    Bài viết:
    6,866
    chỗ kiemtradiem là int mà ko có tham số truyền vào sao......theo bài của thì : int kiemtradiem(sinh_vien p).....mới đúng....
     
  3. Funnnny

    Funnnny Will Code Python For FOOD Moderator

    Tham gia ngày:
    2/8/05
    Bài viết:
    9,406
    Nơi ở:
    Hanoi, Vietnam
    Giống hệt bài tập tuần 3,5 của bọn mình =)).
    Cái hàm SoSanhDiem bạn viết nhầm thành SoSanhD, ko biết đây có phải code copy nguyên lại ko.
    Cái đoạn kiemtradiem ko sai đâu
     
  4. toi5

    toi5 Try Hard Moderator Lão Làng GVN

    Tham gia ngày:
    27/5/03
    Bài viết:
    6,866
    bạn ấy ghi lại là sosanhdiem không sai mà.......chắc là đã chỉnh;)).........
     
  5. killeroflove1989

    killeroflove1989 Youtube Master Race

    Tham gia ngày:
    26/4/06
    Bài viết:
    35
    mình ko hiểu cách làm của bạn, nếu muốn kiểm tra điểm của sinh_vien P có lớn hơn 5 ko thì chỉ cần gọi hàm:
    P.KiemTraDiem();
    nếu lớn hơn nó trả ra 1, nếu nhỏ hơn nó trả ra 0;
    nhưng mình viết như vậy nó lại báo lỗi
    .
    ___________Auto Merge________________

    .
    bạn học trường nào thế, cái này la mình tự viết mà, lúc đầu code ra giấy để là SoSanhD(); sau code trên máy viết thành SoSanhDiem(); nên nó lẫn lung tung
     
  6. Funnnny

    Funnnny Will Code Python For FOOD Moderator

    Tham gia ngày:
    2/8/05
    Bài viết:
    9,406
    Nơi ở:
    Hanoi, Vietnam
    Code ra giấy bạn chỉ nên cùng lắm là viết mã giả thôi, code 2 lần phí công lắm.
    Bạn có thể copy chính xác cái thông báo lỗi trong DevC ko
     
  7. The Greek Warrior

    The Greek Warrior T.E.T.Я.I.S

    Tham gia ngày:
    28/4/02
    Bài viết:
    561
    Nơi ở:
    Caldeum

    Ở những chỗ mà mình đánh dấu bạn thiếu }, và SoSanhD chưa đổi lại thành SoSanhDiem. Chỉ có thế thôi, bên dưới là code mình đã sửa lại, chạy tốt. Sau này bạn nên viết theo cách phân biệt như bên dưới để dễ dàng debug, k nên viết kiểu như trên sẽ khó phát hiện lỗi , bằng chứng là lần này bạn viết chính xác hết mà k phát hiện ra được lỗi đơn giản nhất
    Mã:
    #include<iostream.h>
    #include<conio.h>
    
    enum sosanh{nhohon,lonhon,bang};
    class sinh_vien
    {private:
    int MaSV;
    char HoTen[50];
    float DiemTB;
    public:
    void Nhap();
    void HT();
    public: int KiemTraDiem();
    sosanh SoSanhDiem(sinh_vien);
    };
    
    void sinh_vien::Nhap()
    {
    	cout<<"ten : ";cin>>HoTen;cout<<"\n";
    	cout<<"diem : ";cin>>DiemTB;cout<<"\n";
    }
    
    void sinh_vien::HT()
    {
    	cout<<"ten : "<<HoTen<<"\n";
    	cout<<"diem : "<<DiemTB<<"\n";
    [COLOR="Red"][B]} đã thêm [/B][/COLOR]
    int sinh_vien::KiemTraDiem()
    {
    	if(DiemTB>5)
    		return(1);
    	else
    		return(0);
    }
    
    [B][COLOR="Red"]sosanh sinh_vien::SoSanhDiem(sinh_vien p)[/COLOR][/B]
    {
    if(DiemTB<p.DiemTB)
    	return(nhohon);
    else
    if(DiemTB>p.DiemTB)
    	return(lonhon);
    else
    	return(bang);
    }
    
    
    main()
    {
    clrscr();
    	sinh_vien SinhVien[100];
    	sinh_vien MaxDiem;
    	int i,n;
    cout<<"hay cho biet so sinh vien : ";cin>>n;
    cout<<"\n";
    cout<<"hay cho biet ten va diem trung binh tung nguoi: \n";
    	for(i=0;i<n;i++)
    		{
    		cout<<"sinh vien thu"<<(i+1);
    		SinhVien[i].Nhap();
    		}
    
    cout<<"danh sach sinh vien co diem trung binh tren 5 la: ";
    	for(i=0;i<n;i++)
    	if(SinhVien[i].KiemTraDiem()==1)
    	{
    		cout<<"sinh vien thu "<<(i+1);
    		SinhVien[i].HT();
    	}
    
    	MaxDiem=SinhVien[0];
    	for(i=1;i<n;i++)
    	if(MaxDiem.SoSanhDiem(SinhVien[i])==nhohon)
    	MaxDiem=SinhVien[i];
    
    cout<<"danh sach sinh vien co diem trung binh lon nhat la: \n";
    	for(i=0;i<n;i++)
    	if(SinhVien[i].SoSanhDiem(MaxDiem)==bang)
    		SinhVien[i].HT();
    		getch();
                    
    }
     
  8. Funnnny

    Funnnny Will Code Python For FOOD Moderator

    Tham gia ngày:
    2/8/05
    Bài viết:
    9,406
    Nơi ở:
    Hanoi, Vietnam
    Theo như bạn ấy nói thì mấy lỗi đó là do giấy và code trên máy, chứ ko phải là lỗi :-?
     
  9. The Greek Warrior

    The Greek Warrior T.E.T.Я.I.S

    Tham gia ngày:
    28/4/02
    Bài viết:
    561
    Nơi ở:
    Caldeum
    lỗi thì vẫn là lỗi, tuy nhiên lỗi cú pháp thì có thể dễ dàng sửa bởi trợ giúp của debuger kèm theo các chương trình soạn thảo, các lỗi logic thì thật khó, vì khi đó chương trình vẫn run nhưng kết quả hoàn toàn sai
     
  10. NhocPooh

    NhocPooh ♪ღ♪ 9422932241176 ♪ღ♪ Moderator GameVN Lady

    Tham gia ngày:
    27/7/05
    Bài viết:
    2,519
    Nơi ở:
    Ho Chi Minh City
    Chính xác =))

    Sai lỗi cấu trúc thì debug, còn sai lỗi logic thì chịu khó manual binding :'>
     
  11. killeroflove1989

    killeroflove1989 Youtube Master Race

    Tham gia ngày:
    26/4/06
    Bài viết:
    35
    thanks bạn nhiều nha, nhân tiện hỏi luôn cai turbo C++ 3.0 hôm wa mình vẫn dùng tốt ,hôm nay lắp cái card đồ họa mới vào thì ko chạy dc, nó báo thế này: 16bit MS-DOS Subsystem:
    Turbo C++ IDE
    The NTVDM CPU has encountered and illegal intructions.....
    nó bị sao vậy?:whew:
     
  12. The Greek Warrior

    The Greek Warrior T.E.T.Я.I.S

    Tham gia ngày:
    28/4/02
    Bài viết:
    561
    Nơi ở:
    Caldeum
    không biết. Thử cài driver cho card đồ họa + cài lại turbo C.
     
  13. REALM

    REALM Legend of Zelda

    Tham gia ngày:
    30/6/03
    Bài viết:
    970
    Nơi ở:
    HCM city
    sài visual c 6.0 cho đêp dzời or visual c2008 express đi debug mê ly luôn
     
  14. Funnnny

    Funnnny Will Code Python For FOOD Moderator

    Tham gia ngày:
    2/8/05
    Bài viết:
    9,406
    Nơi ở:
    Hanoi, Vietnam
    Theo như mình biết thì 90% dân lập trình chuyên nghiệp vẫn dùng VSC++ 2005...
     
  15. Karin_Akechi

    Karin_Akechi Mr & Ms Pac-Man

    Tham gia ngày:
    16/7/08
    Bài viết:
    166
    liên quan gì driver card màn hình, vì các hàm đồ họa đó hồi máy tính hồi đơn sơ giờ chơi máy tính xịn quá seo mà chạy, thử bỏ lên máy 386 hay 486 thì chạy đì đùng àh.

    VSC++ 2005 cùng bản với VSc++ 2008 mà có gì khác đâu, chỉ khác là phiên bản free của vsc ++ 2008 cho ạo ứng dụng MFC thui, cái express 2005 hem có cái template này .

    Giờ mấy cái soft chạy qua nền dotnet nhìu quá: ghost, true image, nero 9.0 ... toàn loại danh tiếng hem àh
     
  16. Funnnny

    Funnnny Will Code Python For FOOD Moderator

    Tham gia ngày:
    2/8/05
    Bài viết:
    9,406
    Nơi ở:
    Hanoi, Vietnam
    Khác, thử tải 1 project lớn = VS2005 mở được = 2008 nhưng hay bị compile lỗi
     
  17. REALM

    REALM Legend of Zelda

    Tham gia ngày:
    30/6/03
    Bài viết:
    970
    Nơi ở:
    HCM city
    bạn che thử cái mục chọn loại nền dot net xem, vì cái vc2008 tạo dc trên 2.0, 3.0, 3.5 mà. Còn nếu lập trình theo chuẩn iso C thì chắc là hên xui thui hà.
    Mà nói thiệt học trên mấy cái viusual của microsoft có hỗ trợ help rất đã cứ bấm f1 là có đồ coi, bên java chả có cái bộ help nào giống như msdn cả. Chỉ buồn truờng mình dạy java mới ác chiến.
     
  18. Funnnny

    Funnnny Will Code Python For FOOD Moderator

    Tham gia ngày:
    2/8/05
    Bài viết:
    9,406
    Nơi ở:
    Hanoi, Vietnam
    Ko, ví dụ đơn giản nhất là mở Chromium = vs2008 là biết liền. Có nhiều thứ chỉ tương thích với vs2005 thôi. Đa số lập trình vẫn trên nền v2005
     
  19. namisushi

    namisushi Youtube Master Race

    Tham gia ngày:
    11/9/08
    Bài viết:
    4
    sao lại không có :o, bác lên trang chủ của java mà tải bộ "doc" của nó, giống MSDN của VS nhưng chỉ có info về các class libary trong java, học java mà ko đọc cái này thì học cũng như không :o
     

Chia sẻ trang này