Đềbài tập lớn Môn KỹThuật Lập Trình Lớp : 75211 Học kì I năm học 2014-2015
Giảng viên: Nguyễn Việt Tùng Cập nhật: 08-10-2014
1/6
Bài 1. (max 4/6 người chia làm 2 nhóm nhỏ)
Viết chương trình truyền thông sửdụng RS232 trên máy tính.
Yêu cầu:
1. Ràng buộc vềcông cụvà hệ điều hành
- Chạy được trên Windows, Ubuntu (sửdụng ANSI chuẩn, không sửdụng các hàm đặc biệt của Windows)
- Công cụ: boost.asio hoặc các công cụkhác
thống nhất trước với thầy giáo.
2. Vềnội dung công việc và hình thức báo cáo
- Yêu cầu nộp 3 phiên bản và trong báo cáo nêu rõ cải tiến qua các phiên bản
- Đóng gói dưới dạng chương trình thưviện C và thưviện lớp C++
- Có mã nguồn chương trình ví dụsửdụng thưviện trên C và C++
- Báo cáo rõ ràng, đầy đủ, các công việc: 2 điểm
3. Vềchức năng chương trình
- Sửdụng C, viết thưviện có các hàm sau (4 điểm + 1 điểm nâng cao):
o Khởi tạo cổng với các tham số: tên cổng, tốc độ, sốbyte dữliệu, byte start, byte stop, cách kiểm tra
chẳn lẽ(chẳn, lẽ, không), trảvềmột con trỏ đến kiểu dữliệu cổng đã mở(kiểu dữliệu này tựxây
dựng hoặc tùy vào công cụsửdụng) (all)
o Đóng cổng (all)
o Hàm gửi dữliệu là một chuỗi của ANSI C (1
1
)
o Hàm gửi dữliệu chứa trong bộ đệm (nhận vào con trỏ đến bộ đệm đó, và sốbyte cần gửi) (2
2
)
o Hàm nhận dữliệu kiểu đồng bộ: khi được gọi sẽ đợi đến khi nào nhận được dữliệu
Hàm nhận dữliệu đợi đến khi đủdữliệu kiểu chuỗi ANSI C mới trảvề(nhận dữliệu đến khi
gặp kí tự‘\0’ (1)
Hàm nhận dữliệu đợi đến khi nhận đủdữliệu: n byte dữliệu (n là tham sốvào của hàm). Kết
quả được lưu trong bộ đệm được trỏbởi một con trỏ(tham sốtrảvềcủa hàm). Có thểcấp
phát bộnhớtrong hoặc ngoài hàm.
Nâng cao: viết hàm tương tựnhư2 hàm trên, nhưng sẽthoát khi quá thời gian đặt trước (tham
sốvào với giá trịmặc định của hàm) (all)
o Nâng cao: Hàm nhận dữliệu kiểu không đồng bộ: sẽchờnhận dữliệu tương tựnhưbài trên. Khi dữ
liệu đến sẽgọi một hàm callback. Hàm này được truyền nhưlà tham số đầu vào của hàm đang viết.
Tương tự, khi timeout sẽgọi một hàm callback khác đểxửlí sựkiện timeout. (all)
Viết chương trình ví dụsửdụng thưviện C thểhiện đầy đủcách gọi hàm các công việc trên, đóng
gói trong 2 chương trình: 1 chương trình gửi, 1 chương trình nhận.
2 điểm (1 điểm / 1 chương trình)
- Sửdụng C++, viết một lớp (C++) có chứa các thuộc tính và chức năng cần thiết tương tựbài C nhưsau (4
điểm + 1 điểm nâng cao):
o Phương thức khởi tạo cổng (all)
o Phương thức đóng cổng (all)
o Phương thức gửi dữliệu dạng chuỗi (1)
o Phương thức gửi dữliệu dạng bộ đệm (2)
1
Nhóm 1
2
Nhóm 2
Đềbài tập lớn Môn KỹThuật Lập Trình Lớp : 75211 Học kì I năm học 2014-2015
Giảng viên: Nguyễn Việt Tùng Cập nhật: 08-10-2014
2/6
o Phương thức nhận dữliệu đồng bộdạng chuỗi (1)
o Phương thức nhận dữliệu đồng bộdạng bộ đệm (2)
o Nâng cao:phương thức nhận dữliệu đồng bộdạng chuỗi có timeout (1)
o Nâng cao:phương thức nhận dữliệu đồng bộdạng bộ đệm có timeout (2)
o Phương thức nhận dữliệu không đồng bộdạng chuỗi (1)
o Phương thức nhận dữliệu không đồng bộdạng bộ đệm (2)
o Nâng caoPhương thức nhận dữliệu không đồng bộdạng chuỗi có timeout (1)
o Nâng caoPhương thức nhận dữliệu không đồng bộdạng bộ đệm (2)
Viết chương trình ví dụsửdụng thưviện C++ thểhiện đầy đủcách gọi hàm các công việc trên, đóng
gói trong 2 chương trình: 1 chương trình gửi, 1 chương trình nhận.
2 điểm (1 điểm / 1 điểm)
Bài 2. Tìm hiểu lập trình đa luồng (max 6 người)
Mục tiêu: Tìm hiểu 3 công cụlập trình đa luồng cho C/C++ trên Windows/Ubuntu.
Ngày nay với phát triển của máy tính đa nhân cũng nhưcác hệ điều hành đa nhiệm, xu hướng lập trình song
song, đa luồng ngày càng phát triển. Nó cho phép chia bài toán lớn thành nhiều bài toán nhỏ, tăng cao hiệu
năng triển khai và kiểm lỗi chương trình. Microsoft Visual C++ cho phép tạo các ứng dụng đa luồng trong
Windows. Chúng ta cần sửdụng nhiều luồng nếu ứng dụng của chúng ta cần quản lí nhiều hoạt động như:
quản lí đồng thời bàn phím và chuột. Một luồng xửlí các sựkiện gõ phím đến từbàn phím, một luồng lọc
các sựkiện đến từchuột (mouse). Một luồng thứ3 có thểcập nhật hiển thịtrên màn hình trên cơsởdữliệu
đến từbàn phím và chuột. Đồng thời một sốluồng khác có thểdùng đểquản lí truy cập ổ đĩa hoặc quản lí
truyền thông.
Yêu cầu:
1. Lập trình đa luồng sửdụng ba công cụsau:
- pthread (2 người)
- thread của ANSI C11 (2 người)
- thread của boost (2 người)
2. Tìm và đánh giá về tài liệucủa 3 công cụtrên các khía cạnh sau (all):
- dễdùng,
- dễhọc,
- dễviết chương trình
- dễkiểm lỗi
3. Đánh giá về tính năngcủa 3 công cụtrên trên các khía cạnh trên (all):
- Hệ điều hành hỗtrợ(Windows, Linux/Ubuntu, Android)
- Tốc độcác tác vụcơbản: tạo thread, hủy thread: nhanh nhất, chậm nhất, thời gian bao lâu, trên máy có cấu
hình thếnào?
- Truyền thông tin/dữliệu giữa các thread: có dễdàng không? có hỗtrợmutex/semaphore không?
Viết chương trình ví dụsửdụng 3 công cụtrên dùng C có các hàm:
Đềbài tập lớn Môn KỹThuật Lập Trình Lớp : 75211 Học kì I năm học 2014-2015
Giảng viên: Nguyễn Việt Tùng Cập nhật: 08-10-2014
3/6
- Tạo thread,
- Hủy thread
- Chia sẻdữliệu giữa 2 thread sửdụng mutex và metaphore:
o Một thread gửi một sốnguyên
o Một thread nhận sốnguyên, tăng 1
Xây dựng lớp C++ đóng gói thread trên. Viết chương trình ví dụsửdụng.

1.
Bài 3 (max 5 người)
Sửdụng OpenCV viết chương trình phát hiện sựkiện từvideo:
1. Đọc dữliệu từcamera IP (có thểsửdụng yawcam) đểgiảlập ip camera từwebcam
2. Phát hiện sựkiện (Motion detection) tương tựnhưtính năng motion detection của chương trình Yawcam
a. Các tham sốcấu hình từtham sốdòng lệnh hoặc từfile (xml) hoặc hỏi đáp khi khởi động chương
trình) bao gồm:
Địa chỉIP của camera
Sensitivity: độnhạy tính bằng %
Tolerance : Sai sốcho phép %
Câu thông báo hiển thịkhi có sựkiện
tên tập tin .bat sẽchạy khi có sựkiện
Giảsửthu thập hình ảnh 8 bit màu, 1 điểm anh được mô tảbằng 3 tham sốR, G, B, mỗi tham sốgồm 1
byte.
1. Thu thập hình ảnh từcamera IP
2. Tại mỗi điểm ảnh tính trịtuyệt đối của thay đổi so với giá trịcũcủa từng tham sốR, G, B
3. Tại mỗi điểm ảnh tính trịtuyệt đối của thay đổi so với giá trịcũchung cho cả3 tham sốR, G, B theo công
thức
a. Tổng
b. Tổng bình phương
4. Tính sốlượng các điểm ảnh có sựthay đổi lớn hơn Sensivity (%) toàn dải (8 bit). Ví dụ: giá trịcũ50, giá trị
mới 70 => thay đổi abs(50-70) = 20, tính theo % toàn dải = 20/256 * 100 = 7.8%. Nếu Sensitivity = 5% điểm
ảnh có thay đổi lớn (thay đổi tính theo % toàn dải = 7.8% > sensitivity = 5%), nếu Sensitivity = 8% điểm ảnh
có thay đổi nhỏ(thay đổi tính theo % toàn dải = 7.8% < sensitivity = 8%).
5. Kiểm tra xem sốlượng điểm ảnh có sựthay đổi này có lớn hơn ngưỡng tolerance hay không (toàn ảnh tương
ứng với 100%). Ví dụ: ảnh có độphân giải 320 x 240 => có điểm ảnh 76800. Nếu tolerance là 5% thì khi
tổng sốlượng điểm ảnh có độthay đổi lớn hơn Sensitivity lớn hơn 76800 * 5% = 3840 điểm thì xem nhưphát
hiện được di chuyển. Lúc này cần hiển thịthông báo và chạy tập tin .bat
Đềbài tập lớn Môn KỹThuật Lập Trình Lớp : 75211 Học kì I năm học 2014-2015
Giảng viên: Nguyễn Việt Tùng Cập nhật: 08-10-2014
4/6
Nâng cao : thay vì tính cho toàn ảnh, chỉtính cho một vùng xác định trên ảnh. Vùng này được tính bằng tọa
độgóc trái trên và tọa độgóc phải dưới trong ảnh.
Tài liệu tham khảo
1.
Bài 4 (max 4 người)
Giao diện sửdụng Qt đểviết ứng dụng cho bài 4.
Viết 2 phiên bản (2 người / 1 phiên bản): phân tích hơn kém của 2 phiên bản này.
Xây dựng các prototype của các hàm chức năng của bài 3. Đặt tên hàm, xác định rõ tham sốvào/ra và kiểu.
Giải thích rõ cách sửdụng của từng hàm và ý nghĩa các tham sốtrong báo cáo.
Mỗi phiên bản xây dựng prototype các hàm chức năng của bài 3.
Nâng cao : Xây dựng lớp đóng gói các hàm chức năng của bài 3.
Tài liệu tham khảo :
1.
Bài 5. (max 2 người )
Viết ứng dụng giảlập bàn phím và chuột trên Windows tương tựchương trình synergy
Đềbài tập lớn Môn KỹThuật Lập Trình Lớp : 75211 Học kì I năm học 2014-2015
Giảng viên: Nguyễn Việt Tùng Cập nhật: 08-10-2014
5/6
Đơn giản :
- nhận vào từbàn phím tọa độcủa chuột, di chuyển con trỏchuột đến vịtrí tương ứng trên màn hình
- nhận vào từbàn phím tùy chọn tương ứng với các thao tác click chuột (click trái/phải, đơn/đúp), giảtín hiệu
click đúp chuột
- Lấy vịtrí hiện tại của chuột
- Thực hiện tương tựvới bàn phím
Có thểsửdụng các chương trình trên Windows đểthửnghiệm.
Tài liệu tham khảo
1.
Bài 6 (5 người)
Tìm hiểu và xây dựng máy trạng thái cho phòng khách của một ngôi nhà dân.
Phần 1. Mô hình hóa hoạt động của phòng khách của một ngôi nhà thông
minh. Xoay quanh các kịch bản sau :
1. Phòng không có người
2. Phòng có khách
3. Cảgia đình đang xem phim
4. Cảgia đình đang đọc sách, nghe nhạc
Các thiết bịcó thể được điều khiển trong phòng :
1. Các thiết bị điều khiển được trong phòng:
a. Tivi,
b. Đài/dàn âm thanh,
c. Hệthống đèn (bật/tắt/sáng/tối): trung tâm và bàn học,
d. Điều hòa (bật/tắt/nhiệt độtừ18 – 30oC)
2. Các cảm biến trong phòng :
a. Nhiệt độ, độ ẩm
b. Sốlượng người trong phòng
c. Vịtrí người trong phòng với độchính xác 3 m
d. Vịtrí chính xác của chủnhà với độchính xác 1.5m
e. Định danh, xác định có chủnhà trong phòng hay không,
f. Có trẻem trong phòng không?
g. Thời gian (đồng hồ)
h. Độ ồn của môi trường
3. Mục tiêu của máy trạng thái:
Đềbài tập lớn Môn KỹThuật Lập Trình Lớp : 75211 Học kì I năm học 2014-2015
Giảng viên: Nguyễn Việt Tùng Cập nhật: 08-10-2014
6/6
a. ra lệnh được điều khiển các thiết bị(các công việc khi vào và ra khỏi một trạng thái và cần thực hiện
trong một trạng thái)
b. Ví dụ độ ồn của môi trường giảm khi vềkhuya (thời gian), giảm âm lượng của tivi, đài xuống mức
thích hợp
c. Ví dụkhi có người trong phòng, luôn giữnhiệt độ ởmột mức xác định (cài đặt bởi hệthống), khi
không có người quá một thời gian trễ, tăng nhiệt độlên, khi không có người quá một thời gian trễnữa
-> tắt điều hòa đi. Khi không có người mà đã quá khuya, tắt toàn bộhệthống.
d. Ví dụ: khi có người ngồi vào bàn học -> tựbật đèn, khi người đó ra khỏi bàn học -> tắt đèn (với độtrễ
thích hợp.
e. Ví dụ: khi bật tivi (chuyển sang chế độxem phim): tự điều chỉnh độsáng đèn trong phòng vềngưỡng
thích hợp, tắt tivi -> tự điều chỉnh vềmức default (chuyển vềchế độsinh hoạt/tiếp khách).
f. Ví dụ: Điều khiển nhiệt độcủa phòng theo lượng người trong phòng
g. … Tựnghĩ, trình bày và triển khai.
Phần 2: Sửdụng statechart hoặc MetaStateMachine của boost đểcài đặt mô hình máy trạng thái trên.
Ghi chú : tùy sốlượng người, có thểlựa chọn kịch bản đểthực hiện, yêu cầu càng hoàn thiện, càng bao quát
nhiều tình huống, sựkiện càng tốt.
1.
regex của C11