[Tiếng Việt] Lập trình C++ - Phần 3: Một vài thứ cơ bản cho lập trình
Vòng lặp
Chúng ta có ví dụ về một bài toán in tổng các số từ 1 đến 10. Thay vì phải in từng con số, sau đó lại tính tổng thì chúng ta có cú pháp trong lặp trình C++ để hỗ trợ việc lặp lại có điều kiện nên số dòng code sẽ rút nhắn đáng kể.
Xem xét đoạn code sau:
Lúc này chương trình sẽ in ra giá trị là sẽ là 55. Trong chương trình main, ta tạo biến val để tăng giá trị và biến sum ban đầu bằng 0 để lưu trữ giá trị tổng. Với mỗi lần vòng lặp chạy, biến val sẽ tăng lên và được cộng dồn vào trong biến sum. Điều kiện đúng cho phép vòng lặp chạy cho đến khi điều kiện sai
Với while ta có cú pháp sau:
Mình sẽ giải thích từng bước của của vòng lặp. Đầu tiên, chúng ta khai báo biến điều kiện ở đây là val. Sau đó điều kiện (condition) sẽ được kiểm tra, nếu đúng điều kiện sẽ được chạy vào trong thân (body) vòng lặp, tiếp theo đó vòng lặp sẽ được thực hiện những lệnh lập trình. Trong các lệnh này, có một lệnh giúp tăng giá trị vòng lặp lên. Kết thúc đến cuối thân hàm, vòng lặp tạm ngưng để tăng giá trị, sau đó lại quay về bước kiểm tra giá trị, rồi tiếp tục thực hiện lại nếu đúng. Còn nếu sai, lúc này vòng lặp sẽ kết thúc.
Chúng ta cũng lưu ý bốn phép toán là phép gán =, phép nhỏ hơn hoặc bằng <=, phép toán tử tăng lên ngay trước ++ và phép toán cộng dồn +=. Với phép gán ta sẽ gán một giá trị vào biến sao cho cả hai có cùng một kiểu dữ liệu, phép nhỏ hơn hoặc bằng cho phép so sánh số bên trái phải lớn hơn phép bên phải mới trả kết quả là sai, đồng nghĩa rằng nhỏ hơn và bằng là kết quả đúng. Phép toán tăng lên ngay trước có nghĩa là biến val bằng 0, sau đó val được tăng lên sẽ tương đương với 1, cứ thế mà val sẽ tăng lên. Còn phép cộng dồn cho phép cộng dồn số bên phải vào số bên trái đang có.
Bây giờ chúng ta đi đến một ví dụ khác:
Giờ chúng ta nhận ra rằng chương trình này cũng sẽ trả lại kết quả là 55. Đây là vòng lặp for. Có những sự khác biệt nhẹ giữa vòng lặp này.
Chúng ta có cú pháp của for như sau:
Tương tự như vòng lặp while, nhưng các đặc điểm khác biệt của for là mọi thành phần đều nằm trong dòng for. Tất nhiên chúng ta viết dòng code trên thành 3 dòng tương tự như while (đoạn code thứ 2) nhưng hầu như chúng ta rất ít làm như vậy.
Lưu ý rằng: việc khai báo khởi tạo trên dòng for xuất hiện từ C++98, trước đó các việc tạo biến phải nằm bên ngoài và khởi tạo thì nằm trên dòng. Do đó nếu bạn đọc một vài quyển sách lập trình C++ cũ như Algorithm in C++ của giáo sư Robert Sedgewick sẽ thấy. Kể từ chuẩn C++98 việc tạo và khởi tạo giá trị có thể nằm trong for tuy nhiên điều này kéo theo việc biến này chỉ có tác dụng với for, sau khi kết thúc vòng lặp, biến này sẽ biến mất.
Lệnh điều kiện
Bây giờ ta xem xét một bài toán khác. Một chương trình cho phép nhập hai số nguyên, in ra số nhỏ hơn trước rồi in số lớn hơn tiếp theo.
Ta tạo hai biến tên là lower và upper để lưu hai giá trị nhỏ hơn và lớn hơn, sau đó ta xét hai biến xem v1 và v2 cái nào lớn hơn nhỏ hơn. Nếu v1 nhỏ hơn thì v1 là lower hoặc ngược lại v1 sẽ là upper. Sau đó gán hai giá trị nhỏ hơn và lớn hơn cho lower và upper tương ứng.
Hai từ khóa if và else dùng để chỉ nếu là ... hoặc ngược lại ... như ở giải thích trên. Ta có cú pháp, nếu điều kiện đúng sẽ thực hiện khối hàm đầu tiên, còn sai sẽ thực hiện khối hàm thứ hai:
Lưu ý rằng: trên thực tế tồn tại nhiều hơn hai điều, có khi là nhiều điều kiện. Chúng ta sẽ bàn về sâu chủ đề này trong một phần khác
Nhập số không cần biết số lượng cần phải nhập
Bây giờ ta có một chương trình cho phép nhập số nguyên không ngừng nghỉ, các số nguyên này sau đó được dùng để cộng dồn biến tính tổng.
Ta nhận thấy rằng hàm cin viết trong điều kiện vòng lặp while. Bạn có thể cho rằng, việc nhập số 0 có thể sẽ khiến chương trình ngừng lại khi điều kiện lúc này là while false. Tuy nhiên kết quả lúc này là while true lý do là vì điều kiện lúc này chính istream. Với istream hợp lệ (valid), đồng nghĩa với while luôn là true.
Vậy là để không hợp lệ, chúng ta sẽ nhập ký tự end of file (kết thúc file). Như vậy lúc này biến value là số nguyên, khi gặp ký tự này, istream không còn là số nguyên, sẽ trả kết quả là false. Với Windows ta nhập tổ hợp phím Ctrl + Z, với mac ta nhập Control + Z, để nhập ký tự này trong cửa sổ console.
Comments
Comments are closed