(C++) Câu lệnh lặp có điều kiện - while


Một vòng lặp có điều kiện. Câu lệnh while
Nghiên cứu vòng lặp for, chúng tôi đã nói rằng nếu biết số lần lặp lại của bất kỳ hành động nào, thì bạn có thể rút ngắn chương trình bằng toán tử vòng lặp for. Nhưng nếu số lần lặp lại không xác định thì sao? Và điều này xảy ra khá thường xuyên.
 
Ví dụ
Ghi nhớ bản dịch của một số từ hệ thống số thập phân sang bất kỳ hệ thống số nào khác, chúng ta cần chia số (và sau đó là kết quả của phép chia) cho cơ số của hệ thống số cho đến khi chúng ta nhận được số 0 trong câu trả lời. Bao nhiêu lần chúng tôi sẽ chia sẻ là không biết. Và có khá nhiều chương trình thực hiện thuật toán như vậy. 

Làm cách nào để triển khai thuật toán nếu chúng ta không biết chính xác số lần lặp lại?

Đối với những trường hợp như vậy trong lập trình, có một câu lệnh lặp kèm theo một điều kiện. 
Trong ngôn ngữ lập trình Python, một câu lệnh vòng lặp có điều kiện bắt đầu bằng từ while và có cấu trúc như sau.
while (<condition>) 
{
  thân vòng lặp
}

Như chúng ta đã biết:
- điều kiện là một biểu thức có thể cho kết quả đúng hoặc sai (như trong câu điều kiện);
- thân vòng lặp là các lệnh được lặp lại, chúng được thụt vào.

Người vận hành hoạt động như thế nào?
1. Đầu tiên, chương trình đánh giá điều kiện trong ngoặc sau từ while. Nếu điều kiện được đáp ứng (đúng), thì chương trình sẽ thực hiện (các) câu lệnh chứa trong thân vòng lặp.
2. Sau khi thực hiện xong thân vòng lặp, chương trình quay lại kiểm tra điều kiện và kiểm tra lại.
3. Các thao tác này (kiểm tra điều kiện - thực hiện thân vòng lặp) được lặp lại cho đến khi điều kiện trở thành sai.
4. Nếu điều kiện không được đáp ứng ngay (sai) trong lần thực hiện đầu tiên của câu lệnh này, thì chương trình sẽ không bao giờ thực hiện thân vòng lặp.

Phân tích công việc của toán tử này, sẽ thấy rõ rằng thân vòng lặp phải chứa một toán tử ảnh hưởng đến điều kiện.
Ví dụ: trong một vòng lặp, giá trị của một biến được sử dụng trong một điều kiện có thể tăng lên.

Một ví dụ về chương trình mà chúng tôi sẽ gọi là "Đếm im lặng".
Hãy để chương trình đếm thay vì chúng ta, chẳng hạn đến 10.
Chương trình sẽ xuất ra các cụm từ "Bắt đầu" và "Finish", và giữa các hành động này sẽ hiển thị các số đang được tính toán.

Ví dụ như thế này:
Bắt đầu
1 2 3 4 5 6 7 8 9 10
kết thúc

Một chương trình sử dụng vòng lặp while sẽ trông như thế này: #include<iostream> sử dụng không gian tên std; chủ yếu() { int tôi; cout << "Bắt đầu\n"; tôi = 1; trong khi(i <= 10) { cout << tôi << " "; tôi ++; // Toán tử tác động đến sự thay đổi của biến trong điều kiện } cout << "\nKết thúc"; }
Trong chương trình này, chúng ta gán giá trị cho biến i = 1 - điểm bắt đầu.
Ngoài ra, miễn là giá trị của biến i không lớn hơn (nghĩa là nhỏ hơn hoặc bằng) giá trị mà chúng ta cần, thì chúng ta: 
 1. hiển thị giá trị của biến i;
 2. tăng giá trị của biến i lên 1 - toán tử này ảnh hưởng đến giá trị của điều kiện trong ngoặc. Biến i được tăng lên, nghĩa là tại một thời điểm nào đó, điều kiện i <= 10 sẽ trở thành sai. Điều này sẽ xảy ra khi i trở thành 11. Trong trường hợp này, thân vòng lặp sẽ không được thực thi nữa và chương trình sẽ thực hiện câu lệnh tiếp theo sau vòng lặp, tức là cout << "\nKết thúc".

Nhiệm vụ
Bạn phải nhập một số (hãy để nó nhỏ hơn 3.000.000) và xác định số chữ số trong đó.
 
Ý tưởng giải pháp
Chúng ta chỉ cần tuần tự cắt bỏ chữ số cuối cùng của một số (điều này có thể được thực hiện bằng cách giảm số đó đi 10 lần, sử dụng phép chia số nguyên cho 10) và mỗi lần chúng ta cần tăng bộ đếm. 

Kết quả là sau khi cắt hết các chữ số của dãy số, ta sẽ được dãy số của chúng trong quầy.

Thuật toán này có thể được xây dựng như sau:
Cho đến khi số bằng 0, hãy giảm số đó đi 10 và tăng bộ đếm lên 1 mỗi lần.
  <đầu>
Chương trình sẽ trông như thế này. #include<iostream> sử dụng không gian tên std; chủ yếu() { intn, đếm; cin>> N; đếm = 0; trong khi (n != 0) { đếm ++; n = n/10; } cout << "Số-" << n<< " chứa " << đếm << " chữ số";   } Bạn cần phải biết chương trình này bằng trái tim, bởi vì. trên cơ sở của nó, nhiều vấn đề khác liên quan đến việc tính toán các số bằng chữ số được giải quyết.

số (n) bộ đếm
123 0
12 1
1 2
0 3

Nhiệm vụ

Đầu vào của chương trình là dòng dữ liệu — một dãy các số nguyên kết thúc bằng 0 (dãy không chứa số 0). Bạn cần tìm tổng các phần tử của dãy này.
 
Thuật toán giải
tổng = 0 nhập x // nhập số đầu tiên trong khi x != 0 // dấu kết thúc đầu vào được đặt trong điều kiện,  nc // tức là cho đến khi bạn nhập số 0    sum = sum + x // bạn có thể làm gì đó với số ban đầu. // Bạn có thể thêm một số kiểm tra cho một số điều kiện, v.v.    input x // nhập số tiếp theo kts in tổng // xuất kết quả