Professional Documents
Culture Documents
MSSV
bai01.cpp
bai02.cpp
bai03.cpp
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:
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
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.
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