# Giáo án Lập trình C++ cơ bản - Định hướng thi HSG Tin học
Link các bài viết C++ cơ bản của thầy giáo được đính kèm ở từng bài!
## [Bài 1: Giới thiệu Lập trình thi đấu và ngôn ngữ lập trình C++ (1b)](https://viblo.asia/p/bai-1-gioi-thieu-lap-trinh-thi-dau-va-ngon-ngu-lap-trinh-c-oOVlYRDv58W)
- 1.1. Giới thiệu môn học Lập trình thi đấu.
- 1.2. Khái niệm về chương trình và lập trình.
- 1.3. Giới thiệu ngôn ngữ lập trình C++.
- 1.4. Cài đặt phần mềm Code::Blocks và tạo chương đầu tiên.
- 1.5. Cấu trúc một chương trình C++.
- 1.6. Toán tử số học và Toán hạng.
- 1.7. Một số loại toán tử khác trong C++ (đọc thêm).
## [Bài 2: Kiểu dữ liệu và Hằng - biến trong C++ (1b)](https://viblo.asia/p/bai-2-kieu-du-lieu-va-su-dung-hang-bien-trong-c-ByEZkA4A5Q0)
- 2.1. Các kiểu dữ liệu nguyên thủy.
- 2.2. Sử dụng từ khóa `define` và `typedef`.
- 2.3. Sử dụng hằng và biến. Giới thiệu về biến `auto` trong C++11.
- 2.4. Câu lệnh nhập xuất cơ bản trong C++.
- 2.5. Kĩ thuật ép kiểu.
- 2.6. Định dạng số thực trong C++.
- 2.7. Thứ tự ưu tiên toán tử và trật tự kết hợp toán tử (đọc thêm).
## [Bài 3: Cấu trúc rẽ nhánh (1b)](https://viblo.asia/p/bai-3-cau-truc-re-nhanh-1VgZvAgmKAw)
- 3.1. Khái niệm biểu thức logic.
- 3.2. Mệnh đề ***Nếu...thì*** và mệnh đề ***Nếu không...thì.***
- 3.3. Câu lệnh `if` và câu lệnh `if...else`.
- 3.4. Câu lệnh `if` lồng nhau và biểu thức logic gộp.
- 3.5. Sử dụng toán tử hỗn hợp thay cho câu lệnh `if...else`.
- 3.6. Cấu trúc lựa chọn `switch...case`.
## [Bài 4: Cấu trúc lặp (2b)](https://viblo.asia/p/bai-4-cau-truc-lap-924lJRe6lPM)
- 4.1. Khái niệm về "Lặp".
- 4.2. Câu lệnh for - Lặp với số lần biết trước.
- 4.3. Câu lệnh while - Lặp với số lần không biết trước.
- 4.4. Vòng lặp lồng nhau.
- 4.5. Các câu lệnh điều khiển vòng lặp.
- 4.6. Vòng lặp vô hạn.
## [Bài 5: Hàm trong C++ (2b)](https://viblo.asia/p/bai-4-cau-truc-lap-924lJRe6lPM)
- 5.1. Phân chia chương trình thành từng hàm.
- 5.2. Một số hàm toán học trong C++.
- 5.3. Hàm tự định nghĩa.
- 5.4. Tham số của hàm.
- 5.5. Biến toàn cục và Biến cục bộ.
## Bài luyện tập số 1 (1b)
## [Bài 6: Mảng một chiều (2b)](https://viblo.asia/p/bai-6-mang-mot-chieu-3P0lP8polox)
- 6.1. Khái niệm mảng một chiều.
- 6.2. Các thao tác cơ bản trên mảng một chiều.
- 6.3. Một số bài toán cơ bản trên mảng một chiều.
## [Bài 7: Mảng hai chiều (2b)](https://viblo.asia/p/bai-7-mang-hai-chieu-bJzKmAeYK9N)
- 7.1. Khái niệm và thao tác với mảng hai chiều.
- 7.2. Một số bài toán cơ bản trên mảng hai chiều.
## [Bài 8: Sử dụng mảng làm tham số hàm (1b)](https://viblo.asia/p/bai-8-su-dung-mang-lam-tham-so-cua-ham-RQqKLRd4l7z)
- 8.1. Sử dụng mảng làm tham số hàm.
## Bài 9: Tham chiếu, Địa chỉ và Con trỏ (1b)
- [9.1. Địa chỉ ảo, tham chiếu và con trỏ.](https://viblo.asia/p/bai-9-con-tro-phan-1-dia-chi-ao-tham-chieu-va-con-tro-trong-c-aWj53xqwK6m)
- [9.2. Hoạt động nâng cao với con trỏ trong C++.](https://viblo.asia/p/bai-9-con-tro-phan-2-hoat-dong-nang-cao-voi-con-tro-trong-c-oK9VyxBaLQR)
- 9.3. Những lỗi thường gặp khi sử dụng con trỏ (đọc thêm).
## [Bài 10: Chuỗi kí tự (2b)](https://viblo.asia/p/bai-10-xau-ki-tu-gDVK2rX0KLj)
- 10.1. Kí tự và Chuỗi kí tự.
- 10.2. Thư viện string trong C++.
- 10.3. Các thao tác cơ bản với chuỗi kí tự.
- 10.4. Một số kĩ thuật xử lý chuỗi kí tự.
- 10.5. Chuỗi kí tự theo phong cách C (đọc thêm).
## Bài luyện tập số 2 (1b)
## [Bài 11: Thuật toán và Phân tích thuật toán (1b)](https://viblo.asia/p/bai-11-thuat-toan-va-phan-tich-thuat-toan-bJzKmoxrl9N)
- 11.1. Thuật toán và Độ phức tạp thuật toán.
## [Bài 12: Hàm đệ quy (2b)](https://viblo.asia/p/bai-12-de-quy-va-ham-de-quy-Qbq5QRPwKD8)
- 12.1. Từ Quy nạp toán học tới Đệ quy.
- 12.2. Sơ lược về Công thức truy hồi.
- 12.3. Các thành phần của Hàm đệ quy.
- 12.4. Đệ quy đơn và Đệ quy nhị phân.
- 12.5. So sánh giữa cài đặt đệ quy và cài đặt không đệ quy.
## [Bài 13: Trừu tượng hóa dữ liệu (C++ `struct`) (2b)]()
- [13.1. Giới thiệu Cấu trúc (`struct`) và các thao tác cơ bản.](https://viblo.asia/p/bai-13-truu-tuong-hoa-du-lieu-phan-1-gioi-thieu-struct-va-cac-thao-tac-co-ban-1VgZvAm7KAw)
- [13.2. Cài đặt `struct` nâng cao: Hàm khởi tạo và Hàm thành viên.](https://viblo.asia/p/bai-13-truu-tuong-hoa-du-lieu-phan-2-cai-dat-struct-nang-cao-bWrZnAn9Kxw)
## Bài 14: Cấp phát bộ nhớ động và Danh sách liên kết (1b)
- [14.1. Kĩ thuật cấp phát bộ nhớ động.](https://viblo.asia/p/bai-14-cap-phat-bo-nho-dong-va-danh-sach-lien-ket-phan-1-ki-thuat-cap-phat-bo-nho-dong-EvbLbwYZVnk)
- [14.2. Danh sách liên kết.](https://viblo.asia/p/bai-14-cap-phat-bo-nho-dong-va-danh-sach-lien-ket-phan-2-danh-sach-lien-ket-linked-list-gwd43zvqVX9)
## Bài 15: Thư viện STL C++ (3b)
- [15.1. Tổng quan về thư viện STL C++: Mảng động (`vector`), Ghép cặp dữ liệu (`pair`) và Một số hàm tiện ích trong STL C++.](https://viblo.asia/p/bai-15-thu-vien-stl-c-phan-1-gioi-thieu-cac-thanh-phan-cua-stl-c-va-cac-tien-ich-co-ban-GrLZDr6n5k0)
- [15.2. Tập hợp (STL `set`).](https://viblo.asia/p/bai-15-thu-vien-stl-c-phan-2-tap-hop-set-va-mot-so-ung-dung-bWrZnQynKxw)
- [15.3. Ánh xạ (STL `map`).](https://viblo.asia/p/bai-15-thu-vien-stl-c-phan-3-anh-xa-mapdictionary-aWj53mbPZ6m)
## [Bài 16: Nhập xuất dữ liệu bằng file và Kĩ năng debug code (1b)](https://viblo.asia/p/bai-16-nhap-xuat-du-lieu-bang-file-va-ki-nang-debug-code-tren-codeblocks-924lJRnXlPM)
- 16.1. Nhập xuất dữ liệu bằng file.
- 16.2. Debug code từng dòng trong C++ bằng chức năng Debug của Code::Blocks.
## [Bài 17: Số học cơ bản](https://viblo.asia/p/bai-17-so-hoc-co-ban-tim-cac-uoc-cua-mot-so-nguyen-duong-va-gcd-lcm-RQqKL696l7z)
- 17.1. GCD - LCM và Tìm các ước của một số.
## Bài luyện tập số 3 (1b)
## Kiểm tra cuối khóa