Tải bản đầy đủ (.pdf) (31 trang)

Bài giảng kỹ thuật lập trình phần giới thiệu

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (678.25 KB, 31 trang )

Kỹ Thuật Lập Trình
Trịnh Tấn Đạt
Khoa CNTT - Đại Học Sài Gòn
Email:
Website: />

Nội dung


Giới thiệu môn học



Các nội dung



Đánh giá



Tài liệu tham khảo



Đề tài cho đồ án môn học (option)



Trao đổi và thảo luận



Giới Thiệu


Tên học phần: Kỹ thuật lập trình



Số tín chỉ: 4 (3,1)



Số tiết (lí thuyết, thực hành): 75 (45; 30)



Mơ tả học phần
o Học phần Kỹ thuật lập trình trình bày các kiến thức tiếp nối của học phần Cơ sở lập trình, bao
gồm các chương: Kỹ thuật lập trình đệ qui, Kỹ thuật lập trình con trỏ, Kỹ thuật lập trình ký tự và
chuỗi ký tự, Kỹ thuật lập trình với tập tin văn bản, một số kỹ thuật lập trình nâng cao.
o Học phần này giúp người học hồn thiện và nâng cao kiến thức về ngơn ngữ lập trình. Giúp
người học rèn luyện nhằm nâng cao tư duy về kỹ thuật lập trình.



Mục tiêu: hồn thiện các kỹ năng về lập trình như: phát triển tư duy lập trình, Phân tích vấn đề bài
tốn, thiết kế chương trình, soạn thảo chương trình, hình thành phong cách lập trình hiệu quả, xử lý
lỗi chương trình, ...



Nội dung mơn học


Giới thiệu và Ơn Tập



Con trỏ (Pointer)



Thiết kế chương trình



Đệ quy (Recursion)



Tập tin (FILE)



Chuỗi ký tự (String)





Các kỹ thuật lập trình tối ưu

o Qui hoạch động
o Chia để trị
o Tìm kiếm và Quay lui
o Tham lam
Đồ án môn học (option – không bắt buộc. Sinh viên đăng ký làm sẽ được điểm cộng)


Giới Thiệu
❖ Tài liệu tham khảo:


Tài liệu chính
[1] Huỳnh Minh Trí, Phan Tấn Quốc, Nguyễn Nhựt Đơng, Giáo trình kỹ thuật lập trình, NXB
Đại học Quốc Gia TPHCM, 2016.



Tài liệu khác (khuyến khích đọc thêm tài liệu bằng Tiếng Anh)
[2] Phạm Văn Ất, “Kỹ thuật lập trình C - cơ sở và nâng cao”, NXB Giáo Dục, 2006.
[3] K.N.King, C Programming: A Modern Approach, 2nd Edition
[4] Brian W. Kernighan and Dennis M. Ritchie ,The C Programming Language (2nd Edition)

[5] Wikibooks.org, “C Programming”, 2012.


Nguồn tham khảo khác (tử internet, tìm kiếm bằng tiếng Anh)
o />o />o Stackoverflow: />o GeeksforGeeks : />o Google, Bing, …


Đánh giá mơn học



Điểm q trình: 50%
o Điểm lý thuyết:

Chun cần, thảo luận : (5%)

Kiểm tra giữa kỳ: (20%)

Điểm đồ án mơn học (khơng bắt buộc):
• Sinh viên đăng ký và hoàn thành được thưởng tối đa 1đ.

o



Điểm thực hành :
Chuyên cần, thảo luận : (5%)
Kiểm tra thực hành: (20%)

Điểm thưởng



Thi kết thúc học phần: 50%
✓ Tự luận, đề đóng, thời gian làm bài: 90 phút


Project mơn học (khơng bắt buộc)



u cầu:
• Lý thuyết: đọc hiểu, viết theo hiểu (khơng dịch word-by-word)
• Cài đặt: code và run chương trình. (dựa vào các ví dụ)
• Viết báo cáo

❖ Số lượng thành viên 2 hoặc 3 sinh viên.

❖ Thời gian nộp: tuần 14


Project mơn học (khơng bắt buộc)


Danh sách các đề tài:
Nhóm 1

Nhóm 2

1. Thuật tốn quay lui (Backtracking) và bài 1. Thuật toán Balan ngược (Reserve
toán 8 hậu, mã đi tuần
Polish Notation) và ứng dụng
2. Thuật toán nhánh cận và ứng dụng (ít nhất 3 2. Thuật tốn Dynamic Time Warping
ví dụ)
(dựa trên quy hoạch động)
3. Thuật toán tham lam và ứng dụng (ít nhất 3
3. Thuật tốn gradient descent và ứng
ví dụ)
4. Thuật tốn leo đồi (Hill Climbing) và ứng dụng
4. Ma trận thưa và Thuật toán nhân

dụng
5. Thuật toán luyện kim (Simulated (nhanh) hai ma trận thưa
Annealing) và ứng dụng
5. Sum-area Table (Integral Image) và
6. Tabu Search và ứng dụng
ứng dụng.
7. Tối
ưu
bầy
đàn
(Particle 6. Các thuật toán nhân ma trận
Swarm Optimization) và ứng dụng
8. Giải thuật đàn kiến (Ant colony
optimization) và ứng dụng
9. Giải thuật di truyền (Genetic Algorithm) và
ứng dụng
10. Thuật tốn tối ưu sói xám (Grey Wolf
Optimizer)
11. Thuật tốn tối ưu cá voi (Whale
Optimization Algorithm)

Nhóm 3
1. Tìm hiểu về thư viện Standard
Template Library (containers, iterators,
algorithms) trong C++ và các ví dụ
2. Tìm hiểu về C++ Exception
Handling, C++ Standard Exceptions, và
các ví dụ.
3. Tìm hiểu về C++ Namespaces, C++
Template và C++ Preprocessor, và các ví

dụ.


Từ bài tốn đến chương trình


Các bài tốn thực tế thường rất phức tạp

Phải xác định được
o Các dữ liệu liên quan đến bài toán
o Các thao tác cần thiết để giải quyết bài tốn


Ví dụ

Bài tốn quản lý sinh viên đăng ký học phần
Cần quản lý những thông tin nào?
• Thơng tin về sinh viên: tên, ngày sinh, MSSV, Khoa, …
Cần thực hiện những thao tác nào?
• Tạo ra tài khoản sinh viên.
• Cập nhật một số thơng tin về sinh viên.
• Thêm, xóa , sửa đăng ký học phần.
Ai được phép thực hiện thao tác nào?


Từ bài tốn đến chương trình
Giải thuật
Thiết kế
Bài tốn thực
tế


- Mơ hình tốn
- Chọn kiểu dữ liệu,
cấu trúc dữ liệu
- Thiết kế giải thuật

- Dùng Mã giả
(Pseudocode)
- Dùng flowchart

Đánh giá

Phân tích, đánh giá
thuật tốn
-Độ phức tạp
- Cải tiến thuật tốn

Giải thuật tốt/tối ưu

Coding

Ngơn ngữ lập trình
C/C++
Java
Python



Khái niệm Kỹ thuật lập trình



Kỹ thuật lập trình: là kỹ thuật giải quyết một bài tốn trên máy tính dựa trên nền
tảng một phương pháp luận và một hoặc nhiều ngơn ngữ lập trình phù hợp với u
cầu.
Tư tưởng thiết kế + Cấu trúc dữ liệu + Giải thuật + Ngơn ngữ lập trình


Khái niệm Kỹ thuật lập trình


Thế nào là lập trình
o Viết chương trình tính 23
o Viết chương trình tính tổng 10
số ngun tố đầu tiên.

o Viết chương trình tính xn
o Viết chương trình tính tổng k
số ngun tố đầu tiên.


Khái niệm Kỹ thuật lập trình


Khái niệm lập trình

Với mỗi bài toán (vấn đề) đặt ra, cần:
o Thiết kế thuật tốn để giải quyết bài tốn đó.
o Cài đặt thuật tốn bằng một chương trình máy tính.



Khái niệm Kỹ thuật lập trình


Thế nào là lập trình tốt
Đúng / Chính xác
o Thỏa mãn các nhiệm vụ
o Được khách hàng chấp nhận

Khả năng nâng cấp
o Dễ dàng chỉnh sửa
Hiệu quả
o Dễ dàng nâng cấp trong điều o Thời gian lập trình ngắn
kiện bài tốn thay đổi
o Khả năng bảo trì dễ dàng
o Giá trị sử dụng lại lớn
Ổn định
Tái sử dụng
o Ổn định
o Tái sử dụng hoặc kế thừa o Sử dụng đơn giản, thân thiện
o Nhiều chức năng tiện ích
o Ít lỗi hoặc lỗi nhẹ có thể
cho bài tốn khác
chấp nhận được
Tương thích
Hiệu suất
o Thích ứng tốt các mơi o Chương trình nhỏ gọn, ít bộ
trường khác nhau
nhớ
o Tốc độ nhanh, sử dụng ít
CPU



Khái niệm Kỹ thuật lập trình


Làm thế nào để lập trình tốt?
o Tư duy và phương pháp lập trình
o Hiểu sâu về máy tính
o Nắm vững ngơn ngữ
o Đam mê
o Luyện tập


Thiết kế chương trình


Thế nào là chương trình tốt?
o Cấu trúc rõ ràng
o Chương trình có tính logic + các biểu thức được diễn đạt dễ hiểu
o Tên dùng trong chương trình có tính chất miêu tả
o Chú thích hợp lý
o Tôn trọng chiến lược divide/conquer (chia để trị)



Làm thế nào để tạo ra chương trình tốt
o Thiết kế top-down
o Tinh chỉnh từng bước



Thiết kế chương trình


Ngun tắc chung
Đơn giản
• Thể hiện giải thuật dễ
đọc, dễ hiểu
• Lựa chọn cấu trúc dữ liệu
sao cho việc viết giải thuật
là đơn giản nhất
• Tìm cách đơn giản hóa
các biểu thức
• Thay những biểu thức lặp
đi lặp lại bằng chương
trình con tương ứng

Trực tiếp
• Sử dụng thư viện mọi lúc
có thể.
• Tránh việc kiểm tra điều
kiện khơng cần thiết.

Rõ ràng
• Dùng khối lệnh để tránh
nhập nhằng.
• Đặt tên biến, hàm, .. sao
cho tránh được nhầm lẫn

Cấu trúc tốt
• Tơn trọng tính cấu trúc

của chương trình (chẳng
hạn dựa vào hàm/ thủ tục ).
• Viết và kiểm thử dựa
trên cấu trúc phân cấp của
chương trình.
• Viết giải thuật bằng giả
ngữ, rồi mới viết bằng 1
NNLT cụ thể


Thiết kế giải thuật


Chia bài toán ra thành nhiều bài tốn nhỏ hơn



Tìm giải pháp cho từng bài tốn nhỏ



Gộp các giải pháp cho các bài toán nhỏ thành giải pháp tổng thể cho bài tốn ban
đầu



Có 02 cách thiết kế:
o Thiết kế kiểu bottom-up
o Thiết kế kiểu top-down



Thiết kế giải thuật


Thiết kế từ dưới lên (bottom-up):
o Là phương pháp thiết kế đi từ việc thiết kế chi tiết nhỏ sau đó kết hợp lại thành
bài tốn hồn chỉnh.
o Ví dụ: thiết kế chi tiết một phần chương trình, thiết kế chi thiết phần khác, …
lặp lại quá trình cho đến hết.
o Là cách thiết kế đơn giản, dễ thực hiện, khơng địi hỏi kỹ năng cao của người
thiết kế. Tuy nhiên, khi gặp hệ thống phức tạp, cách tiếp cận này sẽ không hiệu
quả.


Thiết kế giải thuật


Thiết kế từ trên xuống (top-down):
o Là phương pháp lý tưởng nhất trong thiết kế. Ý tưởng là đi từ thiết kế toàn bộ
sản phẩm một cách hệ thống, tổng thể sau đó chia nhỏ/ phân rã xuống các bài
toán nhỏ hơn để giải quyết, tinh chỉnh cho đến khi hồn thiện.
o Ví dụ: thiết kế top-down trong lập trình



Phác họa hàm main (viết bằng mã giả - pseudocode)
Tinh chỉnh từng lệnh mã giả










Lệnh đơn giản - > thay bằng code
Lệnh phức tạp -> dùng lợi gọi hàm/chương trình con

Lặp lại (trong hầu hết các trường hợp) ở mức sâu hơn, cụ thể hơn, cho đến khi các hàm được
định nghĩa xong.
Chương trình có cấu trúc phân cấp.

Ví dụ: thiết kế giải thuật cho bài tốn sau:


Phong cách lập trình


Programming style

#include "Hash.h” // Initialize a empty dictionary with size void initDict(Dict &d, int size) { int i; d.size=size;
d.n=0;
d.table = new Node[d.size]; assert(d.table != NULL); for(i = 0; i < d.size; i++)
d.table[i] = NULL; } // Create a
new empty dictionary with INITIAL_SIZE void createDict(Dict &d) {
return initDict(d,INITIAL_SIZE); } // Delete a
dictionary void deleteDict(Dict &d) { int i; Node e; Node q; for (i=0; i{ for
(e=d.table[i];e!=NULL;e=q) { q=e->next;

delete(e->word);
delete(e->mean);
delete e;
}
}
delete (d.table);}


Phong cách lập trình
▪ Tại sao cần phong cách lập trình tốt?
o Lỗi thường xảy ra do sự nhầm lẫn của lập trình viên.
• Biến i được dùng làm gì?
• Hàm f được gọi như thếnào?

o Mã nguồn tốt thường là mã nguồn dễ đọc.


Phong cách lập trình


Làm thế nào để mã nguồn dễ đọc?
o Cấu trúc chương trình rõ ràng, dễ hiểu
o Chọn tên phù hợp, gợi nhớ
o Viết chú thích rõ ràng
o Sử dụng module (thiết kế chương trình con/hàm)


Phong cách lập trình



Một số quy tắc

Nhất qn
• Tn thủ quy tắc đặt tên
trong tồn bộ chương trình.
• Nhất qn trong việc dùng
các biến cục bộ.

Đơn giản
• Mỗi chương trình con phải
có một nhiệm vụ rõ ràng.
• Đủ ngắn để có thể nắm bắt
được
• Số tham số của chương
trình con là tối thiểu

Rõ ràng
• Chú thích rõ ràng, ví dụ
đầu mỗi chương trình con và
trong các đoạn code quan
trọng.

Bao đóng
• Hàm chỉ nên tác động tới
duy nhất 1 giá trị -giá trị trả
về của hàm
• Khơng nên thay đổi giá trị
của biến chạy trong thân của
vịng lặp, ví dụ
for(i=1;i<=10;i++)

i++;


Phong cách lập trình
❖ Cấu trúc viết mã nguồn:



Khoảng trắng (spacing): sử dụng khoảng trắng hoặc ký tự xuống dòng hợp lý để
code dễ đọc.

Ví dụ:

for (j = 1; j <= 20; j++) s = s+j ; // Code không tốt

for (j = 1; j <= 20; j++)
s = s+j ;

// Code tốt


×