Mục tiêu: Học phần nhằm giảng dạy các kiến thức cơ bản về lập trình: khái niệm thuật toán, lệnh nhập/xuất dữ liệu, lệnh gán, các biểu thức, các cấu trúc điều khiểnrẽ nhánh, cấu trúc l
Trang 1Cơ Sở 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/
Trang 2Nội dung
Giới thiệu môn học
Nội dung môn học
Đánh giá
Tài liệu tham khảo
Trao đổi và thảo luận
Trang 3Giới Thiệu
Tên học phần: Cơ sở lập trình
Mã môn học : 841020
Số tín chỉ: 3 (2,1)
Số tiết: 60 tiết (lí thuyết : 30 tiết ; thực hành: 30 tiết)
Mô tả học phần
o Học phần gồm 06 chương, trình bày các kiến cung cấp cho người học kiến thức cơ bản về ngôn
ngữ lập trình C/C++
o Học phầngiảng dạy các kỹ năng tư duy lập trình, kỹ năng soạn thảo chương trình và xử lý lỗi
chương trình
Mục tiêu: Học phần nhằm giảng dạy các kiến thức cơ bản về lập trình: khái niệm thuật toán,
lệnh nhập/xuất dữ liệu, lệnh gán, các biểu thức, các cấu trúc điều khiển(rẽ nhánh, cấu trúc lặp),
chương trình con, mảng, kiểu dữ liệu có cấu trúc và rèn luyện tư duy lập trình, các kỹ năng
phân tích, thiết kế một số bài toán cơ bản, soạn thảo chương trình và xử lý sửa lỗi chương trình cũng như hình hành các thái độ học tập chăm chỉ, nghiêm túc, trung thực và sáng tạo cho
sinh viên
Trang 4Nội dung môn học
Giới thiệu
Chương 1: Thuật toán
Chương 2: Giới thiệu ngôn ngữ C/C++
Chương 3: Các cấu trúc điều khiển
Chương 4: Chương trình con và Hàm
Chương 5: Mảng
Chương 6: Struct
Trang 5Giới Thiệu
Tài liệu tham khảo:
Tài liệu chính
Bài giảng của giảng viên
[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] Trần Đan Thư, Nguyễn Thanh Phương, Đinh Bá Tiến, Trần Minh Triết,“Nhập môn lập trình”, Trường ĐH KHTN ĐHQG TPHCM, 2011
[4] Wikibooks.org, “C Programming”
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 http://www.eskimo.com/~scs/cclass/notes/top.html
o Stackoverflow: https://stackoverflow.com/
o GeeksforGeeks : https://www.geeksforgeeks.org/
o Google, Bing, …
Trang 6Đá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 : 5%
Kiểm tra giữa kỳ: 20 % (làm bài thi trên giấy)
o Điểm thực hành :
Chuyên cần, thảo luận : 5%
Kiểm tra thực hành: 20 % (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, không dùng tài liệu : 90 phút ( câu hỏi từ ngân hàng đề thi)
Điểm thưởng: trả lời câu hỏi, lên bảng làm bài tập, …
Trang 7Yêu cầu đối với sinh viên
Chuyên cần: Sinh viên cần phải tham dự lớp với ít nhất 80% số buổi học
Chuẩn bị cho bài giảng: Sinh viên cần chuẩn bị đọc bài trước ở nhà theo kế hoạch
học tập của học phần mà giảng viên đã thống nhất;
Thảo luận: Theo các câu hỏi mà giảng viên nêu ra trong các buổi học;
Kiểm tra giữa kì, kiểm tra thực hành và thi cuối học kỳ: Sinh viên không dự thi
sẽ bị tính điểm không;
Thái độ: Học tập chăm chỉ, tuân thủ, tự học và tự trao dồi kiến thức
Trang 8Nghề 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
Trang 9Coder, Programmer, Developer and Engineer
https://www.topitworks.com/blogs/cung-lam-viec-trong-nganh-phan-mem-programmer-coder-developer-va-engineer-khac-nhau-the-nao/
Trang 11Cá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
Trang 12Cá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)
Trang 13Cá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ố
Trang 14Các ví dụ thực tế
Super Resolution Algorithm
Goal: tăng độ phân giải và chất lượng của hình ảnh
Ví dụ: 8K 65 inch QLED TV Q900R with 8K AI Upscaling
https://www.samsung.com/uk/tvs/qledtv-q900r/QE65Q900RATXXU/
Trang 15Các ví dụ thực tế
Neural Style Transfer Algorithm
Goal: biến đổi hình ảnh theo phong cách nghệ thuật