조건이 있는 루프 문 - while


for 루프를 연구할 때 어떤 작업의 반복 횟수를 알면 for 루프 연산자를 사용하여 프로그램을 단축할 수 있다고 말했습니다. 그러나 반복 횟수를 알 수 없다면 어떻게 될까요? 그리고 이것은 꽤 자주 발생합니다.
예를 들어, 숫자를 십진수 체계에서 다른 숫자로 변환하는 것을 기억해 봅시다. 답이 0이 될 때까지 숫자(그리고 나눗셈의 결과)를 숫자 체계의 밑수로 나누어야 합니다. 몇 번이나 공유할지는 알 수 없습니다. 그리고 그러한 알고리즘을 구현하는 프로그램이 꽤 많이 있습니다. 
이것은 어떻게 구현됩니까?
프로그래밍에서 이러한 경우를 위해 조건이 있는 루프 연산자가 있습니다. 
파스칼 프로그래밍 언어에서 조건부 루프 문은 단어 while으로 시작하며 다음과 같은 구조를 갖습니다. <예비> while <조건> 시작하다 루프 본체 종료 이미 알고 있듯이:
- 조건은 조건문에서와 같이 결과가 참 또는 거짓일 수 있는 표현식입니다.
- 루프 본문은 반복해야 하는 명령입니다.
- beginend는 루프 본문이 하나의 연산자로만 구성된 경우 생략할 수 있습니다.

운영자 작동 방식:
1. 먼저 프로그램은 while이라는 단어 뒤의 조건을 평가합니다. 조건이 충족되면(참) 프로그램은 루프 본문에 포함된 명령문을 실행합니다.
2. for 루프에서와 같이 루프 본문이 하나의 명령문만 포함하는 경우 루프 본문을 강조하는 시작 및 끝 단어를 생략할 수 있습니다.
3. 루프 본체의 실행이 완료되면 프로그램이 돌아와 조건을 확인하고 다시 확인합니다.
4. 이러한 작업(조건 확인 - 루프 본문 실행)은 조건이 거짓이 될 때까지 반복됩니다.
5. 이 연산자를 처음 실행할 때 조건이 즉시 충족되지 않으면(false) 프로그램은 루프 본문을 실행하지 않습니다.

이 연산자의 작업을 분석하면 루프 본문에 조건에 영향을 주는 연산자가 포함되어야 한다는 것이 분명해집니다.
예를 들어 루프는 조건에 사용된 변수의 값을 증가시킬 수 있습니다.

"Silent count"라고 부르는 프로그램의 예
예를 들어 최대 10까지 우리 대신 프로그램을 세도록 합시다.
프로그램은 "시작" 문구를 출력해야 합니다. 및 "마침", 그리고 이러한 작업 사이에 계산 중인 숫자가 표시됩니다.
이와 같이 
시작
1 2 3 4 5 6 7 8 9 10
마침
while 루프를 사용하는 프로그램은 다음과 같습니다. <예비> var i: 정수; 시작하다     writeln('시작');     나는 := 1;     while i <= 10 do 시작         write(i, ' ');         i += 1; //조건에서 변수의 변화에 ​​영향을 주는 연산자         끝;     writeln();     writeln('마침'); 종료합니다. 이 프로그램에서는 변수 i에 값을 할당합니다. i := 1 - the origin
또한 변수 i의 값이 우리가 필요로 하는 값보다 크지 않은(즉, 작거나 같은 경우) 우리는  
 1 - 변수 i의 값 표시 
 2 - 변수 i의 값을 1씩 증가 - 이 연산자는 괄호 안의 조건 값에 영향을 줍니다. 변수 i는 증가합니다. 즉, 어떤 시점에서 조건 i<=10은 거짓이 됩니다. 이것은 i가 11이 될 때 발생합니다. 이 경우 루프 본문은 더 이상 실행되지 않으며 프로그램은 루프 다음에 다음 명령문을 실행합니다. writeln();
writeln('마침');

다음 문제를 해결하는 프로그램을 작성해 봅시다.

숫자를 입력하고(3,000,000 미만) 숫자의 자릿수를 결정해야 합니다.

솔루션 아이디어


숫자의 자릿수 카운터를 시작합시다. 처음에 카운터는 0입니다. 숫자에서 마지막 숫자를 순차적으로 잘라내면 됩니다(이는 정수 나누기를 10으로 사용하여 숫자를 10배 줄임으로써 수행할 수 있음). 1. 
결과적으로 모든 자릿수를 잘라낸 후 카운터에서 숫자의 자릿수를 얻습니다.
다른 방법으로 알고리즘은 다음과 같이 공식화할 수 있습니다.
숫자가 0이 될 때까지 10번 줄이고 카운터를 1 늘립니다. <헤드> <몸> 프로그램은 다음과 같습니다. <예비> var n, 개수: 정수; 시작하다     읽기(엔);     카운트 := 0;     n <> 시작하려면 0         카운트 += 1;         n := n div 10;     끝;     writeln('Number - ', n, ' contains ', count, ' digits'); 끝. 이 프로그램을 마음으로 알아야 합니다. 이를 바탕으로 자릿수 계산과 관련된 다른 많은 문제가 해결됩니다.

숫자(n) 카운터
123 0
12 1
1 2
0 3

작업

프로그램의 입력은 데이터 스트림입니다. 0으로 끝나는 정수 시퀀스(0은 시퀀스에 포함되지 않음). 이 시퀀스 요소의 합을 찾아야 합니다.
 
해결 알고리즘
<예비> 합계=0 입력 x // 첫 번째 숫자 입력 while x != 0 // 입력 종료 기호가 조건에 설정됨,  nc // 즉, 0을 입력할 때까지    sum = sum + x // 원래 숫자로 무언가를 할 수 있습니다. // 어떤 조건 등에 대해 숫자 검사를 추가할 수 있습니다.    input x // 다음 숫자 입력 kts 합계 출력 // 결과 출력