Hay kể tên các cấu trúc rẽ nhánh trong Pascal
Trong việc thực thi chương trình, các câu lệnh được thực hiện theo tuần tự, tức là thực hiện từ câu lệnh đầu tiên, lần lượt từng câu lệnh tiếp theo cho đến câu lệnh cuối cùng. Nhưng để linh hoạt và hiệu quả trong việc giải quyết vấn đề, các ngôn ngữ lập trình bậc cao đều có các cấu trúc rẽ nhánh và cấu trúc lặp cho phép chương trình không thực hiện theo trình tự thông thường. Trong bài này, thầy sẽ giới thiệu đến các em cấu trúc rẽ nhánh trong ngôn ngữ lập trình C++. Câu lệnh là đơn vị cơ bản của ngôn ngữ lập trình. Các câu lệnh giống như chỉ thị, hướng dẫn cho máy tính biết phải làm gì, xử lí dữ liệu thế nào. Câu lệnh có thể là câu lệnh đơn hoặc câu lệnh phức. Sau đây, thầy sẽ giới thiệu cho các em về hai khái niệm đó. Câu lệnh đơn (câu lệnh đơn giản) chỉ gồm 1 câu lệnh chỉ thị, hay nói cách khác là 1 câu lệnh chỉ hướng dẫn máy tính thực hiện 1 thao tác. Một số câu lệnh đơn phổ biến trong việc học như: int a; a = b + c; return 0; Như các em có thể thấy với mỗi câu lệnh trên, chương trình chỉ thực hiện một công việc. Bên cạnh đó còn các kiểu câu lệnh đơn khác, nhưng do không phổ biến trong việc học nên thầy không giới thiệu, các em có thể tìm hiểu thêm trên mạng. Câu lệnh phức (câu lệnh phức hợp) là các câu lệnh gồm nhiều lệnh chỉ thị, hay nói cách khác là một nhóm lệnh hướng dẫn máy tính thực hiện nhiều công việc. Ở đây, thầy sẽ giới thiệu cho em khái niệm khối lệnh. Một khối lệnh có cấu trúc như sau: { ; ; ... ; } Như vậy, khối lệnh có dạng nhiều câu lệnh được để trong { và }. Bên cạnh đó, các lệnh cấu trúc rẽ nhánh và cấu trúc lặp thầy sắp giới thiệu cũng là các câu lệnh phức. Để dễ dàng cho các em liên tưởng, thầy sẽ cho một số ví dụ sau. Ví dụ 1: Nếu trời mưa, tôi sẽ ở nhà. Ngược lại, tôi sẽ đi chơi. Ví dụ 2: ...Nếu là thỏ, Cho xem tai... ...Nếu là nai, Cho xem gạc... ...Nếu là gió, Xin mời vào... Các em có thể thấy ở các ví dụ trên, với các điều kiện/trường hợp khác nhau thì sẽ có những hành động khác nhau được thực hiện tương ứng. Đó là những ví dụ cho cấu trúc rẽ nhánh trong thực tế. Trong ngôn ngữ lập trình C++, ta dùng câu lệnh if và else hoặc câu lệnh switch-case để thiết lập việc đặt điều kiện, phân chia các trường hợp để cho chương trình thực hiện các câu lệnh tương ứng. Câu lệnh if và else có dạng đầy đủ như sau: if (<điều kiện>) else Tuy nhiên cũng có trường hợp không dùng đến phần else. Trong trường hợp đó, các em không cần viết phần else, và cấu trúc sẽ trở thành như sau: if (<điều kiện>) Trong đó <điều kiện> có thể là biểu thức quan hệ hoặc biểu thức logic. Câu lệnh if và else này sẽ được thực hiện như sau:
Có thể các em thấy hơi khó hiểu, nên thầy sẽ lấy ví dụ với chương trình sau đây: #include using namespace std; int main(){ int a, b; cout << "Nhap so thu nhat: "; cin >> a; cout << "Nhap so thu hai: "; cin >> b; if (a > b) //Nếu a lớn hơn b cout << "a lon hon b" << endl; //thì xuất ra màn hình "a lon hon b" else //ngược lại cout << "a khong lon hon b" << endl; //thì xuất ra màn hình "a khong lon hon b" return 0; } Do phần khai báo và nhập xuất thầy đã viết ở các bài trước (em nào quên thì phải coi lại nhé), nên ở đây, thầy chỉ giải thích cách hoạt của câu lệnh if và else. Trường hợp 1: Thầy sẽ nhập vào các giá trị cho a, b lần lượt là 9 và 1. Như các em thấy 9 lớn hơn 1, nên <điều kiện> có kết quả đúng. Trong trường hợp này, chương trình sẽ xuất ra màn hình dòng chữ: a lon hon b Sau đó, lệnh return 0; sẽ được thực hiện. Trường hợp 2: Thầy sẽ nhập vào các giá trị cho a, b lần lượt là 5 và 5. Như các em có thể thấy 5 không lớn hơn 5, nên <điều kiện> có kết quả sai. Trong trường hợp này, chương trình sẽ xuất ra màn hình dòng chữ: a khong lon hon b Sau đó, lệnh return 0; sẽ được thực hiện. Các em có thể thấy rằng, trong hai trường hợp trên, câu lệnh if và else đã làm cho chương trình không thực hiện các lệnh theo tuần tự mà rẽ thành hai nhánh cho hai trường hợp. Các em cũng có thể lồng ghép nhiều lệnh if và else vào nhau, nhưng cũng cần chú ý là else chỉ đi với if gần nó nhất mà chưa có cặp thôi nhé. Ví dụ: if (a>=b) if (a=b) cout << "a bang b" << endl; else cout << "a lon hon b" << endl; else cout << "a nho hon b" << endl; Nó tương đương với: if (a>=b) { if (a=b) cout << "a bang b" << endl; else cout << "a lon hon b" << endl; } else cout << "a nho hon b" << endl; Câu lệnh if-else chỉ cho phép các em rẽ hai nhánh lệnh. Nếu muốn rẽ thêm các nhánh lệnh cho nhiều trường hợp thì các em có thể lồng ghép nhiều lệnh if-else vào nhau, như vậy sẽ gây khó khăn cho các em việc đọc và dò lỗi. Thật may mắn là bên cạnh câu lệnh if-else, các ngôn ngữ lập trình bậc cao thường có thêm câu lệnh switch cho phép chương trình chọn một trong nhiều nhánh lệnh để thực hiện. Câu lệnh switch trong ngôn ngữ lập trình C++ có cấu trúc như sau: switch () { case: <(các) câu lệnh>; break; case: <(các) câu lệnh>; break; ... case: <(các) câu lệnh>; break; default: <(các) câu lệnh>; } Thầy sẽ giải thích về cấu trúc trên:
Dưới đây, thầy sẽ cho một chương trình ví dụ để giải quyết bài toán sau: Nhập điểm kiểm tra (A, B, C, D hoặc F). Nếu điểm A, xuất ra màn hinh "Gioi"; nếu điểm B và C, xuất ra màn hình "Kha"; nếu điểm D, xuất ra màn hình "Trung binh"; nếu điểm F, xuất ra màn hình "Yeu"; nếu dữ liệu nhập vào không thỏa điều kiện đề bài, xuất ra màn hình "Xay ra loi". #include; using namespace std; int main(){ char diem; cout << "Nhap diem kiem tra: "; cin >> diem; if (diem>='a') diem-=32; //In hoa kí tự nếu kí tự là chữ in thường switch (diem){ case 'A': cout << "Gioi" << endl; break; case 'B': case 'C': cout << "Kha" << endl; break; case 'D': cout << "Trung binh" << endl; break; case 'F': cout << "Yeu" << endl; break; default: cout << "Xay ra loi" << endl; } return 0; } Thầy sẽ giải thích một số điều mới và câu lệnh switch trong ví dụ trên: Điều mới:
= Có ý nghĩa là thực hiện phép toán giữa giá trị của và sau đó gán lại vào , ở ví dụ trên, thầy đã dùng: diem-=32; Với ý nghĩa là trừ giá trị của diem đi 32 đơn vị và gán giá trị đó vào diem.
Câu lệnh switch:
|