Bài giảng Kỹ thuật lập trình - Giới thiệu môn học - Trịnh Tấn Đạt

Đánh giá môn học ▪ Điểm quá trình: 50% o Điểm lý thuyết: ✓ Chuyên cần, thảo luận : được thêm điểm thưởng ✓ Kiểm tra giữa kỳ: 1 bài ✓ Đ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 +2đ. • Nếu đã đăng ký mà không làm sẽ bị trừ -1đ. o Điểm thực hành : ✓ Chuyên cần, thảo luận : được thêm điểm thưởng ✓ Kiểm tra thực hành: cho bài tập về nhà làm trong vòng 2 hoặc 3 tuần. Sau đó sẽ thảo luận và vấn đáp trong 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

pdf15 trang | Chia sẻ: thanhle95 | Lượt xem: 511 | Lượt tải: 1download
Bạn đang xem nội dung tài liệu Bài giảng Kỹ thuật lập trình - Giới thiệu môn học - Trịnh Tấn Đạt, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
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 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ỉ: 3 (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 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 hoà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: hoàn thiện các kỹ năng về lập trình như: Phân tích vấn đề bài toá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 ▪ 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 và 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 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 https://www.cprogramming.com/tutorial/c-tutorial.html o o Stackoverflow: https://stackoverflow.com/ o GeeksforGeeks : https://www.geeksforgeeks.org/ o Google, Bing, Baidu, Đánh giá môn học ▪ Điểm quá trình: 50% o Điểm lý thuyết: ✓ Chuyên cần, thảo luận : được thêm điểm thưởng ✓ Kiểm tra giữa kỳ: 1 bài ✓ Đ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 +2đ. • Nếu đã đăng ký mà không làm sẽ bị trừ -1đ. o Điểm thực hành : ✓ Chuyên cần, thảo luận : được thêm điểm thưởng ✓ Kiểm tra thực hành: cho bài tập về nhà làm trong vòng 2 hoặc 3 tuần. Sau đó sẽ thảo luận và vấn đáp trong 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ứ 3 của 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 và run chương trình. (dựa vào các ví dụ) • Trình bày (powerpoint): ❑ Sơ lược ý chính lý thuyết ❑ Ý tưởng giải quyết(thuật toán, thuật giải) bài toán ❑ Kết quả ❖ Số lượng thành viên 2 hoặc 3 sinh viên Danh sách các đề tài: (sẽ cập nhật thêm trên website) 1. Thuật toán quay lui (Backtracking) và bài toán 8 hậu, mã đi tuần 2. Thuật toán nhánh cận và ứng dụng (ít nhất 3 ví dụ) 3. Thuật toán tham lam và ứng dụng (ít nhất 3 ví dụ) 4. Thuật toán leo đồi (Hill Climbing) và ứng dụng 5. Thuật toán luyện kim (Simulated Annealing) và ứng dụng 6. Tabu Search và ứng dụng 7. Tối ưu bầy đàn (Particle 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 toán Dynamic Time Warping (dựa trên quy hoạch động) 11. Thuật toán gradient descent và ứng dụng 12. Ma trận thưa và Thuật toán nhân (nhanh) hai ma trận thưa 13. Sum-area Table (Integral Image) và ứng dụng 14. Tìm hiểu về Standard Template Library (containers, iterators, algorithms) trong C++ và các ví dụ Nghề lập trình và những sự thật í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 một phần bài viết ▪ Lập trình là một công việc như thế nào? Có phải lập trình viên là những người tối ngày ngồi trước màn hình máy tính? Cứ code giỏi thì sản phẩm sẽ tốt? Lập trình là một lĩnh vực mà nếu không phải trong nghề thì thật khó thấu hiểu những nỗi “trần ai” trong đó. Sau đây, kĩ sư công nghệ thông tin David Veksler – chủ trang blog The Rational Mind – sẽ chia sẻ cho chúng ta những sự thật ít ai biết về nghề IT – nghề lập trình: Chỉ 10-20% thời gian của toàn bộ dự án được các lập trình viên sử dụng để viết code, và bất kể trình độ, mỗi ngày 1 lập trình viên chỉ viết trung bình từ 10-20 dòng code. Sự khác biệt giữa tay chuyên và gà mờ đó là tay chuyên thì dành 90% thời gian để suy luận, tìm tòi và thử nghiệm các phương án tối ưu nhất cho mình; còn những gà mờ thì dành 90% thời gian để debug, thay đổi vài chỗ trong code, lại debug và mong đến một lúc nào đó chương trình sẽ hoạt động. Coder, Programmer, Developer và Engineer https://www.topitworks.com/blogs/cung-lam-viec-trong-nganh-phan-mem-programmer-coder- developer-va-engineer-khac-nhau-the-nao/ Các loại lỗi trong lập trình ❖ Code xong và cho thực thi thì hiện lỗi 1. Lỗi cú pháp (Syntax Error): Hay còn gọi là lỗi biên dịch (Compiler error) Đây là loại lỗi sơ đẳng nhất trong lập trình. Thường là do bạn gõ sai cấu trúc của ngôn ngữ (ví dụ như thiếu dấu kết thúc một câu lệnh, một số ngôn ngữ từ khoá phân biệt chữ hoa, chữ thường thì lại gõ chữ hoa, v.v. gọi nôm na là lỗi chính tả). Chương trình sẽ không thể biên địch được khi gặp lỗi này. Các trình biên dịch sẽ khi biên dịch code, khi gặp lỗi ở dòng code nào thì sẽ báo lỗi. 2. Lỗi thực thi (Runtime error): Xảy ra bất ngờ khi chương trình đang chạy Loại lỗi này thường xảy ra do người lập trình viết code ẩu, không lường hết các trường hợp xảy ra, khiến chương trình đang chạy thì bị lỗi treo màn hình, thoát khỏi chương trình hoặc thoát luôn chương trình, v.v. Lỗi này có thể dễ dàng phát hiện bằng cách Debug. 3. Lỗi logic (khó phát hiện nhất) : Đây là lỗi do tư duy sai, thuật toán sai dẫn đến sai kết quả ❖ Code xong, chạy tốt nhưng không hiểu tại sao??? - Copy code từ các nguồn có sẵn nhưng ko đọc hiểu code. - Nghĩ tới đâu, code và 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 của hàm. Từ bài toán đến chương trình Bài toán thực tế Giải thuật tốt/tối ưu Giải thuật - Dùng Mã giả (Pseudocode) - Dùng flowchart Thiết kế Đánh giá Coding - Mô hình toán - Chọn kiểu dữ liệu, cấu trúc dữ liệu - Thiết kế giải thuật Phân tích, đánh giá thuật toán -Độ phức tạp - Cải tiến thuật toán 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 giữa các đườ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 được biễu diễn bằng 2 điểm trong Oxy) a) Liệt kê tất cả giao điểm của các đường thẳng. b) Tìm góc tại giao điểm của các đường thẳng Các ví dụ thực tế ▪ Phân tích thừa số nguyên tố và ứng dụng trong mật mã. ▪ Thuật toán RSA được Ron Rivest, Adi Shamir và Len Adleman mô tả lần đầu tiên vào năm 1977 tại Học viện Công nghệ Massachusetts (MIT) ▪ Độ an toàn của hệ thống RSA dựa trên 1 trong những vấn đề của toán học: bài toán phân tích ra thừa số nguyên tố các số nguyên lớn. Ví dụ: 15 = 3 * 5 ▪ Năm 2009, để phân tích thành thừa số một số có 232 chữ số (RSA-768) sử dụng hàng trăm máy tính đã mất 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 toán tìm kiếm) ▪ Goal: Nhanh, hiệu quả, ít tốn bộ nhớ. Ví dụ: Tìm trong từ điển để tra ý nghĩa một từ ( English to Vietnamese) Tìm nội dung “thuật toán sắp xếp trên mảng” trong một quyển sách Tìm đường đi ngắn nhất từ nhà tới trường trong một thành phố
Tài liệu liên quan