Bài giảng Kỹ thuật lập trình: Giới thiệu môn học cung cấp cho người học một số nội dung chính của môn học, đánh giá môn học, tài liệu tham khảo, đề tài vầ đồ án của môn học,... Mời các bạn cùng tham khảo nội dung chi tiết.
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ỉ: (2,1) ▪ Số tiết (lí thuyết, thực hành): 60 (30; 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â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 ▪ Thiết kế chương trình ▪ Con trỏ (Pointer) ▪ Tập tin (FILE) ▪ Chuỗi ký tự (String) ▪ Đệ quy (Recursion) ▪ ▪ 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 (option) o Tham lam (option) Đồ á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, Baidu, … Đánh giá mơn học ▪ Điểm q trình: 50% o Điểm lý thuyết: ✓ Chuyên cần, thảo luận : thêm điểm thưởng ✓ Kiểm tra kỳ: ✓ Đ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 +2đ • Nếu đăng ký mà khơng làm bị trừ -1đ o Điểm thực hành : ✓ Chuyên cần, thảo luận : thêm điểm thưởng ✓ Kiểm tra thực hành: cho tập nhà làm vịng tuần Sau thảo luận vấn đáp phòng thực hành để chấm điểm ▪ 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) ▪ Yêu cầu: thời gian đăng ký (đến hết tuần thứ học kỳ) • 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ụ) • Trình bày (powerpoint): ❑ ❑ ❑ Sơ lược ý lý thuyết Ý tưởng giải quyết(thuật toán, thuật giải) toán Kết ❖ Số lượng thành viên sinh viên Danh sách đề tài: (sẽ cập nhật thêm website) Thuật toán quay lui (Backtracking) toán hậu, mã tuần Thuật toán nhánh cận ứng dụng (ít ví dụ) Thuật tốn tham lam ứng dụng (ít ví dụ) Thuật toán leo đồi (Hill Climbing) ứng dụng Thuật toán luyện kim (Simulated Annealing) ứng dụng Tabu Search ứng dụng Tối ưu bầy đàn (Particle 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 Dynamic Time Warping (dựa quy hoạch động) 11 Thuật toán gradient descent ứng dụng 12 Ma trận thưa Thuật toán nhân (nhanh) hai ma trận thưa 13 Sum-area Table (Integral Image) ứng dụng 14 Tìm hiểu Standard Template Library (containers, iterators, algorithms) C++ ví dụ Nghề lập trình thật người biết tới https://techmaster.vn/posts/1862/nghe-lap-trinh-va-nhung-su-that-it-nguoi-biet-toi Trích phần viết ▪ Lập trình cơng việc nào? Có phải lập trình viên người tối ngày ngồi trước hình máy tính? Cứ code giỏi sản phẩm tốt? … Lập trình lĩnh vực mà khơng phải nghề thật khó thấu hiểu nỗi “trần ai” Sau đây, kĩ sư công nghệ thông tin David Veksler – chủ trang blog The Rational Mind – chia sẻ cho thật biết nghề IT – nghề lập trình: Chỉ 10-20% thời gian tồn dự án lập trình viên sử dụng để viết code, trình độ, ngày lập trình viên viết trung bình từ 10-20 dòng code Sự khác biệt tay chuyên gà mờ tay chun dành 90% thời gian để suy luận, tìm tịi thử nghiệm phương án tối ưu cho mình; cịn gà mờ dành 90% thời gian để debug, thay đổi vài chỗ code, lại debug mong đến lúc chương trình hoạt động Coder, Programmer, Developer Engineer https://www.topitworks.com/blogs/cung-lam-viec-trong-nganh-phan-mem-programmer-coderdeveloper-va-engineer-khac-nhau-the-nao/ Các loại lỗi lập trình ❖ Code xong cho thực thi lỗi Lỗi cú pháp (Syntax Error): Hay gọi lỗi biên dịch (Compiler error) Đây loại lỗi sơ đẳng lập trình Thường bạn gõ sai cấu trúc ngơn ngữ (ví dụ thiếu dấu kết thúc câu lệnh, số ngôn ngữ từ khố phân biệt chữ hoa, chữ thường lại gõ chữ hoa, v.v gọi nôm na lỗi tả) Chương trình khơng thể biên địch gặp lỗi Các trình biên dịch biên dịch code, gặp lỗi dòng code báo lỗi Lỗi thực thi (Runtime error): Xảy bất ngờ chương trình chạy Loại lỗi thường xảy người lập trình viết code ẩu, không lường hết trường hợp xảy ra, khiến chương trình chạy bị lỗi treo hình, khỏi chương trình ln chương trình, v.v Lỗi dễ dàng phát cách Debug Lỗi logic (khó phát nhất) : Đây lỗi tư sai, thuật toán sai dẫn đến sai kết ❖ Code xong, chạy tốt không hiểu sao??? - Copy code từ nguồn có sẵn ko đọc hiểu code - Nghĩ tới đâu, code debug đến - Thiếu comment giải thích - Phân chia module/ hàm hợp lý Thiếu giải thích mục tiêu, input, ouput hàm 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 … Các ví dụ thực tế ▪ Bài toán document scanner tham khảo: https://blogs.dropbox.com/tech/2016/08/fast-and-accurate-document-detection-for-scanning/ Goal: to find the corners and edges of a document in the image, so that it can be cropped out from the background input output Các ví dụ thực tế Compute the intersections between the lines ( tìm giao điểm đường thẳng) Bài Tập (option) Bài toán: Nhập vào N đường thẳng (mỗi đường thẳng biễu diễn điểm Oxy) a) Liệt kê tất giao điểm đường thẳng b) Tìm góc giao điểm đường thẳng Các ví dụ thực tế ▪ Phân tích thừa số nguyên tố ứng dụng mật mã ▪ Thuật toán RSA Ron Rivest, Adi Shamir Len Adleman mô tả lần vào năm 1977 Học viện Công nghệ Massachusetts (MIT) ▪ Độ an toàn hệ thống RSA dựa vấn đề toán học: tốn phân tích thừa số ngun tố số nguyên lớn Ví dụ: 15 = * ▪ Năm 2009, để phân tích thành thừa số số có 232 chữ số (RSA-768) sử dụng hàng trăm máy tính hai năm https://www.calculatorsoup.com/calculators/math/prime-factors.php The limit on the input number to factor is less than 10,000,000,000,000 (less than 10 trillion or a maximum of 13 digits) Các ví dụ thực tế ▪ Search Algorithm (thuật tốn tìm kiếm) ▪ Goal: Nhanh, hiệu quả, tốn nhớ Ví dụ: Tìm từ điển để tra ý nghĩa từ ( English to Vietnamese) Tìm nội dung “thuật tốn xếp mảng” sách Tìm đường ngắn từ nhà tới trường thành phố ... 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ý... Engineer https://www.topitworks.com/blogs/cung-lam-viec-trong-nganh-phan-mem-programmer-coderdeveloper-va-engineer-khac-nhau-the-nao/ Các loại lỗi lập trình ❖ Code xong cho thực thi lỗi Lỗi cú... https://techmaster.vn/posts/1862/nghe-lap-trinh-va-nhung-su-that-it-nguoi-biet-toi Trích phần viết ▪ Lập trình cơng việc nào? Có phải lập trình viên người tối ngày ngồi trước hình máy tính? Cứ code giỏi sản phẩm tốt? … Lập trình