VBA 루프. VBA의 루프 연산자 vb6의 루프(카운터 예제 포함)

VBA 언어의 for next 루프 연산자는 고정된 횟수만큼 명령문 블록을 실행하는 데 사용되며, 이 루프는 배열을 처리할 때 가장 자주 사용됩니다. for next 루프는 해당 분야에서 가장 간단합니다. 여기서 초기 값과 최종 값이 설정되고 카운터 단계도 설정할 수 있습니다.

일반적인 구문을 살펴보겠습니다.

카운터 = 시작부터 끝까지
연산자
다음 카운터

카운터– 여기서는 반복 횟수(완료된 주기 수)에 대한 정보를 저장할 변수의 이름을 나타냅니다.

시작– 카운터의 초기 값은 숫자 표현식입니다.

– 카운터의 최종 값, 패스 수를 지정하는 숫자 표현.

단계– 실행 단계를 지정할 수 있는 선택적 매개변수입니다. 이 매개변수가 없으면 각 패스의 카운터 증가는 1과 같습니다. 무차별 방법을 사용하여 방정식을 풀어야 하는 경우 단계를 사용하는 것이 적합하므로 초기 값을 1로, 최종 값을 3으로, 단계를 0.2로 설정할 수 있습니다.

루프의 마지막에는 변수 이름(카운터)을 지정할 필요가 없지만 이는 중첩된 for 루프가 사용되는 경우 관련이 있으며 이렇게 하면 코드를 더 쉽게 읽을 수 있습니다.

예를 들어 두 개의 텍스트 레이블과 하나의 버튼이 있는 양식을 만들고 코드 편집기에서 다음을 작성합니다.

Private Sub CommandButton1_Click() Dim i, j, a, b For i = 1 To 10 2단계 a = a & i & " " Next i For j = 1 To 10 3단계 b = b & j & " " 다음 j Label1 .Caption = a Label2.Caption = b End Sub Private Sub UserForm_Initialize() Label1.Caption = "" Label1.FontSize = 14 Label1.ForeColor = vbBlue Label2.Caption = "" Label2.FontSize = 14 Label2.ForeColor = vbRed CommandButton1. 캡션 = "값" End Sub

이 예에는 두 개의 루프 매개변수가 있는데 각각 초기값과 최종값은 동일하지만 첫 번째 매개변수는 2단계로 설정되고 두 번째 매개변수는 3으로 설정됩니다.

Step 매개변수에 음수 값을 지정할 수도 있습니다. 이 경우 카운터는 역순으로 증가합니다. 예를 들면 다음과 같습니다.

Private Sub CommandButton1_Click() Dim i, j, SummA, SummB For i = 1 To 10 SummA = SummA + i Next For j = 10 To 1 Step -1 SummB = SummB + j Next Label1.Caption = "직접 주문: "&SummA Label2.Caption = "역순으로: "& SummB 끝 하위

여기서는 1부터 10까지의 숫자를 정방향 및 역순으로 합을 계산합니다.

VBA 언어에서 for next 루프 연산자를 사용할 때 특정 조건에서 데이터 정렬을 중지해야 하는 상황이 발생할 수 있습니다. 이 경우 표현식이 사용됩니다. 종료 대상, 예를 들어:

이 예에서는 다음 중첩 루프에 VBA를 사용합니다. 첫 번째 경우에는 1부터 100까지의 숫자를 더하고 그 합을 100번 반복합니다. 두 번째 경우에는 조건부 if 문을 사용하여 조건을 지정했습니다. 금액이 10,000보다 크면 루프를 종료합니다.

좋아요, 이제 좀 더 실용적인 예를 작성해 보겠습니다. 무차별 대입으로 2차 방정식을 푸는 것입니다.

Private Sub CommandButton1_Click() Const a = -2, b = 6, c = 20 Dim x, result, res For x = -10 To 10 0.5단계 result = a * (x * x) + b * x + c If result = 0 그러면 res = res & " " & x End If Next x Label1.Caption = "x 정확히: " & res End Sub

이 예에서는 값이 -2, 6, 20인 세 개의 상수 a, b 및 c를 선언했습니다. 이는 2차 방정식(a*x*x + b*x + c = 0)의 매개변수입니다. 루프에서 변수 x는 -10에서 10까지 0.5단계씩 변경됩니다. 각 반복에서 조건이 0인지 확인하고, 조건이 충족되면 x 변수의 값이 res 변수에 기록됩니다. 결과적으로 방정식에는 -2와 5라는 두 가지 해가 있습니다.

그래서 이 기사에서는 동일한 작업을 지정된 횟수만큼 처리하는 데 사용되는 VBA 언어의 for next 루프를 살펴보았습니다. 다음 기사에서는 컬렉션을 처리하는 데 사용되는 루프를 살펴보겠습니다. 컬렉션 자체도 살펴보겠습니다.

루프 문

VBA에서 루프에는 두 가지 주요 유형이 있습니다. 카운터가 있는 루프(파라메트릭)와 조건이 있는 루프(반복)입니다.

카운터 루프는 특정 작업을 특정 횟수만큼 수행해야 하는 경우에 사용됩니다.

조건 루프는 특정 조건이 충족될 때까지 프로그램의 특정 작업을 반복해야 할 때 사용됩니다.

매개변수가 있는 루프다음을 위해…다음

사이클 구조:

을 위한 Cycle_parameter = 초기_값에게 최종_값

[단계 단계]

연산자

[종료 대상]

다음 [주기_파라미터]

어디에 예어 VBA (from)은 사이클의 시작을 나타냅니다.

루프 카운터로 정의된 loop_parameter 변수;

초기_값 루프 매개변수의 초기값을 지정하는 숫자입니다.

키워드로 VBA (이전), 나누기

초기_값 및 최종_지식;

Final_Value 루프 매개변수의 값을 지정하는 숫자,

사이클이 끝나는 시점;

단계 키워드 VBA (단계)에 사용됨

루프 단계 사양, 선택적 인수.

사이클 단계를 지정하는 숫자 단계, 즉 그 가치

매개변수 값을 늘리거나 줄입니다.

모든 단계에서 순환하십시오. 이 숫자는

부정적인;

종료 대상 루프를 조기 종료하는 연산자(선택 사항);

다음 예어 VBA (다음)을 나타냄

사이클이 종료됩니다.

사이클 작업:

1 단계 먼저 루프 매개변수를 결정하고 이 변수의 초기값과 최종값을 계산하여 저장합니다.

2단계 루프 매개변수에 초기값이 할당됩니다.

3단계 루프 매개변수의 초기값과 최종값을 비교합니다.

루프 매개변수가 최종 값보다 크면 프로그램은 즉시 루프를 종료하고 루프 뒤의 코드 줄로 점프합니다.

4단계 루프 본문이 실행됩니다.

5단계 루프 본문을 실행한 후 루프 매개변수에 다음 값이 할당됩니다. 3단계로 이동합니다.

메모.

1. 키워드를 사용한 경우단계 , 루프 매개변수는 이 단어 뒤에 지정된 숫자에 따라 변경됩니다. 만약에 단어단계 가 없으면 단계 값은 1과 같습니다.

예시 1.

I = 0 ~ 10인 경우 2단계(값 I 2만큼 증가합니다)

2. For...Next 루프 조건 달성 시 조기 종료될 수 있습니다. 이렇게 하려면 루프의 올바른 위치에 연산자를 배치해야 합니다.종료 대상.

예시 2.

Dim S를 정수로 표현

Dim j를 정수로

S=2

j = 1 ~ 10의 경우

S = S + j

S > 6이면

종료 대상 (값이 다음과 같은 경우 루프를 종료합니다. S > 6)

종료 조건

다음 J

메시지박스(S)

조건부 루프(반복)

어떤 작업(여러 작업)을 여러 번 수행해야 하지만 몇 번이나 수행되는지 미리 알 수 없고 이것이 특정 조건에 따라 달라지는 경우 전제 조건 또는 사후 조건이 있는 주기를 사용해야 합니다.

VBA에서 두 가지 주요 사이클이 있습니다 DO...루프 키워드로 입력된 조건으로하는 동안 , 그리고 키워드가 입력한 조건으로까지 . 둘 다 사전 조건 또는 사후 조건이 있을 수 있습니다.

통사론:

여기서 수행 키워드(할);

하는 동안 키워드 (아직);

까지 키워드(~까지);

고리 사이클의 끝을 나타내는 키워드;

<условие>참이 확인되는 논리적 표현

루프 본문의 각 실행이 시작될 때;

<тело_цикла>임의의 연산자 순서;

하세요...공사중 읽기: 조건이 충족되는 동안 수행합니다. 디자인에할...동안

Do...Until 공사 내용은 다음과 같습니다. 조건이 충족될 때까지 수행합니다. 디자인에해야 할 일...까지 단계를 높이려면 특수 연산자를 작성해야 합니다. 그 안에는 디자인과 다르게을 위한 , 이 작업은 자동으로 수행되지 않습니다.

키워드 뒤에 작성된 조건까지 , 각 반복이 끝날 때(루프 본문이 실행된 후) 확인됩니다. 루프에서와 똑같은 방식으로 작동하지 않는다는 점에 유의하세요.하는 동안 . 조건이 참인 경우(진실 ), 루프가 종료됩니다. 조건이 충족되지 않은 경우(거짓거짓 ), 루프 본문이 다시 실행됩니다.

예시 1.

문제의 공식화. 서브루틴 절차를 사용하여 유한 계열의 합을 계산합니다.

작업 실행 기술:

1. 초기 데이터:나는  Z

결과: S  R .

2. 전제 조건이 있는 루프를 사용하여 표준 프로젝트 모듈에 다음 사용자 정의 프로시저를 입력합니다.하는 동안:

하위 요약()

Dim S를 정수로 표현

Dim i를 정수로 표시

에스 = 0

나는=1

나는 동안 할<= 10

S = S + i^2

나는 = 나는 + 1

고리

메시지박스(S)

서브 끝

3. 전제 조건이 있는 루프를 사용하여 표준 프로젝트 모듈에 다음 사용자 정의 프로시저를 입력합니다.까지:

하위 요약()

Dim S를 정수로 표현

Dim i를 정수로 표시

에스 = 0

나는=1

i > 10이 될 때까지 수행

S = S + i^2

나는 = 나는 + 1

고리

메시지박스(S)

서브 끝

4 사후 조건이 포함된 루프를 사용하여 표준 프로젝트 모듈에 다음 사용자 정의 프로시저를 입력합니다.하는 동안:

하위 요약()

Dim S를 정수로 표현

Dim i를 정수로 표시

에스 = 0

나는=1

S = S + i^2

나는 = 나는 + 1

루프하는 동안 나는<= 10

메시지박스(S)

서브 끝

5 사후 조건이 포함된 루프를 사용하여 표준 프로젝트 모듈에 다음 사용자 정의 프로시저를 입력합니다.까지:

하위 요약()

Dim S를 정수로 표현

Dim i를 정수로 표시

에스 = 0

나는=1

S = S + i^2

나는 = 나는 + 1

i > 10이 될 때까지 반복

메시지박스(S)

서브 끝

최종 업데이트 날짜: 2015년 10월 30일

또 다른 유형의 제어 구조는 루프입니다. VB.NET은 여러 유형의 루프를 사용합니다.

For...다음 루프

여기서 루프는 특정 횟수만큼 실행되며 이 숫자는 카운터에 의해 지정됩니다.

For i As Integer = 1 To 9 Console.WriteLine("숫자 (0)의 제곱은 (1)입니다.", i, i * i) Next

여기서 변수 i는 카운터 역할을 합니다. 단어 뒤에 에게카운터의 최대값을 입력합니다. 각 사이클마다 카운터 값이 1씩 증가합니다. 그리고 이 값은 이후의 값과 비교됩니다. 에게. 이 두 값이 동일하면 루프 실행이 중지됩니다.

루프로 작업할 때 각 패스마다 카운터 값을 1뿐만 아니라 원하는 숫자만큼 늘릴 수 있습니다. 이렇게 하려면 다음 중 하나의 키워드를 사용해야 합니다. 단계카운터 값이 증가할 루프 단계를 표시하거나 루프에서 직접 카운터를 증가시킬 수 있습니다.

For i As Integer = 1 To -9 Step -1 For j As Integer = 1 To 9 Console.WriteLine("숫자 i와 j의 곱은 (0)입니다.", i * j) j += 1 Next Next

첫 번째 루프의 단계는 음수 값으로 설정되고 카운터 값은 패스할 때마다 1씩 감소합니다. 내부 루프에서 카운터 j는 기본적으로 1씩 증가하므로 통과할 때마다 2씩 증가하고 루프에서도 명시적으로 1씩 증가합니다. 결과적으로 내부 루프는 5번, 외부 루프는 9번 실행되어 실제로 45사이클을 얻게 됩니다.

각각에 대해 반복...다음

For Each 루프는 배열이나 컬렉션과 같은 특정 그룹의 요소를 반복합니다. Integer 유형의 배열이 있고 이 배열을 임의의 값으로 초기화한 다음 모든 요소를 ​​화면에 표시해야 한다고 가정합니다.

"다섯 개의 숫자 배열을 만듭니다. Dim nums(4) As Integer Dim r As New Random() "배열을 초기화합니다. For i As Integer = 0 To nums.Length - 1 nums(i) = r.Next(100) Next " 각 i에 대한 요소 배열을 nums Console.Write("(0) ", i) Next에 정수로 출력합니다.

For Each 문에서는 먼저 배열 요소의 값을 받을 변수를 지정합니다. 그리고 키워드 뒤에는 ~ 안에모든 요소를 ​​반복해야 하는 그룹을 나타냅니다.

while 루프

While 루프는 While이라는 단어 뒤에 나열된 특정 조건이 충족될 때까지 실행됩니다.

Dim j As Integer = 10 While j > 0 Console.WriteLine(j) j -= 1 End While

루프를 수행

Do 루프는 While 루프와 마찬가지로 특정 조건이 충족되는 한 실행됩니다. 그러나 그것은 다른 형태로 나타납니다. 따라서 다음 예제에서는 먼저 조건을 확인한 다음 루프에 정의된 코드 블록을 실행합니다.

Dim j As Integer = 10 Do While j > 0 Console.WriteLine(j) j -= 1 루프

이 경우 j가 0보다 큰 동안 루프는 실행됩니다. 그러나 단어 대신 단어가 사용되는 또 다른 항목이 있습니다. 까지, 특정 조건이 충족될 때까지, 즉 j 값이 0보다 작아질 때까지 루프가 실행됩니다.

Dim j As Integer = 10 j까지 수행< 0 Console.WriteLine(j) j -= 1 Loop

루프에 처음 지정된 조건이 true가 아닌 경우 루프는 작동하지 않습니다. 그러나 루프 끝에서 검사를 정의할 수 있으므로 루프는 적어도 한 번은 실행됩니다.

Dim j As Integer = -1 Do Console.WriteLine(j) j -= 1 j까지 반복< 0 "либо Do Console.WriteLine(j) j -= 1 Loop While j > 0

계속 및 종료 문

종종 주기가 끝날 때까지 기다리지 않고 특정 조건이 충족되면 즉시 주기를 종료해야 할 필요가 있습니다. 이렇게 하려면 연산자를 사용하십시오. 출구, 그 후에는 종료가 수행되는 루프 유형을 나타냅니다(예: Exit Do(Exit While)).

Dim r As New Random() Dim num As Integer = r.Next(100) For i As Integer = 0 ~ 100 num -= 1 If num< 50 Then Exit For Next Console.WriteLine(num)

루프를 종료하는 것이 아니라 현재 패스 또는 반복을 종료하고 다음 작업으로 이동하는 또 다른 작업이 있습니다. 이렇게 하려면 Continue 문을 사용한 후 종료할 루프 유형을 지정합니다(예: Continue While:).

Dim r As New Random() Dim num As Integer = r.Next(100) For i As Integer = 0 ~ 10 num -= 7 If num< 50 AndAlso num >25 그런 다음 계속해서 End If Console.WriteLine(num) 다음

이 경우 루프를 통과할 때마다 num에서 숫자 7을 뺀 다음 숫자 num이 25에서 50 사이의 간격에 속하는지 확인합니다. 그렇다면 루프의 새로운 반복으로 이동합니다. 그렇지 않은 경우 화면에 표시합니다.

루프 명령어는 반복적으로 실행되어야 하는 명령어 세트(이 명령어 세트를 루프의 본문이라고 함)와 루프 종료 규칙이 무엇인지를 명확히 하는 명령문입니다.

7.2.1. 파라메트릭 사이클... 다음

이 루프는 루프 본문 실행을 반복할 때 주어진 초기 값에서 주어진 최종 값까지 주어진 단계를 통해 값을 변경하는 매개변수에 의해 제어됩니다. 이러한 사이클은 신체를 몇 번 반복해야 하는지 미리 알고 있는 경우에 사용됩니다.

루프 구문: 을 위한 CPI=NZPC 에게 KZPC[ 단계배송] 루프 본문(하나 이상의 명령어) 다음[CPI]

단어 을 위한(을 위한), 에게(전에), 단계(단계), 다음(그러면) 예약되어 있습니다.

사용된 명칭:

CPI – 주기 매개변수의 이름(모든 숫자 유형의 변수)

NZPTS – 루프 본문이 처음 실행될 때 루프 매개변수가 갖게 되는 루프 매개변수(모든 숫자 유형의 표현식)의 초기 값입니다.

KZPTS – 주기 매개변수의 현재 값과 비교되는 주기 매개변수(모든 숫자 유형의 표현)의 최종 값입니다.

CHIC – 루프 매개변수(모든 숫자 유형의 표현)를 변경하는 단계 – 루프 명령의 선택적 부분입니다.

NZPC와 KZPC의 숫자 값은 사이클 매개변수가 변경되는 간격을 지정합니다. 선택적 매개변수 SHIPC는 각 패스에서 루프 카운터를 변경하는 단계를 지정합니다. 기본적으로 없으면 1과 같다고 가정한다. 마지막으로 루프의 몸체를 구성하는 명령어 뒤에는 루프의 경계를 나타내는 명령어가 있다. 중첩된 루프(루프 본문에 루프 명령이 포함됨)의 경우 명령이 속한 루프를 나타내는 것이 유용합니다. 다음. 이는 단어 뒤에 추가하면 달성됩니다. 다음루프 매개변수 이름.

명령어 실행 과정 을 위한다음긍정적인 단계에 대한 그림은 그림 7.4에 나와 있습니다.

예를 살펴보겠습니다.

첫 번째 예에서는 1부터 100까지의 모든 홀수 정수의 합을 계산하는 명령을 작성합니다.

I를 정수로 표시하고 합계를 정수로 표시

i = 1 ~ 100의 경우 2단계

금액 = 금액 +i

다음 예에서는 명시적 루프 단계와 카운트다운이라는 두 가지 가능성을 보여줍니다. 후자는 음의 단계를 지정하고 루프 매개변수의 초기 값이 최종 값보다 크다는 사실을 지정함으로써 달성됩니다.

N을 정수로 희미하게

N = 100 ~ 60인 경우 –10 단계

이 코드는 현재 형식으로 출력됩니다.

다음 지침을 실행하면 컴퓨터에서 경고음이 50번 울립니다. 지침 을 위한루프 매개변수가 변수임을 정의합니다. 엑스, 초기 및 최종 값입니다. 팀 다음카운터를 증분하여 변경합니다.

희미한 x 정수로

지침 다음을 위해...다음 Exit For 문을 사용하여 조기에 종료할 수 있습니다. 이 명령어를 실행하면 루프가 즉시 종료됩니다.

7.2.2. Do While...Loop 또는 Do...Loop While 루프 명령어

여기 하는 동안(지금은) 그리고 고리(루프) 예약어. 다음과 같은 루프 하는 동안루프 본문의 반복 횟수(반복)를 미리 알 수 없는 상황을 위한 것입니다. 두 가지 유형의 루프에 대한 구문은 다음과 같습니다. 하는 동안:

하는 동안 ConditionRepetitions 명령어 그룹 고리

하다지도 그룹 루프 동안조건반복

차이점은 루프 본문이 실행되기 전(루프-while) 첫 번째 경우에는 반복 조건(루프 본문의 실행을 반복하는 조건)이 확인되고, 두 번째 경우에는 루프 본문이 실행된 후 확인된다는 점입니다. 실행됩니다(루프 - ~까지).

예제로 넘어 갑시다.

프로그램의 다음 섹션의 동작을 고려해 봅시다.

카운터 = 0

동안 수행 번호 > 10

숫자 = 숫자 - 1

카운터 = 카운터 + 1

MsgBox("완료" & 카운터 & _

"루프 반복.")

프로그램의 이 섹션이 실행되면 MsgBox 기능 창에 다음이 표시됩니다.

10번의 루프 반복이 완료되었습니다.

이 프로그램에서는 루프에 들어가기 전에 조건을 확인합니다. Number 변수가 20 대신 9로 설정되면 루프 내부의 명령이 실행되지 않습니다.

다음 프로그램에서 루프 내의 명령문은 조건이 실패하기 전에 한 번만 실행됩니다.

카운터 = 0

숫자 = 숫자 - 1

카운터 = 카운터 + 1

루프 While 숫자 > 10

MsgBox("루프에서 완료" & 카운터 & _

"반복.")

지침 수행...루프지침을 사용하여 조기에 완료할 수 있습니다. 나가기.

연산자 구문:

을 위한카운터= 시작 영형[단계단계]

Block_Operators

다음카운터

여기에 표시됩니다:

을 위한을 위한 (필수 키워드VB);

에게~ 전에 (필수 키워드VB);

Block_Operators– 하나 이상의 연산자가 호출됩니다. 사이클 바디;

카운터 -실행된 루프 수를 계산하는 정수 변수;

시작, 끝 -초기 및 최종 카운터 값;

단계단계(keywordVB);

단계 -카운터 변경 단계; 부정적일 수도 있습니다. 매개변수는 선택사항입니다. 왜냐하면 단계가 1이면 Step을 할 수 있기 때문입니다. 단계낮추다;

다음 – 다음(필수 키워드 VB, 루프 끝 연산자 항목).

카운터 값 (시작, 끝)될 수 있다 정수 또는 실수 유형의 숫자 ​​상수 또는 변수는 음수 또는 양수일 수 있습니다. 루프 본문이 적어도 한 번 실행되려면 다음이 있어야 합니다. 시작 ≤ 끝,만약에 단계> 0, 그리고 시작 ≥ 끝,만약에 단계< 0. 그 사실이 밝혀지자마자 카운터>끝 (만약에 시작< Конец), 루프 실행이 종료됩니다. 만약에 시작 =끝,루프는 한 번 실행됩니다.

예제 9.1 .기능 평가와이 = 2 – 1.5 신스X가 범위에서 0.2단계씩 변경될 때.

Y를 계산하고 인수 X와 함수 Y를 출력하는 프로그램의 일부:

X = 0 ~ 2.4의 경우 0.2단계

Y = 2 – 1.5*사인(X)

이 루프가 어떻게 작동하는지 이해하기 위해 다음을 사용하여 만든 유사한 루프에 대한 프로그램이 있습니다. 운영자이동, 태그, 연산자만약에그 다음에.

M1: X = X + 0.2

만약 X<= 2.4 Then

Y = 2 – 1.5*사인(X)

이 프로그램이 어떻게 작동하는지 살펴보겠습니다. 첫 번째 계산 Y는 마치 주기에서 벗어난 것처럼 비표준입니다. 주기는 GoToM1 컨트롤이 M1 레이블로 처음 전송된 후에 시작됩니다. M1이라는 줄에서 인수 X가 0.2씩 증가하고 X의 새 값이 최종 값인 2.4를 초과하는지 즉시 확인됩니다. 초과하지 않으면 이 새로운 X를 사용하여 Y 계산이 반복됩니다. 그런 다음 GoToM1 연산자가 다시 실행되어 M1이라는 레이블이 붙은 줄로 제어가 전송됩니다. Y를 계산하는 이러한 반복(주기)은 X가 2.4를 초과하자마자 종료됩니다.

이제 프로그램을 If와 For...Next 루프와 비교해 보겠습니다.

X = 0 ~ 2.4의 경우 0.2단계

두 줄을 대체

M1: X = X + 0.2

만약 X<= 2.4 Then

For 루프에서 실행되는 코드의 마지막 두 줄이지만 표시되지는 않습니다. 우리는 cFor... 라인으로 인코딩했습니다. GoTo M1 코드 라인은 Next X(문자 그대로: next X)라는 단어로 인코딩되었습니다. 그 결과 컴팩트한 디자인이 탄생했습니다.

For...Next 루프를 사용할 때 루프 카운터를 사용하여 다양한 문제를 해결하는 방법을 배워야 합니다. 문제를 해결하기 위해 카운터를 사용하는 방법을 알아내려면 다음을 수행해야 합니다. 문제의 공식화를 분석하고, 문제의 일부 매개변수에서 변화 패턴을 찾습니다.

예제 9.2 . 계열 요소의 합 결정: .

프로그램 조각:

S = 0 ' S – 계열의 합

i = 1 To 16 ' 카운터 i는 분수의 분모입니다.

S = S + 1/i ' 합계의 누적

“S = “를 인쇄하세요. S ' 금액 S를 폼에 출력

카운터 i의 각 값에 대해 표현식 1/i는 1부터 시작하여 계열의 요소를 순차적으로 형성합니다.

예제 9.3 . 일련의 요소의 합 계산
.

프로그램 조각:

S = 0 ' S – 계열의 합

i = 1 To 18 ' 카운터 i – 분자

S = S + i/(i + 1) ' 분모는 분자보다 1이 큽니다.

“S = “를 인쇄하세요. S ' 금액 S를 폼에 출력

예제 9.4 . 합계 계산: 5 + 8 + 11 + … + 32 + 35

프로그램 조각:

S = 0 ' S – 계열의 합

i = 5 To 35의 경우 3단계 ' 우리는 산술을 얻습니다 _

분모 3을 사용한 진행

"S = "를 인쇄합니다. 에스

예제 9.5. 주어진 x에 대한 합을 계산합니다.

문제를 분석하면 X의 차수는 1에서 10까지 다양합니다. 이 경우 X 계수의 분자는 차수보다 1만큼 크고 분모는 2만큼 큽니다. 다음을 사용하여 차수의 값을 형성합니다. 카운터 나. 그런 다음 다음과 같은 프로그램(조각)을 만들 수 있습니다.

S = 1 ' S – 계열의 합

i = 1 To 10 '의 경우 카운터 i와 마찬가지로 X에서 각도가 변경됩니다.

S = S + (-1)^i*(i + 1)*x^i / (i + 2)

"S = "를 인쇄합니다. 에스

사이클을 위한다음사용입출력 그리고배열 처리 .

예제 9.6. 배열 요소 B(N).

프로그램 조각:

' 변수 N, _에 값 할당을 생략합니다.

양식의 txtN 텍스트 필드에 입력되었습니다.

B(i) = InputBox("항목 B를 입력하세요(" & i & ")", _

"입력 배열 B(" & N & “)”)

인쇄 " "; B(i);

기능 입력 상자() 닫기 버튼, 지정된 메시지, 입력 필드, 버튼이 있는 대화 상자를 표시합니다. 좋아요,취소,주어진 헤더가 있는(또는 헤더가 없는). 숫자 12(배열 N의 크기)를 입력하면 이 예에서 처음 나타날 때 이 창은 다음과 같습니다.

보시다시피 메시지는 요소 B(1) 입력텍스트 상자에 첫 번째 요소의 값을 입력하라는 메시지가 표시됩니다. 배열에 12개의 요소가 포함되어 있으므로 이 창은 12번 나타납니다. 이는 양식 제목에서 따온 것입니다. 초대장의 요소 B(i)의 인덱스는 1에서 12까지 다양합니다.

배열 B(N)의 요소 값만 양식에 표시하려면 루프 본문이 하나의 명령문으로 구성됩니다.

일부 작업을 수행하기 위해 배열 요소를 보는 것도 For...Next 루프 연산자를 사용하여 수행됩니다.

주자 1차원 배열 처리의 예.

예제 9.7 . 배열 B의 최대 요소 결정().

초기 데이터 입력과 결과 출력을 제외하고 알고리즘을 간략하게 설명하면 다음과 같습니다.

    배열의 첫 번째 요소 값을 입력할 변수 Bmax와 배열의 첫 번째 요소 인덱스인 1을 할당할 변수 Imax를 선언해 보겠습니다.

    루프에서는 For...Next 연산자를 사용하여 두 번째 요소부터 시작하여 배열의 모든 요소를 ​​살펴봅니다. If...Then 연산자를 사용하여 해당 값을 Bmax 변수에 저장된 값과 비교합니다.

    배열 요소의 값이 Bmax 값보다 큰 것으로 밝혀지면 Bmax에 이 요소의 값이 할당되고 값 Imax에 이 배열 요소의 인덱스가 할당됩니다.

루프가 끝나면 변수 Bmax에는 최대 요소의 값이 포함되고 Imax에는 해당 인덱스(숫자)가 포함됩니다.

알고리즘의 이 부분에 대한 프로그램입니다.

Bmax = B(1): Imax = 1

B(i) > Bmax이면 Bmax = B(i): Imax = i

예제 9.8. 배열의 양수 요소의 합계, 곱 및 개수 결정().

변수: S, P, K – 각각 양수 요소의 합, 곱 및 수입니다.

연산그러한 정의:

    변수 S와 K에 0을 할당하고 변수 P에 1을 할당합니다. 일반적으로 합계가 누적되는 변수(여기서는 S와 k)는 루프 전에 항상 0으로 재설정되고 제품이 계산되는 항목에는 1이 할당됩니다.

    For...Next 루프를 사용하여 배열의 모든 요소를 ​​살펴보고 해당 요소가 양수인지(D(i) > 0) 확인합니다.

    요소가 양수인 것으로 밝혀지면 해당 값을 합계 S의 값에 추가하고 새 합계를 동일한 변수에 저장합니다. 변수 P에 요소의 양수 값을 곱하고 변수 P에도 저장합니다. 그리고 변수 K에 1을 더하고 동일한 변수에 새 값을 저장합니다.

프로그램알고리즘의 이 부분은 다음과 같습니다.

S = 0: P = 1: K = 0

D(i) > 0이면

S = S + D(i) ‘ 이렇게 금액이 쌓인다 _

배열 요소 D(i)의 양수 값

P = P*D(i) ' 양수 곱의 정의

' 배열 요소

K = K + 1 ' 이 연산자는 COUNTER라고 하는데 여기서는

'는 양수 배열 요소의 수를 정의합니다.

예제 9.9. 홀수 배열 요소의 합, 곱, 개수, 평균 구하기().

다음은 그러한 정의를 위한 프로그램의 일부입니다.

S = 0: P = 1: K = 0

D(i) Mod 2인 경우<>0 그런 다음

Ssr = S/k ' 홀수 요소의 평균 계산

이 프로그램 부분을 예제 9.8의 프로그램과 비교해 보세요. 이 프로그램은 이전 프로그램을 거의 완전히 반복합니다. If 문의 조건만 변경되었습니다. 조건D(i) 모드 2<>0은 2로 균등하게 나누어지지 않는 배열 D(i)의 요소, 즉 홀수 ​​요소를 찾고 있음을 의미합니다. D(i) Mod 2 = 0이라는 조건을 확인하면 배열의 짝수 요소를 선택하게 됩니다.

알려진 바와 같이, 나눗셈은 모드나눗셈의 나머지를 정수로 제공합니다. 예를 들어 d = 34Mod4 연산자를 실행한 후 변수 d는 2와 같습니다. 따라서 4의 배수인 배열 요소를 선택하려면 D(i) Mod 4 = 0 조건을 확인해야 합니다. 조건은 다음과 같습니다. 다른 숫자의 배수인 요소를 찾는 경우에도 비슷합니다. 이 다른 숫자는 4 대신 쓰여집니다.

예제 9.10. 배열 요소 작성아르 자형(N), 5의 배수를 다른 배열로 변환하고 새 배열을 양식에 출력합니다.

예를 들어 R5(N)과 같은 다른 배열을 지정해 보겠습니다. 극단적인 경우 모든 요소가 5의 배수가 될 수 있으므로 이 새 배열의 크기는 원래 배열과 동일한 것으로 가정해야 합니다.

문제 알고리즘:

    카운터 k를 재설정합니다. For...Next 루프 연산자를 사용하여 배열 R(N)의 모든 요소를 ​​살펴봅니다.

    If...Then 연산자를 사용하고 배열 요소를 Mod로 나누어 각 요소에 5의 배수가 있는지 확인합니다.

    요소가 5의 배수인 경우 k=k+ 1 유형의 카운터를 사용하여 1부터 시작하여 배열 R5(N)의 인덱스를 형성하고 이를 다른 배열 –R5(N)에 씁니다.

    k가 0과 다른 경우 양식에 배열 R5()를 표시합니다.

    k가 0이면 "5로 나눌 수 있는 요소가 없습니다."가 출력됩니다.

프로그램 조각:

R(i) Mod 5이면 k = k + 1: R5(k) = R(i)

만약 k<>0 그런 다음

"5로 나눌 수 있는 요소가 없습니다"를 인쇄하세요.

루프는 다른 루프 내에 중첩될 수 있습니다.

작품을 보여드리겠습니다 중첩 루프 . 아래 프로그램은 사이클 카운터 i, j 및 k의 값을 표시합니다. i, j, k의 출력에서 ​​중첩 루프가 실행되는 방식이 명확해집니다.

비공개 하위 frmCycle_DblClick()

ScaleMode = 4' 단위 – 기호

i = 1 To 3 '외부 루프

"i = "를 인쇄합니다. 나;

For j = 1 To 4 '첫 번째 중첩 루프

CurrentX = TextWidth("i = 1 ") + 5

"j = "를 인쇄합니다. 제이;

CurrentX = TextWidth("i = 1 j = 1 ") + 7

k = 1 To 5 '두 번째 중첩 루프

표시된 형식(그림 1)은 세 루프 모두의 카운터 출력 결과를 보여줍니다. 외부 루프 – 카운터 i, 첫 번째 중첩 루프 – 카운터 j, 두 번째, 가장 안쪽 루프 – 카운터 k. 우리가 볼 수 있듯이, 가장 느린 카운터는 외부 루프입니다(포이) 그리고 "가장 빠른" 것은 가장 안쪽 루프의 카운터입니다(에 따르면).케이).

frmCicli 폼에서 마우스 왼쪽 버튼을 더블 클릭하면 프로그램이 실행됩니다.

CurrentX, CurrentY – Print 메서드를 사용하여 정보를 표시하기 위한 시작점의 X, Y 좌표를 지정하는 양식 속성입니다(양식의 X 및 Y 축 위치는 그림 1 참조).

TextWidth()는 함수에 지정된 텍스트의 너비를 큰따옴표로 묶은 인수로 반환하는 함수입니다.

중첩 루프는 2차원 배열(행렬)을 처리할 때 사용됩니다. 그러나 2차원 배열 요소의 입력 및 출력을 제외한 일부 작업에서는 하나의 루프로 제한할 수 있습니다. 행렬 프로그래밍의 몇 가지 예를 살펴보겠습니다.

예제 9.11. 정수 행렬(2차원 배열)의 입력 및 출력인타(N).

매트릭스를 입력할 수 있습니다. 행 및 열 기준 . 배열 요소의 출력을 입력한 직후 형식으로 프로그래밍하면 한 줄씩 더 쉽습니다.

매트릭스 입력 및 출력한 줄씩 - 조각 1.

Dim M을 정수로, N을 정수로, i를 정수로, j를 정수로

Dim intA() As Integer ' 동적 배열 선언

M = Val(txtN.Text) ‘ M – 줄 수

N = Val(txtN.Text) ‘ N – 열 수

ReDim intA(M, N) As Integer ‘ 배열을 재정의합니다

i = 1 To M ' i는 완전히 될 때까지 그 값을 유지합니다.

'j의 중첩 루프는 실행되지 않습니다.

인쇄 " "; intA(i,j); ' 한 줄씩 출력

인쇄 ' 새 줄의 시작 부분으로 이동

열별로 행렬을 입력하려면 j에서 외부 루프를 만들고(열 번호 지정) 내부 루프를 i에서 만들어야 합니다(행 번호 지정).

매트릭스 입력 및 출력열별 조각 2.

PrY = 2500: CurrentY = PrY ' PrY는 시작의 Y 좌표를 설정합니다.

'는 양식의 각 열의 첫 번째 요소를 표시합니다.

j = 1 To N ' j는 완전히 끝날 때까지 그 값을 유지합니다.

'i의 중첩 루프는 실행되지 않습니다.

intA (i, j) = InputBox("intA(" & i & “,” & j & ") 요소를 입력하세요.", _

"입력 행렬 intA(" & M & “,” & N & ")")

인쇄 탭(6 * j); intA(i, j) ' 열별로 출력

CurrentY = PrY ' - 첫 번째 요소 표시

' 다음 열

이 두 번째 프로그램 조각은 첫 번째 조각의 처음 5줄을 반복하지 않습니다. Tab(6 * j) 함수는 양식의 왼쪽 가장자리에서 시작하여 한 줄(문자 단위)로 출력 시작을 설정합니다. 여기서 좌표 PrY는 2500트윕과 동일하지만 다른 값을 선택할 수 있습니다.

예제 9.12 . 배열 요소 값 순서 지정V(N) 오름차순.

배열을 정렬하는 데는 여러 가지 알고리즘이 있습니다. 그 중 하나는 다음과 같습니다. 중첩 루프 사용을 위한다음첫 번째부터 두 번째 요소까지 요소를 선택하고 각 요소를 후속 요소와 비교합니다. 후속 요소가 선택한 요소보다 작은 것으로 밝혀지면 해당 요소를 바꿉니다.

이 알고리즘을 구현하는 프로그램의 일부:

i = 1에서 N – 1의 경우

j = i + 1에서 N으로

만약 V(j)< V(i) Then P = V(i): V(i) = V(j): V(j) = P

프로그램의 이 부분을 설명하겠습니다.

카운터 i가 있는 외부 루프를 사용하여 후속 요소와 비교할 요소 V(i)를 선택합니다. 카운터 j가 있는 내부 루프는 비교를 위해 V(j)의 후속 요소를 선택합니다. 초기 값은 i + 1과 같습니다. 이는 후속 요소의 첫 번째 요소입니다.

요소 V(i) 및 V(j)의 값을 교환하기 위해 배열 요소 중 하나의 값을 일시적으로 "숨기는" 변수 P를 도입합니다(프로그램에서 이는 V(i )). 그런 다음 요소 V(i)에는 요소 V(j)의 값이 할당되고 요소 V(j)에는 변수P에 저장되는 값 V(i)가 할당됩니다. P에서 값 V(j)를 "숨기면" 값을 교환하는 코드는 다음과 같습니다. P = V(j): V(j) = V(i): V(i) = P . 결과는 변경되지 않습니다.

에게 배열을 내림차순으로 정렬, V(j) > V(i) 형식으로 검증 조건을 작성하는 것으로 충분합니다. 즉, 부등호를 다른 기호로 변경합니다.

배열이 숫자가 아니라 문자열이고 성이 배열 요소에 입력된 경우 예제 9.12의 프로그램을 사용하여 성 목록을 알파벳순으로 정렬할 수 있습니다. 사실 컴퓨터에 사용되는 알파벳 문자의 경우 다음과 같은 부등식이 적용됩니다.< Б < В < Г….< Я и т. д., поскольку числовые коды букв алфавита последовательно увеличиваются, начиная с А и до конца алфавита. Это же справедливо и для букв английского алфавита.

예제 9.13 . 행렬의 홀수 열에 대한 양수 요소의 합 계산에프(, N) 양식에 금액을 출력합니다.

프로그램 알고리즘:

    2단계의 외부 루프를 사용하여 첫 번째 열부터 시작하여 행렬의 홀수 열에 대한 인덱스를 형성합니다.

    양수 요소의 합이 누적되는 합계 S를 재설정합니다.

    내부 루프에서 배열 요소의 부호를 확인합니다.

    배열 요소가 양수(> 0)이면 합계 S를 계산합니다.

    내부 루프가 끝난 후 양식에 합계 S를 표시합니다.

파편 프로그램들:

j = 1에서 N의 경우 2단계

F(i, j) > 0이면 S = S + F(i, j)

"열 합계"를 인쇄합니다. 제이; ":"; S ' j – 열 번호!

중첩 루프를 사용하면 정리할 수 있습니다. 옵션 열거 분석적으로 해결할 수 없는 문제를 해결합니다. 검색 결과, 솔루션 옵션이 얻어지며, 그 중에서 문제의 조건을 충족하는 하나 이상이 선택됩니다.

예제 9.14. 1801 루블이 있습니다. 31루블에 초콜릿을 몇 개나 살 수 있나요? 모든 돈을 완전히 소비하기 위해 18 루블의 빵.

프로그램:

금액 = 1801

AllChocolates = 합계\31: AllBulks = 합계\18

i = 1의 경우 AllChocolates에

j = 1인 경우 VseBulk로

가격 = i * 31 + j * 18 '총 구매 가격

가격 = 1801이면

"초콜릿: "을 인쇄하세요. 나; 탭(19); "벌록: "; 제이

러시아어로 명명된 변수를 사용하는 프로그램을 설명하겠습니다.

먼저, 전체 금액으로 구매할 수 있는 초콜릿 단독 또는 롤만 최대 개수를 결정합니다. 획득한 AllChocolates 및 AllBulks 값을 사용하여 초콜릿 및 롤 개수에 대한 검색 횟수를 제한합니다. 초콜릿 개수(i)와 롤 개수(j)의 각 값에 대해 우리는 총 구매 가격을 결정합니다. 계산된 가격이 1801이면 선택한 옵션이 문제에 대한 솔루션 중 하나입니다.

Tab() 함수는 이 함수 뒤에 오는 정보가 양식 가장자리의 어느 위치에 표시되는지 지정합니다. Tab(19)이면 19번째 위치부터입니다.

프로그램은 3가지 가능한 구매 옵션을 표시합니다.

초콜릿 7, 롤 88

초콜릿 25, 롤 57

초콜릿 43개, 번스 26개

명확한 답변을 제공하려면 추가 조건을 공식화해야 합니다. 예를 들어, "초콜릿보다 빵이 더 적게 구입되었습니다." 그렇다면 유일한 해결책은 세 번째 옵션이 될 것입니다.

중첩 루프 프로그래밍을 사용하여 무차별 대입 방식으로 간단하게 해결할 수 있는 수학적 문제가 많이 있습니다.