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::)
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....
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
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
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
Ở 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(); }
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
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:
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
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.
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
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