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