Các Vấn Đề Cơ Sở Của Khoa Học Máy Tính Th.S GVC Tô Oai Hùng
1
BAØI TAÄP CHÖÔNG 1
1. Viết giải thuật để mô tả thói quen mỗi buổi sáng của bạn, từ lúc nghe chuông đồng hồ báo
thức cho đến lúc bạn rời khỏi nhà để đi làm hay đi học.
2. Viết giải thuật tính để căn bậc hai của một số dương bất kỳ. Áp dụng giải thuật để tính giá
trị 2046, lấy đến 2 số lẻ. Không sử dụng thiết bị tính toán.
3. Tại sao nhà khoa học máy tính chú trọng đến cơ sở dữ liệu cũng cần phải biết về mạng máy
tính.
Các Vấn Đề Cơ Sở Của Khoa Học Máy Tính Th.S GVC Tô Oai Hùng
1
BAØI TAÄP CHÖÔNG 2
1. Viết mã giả cho giải thuật tìm căn bậc 2 của một số dương bất kỳ (phương pháp Newton–
Raphson) được thực hiện trong hàm squareRoot(number).
2. Viết mã giả cho hàm mean(listNumbers) để tìm trung bình cộng của tập số bất kỳ.
3. Viết mã giả cho hàm median(listNumbers) để tìm phần tử trung bình của tập có n số
bất kỳ. Biết rằng, nếu n lẻ thì phần tử trung bình là phần tử giữa của tập có thứ tự. Ngược
lại, phần tử trung bình là trung bình cộng của hai phần tử giữa của tập có thứ tự.
4. Cho biết độ phức tạp của giải thuật tìm phần tử trung bình trong câu 3?.
5. Giả sử giải thuật tìm trung bình cộng (mean) là (n) và giải thuật tìm phần tử trung bình
(median) là (nlog2n). Cho biết tỷ lệ về thời gian thực thi giữa hai giải thuật khi số
phần tử trong tập số là 1.000.000.
6. Một giải thuật sắp xếp đơn giản nhất là bubble sort (sắp xếp nổi bọt). Giải thuật sẽ quét qua
tất cả phần tử nhiều lần. Mỗi lần, giải thuật sẽ so sánh hai phần tử kề nhau để sắp thứ tự.
Cho ví dụ, có danh sách sau:
6 7 3 1 4
Bubble sort bắt đầu so sánh 6 với 7. Hai phần tử này đã có thứ tự, vì thế bubble sort sẽ so
sánh tiếp 7 với 3, bubble sort hoán đổi hai phần tử này. Tiếp tục so sánh 7 với 1, bubble
sort hoán đổi hai phần tử này. Tiếp tục so sánh 7 với 4, bubble sort hoán đổi hai phần tử
này. Sau một lần quét, kết quả là:
6 3 1 4 7
Quét từ trái sang phài lần nữa, kết quả là:
3 1 4 6 7
Quét từ trái sang phài lần nữa, kết quả là:
1 3 4 6 7
Đây cũng là kết quả cuối cùng. Hãy viết mã giả cho giải thuật bubble sort trong hàm
bubbleSort(listNumbers).
7. Cho biết độ phức tạp của giải thuật bubble sort?
8. Cho biết tỷ lệ về thời gian thực thi giữa giải thuật bubble sort và merge sort khi số phần tử
trong danh sách là 1.000.000 và có thứ tự ngẫu nhiên?
9. Tìm giải thuật để giải quyết vấn đề sau:
a) Cho một số nguyên dương n, tìm danh sách các số nguyên dương mà tích của nó là lớn
nhất trong tất cả danh sách của các số nguyên dương mà tổng của nó là n. Cho ví dụ:
- Nếu n = 4, danh sách kết quả là {2, 2}. Vì 2 2 lớn hơn các danh sách có 1 1 1
1; 2 1 1 và 3 1.
Các Vấn Đề Cơ Sở Của Khoa Học Máy Tính Th.S GVC Tô Oai Hùng
2
- Nếu n = 5, thì danh sách kết quả là {2, 3}.
b) Danh sách kết quả như thế nào nếu n = 2001?
10. Những tên nào sau đây được đem ra so sánh trong câu lệnh
if list[midpoint] = searchItem
của giải thuật tìm kiếm nhị phân khi tên cần tìm là Joe:
Alice, Brenda, Carol, Duane, Evelyn, Fred, George, Henry,
Irene, Joe, Karl, Larry, Mary, Nancy, Oliver
11. Số lần tìm kiếm nhiều nhất của giải thuật tìm kiếm nhị phân khi số phần tử trong danh sách
là:
a) 200
b) 100.000
12. Các giá trị nào được in ra màn hình khi thực thi thủ tục đệ qui Exercise(N) nếu giá trị
của N lúc đầu được gán là 1?
procedure Exercise(N)
in giá trị của N
if (N < 3) then
Exercise(N + 1)
in giá trị của N
13. Cho biết những giải thuật nào có thời gian thực thi là: (log2n), (n) và (n2)?
14. Đoạn chương trình sau dùng để tính thương của hai số nguyên dương trong phép chia
nguyên bằng cách đếm số lần mà số bị chia trừ cho số chia đến khi số bị chia nhỏ hơn số
chia. Cho ví dụ 7/3 = 2, bởi vì 7 - 3 - 3 = 1 (< 3). Hỏi kết quả là quotient của chương
trình có đúng không?
count 0;
remainder dividend; // dividend = số bị chia do
remainder remainder – divisor;
count count + 1
while (remainder >= divisor) // divisor = số chia
quotient count // quotient = thương
15. Đoạn chương trình sau dùng để tính tích của hai số nguyên không âm X và Y bằng cách tích
lũy (cộng dồn) tổng X lần giá trị Y. Hỏi kết quả là product của chương trình có đúng
không?
product Y // product = tích
count 1
while (count < X) do
product product + Y;
count count + 1
Các Vấn Đề Cơ Sở Của Khoa Học Máy Tính Th.S GVC Tô Oai Hùng
1
BAØI TAÄP CHÖÔNG 3
1. Viết số 6, 13, 11, 18, 27, 4, 229 ở dạng nhị phân (cơ số 2).
2. Giá trị thập phân (cơ số 10) của 0101, 1001, 1011, 0110, 10000, 10010, 11100101 là
bao nhiêu?
3. Giá trị thập phân của 11.01, 101.111, 10.1, 110.011, 0.101 là bao nhiêu?
4. Viết các hỗn số sau ở dạng nhị phân: 214 , 4
32 , 811 , 16
50 , 855 .
5. Thực hiện các phép cộng nhị phân sau:
11011 1010.001 11111 111.11 + + + + 1100 1.101 0001 00.01
6. Giá trị nhị phân của số 377 trong hệ bát phân (cơ số 8) là bao nhiêu?
7. Giả sử số nguyên có dấu được biểu diễn bằng 16 bit.
a) Cho biết giá trị dương lớn nhất có thể biểu diễn.
b) Cho biết giá trị âm nhỏ nhất có thể biểu diễn.
c) Biểu diễn 17440.
d) Biểu diễn -20.
8. Viết giá trị của các ký tự C, H và R trong bảng mã ASCII dạng thập phân và nhị phân.
9. Tham khảo danh sách các lệnh của CPU Intel x86 ở dạng từ gợi nhớ trong chương này, viết
các lệnh để cộng hai giá trị được chứa trong bộ nhớ tại địa chỉ 50 và 51. Kết quả ghi vào
địa chỉ 101.
10. Viết các lệnh để lấy giá trị chứa trong bộ nhớ tại địa chỉ 50 trừ cho giá trị tại địa chỉ 51. Kết
quả ghi vào địa chỉ 101.
11. Cho biết ưu và khuyết điểm của máy tính có chiều dài từ lớn?
12. Giả sử bộ nhớ cache có thời gian truy cập là 10 ns, bộ nhớ chính có thời gian truy cập là
100 ns. Nếu tỷ lệ "hit rate" của cache là 70. Tính thời gian trung bình truy cập bộ nhớ?
Lưu ý:
- hit rate – tỷ lệ phần trăm truy cập bộ nhớ được tìm thấy.
- miss rate – tỷ lệ phần trăm truy cập bộ nhớ không được tìm thấy.
- miss rate = 1 – hit rate.
13. Giả sử tốc độ máy tính 1GHz và trung bình có 3 chu kỳ cho mỗi lệnh. Máy tính được kết
nối với Internet tốc độ 10 Mbit/s. Có bao nhiêu lệnh được thực thi từ lúc máy tính nhận bit
đầu tiên cho đến khi máy tính nhận toàn bộ 1 ký tự (8 bit)?
14. Cho biết giá trị thập phân của các số bù hai sau: 00011, 01111, 11100, 11010, 00000,
10000?
15. Viết các giá trị thập phân sau ở dạng bù 2 sử dụng 8 bit: 6, -6, -17, 13, -1, 0?
Các Vấn Đề Cơ Sở Của Khoa Học Máy Tính Th.S GVC Tô Oai Hùng
1
BAØI TAÄP CHÖÔNG 5
1. Viết chương trình Java có khai báo hai biến dividend và divisor với giá tri tương ứng
là 74.3 và 12.6, thực hiện phép chia dividend cho divisor. Hiển thị kết quả ra màn
hình.
2. Viết chương trình Java để tính diện tích hình tròn có bán kính r = 5 với = 3.14 và =
Math.PI. Hiển thị kết quả ra màn hình.
3. Viết chương trình Java nhắc người sử dụng nhập vào một số nguyên. Sau đó, cho biết số
vừa nhập có phải là bội số của 5 hay không?
4. Viết chương trình Java nhắc người sử dụng nhập vào 5 chuỗi ký tự. Sau đó hiển thị các
chuỗi này theo thứ tự ngược với thứ tự đã nhập.
5. Viết chương trình Java phân loại phương tiện dựa trên số bánh xe. Chương trình nhắc
người sử dụng nhập số bánh xe và hiển thị loại phương tiện tương ứng:
- Xe có 2 hay 3 bánh: Mô tô.
- Xe có 4 bánh: Ô tô hay xe tải nhẹ.
- Xe có 6, 8, 10, 12, 14, 16 hay 18 bánh: Xe tải.
- Ngược lại, hiển thị thông báo lỗi.
6. Định nghĩa lớp Java có tên là Vehicle, gồm các thuộc tính và phương thức sau:
a) Thuộc tính:
make: hãng sản xuất (String).
model: kiểu xe (String).
color: màu xe (String).
speed: vận tốc (double).
vehicleCount: đếm số xe đã sản xuất (int).
b) Phương thức:
Định nghĩa phương thức tạo dựng: thiết lập các giá trị cho make, model, color dựa
vào giá trị của người sử dụng truyền đến và tăng số xe đã sản xuất thêm 1. Riêng
thuộc tính speed được gán trị 0.
Định nghĩa bốn phương thức get() cho các thuộc tính make, model, color và
speed để trả về giá trị tương ứng.
Định nghĩa phương thức changeSpeed() để nhận vào vận tốc mới và trả về hiệu
giữa vận tốc mới với vận tốc trước đó (speed). Sau đó thay đổi trị của speed thành
vận tốc mới.
Định nghĩa phương thức main() để thực hiện yêu cầu sau:
- Tạo 3 đối tượng lần lượt với các giá trị cho make, model và color là:
("Ford", "Mustang", "red")
("BMW", "328i", "silver")
("Chrysler", "PT Cruiser", "gold" )
Các Vấn Đề Cơ Sở Của Khoa Học Máy Tính Th.S GVC Tô Oai Hùng
2
- Hiển thị số đối tượng hiện có của lớp Vehicle.
- Hiển thị hãng sản xuất của đối tượng 1, kiểu của đối tượng 2 và màu của đối
tượng 3.
- Thiết lập vận tốc của đối tượng 1 là 70.0 mph và hiển thị vận tốc đó.
- Ví dụ:
Hãng sản xuất v1: Ford
Kiểu của v2: 328i
Màu của v3: gold
Vận tốc của v1 là 70.0 mph.
7. Định nghĩa lớp Skateboard thừa kế từ lớp Vehicle. Nạp chồng phương thức
changeSpeed() để thể hiện của lớp Skateboard không bao giờ có vận tốc vượt quá 10
mph. Nếu người sử dụng cung cấp giá trị lớn hơn 10 mph, phương thức sẽ gán vận tốc của
Skateboard bằng 10 mph.
8. (*) Định nghĩa lớp Bus thừa kế từ lớp Vehicle. Một thể hiện của lớp Bus phải luôn có
thuộc tính driver (tài xế) kiểu String. Trong phương thức tạo dựng của lớp Bus phải có
mã lệnh lưu tên tài xế. Lớp Bus có phương thức get() và set() để lấy hoặc thay đổi tên
của tài xế. Định nghĩa phương thức main() để thực hiện yêu cầu sau:
- Tạo 2 đối tượng như sau:
Bus firstBus = new Bus( "GM", "Metro", "Silver", "Joe" );
Bus secondBus = new Bus( "Mercedes", "B302", "Black", "Mary");
- Hiển thị kết quả:
First bus: GM được Joe lái.
Second bus: Mercedes được Mary lái.
Các Vấn Đề Cơ Sở Của Khoa Học Máy Tính Th.S GVC Tô Oai Hùng
1
BAØI TAÄP CHÖÔNG 6
Nhắc lại:
Để đạt dạng chuẩn 1, chúng ta dùng phương pháp sau:
- Loại bỏ các thuộc tính vi phạm dạng chuẩn 1 và đặt chúng vào một bảng riêng cùng với
khoá chính của quan hệ ban đầu. - Khoá chính của bảng này là một tổ hợp của khoá chính của quan hệ ban đầu và thuộc
tính đa trị. - Các thuộc tính còn lại lập thành một quan hệ với khóa chính là khóa chính ban đầu.
Để đạt dạng chuẩn 2, chúng ta dùng phương pháp sau:
- Loại bỏ các thuộc tính không khoá phụ thuộc vào một bộ phận khoá chính và tách thành
ra một bảng riêng.
- Khoá chính của bảng là bộ phận khoá mà chúng phụ thuộc vào. Các thuộc tính còn lại
lập thành một quan hệ, khóa chính của nó là khóa chính ban đầu.
Để đạt dạng chuẩn 3, chúng ta dùng phương pháp sau:
- Loại bỏ các thuộc tính phụ thuộc bắc cầu ra khỏi quan hệ và tách chúng thành một quan
hệ riêng có khoá chính là thuộc tính bắc cầu.
- Các thuộc tính còn lại lập thành một quan hệ có khóa chính là quan hệ ban đầu.
1. Giả sử người thiết kế CSDL đưa ra lược đồ cho bảng Sales trong một cửa hàng nào đó
như sau:
Trong đó: không có khách hàng (Customer_Name) nào cùng tên.
a) Lược đồ này ở dạng chuẩn 1 chưa?
b) Lược đồ này ở dạng chuẩn 2 chưa?
c) Lược đồ này ở dạng chuẩn 3 chưa?
d) Nếu lược đồ trên không phải dạng chuẩn 3, hãy thiết kế lại để thành dạng chuẩn 3.
2. Cho các lược đồ quan hệ như sau:
DonVi
MaDV TenDV MaNQL TruSo
5 Nghiên cứu NV002 Nam Định, Hà Nội, Bắc Ninh
4 Hành chính NV014 Hà Nội
1 Lãnh đạo NV061 Tp.HCM
Sales
Item_ID Description Price Date Customer_Name Addr City St ZIP Phone
Các Vấn Đề Cơ Sở Của Khoa Học Máy Tính Th.S GVC Tô Oai Hùng
2
Trong đó: ứng với mỗi nhân viên và mỗi dự án thì số giờ thực hiện dự án sẽ được xác định.
a) Lược đồ này ở dạng chuẩn 1 chưa? Nếu chưa thì chuyển thành dạng chuẩn 1.
b) Sau khi đưa các lược đồ về dạng chuẩn 1, thì nó có ở dạng chuẩn 2 không?
c) Sau khi đưa các lược đổ về dạng chuẩn 2, thì nó có là dạng chuẩn 3 không?
3. Cho lược đồ quan hệ như sau:
NhanVien_DonVi (MaNV, MaDV, TenDV, HoTenNV, NgaySinh, DiaChi,
MaNQL)
Lược đồ này ở dạng chuẩn 3 chưa? Nếu chưa thì chuyển thành dạng chuẩn 3.
4. Cho lược đồ của hai bảng Deliveries và Delivery_Services:
Viết các lệnh SQL để tạo hai bảng trên. Chỉ định cột nào không thể có trị NULL, các ràng
buộc khoá chính và khoá ngoại. Chú ý là cột Delivery_Service trong bảng
Deliveries có cùng ý nghĩa như cột Name trong bảng Delivery_Service.
5. Cho một lược đồ cơ sở dữ liệu như sau:
Emp(EmpNo, Ename, Job, Mgr, HireDate, Sal, Benefit, DeptNo)
Dept(DeptNo, Dname, Loc)
SalGrade(Grade, Losal, Hisal)
Trong đó các quan hệ có ý nghĩa như sau:
- Emp: chứa các thông tin của nhân viên, bao gồm: mã nhân viên (EmpNo), tên nhân viên
(Ename), công việc (Job), mã người quản lý trực tiếp (Mgr), ngày vào làm (HireDate),
NhanVien_DuAn
MaNV MaDA HoTenNV TenDA SoGio DiaDiem
NV001 1 Nguyễn Văn Nam DA01 20 Hà Nội
NV003 2 Lê Thị Thanh DA02 28 TP.HCM
NV005 3 Hồ Văn Sơn DA03 25 Đà Nẵng
NV010 4 Trần Hoàng Sơn DA04 15 Huế
Deliveries
Date_Time Customer_ID Delivery_Service Cost Invoice_No Driver
Delivery_Services
Name Phone Addr City St ZIP Contact
Các Vấn Đề Cơ Sở Của Khoa Học Máy Tính Th.S GVC Tô Oai Hùng
3
lương hàng tháng (Sal), phụ cấp hàng tháng (Benefit) và mã phòng ban (DeptNo) mà
nhân viên này đang làm việc.
- Dept: chứa các thông tin về phòng ban, bao gồm: mã phòng ban (DeptNo), tên phòng
ban (Dname), nơi đặt văn phòng (Loc).
- SalGrade: chứa các thông tin về mức lương, bao gồm: mã mức lương (Grade), lương
thấp nhất (Losal), lương cao nhất (Hisal).
Viết các lệnh SQL để tạo ba bảng trên.
6. Viết truy vấn SQL cho câu 3 theo các yêu cầu sau:
a) Nêu tên phòng ban mà nhân viên “Smith” làm việc.
b) Liệt kê toàn bộ thông tin của những nhân viên có tên bắt đầu bằng chữ “A”.
c) Liệt kê tất cả các phòng ban đóng tại thành phố Hồ Chí Minh.
d) Liệt kê mã nhân viên, tên nhân viên, tên phòng ban, lương và mã mức lương của tất cả
nhân viên theo thứ tự mã nhân viên tăng dần.
e) Liệt kê mã và tên những nhân viên không có phụ cấp hàng tháng. Biết rằng những nhân
viên có giá trị của cột Benefit bằng 0 hay Null đều được xem là không có phụ cấp.
f) Liệt kê những nhân viên có chức vụ thấp nhất trong công ty: nhân viên không làm quản
lý cho nhân viên nào cả.
g) Liệt kê các nhân viên có lương cao hơn mức lương trung bình của tất cả mọi nhân viên.
7. Cho một số lược đồ sau:
Viết truy vấn SQL theo các yêu cầu sau:
a) Cho biết tên và phần trăm tiền hoa hồng của tất cả người bán hàng ký gởi ở bang NY
theo thứ tự phần trăm tiền hoa hồng tăng dần.
b) Cho biết mã hàng và những mô tả thông tin của nó mà người bán tên là “Parker
Smith” và giá bán là NULL.
Item
Item_ID Type Description Cost Consignment_Seller_ID Price_Sold
Sale
Invoice_No Customer_ID Date_Sold
Line_Item
Invocie_No Item_ID Unit_Price Quantity Line_Item_Price
(tổng số tiền)
Consignment_Seller
Seller_ID Name Addr City State ZIP Fee_Percent
Các Vấn Đề Cơ Sở Của Khoa Học Máy Tính Th.S GVC Tô Oai Hùng
4
c) Cho biết tổng số tiền bán được trong tháng 3/2007.
d) Cho biết các mã hàng mà “Parker Smith” đã bán (tức giá bán khác NULL) trong
tháng 11/2007.