📘 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.

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):

  1. Tam giác đều: Cả 3 cạnh bằng nhau (a == b && b == c).
  2. Tam giác cân: Có ít nhất 2 cạnh bằng nhau (a == b || b == c || a == c).
  3. 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\)).
  4. 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

Mới nhất
Tải bình luận...

Không có bình luận nào.