Thuật toán về danh sách đối tượng sẽ cung cấp và hướng dẫn bạn một cách cơ bản các thao tác khi làm việc với danh sách các đối tượng từ đó bạn sẽ tự tin hơn khi làm việc với loại bài toán này.
Lập trình hướng đối tượng đã trở nên phổ biến và là lựa chọn trong hầu hết các ngôn ngữ lập trình. Do vậy các thuật toán liên quan đến đối tượng cũng là vấn đề bạn thường xuyên gặp. Thực tế thì nó cũng hoàn toàn giống như thuật toán trên các phần tử có kiểu dữ liệu nguyên thủy. Tuy nhiên, nếu lần đầu gặp bạn cũng gặp nhiều bỡ ngỡ.
Bài viết Các thuật toán về danh sách đối tượng sẽ giúp bạn làm quen, các bài toán phổ biến như:
- Tính toán
- Tìm kiếm
- Sắp xếp
Đây là các bài toán thường gặp, với hy vọng sẽ giúp bạn tự tin hơn khi làm việc với danh sách các đối tượng. Tuy nhiên, phần này bạn nên tìm hiểu trong môn học Lập trình hướng đối tượng thì sẽ được giải thích kỹ hơn.
Bài 1: Viết chương trình khởi tạo một danh sách các học sinh với mỗi học sinh bao gồm các thông tin như sau: Mã học sinh, Tên học sinh, Lớp, Điểm môn Toán, Điểm môn Văn. Sau đó tìm ra học sinh có điểm Trung bình cao nhất (Điểm trung bình = (Điểm môn Toán + Điểm môn Văn)/2).
Phân tích và tìm cách giải
- Khai báo một lớp Student{studentCode, studentName, batch, mathScore, LiteratureScore}
- Nhập vào danh sách sinh viên
- Xem phần tử đầu tiên (max) là phân tử có điểm trung bình cao nhất
- Cho lặp biến i từ 0 đến n-1 với n là kích thước của mảng:
+ Nếu a[i].getAvg() >max.getAv thì max=a[i] - In max ra ta sẽ được giá trị lớn nhất
Cách biểu diễn thuật toán
Trong trường hợp này, tôi sử dụng ngôn ngữ giả.
//Khai bao lop Student
Class Student{
Int studentCode // Mã sinh viên
String studentName // Tên sinh viên
String batch // Tên lớp
Double mathScore //Điểm môn toán
Double literatureScore //Điểm môn văn
//Viết các getter và setter ở đây
// Viết hàm tính điểm Trung bình
Double getAvg(){
Return (mathScore + literatureScore)/2
}
}
Declare List<Student> studentList
Input(List<student> studentList){
Boolean choice=true
Loop choice
new student
Input student.setStudentCode
Input student.setStudentName
Input student.setBatch
Input student.setMathScore
Input student.setLiteratureScore
studentList.add(student) //Thêm student vào danh sách
Input choice // Thay đổi giá trị choice
}
FindMax(List<Student> studentList){
Student max = studentList.get(0)
Loop i=1 to studentList.length-1
If studentList.get(i).getAvg()>max.getAvg()
max=studentList.get(i)
Print max
}