You are on page 1of 3

Nhập môn lập trình | 23CLC Bộ môn Công nghệ Tri thức

KIỂM TRA CUỐI KỲ


Thời gian làm bài: 100 phút

1 Quy định nộp bài


• Sinh viên thực hiện mỗi bài làm trong một tập tin bai0x.cpp. Ví dụ làm bài 1, tên tập tin là bai01.cpp.
Lưu ý, sinh viên cần đọc thật kỹ ví dụ để viết các lệnh nhập/ xuất đúng quy định.
• Toàn bộ bài làm sẽ được đặt vào thư mục MSSV. Sau đó thực hiện nén thư mục MSSV thành tập tin MSSV.zip.

• Ví dụ thư mục MSSV sau khi giải nén:

MSSV
bai01.cpp
bai02.cpp
bai03.cpp

Lưu ý: Thay cụm MSSV thành mã số sinh viên của bạn.

2 Quy định chấm bài


• Câu lệnh dùng để chấm

>> g++ file.cpp --std=c++11 -o file(.exe)


>> file(.exe)

• KHÔNG chấm ý tưởng, chỉ có đúng hoặc sai.


• Những trường hợp sau đây sẽ bị 0 điểm bài thi:

– Nộp sai quy định.


– BÀI LÀM GIỐNG NHAU.
– KHÔNG BIÊN DỊCH ĐƯỢC.
– LẶP VÔ TẬN.

(Sinh viên sang trang kế tiếp để xem đề bài.)

Trang 1 / 3
Nhập môn lập trình | 23CLC Bộ môn Công nghệ Tri thức

Nội dung
Trong toàn bộ bài làm, sinh viên chỉ được sử dụng thư viện <iostream>, <cmath>, <string>, <cstring>, <cstdlib>,
<stdlib.h>

Câu 1 (3đ) : Tuấn là một người yêu nhạc và anh ấy có bộ sưu tập gồm n đĩa nhạc, với n không quá 10,000. Anh ấy đánh
số cho các đĩa từ 1 đến n. Ban đầu, các đĩa được xếp chồng lên nhau theo thứ tự tăng dần với đĩa số 1 ở trên
cùng (từ bên trái qua), tiếp theo là đĩa 2, và cứ thế, đĩa số n ở dưới cùng.
Mỗi khi Tuấn muốn nghe một đĩa nhạc, anh ấy sẽ lấy nó ra khỏi chồng đĩa, nghe xong rồi đặt lại ở vị trí
trên cùng (từ trái qua) của chồng đĩa.
Nhiệm vụ của bạn là viết một chương trình C++ để xác định thứ tự của các đĩa (từ trái qua phải) trong
chồng đĩa sau khi Tuấn đã nghe m đĩa nhạc khác nhau và in ra màn hình như khuôn mẫu dưới đây, biết rằng
giá trị của các đĩa này luôn nằm trong đoạn [1, n].
Với màn hình hiển thị như sau:

Input number of disks: 7 [Enter]


Input number of changes: 3 [Enter]
The order of changes: 5 3 7 [Enter]
Disk stack: 7 3 5 1 2 4 6

Trong đó, đầu vào từ bàn phím gồm 3 dòng đầu tiên, và chương trình của bạn sẽ tìm đầu ra là dòng cuối
cùng Disk stack: 7 3 5 1 2 4 6
Giải thích: Số lượng đĩa nhạc là 7. Vì vậy, chồng đĩa ban đầu là: [1, 2, 3, 4, 5, 6, 7]. Số lượng đĩa Tuấn đã
nghe là 3, lần lượt gồm:
– Lần 1. Nghe đĩa số 5 → Chồng đĩa trở thành: [5, 1, 2, 3, 4, 6, 7]
– Lần 2. Nghe đĩa số 3 → Chồng đĩa trở thành: [3, 5, 1, 2, 4, 6, 7]
– Lần 3. Nghe đĩa số 7 → Chồng đĩa trở thành: [7, 3, 5, 1, 2, 4, 6]
Câu 2 (3đ) : Cho ma trận 2 chiều n × m số nguyên. Sinh viên được yêu cầu viết chương trình và các hàm bổ trợ nhằm
tạo ra ma trận đối xứng theo chiều dọc tại cạnh bên phải cùng của ma trận đã cho. Sinh viên có thể tham
khảo hình dưới đây để làm rõ hơn yêu cầu đề bài. Lưu ý, sinh viên phải thực hiện tạo ra ma trận mới hoặc
điều chỉnh trên ma trận đã cho thành dạng được yêu cầu. Không cho phép chỉ sử dụng thao tác in ra màn
hình theo quy luật.

Trang 2 / 3
Nhập môn lập trình | 23CLC Bộ môn Công nghệ Tri thức

Với màn hình hiển thị như sau:

Input dim: 4 3 [Enter]


Input Arr: 1 2 3 4 5 6 7 8 9 10 11 12 [Enter]
Output:
3 2 1
6 5 4
9 8 7
12 11 10

Câu 3 (4đ) : Cho file “pokemon.txt”. Sinh viên thực hiện các yêu cầu sau:
1. Câu 3.1 (2đ): Viết hàm đọc file và lưu dữ liệu Pokemon vào mảng pokemons.
void ReadFile(char fileName[], Pokemon pokemons[], int &n);
Trong đó, struct Pokemon sinh viên tự định nghĩa, bao gồm các thuộc tính sau:
– pokeID: mã số pokemon (chuỗi tối đa 10 kí tự)
– pokeName: tên pokemon (chuỗi tối đa 30 kí tự)
– type1: hệ thứ nhất (chuỗi tối đa 25 kí tự)
– type2: hệ thứ hai (chuỗi tối đa 25 kí tự)
– speed: tốc độ của pokemon (số nguyên
Sinh viên xem kỹ hơn cấu trúc trong file pokemon.txt được cung cấp.
2. Câu 3.2 (1đ): Viết hàm in ra pokemon có tốc độ (speed) lớn nhất trong danh sách pokemon truyền
vào. Lưu ý rằng, thậm chí đọc file không thành công, bạn cũng có thể hoàn thành hàm này và được
chấm điểm độc lập với ý 3.1. Khuôn mẫu hàm được gợi ý như sau:
void printPokemon(Pokemon pokemons[], int n);
Theo định dạng sau:

ID: 1
Pokemon name: Bulbasaur
Type: Grass, Poison
Speed: 100

3. Câu 3.3 (1đ): Viết hàm nhận vào hệ của pokemon và trả về danh sách các pokemon thuộc hệ cần tìm.
Khuôn mẫu hàm được gợi ý như sau:
void searchPokemonByType(char type1[], char type2[], Pokemon pokemons[], int n,
Pokemon result[], int& m);
SV được yêu cầu viết hàm main và hiện thực hóa 2 yêu cầu 3.2 và 3.3 với màn hình hiển thị như sau.

Pokemon with max speed:


ID: 1
Pokemon name: Bulbasaur
Type: Grass, Poison
Attack: 100

Input Type: Water [Enter]


The list of Pokemon with Type = Water:
ID: 7 - Name: Squirtle
ID: 8 - Name: Wartortle

Lưu ý: Trong TH không đọc được file, thì gán mặc định giá trị của 3 pokemon được đề cập trên đề và
hiện thực hóa các hàm cũng như hàm main như bình thường. Nếu không có hàm main, toàn bài sẽ bị
trừ 0.5 điểm.

Hết

Trang 3 / 3

You might also like