📘 CHUYÊN ĐỀ 3: CẤU TRÚC ĐIỀU KIỆN & CÁC HÀM TỐI ƯU (MAX, MIN, SWAP)
1. Cấu trúc rẽ nhánh (If, Else If, Else)
- Định nghĩa: Giúp chương trình thực hiện các lệnh khác nhau dựa trên kết quả đúng/sai của một điều kiện.
- Cú pháp:
C++if (điều kiện 1) { // Tập lệnh 1 (Thực hiện khi ĐK1 đúng) } else if (điều kiện 2) { // Tập lệnh 2 (Thực hiện khi ĐK1 sai và ĐK2 đúng) } else { // Tập lệnh cuối (Thực hiện khi tất cả các ĐK trên đều sai) } - Lưu ý: Ngay khi một nhánh được thỏa mãn, các nhánh còn lại sẽ bị bỏ qua.
2. Hệ thống Toán tử Điều kiện
Để máy tính "so sánh", ta sử dụng các toán tử sau:
| Nhóm | Toán tử | Ý nghĩa | Ví dụ |
|---|---|---|---|
| So sánh | == , != |
Bằng, Khác | a == 10 |
>, < |
Lớn hơn, Bé hơn | b < 5 |
|
>=, <= |
Lớn/Bé hơn hoặc bằng | x >= y |
|
| Logic | && (AND) |
VÀ: Tất cả phải đúng | (a>0 && b>0) |
|| (OR) |
HOẶC: Chỉ cần 1 cái đúng | (a==0 || b==0) |
|
! (NOT) |
PHỦ ĐỊNH: Đảo ngược giá trị | !(a > b) \(\rightarrow\) \(a \le b\) |
3. Bộ ba hàm quyền lực: MAX, MIN, SWAP
Trong C++, thay vì viết if-else dài dòng để so sánh, ta dùng các hàm có sẵn:
max(a, b)/min(a, b): Trả về số lớn nhất/nhỏ nhất giữa 2 số.max({a, b, c, d}): Trả về số lớn nhất trong một tập hợp (dùng dấu ngoặc nhọn{}).swap(a, b): Hoán đổi giá trị của 2 biến.- Ví dụ:
a=3, b=5\(\xrightarrow{swap}\)a=5, b=3.
- Ví dụ:
4. Tư duy "Xác định vị trí" (Sorting by Swap)
Đây là kỹ thuật cơ bản để sắp xếp một dãy số mà không cần dùng thuật toán phức tạp.
Mục tiêu: Sắp xếp \(a, b, c, d\) giảm dần (\(a \ge b \ge c \ge d\)).
- Bước 1 (Chốt chặn \(a\)): So sánh \(a\) với tất cả các số còn lại. Nếu thấy số nào lớn hơn \(a\), lập tức
swapđể đưa số lớn nhất về vị trí \(a\). - Bước 2 (Chốt chặn \(b\)): Lúc này \(a\) đã là số lớn nhất, không động vào nữa. So sánh \(b\) với \(c, d\) để đưa số lớn thứ hai về \(b\).
- Bước 3 (Chốt chặn \(c\)): So sánh \(c\) với \(d\). Nếu \(d > c\) thì
swap.
5. Ứng dụng: Bài toán phân loại Tam giác
Cho 3 cạnh \(a, b, c\).
Điều kiện tồn tại:
\[a + b > c \text{ vòng và } a + c > b \text{ vòng và } b + c > a\]
Phân loại (Sử dụng If - Else If):
- Tam giác đều: Cả 3 cạnh bằng nhau (
a == b && b == c). - Tam giác cân: Có ít nhất 2 cạnh bằng nhau (
a == b || b == c || a == c). - Tam giác vuông: Thỏa mãn định lý Pytago (\(a^2 + b^2 = c^2\) hoặc \(a^2 + c^2 = b^2\) hoặc \(b^2 + c^2 = a^2\)).
- Tam giác thường: Không thuộc các loại trên.
Mẹo lập trình: Để kiểm tra tam giác vuông nhanh hơn, hãy dùng
swapđể đưa cạnh lớn nhất về biến \(c\). Khi đó chỉ cần kiểm tra 1 trường hợp duy nhất:if (a*a + b*b == c*c).
Bài học này là nền tảng để bạn bước vào các bài toán tối ưu hóa và cấu trúc dữ liệu phức tạp hơn. Chúc bạn học tốt!
```
Bình luận