30/09/2018, 16:15
Cách tính điểm trung bình?
Em có một bài tập: Nhập danh sách sinh viên, tìm điểm trung bình lớn nhất.
Em làm code tới đây, nhưng ko biết cách lấy Điểm trung bình như thế nào để so sánh ạ.
http://codepad.org/IIoAYSKs
//Tìm Điểm trung bình lớn nhất trong danh sách sinh viên.
//File SinhVien.h
#pragma once
//Khai báo thư viện
#include <iostream>
#include <string>
class SinhVien
{
private:
std::string HoTen;
int Tuoi;
float DTB;
public:
void Input(); //Nhập 1 sinh viên
void Output(); //Xuất 1 sinh viên
SinhVien(void);
~SinhVien(void);
};
//File SinhVien.cpp
#include "SinhVien.h"
//Định nghĩa phương thức Input()
void SinhVien::Input()
{
fflush(stdin);
std::cout << "
Nhap vao ho ten: ";
getline(std::cin, HoTen);
do
{
std::cout << "
Nhap vao tuoi: ";
std::cin >> Tuoi;
if (Tuoi < 18 || Tuoi > 50)
{
std::cout << "
Nhap sai tuoi. Nhap lai";
}
} while (Tuoi < 18 || Tuoi > 50);
do
{
std::cout << "
Nhap vao diem trung binh: ";
std::cin >> DTB;
if (DTB < 0 || DTB > 10)
{
std::cout << "
Nhap sai DTB. DTB tu 0 -> 10";
}
} while (DTB < 0 || DTB > 10);
}
//Định nghĩa phương thức Output()
void SinhVien::Output()
{
std::cout << "
Ho ten: " << HoTen;
std::cout << "
Tuoi: " << Tuoi;
std::cout << "
Diem trung binh: " << DTB;
}
SinhVien::SinhVien(void)
{
}
SinhVien::~SinhVien(void)
{
}
//File DanhSachSinhVien.h
#pragma once
#include "SinhVien.h"
#include <vector>
class DanhSachSinhVien
{
private:
std::vector<SinhVien *> List;
public:
void Input(); // Khai báo phương thức nhập danh sách sinh viên.
void Output(); // Khai báo phương thức xuất danh sách sinh viên.
void Tim_DTB_Max();
DanhSachSinhVien(void);
~DanhSachSinhVien(void);
};
//File DanhSachSinhVien.cpp
#include "DanhSachSinhVien.h"
void DanhSachSinhVien::Input()
{
int n;
std::cout << "
Nhap vao so sinh vien: ";
std::cin >> n;
for (int i = 0; i < n; i++)
{
std::cout << "
* Nhap Thong Tin Ho So Thu " << i + 1 << " *
";
SinhVien *x = new SinhVien;
x ->Input(); //Nhập dữ liệu cho Sinh Viên.
List.push_back(x); //Đưa Sinh Viên vào trong List.
}
}
void DanhSachSinhVien::Output()
{
for (int i = 0; i < List.size(); i++)
{
std::cout << "
* Thong tin ho so thu " << i + 1 << " *
";
List[i] ->Output();
}
}
(
//Code tìm Điểm trung bình lớn nhất (Sai ở đây)
void DanhSachSinhVien::Tim_DTB_Max()
{
float DTB_Max = List[0].DTB;
for (int i = 1; i < List.size(); i++)
{
if (List[i].DTB > DTB_Max)
{
DTB_Max = List[i].DTB;
}
}
std::cout << "
Diem trung binh lon nhat: " << DTB_Max;
}
)
DanhSachSinhVien::DanhSachSinhVien(void)
{
}
DanhSachSinhVien::~DanhSachSinhVien(void)
{
}
//File Main.cpp
#include "DanhSachSinhVien.h"
int main()
{
DanhSachSinhVien *x = new DanhSachSinhVien;
x ->Input();
x ->Output();
x ->Tim_DTB_Max();
delete x;
system("pause");
return 0;
}
Bài liên quan
Báo sai thế nào vậy bạn? Ra đáp án sai hay code không chạy?
Giống đề cuối kỳ của mình quá.Bạn có thể tham khảo hàm tim điểm trung bình max này xem thử, ở đây mình làm
struct
.??? Bạn có thấy gì lạ không
Đồng ý, nhiều bạn hay nói là chạy sai hoặc không chạy, nhưng lại không định nghĩa như thế nào là không chạy
Lần sau chú ý nhé @Nhanh_Lan_R_ng
Rất lạ, nhưng ko biết chỗ đó phải làm thế nào, chỉ loay hoay ở đó nên ko biết phải làm sao đấy ạ.
Có thể hướng dẫn em làm về class ko, tại em chia nó ra làm 2 class nên ko biết phải xử lý nó như thế nào để lấy ra phần tử trung bình của từng List.
Cái này ở đâu ra vậy?
Bạn nên xem lại tất cả nhé.
Cái này em làm rồi, tại lúc post lên ko có copy bỏ nó vào, vì em chỉ muốn hỏi khúc tìm điểm trung bình lớn nhất nên ko chú ý phía trên đó ạ. Em ko biết làm sao lấy giá trị Điểm trung bình trong List[0] -> List[n]. Chỗ đó nó lạ nhưng em ko biết phải làm thế nào. Bỏ cái tìm điểm trung bình lớn nhất ra, nhập xuất sinh viên thì tốt ạ.
Bạn cho chạy vòng lặp từ 0 theo code của bạn. hoặc sửa theo bài của bạn trên.
List[i].DTB
Vì em để List[0].DTB nên phải bắt đầu từ 1 mà, chứ đầu phải để DTB = 0 đâu.
Nó ko hiểu DTB ở đâu thì làm sao mà so sánh được ạ, làm thế nào để nó hiểu DTB nằm ở List[i] mà List[i] thì chứa hết thông tin của 1 sinh viên.
Vì nó ko hiểu nên chạy bị báo lỗi
error C2228: left of ‘.DTB’ must have class/struct/union.
Em đang học về class nên đang cố gắng tìm hiểu về nó, nên mới chia ra tới 2 class đó ạ. Nếu làm giống bạn ở thì chỉ có 1 class, với lại cũng không cần sử dụng vector.
Nói thế nào bây giờ nhỉ. Có phải nó báo lỗi kiểu như biến DTB là private bạn không thể sử dụng đúng k?
Mình xin trích lại đoạn code của bạn để tìm điểm trung bình lớn nhất.
Cái sai của bạn ở đây đó là:
1.
DTB
là cái riêng của classSinhvien
.Chỉ những cái nằm trong phầnpublic
của classSinhVien
hay nói cách khác chỉ những phương thức thuộc classSinhVien
mới truy cập được.2.Mỗi phần tử của
vector List
là một con trỏ,muốn truy cập thì phải dùng toán tử->
Còn về hàm tìm điểm trung bình max thì mình thấy ok rồi đấy.
Chính xác là như 2 anh nói rồi, vì cái DTB là private nên nó ko hiểu, làm thế nào để nó hiểu được ạ, em có xem qua video của anh Đạt về get/set nói về biến private và public nhưng lại ko hiểu cách dùng về nó. Không biết phải sử dụng cái này hay ko.
@14520054 @Is2IT
Mình sửa lại như sau, không biết có đúng không nữa.Nếu sai nhờ mọi người fix lại giúp mình.
Mình có sửa laị phần class
SinhVien
của bạn như trên,dưới đây là hàm tìm điểm trung bình lớn nhất.Truy cập biến private thì có nhiều cách. get() là dễ nhất
Lúc đầu bạn nói rõ nó k cho truy cập biến private có phải nhanh không, làm mình nhìn toét cả mắt.
Cảm ơn 2 anh nhé, chạy tốt rồi.