Professional Documents
Culture Documents
1
KIỂU DỮ LIỆU STRUCT
(Practice: Array structure with self-defined data types)
2 NỘI DUNG
Kiến nghị: Tên project: Baitap01; Tên solution: <mã sinh viên>
Chép tập tin “data<0i>.txt” vào folder project vừa tạo (Window Explorer);
i=1, 2, …
Thực hiện việc chép mã lệnh mẫu
Chép mã lệnh từ tập tin “khaibao.h” vào “sinhvien.h”
Chép mã lệnh từ tập tin “caidat.cpp” vào “cd_sinhvien.cpp”
Chép mã lệnh từ tập tin “ctc.cpp” vào <Teo_041.cpp>
Dữ liệu mẫu lưu trong folder struct02 gồm: data<0i>.txt, khaibao.h, caidat.cpp, ctc.cpp)
Demo
by Khoa Anh Tran - KTLT 2018
Self-defined data types
6 NỘI DUNG
0 1 2 3 4 5 6 7 8 9
a 003 002 009 011 019 100
n=10 VVT TTB NVT TAK TVA NPT
1 0 1 0 sv5 sv6 sv7 sv8 1 0
1 PNT 2 DVC 12 DDC 3 DDC 5 DDC 5 TCV
6.2 7.1 7.8 7.0 6.8 8.3
0 1 2 3 4 5 6 7 8 9
a 003 002 009 011 019 100
n=10 VVT TTB NVT TAK TVA NPT
1 0 1 0 sv5 sv6 sv7 sv8 1 0
1 PNT 2 DVC 12 DDC 3 DDC 5 DDC 5 TCV
6.2 7.1 7.8 7.0 6.8 8.3
Theo bạn Input, Output là gì? Input: (a, n); Output: vị trí của SV có đtb lớn nhất (int)
Giải thuật
o Giả sử SV đầu tiên là SV có dtb lớn nhất: vt=0
Làm thế nào để tìm được SV o Cho i chạy từ 1 tới cuối
có ĐTB lớn nhất?
Nếu a[i].dtb>a[vt].dtb -> vt=i
by Khoa Anh Tran - KTLT 2018
Kết quả: vt
Self-defined data types
0 1 2 3 4 5 6 7 8 9
a 003 002 009 011 019 100
n=10 VVT TTB NVT TAK TVA NPT
1 0 1 0 sv5 sv6 sv7 sv8 1 0
1 PNT 2 DVC 12 DDC 3 DDC 5 DDC 5 TCV
6.2 7.1 7.8 7.0 6.8 8.3
Theo bạn Input, Output là gì? Input: (a, n), xx; Output: vị trí của SV có mã số xx (int)
0 1 2 3 4 5 6 7 8 9
a 003 002 009 011 019 100
n=10 VVT TTB NVT TAK TVA NPT
1 0 1 0 sv5 sv6 sv7 sv8 1 0
1 PNT 2 DVC 12 DDC 3 DDC 5 DDC 5 TCV
6.2 7.1 7.8 7.0 6.8 8.3
Giải thuật
o Khởi gán vt=-1 //chưa tìm thấy SV có mã số xx
Làm thế nào để tìm được SV
có mã số xx?
o Cho i chạy từ 0 tới cuối
0 1 2 3 4 5 6 7 8 9
a 003 002 009 011 019 100
n=10 VVT TTB NVT TAK TVA NPT
1 0 1 0 sv5 sv6 sv7 sv8 1 0
1 PNT 2 DVC 12 DDC 3 DDC 5 DDC 5 TCV
6.2 7.1 7.8 7.0 6.8 8.3
Theo bạn Input, Output là gì? Input: (a, n); Output: dem (int) – số SV có giới tính là nam
0 1 2 3 4 5 6 7 8 9
a 003 002 009 011 019 100
n=10 VVT TTB NVT TAK TVA NPT
1 0 1 0 sv5 sv6 sv7 sv8 1 0
1 PNT 2 DVC 12 DDC 3 DDC 5 DDC 5 TCV
6.2 7.1 7.8 7.0 6.8 8.3
Giải thuật
o Khởi gán: dem=0
Làm thế nào để đếm số SV nam?
o Cho i chạy từ 0 tới cuối
Nếu a[i].gtinh = 1 -> dem++
by Khoa Anh Tran - KTLT 2018
Input: (a,n)
Giải thuật
Output: xuất DSSV có dtb<5 ra màn hình –
không có tham số đầu ra o Cho i chạy từ 0 tới cuối
void LietKe(const Sinhvien a[], Nếu a[i].dtb<5 -> Xuất SV thứ i
int n);
by Khoa Anh Tran - KTLT 2018
Kết quả: DSSV có dtb<5
Self-defined data types
0 1 2 3 4 5 6 7 8 9
a 003 002 009 011 019 100
n=10 VVT TTB NVT TAK TVA NPT
1 0 1 0 sv5 sv6 sv7 sv8 1 0
1 PNT 2 DVC 12 DDC 3 DDC 5 DDC 5 TCV
6.2 7.1 7.8 7.0 6.8 8.3
Theo bạn Input, Output là gì? Input: (a, n), k; Output: không có
0 1 2 3 4 5 6 7 8 9
a 003 002 009 011 019 100
n=10 VVT TTB NVT TAK TVA NPT
1 0 1 0 sv5 sv6 sv7 sv8 1 0
1 PNT 2 DVC 12 DDC 3 DDC 5 DDC 5 TCV
6.2 7.1 7.8 7.0 6.8 8.3
Giải thuật
Input: (a,n)
Output: kq={1, -1} //kq=1 tương ứng có tồn tại SV có dtb<5, ngược lại
hàm trả về -1
int KiemTra(const Sinhvien a[], int n);
Giải thuật
o Khởi gán: kq=-1
o Cho i chạy từ 0 tới cuối
Nếu a[i].dtb<5 -> kq=1, dừng
Kết quả: kq
by Khoa Anh Tran - KTLT 2018
Self-defined data types
Input: (a, n)
Output: DSSV đã được sắp – (a)
void SortASC(Sinhvien a[], int n);
Giải thuật
o Cho i chạy từ 0 tới kế cuối
o Cho j chạy từ i+1 tới cuối
Nếu a[i].hoten > a[j].hoten -> Hoán vị a[i], a[j]
Kết quả: (a)
by Khoa Anh Tran - KTLT 2018
Self-defined data types
26 Bài tập 01
Bổ sung các thao tác dưới đây vào project trên (project: Baitap01)
1. Tìm SV có điểm trung bình (dtb) nhỏ nhất
2. Tính điểm trung bình chung cho n SV
3. Liệt kê các SV có dtb lớn hơn k
4. Đếm số SV có dtb trong đoạn [k1,k2]
5. Kiểm tra xem trong danh sách có SV nào họ: “Tran”?
6. Kiểm tra xem trong danh sách có SV nào có họ là k hay không?
7. Kiểm tra xem trong danh sách có SV nữ nào có đtb dưới k hay không?
8. Sắp xếp danh sách SV theo dtb tăng dần
27 Bài tập 02
Bước 01: Tạo một project mới tên Baitap02 trong cùng solution với bài tập ở trên
Bước 02: sao chép chương trình mẫu “Struct02” gồm 5 file như cách làm ở trên vào
project Baitap02
Bước 03: bổ sung thêm các yêu cầu dưới đây vào project: Baitap02
1. Thêm 1 SV vào đầu danh sách
2. Thêm 1 SV vào cuối danh sách
3. Thêm 1 SV vào vị trí k trong danh sách
4. Xóa 1 SV tại vị trí k
5. Xóa tất cả SV có dtb bé nhất
6. Sắp xếp SV theo họ tên tăng dần, nếu họ tên trùng nhau sắp theo dtb giảm dần
28 Bài tập 03
Viết chương trình nhập vào 1 ngày đầy đủ từ bàn phím. Thực hiện các yêu
cầu sau:
1. Xuất ngày vừa nhập ra màn hình
2. Kiểm tra xem ngày có hợp lệ không?
3. Tìm ngày kế tiếp
4. Tìm ngày trước đó
5. Tính khoảng cách giữa 2 ngày bất kỳ
6. Tính thứ khi biết ngày