Bài tập sort algorithms
Cho **mảng một chiều quản lý thông tin của các sinh viên** trong một lớp học (tối đa 50 sinh viên). Mỗi sinh viên gồm các thông tin: **MSSV**, **họ và tên**, **giới tính**, **địa chỉ** và **điểm trung bình**.#include <iostream> #include <vector> #include <string> using namespace std; // Struct để lưu thông tin của một sinh viên struct SinhVien { string MSSV; string hoTen; string gioiTinh; string diaChi; double diemTB; }; // Hàm nhập thông tin sinh viên vào danh sách void nhapSinhVien(SinhVien &sv) { cout << "Nhap MSSV: "; cin >> sv.MSSV; cin.ignore(); // Loại bỏ ký tự newline sau MSSV cout << "Nhap Ho va Ten: "; getline(cin, sv.hoTen); cout << "Nhap Gioi Tinh: "; getline(cin, sv.gioiTinh); cout << "Nhap Dia Chi: "; getline(cin, sv.diaChi); cout << "Nhap Diem Trung Binh: "; cin >> sv.diemTB; } // Hàm in thông tin của một sinh viên void inSinhVien(const SinhVien &sv) { cout << "MSSV: " << sv.MSSV << endl; cout << "Ho va Ten: " << sv.hoTen << endl; cout << "Gioi Tinh: " << sv.gioiTinh << endl; cout << "Dia Chi: " << sv.diaChi << endl; cout << "Diem Trung Binh: " << sv.diemTB << endl; } // Hàm nhập danh sách sinh viên void nhapDanhSach(vector<SinhVien> &danhSach) { int n; cout << "Nhap so luong sinh vien: "; cin >> n; cin.ignore(); // Loại bỏ ký tự newline sau số lượng danhSach.resize(n); for (int i = 0; i < n; ++i) { cout << "Nhap thong tin sinh vien thu " << i + 1 << ": " << endl; nhapSinhVien(danhSach[i]); } } // Hàm in danh sách sinh viên void inDanhSach(const vector<SinhVien> &danhSach) { for (const auto &sv : danhSach) { inSinhVien(sv); cout << "--------------------------" << endl; } } // Hàm xuất thông tin của sinh viên có mã số x void xuatSinhVienTheoMSSV(const vector<SinhVien> &danhSach, const string &MSSV) { bool found = false; for (const auto &sv : danhSach) { if (sv.MSSV == MSSV) { inSinhVien(sv); found = true; break; } } if (!found) { cout << "Khong tim thay sinh vien co MSSV: " << MSSV << endl; } } // Hàm sắp xếp danh sách sinh viên theo điểm trung bình tăng dần void sapXepTheoDiemTB(vector<SinhVien> &danhSach) { int n = danhSach.size(); for (int i = 0; i < n - 1; i++) { int minIdx = i; for (int j = i + 1; j < n; j++) { if (danhSach[j].diemTB < danhSach[minIdx].diemTB) { minIdx = j; } } if (minIdx != i) { swap(danhSach[i], danhSach[minIdx]); } } } // Hàm sắp xếp danh sách sinh viên theo họ và tên tăng dần void sapXepTheoHoTen(vector<SinhVien> &danhSach) { int n = danhSach.size(); for (int i = 0; i < n - 1; i++) { int minIdx = i; for (int j = i + 1; j < n; j++) { if (danhSach[j].hoTen < danhSach[minIdx].hoTen) { minIdx = j; } } if (minIdx != i) { swap(danhSach[i], danhSach[minIdx]); } } } int main() { vector<SinhVien> danhSach; string MSSV; // Nhập danh sách sinh viên nhapDanhSach(danhSach); // In danh sách sinh viên cout << "\nDanh sach sinh vien:" << endl; inDanhSach(danhSach); // Xuất thông tin của sinh viên có mã số x cout << "\nNhap MSSV can tim: "; cin >> MSSV; xuatSinhVienTheoMSSV(danhSach, MSSV); // Sắp xếp danh sách sinh viên theo điểm trung bình sapXepTheoDiemTB(danhSach); cout << "\nDanh sach sinh vien sau khi sap xep theo diem trung binh:" << endl; inDanhSach(danhSach); // Sắp xếp danh sách sinh viên theo họ và tên sapXepTheoHoTen(danhSach); cout << "\nDanh sach sinh vien sau khi sap xep theo ho va ten:" << endl; inDanhSach(danhSach); return 0; }
Leave a Comment