매개변수가 있는 주기는 "알고리즘 유형" 항목의 "알고리즘" 섹션에서 이미 고려되었습니다.
매개변수가 있는 루프가 사용됩니다.루프가 실행되어야 하는 횟수를 미리 알고 있을 때.

주기 기록 형식:

여기 ~을 위해, ~을 위해- 예약어(for, before, perform);

<пар. цикла> - 주기 매개변수 - 변수 정수유형(정수 유형);
<нач. знач.> - 초기값 - 숫자 또는 변수정수유형(정수 유형);
<кон. знач.> - 최종 값 - 숫자 또는
변하기 쉬운정수유형(정수 유형);
<оператор> 임의의 파스칼 연산자입니다.

예시: i:=1 ~ n의 경우<оператор>
여기서 i는 루프 매개변수입니다.
1 - 초기 값
n - 최종 값
루프 본문에 여러 연산자가 사용되는 경우 시작 ... 끝과 같은 연산자 대괄호가 사용됩니다.
for 문을 실행할 때 표현식이 먼저 평가됩니다.<нач.знач.>루프 변수에 값 할당<пар.цикла> := <нач. знач.>. 다음은 비교<пар.цикла>그리고 <кон.знач.>. 동일해질 때까지 명령문이 실행됩니다. 루프 변수 값<нач.знач>루프 동안 자동으로 1씩 증가합니다.이 연산자에서 1 이외의 사이클 단계를 설정하는 것은 불가능하다는 점에 즉시 유의해야 합니다.
예시:
다음 루프 문이 가능합니다.

1) i에 대해:= 1에서 n은 s1을 수행합니다.

2) i:= 3에서 10에 대해 s1을 수행합니다.

3) i의 경우:= a에서 b는 s1을 수행합니다.

4) i:= a에서 b까지
시작하다

s1;
s2;
...
sn

끝;

여기서 s1, s2, s3, ... sn은 루프 연산자입니다.

예시:
1부터 10까지의 숫자를 출력하는 프로그램을 작성하세요.

예시:
숫자 n의 계승을 계산하는 프로그램을 작성하십시오. 즉, n!. (0!=1)

프로그램 설명:
변수 n은 팩토리얼을 찾는 사용자가 입력한 숫자에 대한 것입니다. f - 숫자 n의 계승값이 "누적"되는 변수. i - 루프 변수.
변수 f:= 1의 초기값이 설정됩니다.
그런 다음 주기가 시작됩니다. 변수 i는 1로 초기화됩니다. 그것은 마지막과 비교됩니다 - n (1<= n), если условие истинно, тогда выполняется оператор (в этой программе он один): f:= f*i, 1*1=1; значение переменной цикла увеличивается на 1, т. е. станет равным: i:= i + 1, 1 + 1 = 2 и цикл повторяется.
i의 값이 n과 같아지면 루프가 마지막으로 실행됩니다. 왜냐하면 i의 다음 값은 n의 최종 값보다 큰 n + 1이 되기 때문입니다. 조건 i<= n - ложно, цикл не выполняется.

For 루프 문의 다른 형식이 있습니다.
주기 기록 형식:

예약어 to를 downto로 바꾸는 것은 루프 매개변수의 단계가 (-1)임을 의미합니다.
매개변수 값의 변경은 더 큰 값에서 더 작은 값으로 이동합니다.<нач. знач.> <кон. знач.>.

예시:
다음 루프 문이 가능합니다.

1) i에 대해:= n에서 1까지 s1을 수행합니다.

2) i의 경우:= 10에서 3까지 s1을 수행합니다.

3) i:= b 아래로 do s1; (b>a로 가정)

4) i:= b를 위해
시작하다

S1;
s2;
...
sn

끝; (b>a로 가정)

여기서 s1, s2, s3, ... sn은 루프 연산자입니다.

예시: 계산 프로그램 계승이 루프 문을 사용하여 숫자를 구성할 수 있습니다.


작업

  1. 10개의 숫자가 주어졌을 때 완전제곱수를 출력하세요.
  2. 10개의 숫자가 주어지면 해당 제품을 찾으십시오.블록다이어그램을 만들고 프로그램을 만드십시오.
  3. 10개의 숫자가 주어졌을 때 짝수의 합을 구하십시오.블록다이어그램을 만들고 프로그램을 만드십시오.
  4. 10개의 숫자가 주어졌을 때 음수의 개수를 구하십시오.블록다이어그램을 만들고 프로그램을 만드십시오.
  5. 주어진 n개의 실수. 최대값과 최소값을 찾으십시오.블록다이어그램을 만들고 프로그램을 만드십시오.
  6. 주어진 n개의 실수.모든 요소의 산술 평균을 찾으십시오.블록다이어그램을 만들고 프로그램을 만드십시오.
  7. 주어진 n개의 실수.음수 및 양수 요소의 산술 평균을 찾으십시오.블록다이어그램을 만들고 프로그램을 만드십시오.
  8. 주어진 n개의 자연수. 3과 5의 배수인 원소의 합과 곱을 구하세요.블록다이어그램을 만들고 프로그램을 만드십시오.
  9. 주어진 n개의 자연수.철회하다값이 2의 거듭제곱(1, 2, 4, 8, 16, ...)인 숫자.블록다이어그램을 만들고 프로그램을 만드십시오.
  10. 주어진 n개의 자연수.철회하다세그먼트에 값이 있는 숫자.블록다이어그램을 만들고 프로그램을 만드십시오.
  11. 주어진 n개의 자연수.값이 어떤 숫자의 제곱인 숫자를 표시합니다.블록다이어그램을 만들고 프로그램을 만드십시오.
  12. 주어진 자연수 n. n 2를 찾으십시오.블록다이어그램을 만들고 프로그램을 만드십시오.
  13. 주어진 자연수 a, n. n을 찾으십시오.블록다이어그램을 만들고 프로그램을 만드십시오.
  14. 주어진 자연수 n. 용량을 결정하고 숫자의 최상위 자릿수를 2만큼 늘립니다.
  15. 주어진 자연수 n. 숫자의 첫 번째 숫자와 마지막 숫자 바꾸기
  16. 주어진 자연수 n. 2의 배수인 숫자의 자릿수는 0으로 대체됩니다.
  17. 주어진 자연수 n. 3의 배수인 숫자의 자릿수는 1로 대체됩니다.
  18. 주어진 자연수 n. 곱(2n-1)*(3n-1)*(4n-1)*...*(10n-1)을 계산합니다.블록다이어그램을 만들고 프로그램을 만드십시오.
  19. 합계 2+4+6+...+100을 계산합니다.블록다이어그램을 만들고 프로그램을 만드십시오.
  20. 주어진 자연수 n, 실수 x. 곱 x+x/2+x/3+...+x/n을 계산합니다.블록다이어그램을 만들고 프로그램을 만드십시오.
  21. 주어진 자연수 n. P=(1-1/2)(1-1/3)...(1-1/n)을 계산합니다. 여기서 n>2입니다.블록다이어그램을 만들고 프로그램을 만드십시오.
  22. 주어진 자연수 n. P=(1+x)/n+(2+x)/(n-1)+...+(n+x)/1을 계산합니다.블록다이어그램을 만들고 프로그램을 만드십시오.
  23. 주어진 n개의 자연수. 계열의 합 계산1+x/1!+x 2 /2!+x 3 /3!+ ...+x N/N!. 블록다이어그램을 만들고 프로그램을 만드십시오.

지침 for 루프알고리즘 구조를 구현 매개변수가 있는 루프(또는 카운터가 있는 루프). for 루프는 프로그램에서 루프의 명령을 실행하기 전에 이 루프의 단계 수가 알려지거나 미리 결정될 때 사용됩니다. 순서도에서 for 문은 다음과 같이 표시됩니다.

통사론:

을 위한 ( 초기화; 상태; 가감) ( 루프 본문 지침; )

루프 본문에 하나의 명령어가 있는 경우 ( )를 생략할 수 있습니다. 사이클 매개변수 변수(카운터)는 모든 숫자 유형이 될 수 있습니다. 이것은 C++ for 루프를 while 루프만큼 다양하게 만듭니다. 수정 섹션에서는 접두사 또는 접두사 증가(또는 감소) 연산이 가장 일반적으로 사용되지만 루프 매개변수의 값을 변경하는 모든 할당 표현식을 사용할 수 있습니다. 루프는 다음과 같이 작동합니다.

  • 처음에는 카운터 변수의 설명과 초기화가 발생합니다.
  • 다음으로 조건을 확인하십시오. 표현식에 값이 있는 경우 진실, 반복이 있을 것입니다
  • 루프 본체의 명령을 실행한 후 카운터 값이 수정됩니다.

메모: C++에서는 루프 헤더에 카운터 변수에 대한 설명을 만드는 것이 규칙입니다. 그러나 이것은 특히 프로그램 9.2에서 구현된 초기화 섹션에서 여러 변수를 초기화하려는 경우에는 필요하지 않습니다. 그러나 루프 헤더에서 카운터 변수 선언을 사용하면 루프가 종료될 때 자동으로 소멸되는 로컬 변수 선언이 생성됩니다. 따라서 꼭 필요한 경우가 아니면 for 루프 외부에서 카운터 변수에 대한 설명을 수행하지 않아야 합니다.
for 루프가 실행되는 동안 루프 헤더 표현식의 피연산자를 변경하지 않는 것이 좋습니다. 이는 모든 종류의 오류로 이어집니다! 그러나 다음을 포함한 변수(또는 상수)의 값 변경 가능한 값(카운터), 당신은 사용할 수 있습니다. 고전적인 예를 고려하십시오.

프로그램 9.1주어진 자연수 N. 이 숫자의 모든 제수를 출력하십시오.

#포함 << "N = "; cin >>N; (int i = 2; 나는< N / 2; i++) { if (N % i == 0) cout << i << " "; } return 0; } N = 16000 2 4 5 8 10 16 20 25 32 40 50 64 80 100 125 128 160 200 250 320 400 500 640 800 1000 1600 2000 3200 4000

for 루프에서 continue 문 사용

for 루프에서 continue 문을 사용할 때 이 루프 작업의 특성을 고려해야 합니다.

  • 계속 다음 문은 건너뜁니다.
  • 그런 다음 카운터가 수정됩니다.
  • 다음 반복으로 이동(그렇지 않으면 조건 확인)

예를 들어 이것을 보여줍시다: int main() ( for (int i = 1; i< 20; i++) { if (i % 2 == 0) continue; cout << i << " "; } 1 3 5 7 9 11 13 15 17 19

메모. 참고: 조건별 숫자 출력은 건너뛰지만 카운터는 증가합니다. 이 예제는 설명을 위한 것이므로 루프를 이와 같이 프로그래밍하면 안 됩니다! 이 문제는 다음과 같은 방법으로 더 잘 해결됩니다.

int main() ( for (int i = 1; 나는< 20; i += 2) cout << i << " ";

초기화 및 수정 섹션의 여러 표현식

앞서 언급했듯이 for 문의 머리 부분에는 세 개의 섹션이 있어야 합니다. 이 섹션의 표현식은 생략할 수 있지만 ";"은 생략할 수 없습니다. . 결국, 당신은 떠날 수 있습니다. . 형식의 제목:

을 위한 (;;) ( ... )

"무한" 루프의 머리글입니다. (루프 종료는 루프 본체 내부에 프로그래밍해야 합니다.)
C++는 for 문 헤더의 초기화 및 수정 섹션에서 여러 식을 지원합니다. 이 경우 주기를 계속하기 위한 조건은 1이어야 합니다!
예를 들어. 문제 설명: 20을 초과하지 않는 수의 계승을 계산합니다.
프로그램 9.2

#포함 네임스페이스 std 사용 int main() ( unsigned long long n; int i, k; cout<< "k = "; cin >>k; // 0<= k <= 20 for(n = 1, i = 1; i <= k; n *= i, ++i); cout << k << "! = " << n << endl; return 0; } k = 20 20! = 2432902008176640000

메모: 12행의 출력 스트림은 루프의 본문을 참조하지 않습니다! (제목 끝에 - ;). 따라서 이 루프는 본문에 빈 명령어가 있고 모든 표현식은 헤더에서 평가됩니다. 프로그램 9.2는 0에서 20까지의 숫자의 계승을 올바르게 계산합니다.

범위 기반 for 루프

배열이나 컨테이너의 요소를 반복하려면 번거로운 코드를 사용하면서 동일한 유형의 작업을 수행해야 합니다. C++에서 컨테이너 작업을 단순화하기 위해 특별한 형태의 for 루프가 있습니다. 범위 기반 for(루프 범위에 따라또는 범위).
통사론:

을 위한 ( 기원 후 : 시퀀스 이름) 루프문

C 어레이 예제에서 범위 기반 사용:
프로그램 9.3

#포함 네임스페이스 std 사용 int main() ( int x ( 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ); for (auto &s: x) ( cout<< s << " "; } return 0; }

배열의 요소를 변경하려면 변수 s가 참조 변수여야 합니다(위의 예에서와 같이). 변수가 참조가 아니면 데이터가 복사됩니다. 자동 유형 유추의 경우 이 루프에서 auto 지정자가 사용됩니다. 범위 기반 for에는 동적 배열 작업에 대한 제한이 있습니다. 고정 배열 끝 포인터가 포함되어 있기 때문에 배열 크기 조정을 지원하지 않습니다. 크기가 고정된 배열을 처리할 때 ranged for 는 일반 for 에 대한 훌륭하고 안전한 대안입니다.

중첩 for 루프

다른 루프 문과 마찬가지로 for는 중첩 루프의 구조를 지원합니다. 중첩 for 루프를 사용하여 2차원 배열의 입력 및 출력을 구성하는 것은 while 루프를 사용하는 것보다 훨씬 더 간단합니다.
그러나 이러한 배열을 탐색할 때 if 문을 사용하지 않아야 합니다. 종종 인덱스(루프 변수 i 및 j)를 조작하여 작업을 보다 합리적으로 구현할 수 있습니다. 즉, 한 인덱스의 변경을 다른 인덱스의 값에 따라 변경하는 것입니다. 두 가지 예를 살펴보겠습니다.
프로그램 9.4크기가 n이고 요소가 0인 정사각 행렬이 주어지면 주대각선 아래의 요소를 1로 채웁니다.

#포함 네임스페이스 std 사용 int main() ( int n; cout<< "n = "; cin >>n; intmas[n][n]; // 0으로 채우기 for(int i = 0; i< n; i++) for(int j = 0; j < n; j++) mas[i][j] = 0; // Реализация for(int i = 0; i < n; i++) for(int j = 0; j <= i; j++) mas[i][j] = 1; // Вывод for(int i = 0; i < n; i++) { for(int j = 0; j < n; j++) { cout.width(2); cout << mas[i][j]; } cout << "\n"; } return 0; } n = 10 1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1

프로그램 9.5배열을 파스칼의 삼각형 수로 채우고 이 배열을 출력하는 프로그램을 작성하십시오. 파스칼의 삼각형은 다음과 같습니다.


이 삼각형은 상단과 측면에 1이 있습니다(프로그램 9.5에서 삼각형은 "옆으로 눕히기" - 삼각형의 측면: 첫 번째 열과 주 대각선). 각 숫자는 그 위에 있는 두 숫자의 합과 같습니다. 삼각형의 선은 수직 축에 대해 대칭이며 이항 계수를 포함합니다.

#포함 네임스페이스 std 사용 int main() ( int n; cout<< "n = "; cin >>n; 정수 패스[n][n]; (int 나는 = 0; 나는< n; i++) for (int j = 0; j < n; j++) pas[i][j] = 0; pas = 1; for (int i = 1; i < n; i++) { pas[i] = 1; for (int j = 1; j <= i; j++) { pas[i][j] = pas + pas[j]; } } for (int i = 0; i < n; i++) { for (int j = 0; j <= i; j++) { cout.width(4); cout << pas[i][j]; } cout << "\n"; } return 0; } n = 12 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 1 7 21 35 35 21 7 1 1 8 28 56 70 56 28 8 1 1 9 36 84 126 126 84 36 9 1 1 10 45 120 210 252 210 120 45 10 1 1 11 55 165 330 462 462 330 165 55 11 1

질문
  1. for 루프 문을 프로그램에서 while 루프 문으로 바꿀 수 있습니까? 항상 이렇게 하는 것이 가능한가요?
  2. 루핑을 위해 for 문을 사용하는 것이 더 나은 경우는 언제입니까? 동안?
  3. for 문의 헤더에 다음 표현식이 가능합니까? a) for (;a > b && !(a % 2);) b) for (a > b;;) c) for (;;i = 0) d) for ( ;i = 0;) e) (;;i++, --b) f) (--i;;) g) (b = 0, b != a;) ?
  4. 변수 i는 외부 루프의 매개변수이고 j는 중첩 루프의 매개변수입니다. j 변수를 외부 루프에서 사용할 수 있습니까? 나는 중첩 루프에 있습니까?
교과서
숙제
  1. 뒤쪽 29. 자연수를 입력하는 프로그램을 작성하라 그리고 , 그리고 디스플레이에는 다음 범위의 모든 소수가 표시됩니다. ~ 전에 (알고리즘 아이디어 프로그램 8.5)
  2. 뒤쪽 30. 완전수는 자신보다 작은 모든 약수의 합과 같은 수입니다(예: 숫자 6 = 1 + 2 + 3). 자연수 N을 취하여 N이 완전한지 판별하는 프로그램을 작성하십시오.
  3. n = 10: 1 * * * * * * * * * * 2 * * * * * * * * * * * 3 * * * * * * * *에 대해 다음과 같은 n x n 정사각형 숫자표를 표시하는 프로그램을 작성하세요. * * * 4 * * * * * * * * * * 5 * * * * * * * * * * 6 * * * * * * * * * * 7 * * * * * * * * * * * 8 * * * * * * * * * * 9 * * * * * * * * * * * 10
문학
  1. Laforet R. C++의 객체 지향 프로그래밍(4판). 피터: 2004년
  2. 프라타, 스티븐. C++ 프로그래밍 언어. 강의 및 연습, 6판: Per. 영어로부터. - 남: ID. 윌리엄, 2012
  3. Lippman B. Stanley, Josy Lajoye, Barbara E. Moo. C++ 프로그래밍 언어. 기본 코스. 에드. 다섯째. 남: LLC “I. D. 윌리엄스”, 2014
  4. 엘린 A. C++. 라머에서 프로그래머로. 상트페테르부르크: Peter, 2015
  5. Schildt G. C++: 기본 과정, 3판. 남: 윌리엄스, 2010



사이클은 Turbo Pascal에서 특별한 위치를 차지합니다. 화면에 나오는 정보를 입출력하는 능력을 익힌 후 바로 공부를 시작합니다. 결국, 대부분의 작업은 매개변수 및 기타 구성이 있는 사이클이 특정 프로그램 블록의 쓰기 및 작동을 용이하게 하는 데 도움이 된다는 사실로 귀결됩니다.

사이클의 종류

총 3가지 종류가 있습니다.

  • 매개변수로
  • 전제 조건으로
  • 사후 조건과 함께.

For … to … do 또는 For … downto …로 알려진 매개변수가 있는 루프. do, 특정 일련의 동작을 반복적으로 반복합니다. 원칙적으로 다른 품종이 동일한 목적으로 사용되며 for 루프에서만 단계 수를 미리 알고 있습니다.

다른 두 구성(While 및 Repeat)에서는 처음에 반복 횟수를 알 수 없습니다. 따라서 작업을 연구할 때 사용할 주기를 이해하는 것이 이미 필요합니다.

주제에 대한 기본 정의

매개변수가 있는 루프는 다중 반복입니다. 카운터는 주어진 구성이 수행되는 주요 지표입니다. 간격의 경계는 특정 반복이 수행되는 한계를 보여줍니다. 그건 그렇고, 초기 값이 1과 같을 필요는 절대 없습니다. 사용자는 간격의 두 경계를 독립적으로 설정합니다. 루프 본문은 반복 횟수가 이미 결정된 명령 집합입니다.

"매개변수가 있는 루프"라는 개념은 이 구성에서 조건이 확인된 후 일련의 반복이 수행됨을 의미합니다. 카운터가 증가(또는 감소)하고 모든 것이 반복됩니다. 조건이 참인 동안 루프의 본문이 실행됩니다.

For ... to ... do: 작업 알고리즘, 구문

이미 언급했듯이 매개변수가 있는 사이클은 작업할 "간격"이 표시된 작업에 사용됩니다. 따라서 숫자의 배열, 요일, 시의 한 줄 등이 될 수 있습니다.

카운터를 늘리고 줄이는 두 가지 유형의 디자인이 있습니다. 첫 번째 구조는 다음과 같이 작성됩니다.

~을 위한 나가는 변수 := 국경 1에게 국경 2하다

루프 바디;

여기: 참조 변하기 쉬운프로그램이나 블록의 시작 부분에서 사용자가 선언했습니다. 경계 1 및 경계 2- 간격의 초기 및 최종 값; 안에 신체 주기프로그램이 수행할 일련의 작업을 지정합니다. 루프의 본문에 1개의 명령만 포함된 경우 연산자 대괄호 begin ... end를 생략할 수 있음을 기억해야 합니다. 이 버전의 디자인에서 카운터, 즉<исх.переменная>, 1씩 증가합니다.

~을 위한 나가는 변수:= 국경 1아래로 국경 2하다

루프 바디;

여기 참조입니다. 변수는 1씩 감소합니다.

For ... to ... do 매개변수가 있는 루프 구성표는 다음과 같습니다.

  • 간격의 상한 값이 설정됩니다. 국경 2.
  • 소스 변수매개변수 값이 할당됨 국경 1.
  • 조건이 확인됩니다. 원시 변수 ≤ 한계 2.
  • 결과를 받으면 진실 (진실) 루프 본문이 실행됩니다.
  • 카운터는 1씩 증가합니다.
  • 3-5단계는 조건이 참이 될 때까지 정확히 실행됩니다. 소스 변수 > 제한 2. 이러한 일이 발생하면 루프가 종료되고 제어가 이 구성 다음에 오는 명령으로 이전됩니다.

For ... downto ... do에서 작업 알고리즘은 몇 가지 점을 제외하고 위와 유사합니다.

  • 세 번째 단락에서 조건이 확인됩니다. 소스 변수 ≥ 한계 2.
  • 알고리즘의 5번째 줄에서 카운터는 1만큼 감소합니다.
  • 6번째 단락에서 명령 3-5는 조건이 충족될 때까지 실행됩니다. 나가는 변수< граница 2.

다른 모든 것은 두 작업 알고리즘에서 유사합니다.

매개변수가 있는 루프 블록 다이어그램

매개변수가 있는 루프는 다음과 같은 형태의 블록다이어그램을 가집니다(이미 위에서 제시했지만). 단순화된 설계 조직도 여기에 표시됩니다.

매개변수가 있는 사이클에 대한 기본 요구사항

매개변수가 있는 루프에는 특정 종류의 조건이 필요합니다.

  • 카운터와 범위의 경계(즉, 소스 변수, 경계 1 및 경계 2)는 동일한 데이터 유형이어야 합니다. 간격의 시작 값과 끝 값과 원래 변수 사이에만 호환성이 있는 경우 경계가 원래 매개변수의 데이터 유형에 따라 변환되기 때문에 프로그램이 잘못 작동할 수 있습니다.
  • 매개변수 값이 속해야 하는 데이터 유형은 정수여야 합니다. 실제 유형은 사용하지 않는 것이 좋습니다.
  • 루프 본문에서 초기 변수 매개변수의 값을 변경하는 것은 바람직하지 않습니다. 그렇지 않으면 사용자는 발생한 가능한 오류를 거의 추적할 수 없습니다.
  • 다른 종류의 루프와 달리 For ... to ... do 또는 For ... downto ... do에서 단계는 1 이외의 매개변수로 변경할 수 없습니다.

터보 파스칼: 루프에서 벗어나는 방법

종종 루프가 발생하는 문제가 있습니다. 즉, 검사 중인 조건이 항상 참입니다. 중단 절차는 사전 조건, 사후 조건, 매개변수가 있는 루프를 종료하는 데 도움이 됩니다. 즉, 그들의 작업은 예정보다 일찍 종료됩니다.

파스칼 매개변수 루프(프로그래밍이 조건의 "영원한" 진실을 가정함)는 계속으로 중지할 수 있습니다. 여기에서 작업은 다음과 같이 설정됩니다. 현재 반복이 일정보다 먼저 실행을 완료하고 제어가 다음 명령으로 이전되지만 루프를 종료하지 않습니다.

프로그램 코드에서 특정 블록의 작업을 완료하려면 종료 절차가 필요합니다. 프로시저(함수) 내부에서 호출되고 동시에 이 "조각"의 실행이 즉시 중지됩니다. Exit가 프로그램의 메인 블록에 있으면 작업을 종료합니다.

중지 절차는 작동 원리를 다음과 같이 축소합니다. 프로그램이 완전히 종료됩니다.

솔루션 작업의 예

"Pascal의 매개변수가 있는 루프" 주제를 학습한 후 사용자가 먼저 예제를 학습한 다음 스스로 코드를 작성하도록 훈련하는 것이 유용할 것입니다. 간단한 작업은 미래의 프로그래머가 이론을 실제로 배우고 성공적으로 적용하는 데 도움이 됩니다. "매개변수가 있는 루프" 주제에서 솔루션 문제의 예는 쉽고 복잡합니다. 다음은 작업 알고리즘을 분석하고 각 솔루션에 대한 설명과 주석을 제공하는 3가지 작업입니다.

작업 1

범위에 있는 자연수의 2차원 배열이 주어지면 무작위로 선택됩니다. 자릿수의 합이 2의 배수인 모든 두 자릿수의 수를 구하십시오.

액션 알고리즘:

  1. 2차원 배열을 만듭니다.
  2. 각 번호가 조건을 준수하는지 확인하십시오.

가) 9인 경우< Х < 100, то разделить его нацело на 10 посредством div;

b) mod를 통해 나누어 숫자의 두 번째 자릿수를 추출합니다.

c) 강조 표시된 숫자를 더합니다.

d) 주어진 합계를 2로 mod로 나눕니다.

e) 결과가 0이면 카운터는 1씩 증가합니다.

작업 2

정수 요소의 1차원 배열이 제공됩니다. 양수 개수를 구합니다.

액션 알고리즘:

  1. randomize에 의해 생성된 정수 요소의 배열을 만듭니다.
  2. 매개변수를 사용하여 루프에 IF를 연결하면 주어진 요소가 X>0 조건을 준수하는지 확인합니다.
  3. 조건이 충족되면 카운터가 1씩 증가합니다.
  4. 루프 후에 결과 카운터 값이 화면에 표시되어야 합니다.

괄호() 안의 데이터는 주석입니다. 11행에서 두 가지 방법으로 화면에 배열을 표시할 수 있습니다. 숫자 사이에 공백을 두거나 각 요소에 대해 특정 수의 셀을 할당합니다(이 경우 5개 있음).

12행에서 카운터 변수는 이전 값에 1을 더하거나 표준 Inc 함수를 사용하는 두 가지 방법으로 증가할 수도 있습니다.

작업 3

정사각 행렬이 주어집니다. 주 대각선에서 양수 요소의 수를 찾으십시오.

설명:

숫자 배열에서 주 대각선은 왼쪽 상단 모서리에서 오른쪽 하단까지 뻗어 있습니다. 그 특징은 행과 열 인덱스가 동일하다는 사실입니다. 따라서 나머지 요소를 반복하지 않고 라인을 통과하도록 1주기를 구성하면 충분합니다.

액션 알고리즘:

  1. 정방 행렬을 만듭니다.
  2. 양수 요소를 계산하는 변수를 "0"으로 설정합니다.
  3. 주기를 만들어 정방 행렬을 만듭니다.
  4. 루프를 구성하여 조건을 확인합니다. 주 대각선의 숫자가 >0이면 카운터가 1씩 증가합니다.
  5. 루프가 끝난 후 화면에 양수 요소의 수를 저장하는 변수의 값을 표시합니다.

두 프로그래밍 언어의 대결: C와 터보 파스칼

일반적으로 자존심이 강한 프로그래머는 여러 언어를 알고 있습니다. 예를 들어 C++, Turbo Pascal, Delphi, Java 등이 될 수 있습니다. 이 둘의 반대는 80년대에 분명히 표현되었습니다. (C 및 터보 파스칼). 20세기 말에 C++와 Java 간에 동일한 투쟁이 관찰되었습니다.

가상 공간에서는 30여 개의 프로그래밍 언어 중에서 가장 밝은 세 쌍을 구별할 수 있으며, 그 반대는 사이버 공간의 가장 위대한 마음을 놀라게 한 Algol-60 및 Fortran, Pascal 및 C, Java 및 C ++입니다. 물론 이러한 감정은 주관적이지만, 한 번쯤은 둘 중 한 명이 리더였다. 이는 업계의 요구 사항과 특정 소프트웨어 제품의 필요성 때문이었습니다. 70년대. Fortran은 80년대에 "세계를 지배했습니다" - Turbo Pascal, 90년대에 - C ++. 물론 그들 중 누구도 "죽지" 않았습니다. 오히려 개선된 소프트웨어 제품으로 발전했습니다.

프로그래밍 언어를 공부할 때 일부 주제에서는 구문이 유사하다는 것을 알 수 있습니다. 따라서 C에서 매개변수가 있는 루프는 일부 점을 제외하고 Pascal의 유사한 구성과 유사합니다.

흥미롭게도 Turbo Pascal(Old World)의 개발자는 미국 과학자의 발전 결과를 사용했으며 New World에서는 유럽 전문가의 연구 결과를 적극적으로 적용했습니다. 유럽에서 개발자는 프로그래밍 언어의 순수성과 간결함을 더 옹호하는 반면 미국인은 코드 작성에서 새로운 경향을 사용하는 경향이 있습니다.

매개변수가 있는 루프의 형식은 다음과 같습니다.

for (초기화, 표현식, 수정) 문;

초기화루프에서 사용되는 값에 초기 값을 선언하고 할당하는 데 사용됩니다. 이 부분에서는 다음과 같이 쉼표로 구분된 여러 명령문("순차 실행" 작업)을 작성할 수 있습니다.

(int i = 0, j = 2; ...

(k=1, m=0; ...

루프 초기화 부분에서 선언된 변수의 범위는 루프 1입니다. 초기화는 루프 실행 초기에 한 번 수행됩니다.

표현루프 실행 조건을 정의합니다. bool로 캐스팅한 결과가 true이면 루프가 실행됩니다. 매개변수가 있는 루프는 전제조건이 있는 루프로 구현됩니다.

수정루프의 각 반복 후에 실행되며 일반적으로 루프의 매개변수를 변경하는 데 사용됩니다. 수정 부분에서는 여러 연산자를 쉼표로 구분하여 작성할 수 있습니다. 단순 또는 복합 운영자루프의 본체입니다. for 문의 모든 부분을 생략할 수 있습니다(그러나 세미콜론은 제자리에 있어야 합니다!).

예(1에서 100까지의 숫자의 합을 계산하는 연산자):

for (Int i = 1, s = 0, 1<=100; i++) s += i;

예(프로그램은 함수 값의 테이블을 인쇄합니다. y \u003d x 2 +1입력된 범위 내):

#포함

float Xn, Xk, Dx, X;

printf("인수 범위와 증가분을 입력하세요: ");

scanf("%f%f%f", &Xn, &Xk, &Dx);

printf("|X|Y|\n");

(X = Xn; X<=Xk; X+=Dx)

printf(" | %5.2f | %5.2f |\n", X*X + 1);

예(프로그램은 양의 정수의 모든 제수를 찾습니다):

#포함 정수 메인()(

정수, 반, div;

쫓다<< “\n Введите число: "; cin >>숫자;

(절반 = 숫자 / 2, div = 2, div에 대한<= half; div++)

if (!(num %div)) cout<< div <<"\n";

마지막 두 예제는 전제 조건이 있는 루프의 예제와 동일한 작업을 수행하지만 더 간결하고 명확하게 작성됩니다. 루프 제어와 관련된 모든 작업은 헤더에 국한됩니다.

다음과 같이 모든 while 루프를 해당 for 루프로 캐스팅할 수 있으며 그 반대도 마찬가지입니다.

(b1: b2, b3) 연산자 b1;

동안 (b2)( 문; b3;)

흔한 사이클 프로그래밍 시 오류 -루프 본문에 초기화되지 않은 변수를 사용하고 루프에서 종료 조건을 잘못 입력했습니다.

q 루프 본문에 있는 대입문의 오른쪽에 있는 모든 변수가 이전에 초기 값을 할당받았는지 여부를 확인합니다(또한 다른 문을 실행할 수 있는지 여부).


q 루프 종료 조건에 포함된 하나 이상의 변수가 루프에서 변경되는지 확인합니다.

q 특정 반복 횟수에 도달하면 루프에서 비상 탈출을 제공합니다.

q 그리고 물론 루프 본문에서 둘 이상의 명령문을 실행해야 하는 경우 중괄호로 묶어야 한다는 점을 잊지 마십시오.

루프 문은 서로 바꿔 사용할 수 있지만 일부 추천각각의 경우에 최선을 선택합니다.

do while 문은 일반적으로 루프를 한 번 이상 실행해야 할 때 사용됩니다(예: 루프에 데이터 입력이 있는 경우).

whiIe 연산자는 반복 횟수를 미리 알지 못하거나 명확한 루프 매개변수가 없거나 루프 본문의 끝이 아닌 매개변수 수정을 작성하는 것이 더 편리한 경우에 사용하는 것이 더 편리합니다.

for 문은 대부분의 다른 경우에 선호됩니다(확실히 - 카운터를 사용하여 주기를 구성하는 경우).

일반적으로 오늘 우리는 Pascal의 각 주기에 대해 더 자세히 배우고 설정 방법을 볼 것입니다. 우리는 분해 할 것입니다 조건이 있는 while 루프, 매개변수가 있는 for 루프그리고 반복 - 사후 조건이 있는 루프까지.

1. Pascal에서 매개변수가 있는 루프 - FOR

FOR 루프는 프로그램이 실행될 때까지 작동할 특정 조건을 설정합니다. 프로그램을 5(또는 n)번 반복해야 한다고 가정해 보겠습니다. 그러면 이 루프를 사용하여 쉽게 수행할 수 있습니다. FOR 루프에는 일반적으로 문자 i 또는 j로 표시되는 카운터라는 특징이 있습니다.

파스칼에서 매개변수가 있는 주기의 모양:

for i:= 1 to n do // 먼저 i를 1에 할당한 다음 2, 3, ..., n

첫 번째 패스 후에 변수 i에 1을 할당하고 두 번째 패스 후에 2를 할당하는 식으로 n에 도달할 때까지 계속합니다. to 는 up to .. 오름차순, downto - up to .. 내림차순도 있습니다.

매개변수가 있는 사이클의 블록 다이어그램:

2. Pascal에서 전제 조건이 있는 루프 - WHILE

전제 조건이 있는 루프 연산자는 알 수 없는 횟수만큼 작업을 수행합니다. 일부 논리 표현식이나 그 결과가 거짓이면 루프가 종료됩니다. 논리식의 유효성을 처음부터 확인하기 때문에 루프의 본문은 한 번도 실행되지 않을 수 있습니다.

전제 조건이 있는 루프 구조:

WHILE DO 시작 끝;

순환 연산자 실행이 시작될 때 진실이 확인되는 부울 표현식.

실행 가능한 모든 언어 문.

루프 실행 순서:

조건이 참인 동안 루프의 본문이 실행됩니다. 조건이 거짓이 되는 즉시 루프가 종료됩니다.

전제 조건이 있는 사이클의 블록 다이어그램:


참고: 직사각형 블록은 싸이클 또는 그 이후(싸이클 단계)에서 수행되는 모든 작업을 표시하고, 타원형은 전체 프로그램 또는 프로그램의 일부의 시작 또는 끝을 나타냅니다. 이 블록다이어그램의 주요 역할은 중앙 부분입니다.

예시:

작업: 계열 1+1.5+2+2.5+3+3.5+ .. + 30의 합계 계산

프로그램 예 - 동안;

바섬:리얼; n:진짜; 시작 합계:=0; n:=1; 동안 n

3. 사후 조건으로 루프 - 반복 -까지.

이 연산자는 전제 조건이 있는 루프 연산자와 유사하지만 루프의 본문(액션) 실행 후 조건을 확인한다는 점에서 다릅니다. 이것은 이전에 구문 분석된 루프와 달리 최소한 한 번은 실행되도록 합니다.

이 루프 문은 루프 본문에 여러 문이 있다고 가정합니다. 즉, 여러 작업을 수행할 수 있으므로 서비스 단어 Begin 및 End가 필요하지 않습니다.

루프 본문에 포함된 일련의 명령문은 한 번 실행되고 그 후에 When 서비스 단어 뒤에 작성된 조건이 확인됩니다. 조건이 충족되지 않으면 루프가 종료됩니다. 그렇지 않으면 루프 본문을 한 번 더 반복한 후 조건을 다시 확인합니다.

사후 조건이 있는 사이클의 블록 다이어그램:

녹음 형식, 주기 구조:
까지 반복 ;

예시:

프로그램 테스트2; 바브:리얼; 시작 b:=100; 반복 b:=b/2; b까지

결론:

1. 매개변수가 있는 루프는 루프 매개변수 또는 카운터라는 변수를 사용합니다. 루프가 실행되기 전에 매개변수(카운터)가 초기 값으로 설정됩니다. 루프 단계가 실행된 후 매개변수 값은 1씩 증가합니다. 루프는 매개변수가 to(downto) 뒤에 지정된 최종 값에 도달할 때까지 계속됩니다.

2. 전제 조건이 있는 루프는 실행 조건이 거짓이 될 때까지 실행되고, 조건이 참이면 계속됩니다.

3. 사후 조건이 있는 루프는 조건이 참이 될 때까지 실행되고, 조건이 거짓이면 루프가 계속됩니다.