Tên: Nguyên Minh
MSSV: 22718571
BÀI TP V NHÀ:
Thc hin tt c các yêu cu như trên cho hai phương pháp:
- Sắp xếp đổi chỗ trực tiếp
- Sắp xếp nổi bọt
#include <iostream>
using namespace std;
void XuatMang(int a[], int n) {
for (int i = 0; i < n; ++i)
cout << a[i] << " ";
cout << endl;
}
//Phương pháp đổi ch trc tiếp
void InterchangeSort(int a[], int n) {
for (int i = 0; i < n - 1; ++i) {
for (int j = i + 1; j < n; ++j) {
if (a[i] > a[j]) {
swap(a[i], a[j]);
XuatMang(a, n);
}
}
}
}
//Phương pháp ni bt
void BubbleSort(int a[], int n) {
for (int i = 0; i < n - 1; ++i) {
for (int j = n - 1; j > i; --j) {
if (a[j] < a[j - 1]) {
swap(a[j], a[j - 1]);
XuatMang(a, n);
}
}
}
}
int A1[] = {10, 3, 7, 4, 2, 8, 5, 12};
int A2[] = {14, 33, 27, 10, 35, 19, 42, 44};
int n1 = sizeof(A1) / sizeof(int);
int n2 = sizeof(A2) / sizeof(int);
int main() {
int A1[] = {10, 3, 7, 4, 2, 8, 5, 12};
int n1 = sizeof(A1) / sizeof(int);
cout << "Interchange Sort - A1:\n";
InterchangeSort(A1, n1);
int A2[] = {14, 33, 27, 10, 35, 19, 42, 44};
int n2 = sizeof(A2) / sizeof(int);
cout << "\nBubble Sort - A2:\n";
BubbleSort(A2, n2);
return 0;
}
BÀI TP LÀM TM:
Cho mng mt chiu qun lý thông tin ca các sinh viên trong mt lp hc (tối đa
50 sinh viên). Mi sinh viên gm các thông tin: MSSV, h tên, gii tính, địa ch
và điểm trung bình. Viết chương trình thực hin các yêu cu sau:
1. Nhập các sinh viên vào danh sách.
2. In danh sách sinh viên.
3. Xuất thông tin của sinh viên có số x.
4. Sắp xếp danh sách sinh viên theo thứ tự tăng dần của điểm trung bình.
5. Sắp xếp danh sách sinh viên theo thứ tự tăng dần của họ tên.
Cu trúc SinhVien
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
struct SinhVien {
string mssv;
string hoten;
string gioitinh;
string diachi;
float diemTB;
};
Nhập danh sách sinh viên
void NhapDanhSach(SinhVien ds[], int& n) {
cout << "Nhap so sinh vien (toi da 50): ";
cin >> n;
cin.ignore();
for (int i = 0; i < n; ++i) {
cout << "Sinh vien " << i + 1 << ":\n";
cout << " MSSV: "; getline(cin, ds[i].mssv);
cout << " Ho ten: "; getline(cin, ds[i].hoten);
cout << " Gioi tinh: "; getline(cin, ds[i].gioitinh);
cout << " Dia chi: "; getline(cin, ds[i].diachi);
cout << " Diem TB: "; cin >> ds[i].diemTB;
cin.ignore();
}
}
In danh sách
void InDanhSach(const SinhVien ds[], int n) {
cout << "\nDANH SACH SINH VIEN:\n";
for (int i = 0; i < n; ++i) {
cout << ds[i].mssv << " | " << ds[i].hoten << " | "
<< ds[i].gioitinh << " | " << ds[i].diachi << " | "
<< ds[i].diemTB << endl;
}
}
Tìm sinh viên theo MSSV
void TimTheoMSSV(const SinhVien ds[], int n, const string& x) {
for (int i = 0; i < n; ++i) {
if (ds[i].mssv == x) {
cout << "\nThong tin sinh vien co MSSV " << x << ":\n";
cout << ds[i].mssv << " | " << ds[i].hoten << " | "
<< ds[i].gioitinh << " | " << ds[i].diachi << " | "
<< ds[i].diemTB << endl;
return;
}
}
cout << "Khong tim thay MSSV " << x << endl;
}
Sắp xếp theo điểm TB tăng dần
void SapXepTheoDiem(SinhVien ds[], int n) {
sort(ds, ds + n, [](SinhVien a, SinhVien b) {
return a.diemTB < b.diemTB;
});
}
Sắp xếp theo họ tên tăng dn
void SapXepTheoTen(SinhVien ds[], int n) {
sort(ds, ds + n, [](SinhVien a, SinhVien b) {
return a.hoten < b.hoten;
});
}
Hàm main
int main() {
SinhVien ds[50];
int n;
NhapDanhSach(ds, n);
InDanhSach(ds, n);
string x;
cout << "\nNhap MSSV can tim: ";
getline(cin, x);
TimTheoMSSV(ds, n, x);
cout << "\nSap xep theo diem TB tang dan:\n";
SapXepTheoDiem(ds, n);
InDanhSach(ds, n);
cout << "\nSap xep theo ho ten tang dan:\n";
SapXepTheoTen(ds, n);
InDanhSach(ds, n);
return 0;
}

Preview text:

Tên: Lê Nguyên Minh MSSV: 22718571 BÀI TẬP VỀ NHÀ:
Thực hiện tất cả các yêu cầu như trên cho hai phương pháp:
- Sắp xếp đổi chỗ trực tiếp - Sắp xếp nổi bọt #include using namespace std;
void XuatMang(int a[], int n) {
for (int i = 0; i < n; ++i)
cout << a[i] << " "; cout << endl; }
//Phương pháp đổi chỗ trực tiếp
void InterchangeSort(int a[], int n) {
for (int i = 0; i < n - 1; ++i) {
for (int j = i + 1; j < n; ++j) { if (a[i] > a[j]) { swap(a[i], a[j]); XuatMang(a, n); } } } } //Phương pháp nổi bọt
void BubbleSort(int a[], int n) {
for (int i = 0; i < n - 1; ++i) {
for (int j = n - 1; j > i; --j) { if (a[j] < a[j - 1]) { swap(a[j], a[j - 1]); XuatMang(a, n); } } } }
int A1[] = {10, 3, 7, 4, 2, 8, 5, 12};
int A2[] = {14, 33, 27, 10, 35, 19, 42, 44};
int n1 = sizeof(A1) / sizeof(int);
int n2 = sizeof(A2) / sizeof(int); int main() {
int A1[] = {10, 3, 7, 4, 2, 8, 5, 12};
int n1 = sizeof(A1) / sizeof(int);
cout << "Interchange Sort - A1:\n"; InterchangeSort(A1, n1);
int A2[] = {14, 33, 27, 10, 35, 19, 42, 44};
int n2 = sizeof(A2) / sizeof(int);
cout << "\nBubble Sort - A2:\n"; BubbleSort(A2, n2); return 0; } BÀI TẬP LÀM THÊM:
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. Viết chương trình thực hiện các yêu cầu sau:
1. Nhập các sinh viên vào danh sách. 2. In danh sách sinh viên.
3. Xuất thông tin của sinh viên có mã số x.
4. Sắp xếp danh sách sinh viên theo thứ tự tăng dần của điểm trung bình.
5. Sắp xếp danh sách sinh viên theo thứ tự tăng dần của họ và tên. Cấu trúc SinhVien #include #include #include using namespace std; struct SinhVien { string mssv; string hoten; string gioitinh; string diachi; float diemTB; };
Nhập danh sách sinh viên
void NhapDanhSach(SinhVien ds[], int& n) {
cout << "Nhap so sinh vien (toi da 50): "; cin >> n; cin.ignore();
for (int i = 0; i < n; ++i) {
cout << "Sinh vien " << i + 1 << ":\n"; cout << " MSSV: "; getline(cin, ds[i].mssv); cout << " Ho ten: "; getline(cin, ds[i].hoten);
cout << " Gioi tinh: "; getline(cin, ds[i].gioitinh); cout << " Dia chi: "; getline(cin, ds[i].diachi); cout << " Diem TB: "; cin >> ds[i].diemTB; cin.ignore(); } } In danh sách
void InDanhSach(const SinhVien ds[], int n) {
cout << "\nDANH SACH SINH VIEN:\n";
for (int i = 0; i < n; ++i) {
cout << ds[i].mssv << " | " << ds[i].hoten << " | "
<< ds[i].gioitinh << " | " << ds[i].diachi << " | "
<< ds[i].diemTB << endl; } }
Tìm sinh viên theo MSSV
void TimTheoMSSV(const SinhVien ds[], int n, const string& x) {
for (int i = 0; i < n; ++i) { if (ds[i].mssv == x) {
cout << "\nThong tin sinh vien co MSSV " << x << ":\n";
cout << ds[i].mssv << " | " << ds[i].hoten << " | "
<< ds[i].gioitinh << " | " << ds[i].diachi << " | "
<< ds[i].diemTB << endl; return; } }
cout << "Khong tim thay MSSV " << x << endl; }
Sắp xếp theo điểm TB tăng dần
void SapXepTheoDiem(SinhVien ds[], int n) {
sort(ds, ds + n, [](SinhVien a, SinhVien b) {
return a.diemTB < b.diemTB; }); }
Sắp xếp theo họ tên tăng dần
void SapXepTheoTen(SinhVien ds[], int n) {
sort(ds, ds + n, [](SinhVien a, SinhVien b) { return a.hoten < b.hoten; }); } Hàm main int main() { SinhVien ds[50]; int n; NhapDanhSach(ds, n); InDanhSach(ds, n); string x;
cout << "\nNhap MSSV can tim: "; getline(cin, x); TimTheoMSSV(ds, n, x);
cout << "\nSap xep theo diem TB tang dan:\n"; SapXepTheoDiem(ds, n); InDanhSach(ds, n);
cout << "\nSap xep theo ho ten tang dan:\n"; SapXepTheoTen(ds, n); InDanhSach(ds, n); return 0; }