Câu lệnh lặp với điều kiện - while


Khi 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 không biết số lần lặp lại thì sao? Và điều này xảy ra khá thường xuyên.
Ví dụ: hãy nhớ chuyển đổi 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. 
Điều này được triển khai như thế nào?
Đối với những trường hợp như vậy trong lập trình, có một toán tử vòng lặp với một điều kiện. 
Trong ngôn ngữ lập trình Pascal, một câu lệnh lặp điều kiện bắt đầu bằng từ while và có cấu trúc như sau. trong khi <điều kiện> bắt đầu cơ thể vòng lặp kết thúc Như chúng ta đã biết:
- điều kiện là một biểu thức, kết quả của nó có thể đúng hoặc sai (như trong câu điều kiện)
- thân vòng lặp là các lệnh cần lặp lại
- Có thể bỏ qua bắt đầukết thúc nếu thân vòng lặp chỉ gồm một toán tử

Cách hoạt động của toán tử:
1. Đầu tiên, chương trình đánh giá điều kiện 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. Cũng giống như vòng lặp for, nếu thân vòng lặp chỉ chứa một câu lệnh thì có thể bỏ qua các từ bắt đầu và kết thúc làm nổi bật thân vòng lặp.
3. 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.
4. 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.
5. Nếu ở lần thực hiện đầu tiên của toán tử này, điều kiện chưa được thỏa mãn ngay (false) 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ụ: một vòng lặp có thể tăng giá trị của một biến được sử dụng trong một điều kiện.

Một ví dụ về chương trình mà chúng tôi 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ụ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.
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ẽ như thế này. var i: số nguyên; bắt đầu     writeln('Bắt đầu');     tôi := 1;     trong khi tôi <= 10 bắt đầu         ghi(i, ' ');         tôi += 1; //Toán tử tác động đến sự thay đổi của biến trong điều kiện         kết thúc;     writeln();     writeln('Kết thúc'); kết thúc. Trong chương trình này, chúng ta gán giá trị cho biến i := 1 - gốc
Hơn nữa, miễn là chúng ta có 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ị 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, tức là đến một lúc 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à writeln();
writeln('Kết thúc');

Hãy thử viết một chương trình để giải bài toán sau:

Bạn phải nhập một số (đặt số này nhỏ hơn 3.000.000) và xác định số chữ số trong đó.

Ý tưởng giải pháp


Hãy bắt đầu đếm các chữ số của một số. Ban đầu, bộ đếm là 0. Chúng ta chỉ cần cắt tuần tự 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 lên 1. 
Kết quả là sau khi cắt bỏ tất cả các chữ số, trong bộ đếm, chúng ta sẽ nhận được số chữ số trong số.
Theo một cách khác, thuật toán có thể được xây dựng như sau:
CHO ĐẾN KHI SỐ KHÔNG PHẢI LÀ SỐ 0, HÃY GIẢM SỐ NÓ 10 LẦN VÀ TĂNG SỐ ĐẾM LÊN 1. <đầu> Chương trình sẽ trông như thế này. var n, đếm: số nguyên; bắt đầu     đọc (n);     đếm := 0;     trong khi n <> 0 để bắt đầu         đếm += 1;         n := n div 10;     kết thúc;     writeln('Số - ', n, ' chứa ', đếm, ' chữ số'); kết thúc. 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ả