Kỹ Thuật Lập Trình Trịnh Tấn Đạt Khoa CNTT Đại Học Sài Gòn Email trinhtandatsgu edu vn Website https sites google comsitettdat88 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.
Kỹ Thuật Lập Trình Trịnh Tấn Đạt Khoa CNTT - Đại Học Sài Gòn Email: trinhtandat@sgu.edu.vn Website: https://sites.google.com/site/ttdat88/ 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 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ỉ: (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 kiến thức tiếp nối học phần Cơ sở lập trình, bao gồm chương: Kỹ thuật lập trình đệ qui, Kỹ thuật lập trình trỏ, Kỹ thuật lập trình ký tự chuỗi ký tự, Kỹ thuật lập trình với tập tin văn bản, số kỹ thuật lập trình nâng cao o Học phần giúp người học hoàn thiện nâng cao kiến thức ngơn ngữ lập trình Giúp người học rèn luyện nhằm nâng cao tư kỹ thuật lập trình ▪ Mục tiêu: hồn thiện kỹ lập trình như: phát triển tư lập trình, Phân tích vấn đề 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 Ô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 Quay lui o Tham lam Đồ án môn học (option – không bắt buộc Sinh viên đăng ký làm điểm cộng) Giới Thiệu ❖ Tài liệu tham khảo: ▪ Tài liệu [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 Tiếng Anh) [2] Phạm Văn Ất, “Kỹ thuật lập trình C - sở 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 tiếng Anh) o https://www.cprogramming.com/tutorial/c-tutorial.html o http://www.eskimo.com/~scs/cclass/notes/top.html o Stackoverflow: https://stackoverflow.com/ o GeeksforGeeks : https://www.geeksforgeeks.org/ o Google, Bing, … Đánh giá môn học ▪ Điểm trình: 50% o Điểm lý thuyết: ✓ Chuyên cần, thảo luận : (5%) ✓ Kiểm tra kỳ: (20%) ✓ Điểm đồ án mơn học (khơng bắt buộc): • Sinh viên đăng ký hoàn thành 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 run chương trình (dựa vào ví dụ) • Viết báo cáo ❖ Số lượng thành viên 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 đề tài: Nhóm Nhóm Thuật toán quay lui (Backtracking) Thuật toán Balan ngược (Reserve toán hậu, mã tuần Polish Notation) ứng dụng Thuật toán nhánh cận ứng dụng (ít Thuật tốn Dynamic Time Warping ví dụ) (dựa quy hoạch động) Thuật tốn tham lam ứng dụng (ít 3 Thuật tốn gradient descent ứng ví dụ) Thuật toán leo đồi (Hill Climbing) ứng dụng Ma trận thưa Thuật toán nhân dụng Thuật toán luyện kim (Simulated (nhanh) hai ma trận thưa Annealing) ứng dụng Sum-area Table (Integral Image) Tabu Search ứng dụng ứng dụng Tối ưu bầy đàn (Particle Các thuật toán nhân ma trận Swarm Optimization) ứng dụng Giải thuật đàn kiến (Ant colony optimization) ứng dụng Giải thuật di truyền (Genetic Algorithm) ứng dụng 10 Thuật toá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 Tìm hiểu thư viện Standard Template Library (containers, iterators, algorithms) C++ ví dụ Tìm hiểu C++ Exception Handling, C++ Standard Exceptions, ví dụ Tìm hiểu C++ Namespaces, C++ Template C++ Preprocessor, ví dụ Từ tốn đến chương trình ▪ Các tốn thực tế thường phức tạp Phải xác định o Các liệu liên quan đến toán o Các thao tác cần thiết để giả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ý thơng tin nào? • Thơng tin sinh viên: tên, ngày sinh, MSSV, Khoa, … Cần thực thao tác nào? • Tạo tài khoản sinh viên • Cập nhật số thơng tin sinh viên • Thêm, xóa , sửa đăng ký học phần Ai phép thực thao tác nào? Từ 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 liệu, cấu trúc 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 … Thiết kế chương trình ▪ Ngun tắc chung Đơn giản • Thể giải thuật dễ đọc, dễ hiểu • Lựa chọn cấu trúc liệu cho việc viết giải thuật đơn giản • Tìm cách đơn giản hóa biểu thức • Thay biểu thức lặp lặp lại chương trình tương ứng Trực tiếp • Sử dụng thư viện lúc • 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, cho tránh nhầm lẫn Cấu trúc tốt • Tơn trọng tính cấu trúc chương trình (chẳng hạn dựa vào hàm/ thủ tục ) • Viết kiểm thử dựa cấu trúc phân cấp chương trình • Viết giải thuật giả ngữ, viết NNLT cụ thể Thiết kế giải thuật ▪ Chia toán thành nhiều tốn nhỏ ▪ Tìm giải pháp cho toán nhỏ ▪ Gộp giải pháp cho toán nhỏ thành giải pháp tổng thể cho toá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ừ lên (bottom-up): o Là phương pháp thiết kế từ việc thiết kế chi tiết nhỏ sau kết hợp lại thành tốn hồn chỉnh o Ví dụ: thiết kế chi tiết phần chương trình, thiết kế chi thiết phần khác, … lặp lại trình hết o Là cách thiết kế đơn giản, dễ thực hiện, khơng địi hỏi kỹ cao người thiết kế Tuy nhiên, gặp hệ thống phức tạp, cách tiếp cận không hiệu Thiết kế giải thuật ▪ Thiết kế từ xuống (top-down): o Là phương pháp lý tưởng thiết kế Ý tưởng từ thiết kế toàn sản phẩm cách hệ thống, tổng thể sau chia nhỏ/ phân rã xuống toán nhỏ để giải quyết, tinh chỉnh hồn thiện o Ví dụ: thiết kế top-down lập trình • • Phác họa hàm main (viết mã giả - pseudocode) Tinh chỉnh lệnh mã giả ✓ ✓ • • ▪ Lệnh đơn giản - > thay code Lệnh phức tạp -> dùng lợi gọi hàm/chương trình Lặp lại (trong hầu hết trường hợp) mức sâu hơn, cụ thể hơn, hàm đị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 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; inext; delete(e->word); delete(e->mean); delete e; } } delete (d.table);} Phong cách lập trình ▪ Tại cần phong cách lập trình tốt? o Lỗi thường xảy nhầm lẫn lập trình viên • Biến i dùng làm gì? • Hàm f gọi thếnào? o Mã nguồn tốt thường mã nguồn dễ đọc Phong cách lập trình ▪ Làm để 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 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 quán • Tuân thủ quy tắc đặt tên tồn chương trình • Nhất qn việc dùng biến cục Đơn giản • Mỗi chương trình phải có nhiệm vụ rõ ràng • Đủ ngắn để nắm bắt • Số tham số chương trình tối thiểu Rõ ràng • Chú thích rõ ràng, ví dụ đầu chương trình đoạn code quan trọng Bao đóng • Hàm nên tác động tới giá trị -giá trị trả hàm • Không nên thay đổi giá trị biến chạy thân vịng lặp, ví dụ for(i=1;i