Loop para vba excel descrição. "Declarações de loop VBA

Os loops permitem que você execute uma ou mais linhas de código várias vezes. O VBA suporta os seguintes loops:

Para...Próximo Para Cada...Próximo... Loop

A construção Para. . . próximo. Quando o número de repetições é conhecido antecipadamente, um loop For é usado. . . próximo. Um loop For usa uma variável chamada variável de loop ou contador de loop que aumenta ou diminui em um valor especificado cada vez que o loop é repetido. A sintaxe para esta construção é:

For counter = start To end Próximas instruções

Os parâmetros contador (contador), início (início do ciclo), fim (fim do ciclo) e incremento (incremento) são numéricos.

Observação. O parâmetro de incremento pode ser positivo ou negativo. Se for positivo, o parâmetro inicial deve ser menor ou igual ao parâmetro final, caso contrário o loop não será executado. Se o parâmetro de incremento for negativo, então o parâmetro inicial deve ser maior ou igual ao valor do parâmetro final para executar o corpo do loop. Se o parâmetro Step não estiver definido, o valor padrão do parâmetro de incremento é 1.

O VBA executa o loop For na seguinte sequência:

1. Configura o contador de variável de loop para iniciar.

2. Compara o valor do contador da variável de loop e o valor do parâmetro final. Se a variável do contador for maior, o VBA encerra o loop. (Se o valor do parâmetro de incremento for negativo, o VBA encerrará o loop se o valor do contador da variável de loop for menor que o valor do parâmetro final.)

3. Executa as instruções do corpo do loop.

4. Aumenta o valor do contador da variável de loop em 1, ou pelo valor do parâmetro de incremento, se for fornecido.

5. Repita os passos 2 a 4.

Considere um exemplo: Calcule o valor da função f(t)

dado a, b, n, se t muda de a para b em incrementos de Dt=(b-a)/(n-1).

Sub exemplo3() Dim f() As Single Dim a As Single, b As Single, t As Single, dt As Single Dim i As Integer, n As Integer Call read("a1", a) : Call read("b1" , b): Chama read("c1", n) ReDim f(1 To n - 1) dt = (b - a) / (n - 1): t = a Chamada("a2", "i") : Call out("b2", "t") : Call out("c2", "f(t)") Para i = 1 To n - 1 t = t + dt Se t<= -1 Then f(i) = -1 ElseIf t >1 Then f(i) = 1 Else f(i) = t End If Call out("a" & (2 + i), i) : Call out("b" & (2 + i), t): Call out out("c" & (2 + i), f(i)) Próximo i End Sub

A construção Para Cada. . . Próximo

Para cada laço. . . O próximo é como um loop For. . . Em seguida, mas repete um grupo de instruções para cada elemento de um conjunto de objetos ou de uma matriz, em vez de repetir as instruções um determinado número de vezes. É especialmente útil quando você não sabe quantos elementos estão no conjunto.

Sintaxe da construção de loop For Each. . . Proximo é:

Para cada elemento Em declarações de grupo Próximo elemento

Esteja ciente das seguintes restrições ao usar um loop For Each. . . Próximo:

Para conjuntos, o parâmetro de elemento só pode ser uma variável do tipo variante, uma variável geral do tipo objeto ou um objeto listado no Pesquisador de objetos

Para arrays, o parâmetro element só pode ser uma variável do tipo Variant

Você não pode usar um loop For Each. . . Em seguida, com uma matriz do tipo definido pelo usuário porque uma variável do tipo variante não pode conter um valor do tipo definido pelo usuário

Fazer...desenho de loop

O loop Do é usado para executar um bloco de instruções um número ilimitado de vezes. Existem várias variações da construção Do. . . Loop, mas cada um deles avalia uma expressão condicional para determinar quando sair do loop. Como no caso da construção If. . . Em seguida, a condição deve ser um valor ou uma expressão avaliada como False (zero) ou True (diferente de zero).

Na construção a seguir, Do . . . As instruções de loop são executadas desde que o valor da condição seja True (True):

Do While Declarações de Loop de Condição

Ao executar este loop, o VBA primeiro verifica a condição. Se a condição for False, ela ignora todas as instruções de loop. Se for True, o VBA executa as instruções de loop, retorna à instrução Do While novamente e testa a condição novamente.

Portanto, o loop representado por esta construção pode ser executado qualquer número de vezes, desde que o valor da condição não seja zero ou True. Observe que as instruções do corpo do loop nunca são executadas se, na primeira vez que a condição for verificada, ela for falsa (False).

Considere um exemplo: Calcule a soma de uma série

com uma determinada precisão.

Subexemplo4() Dim e As Single, x As Single, s As Single Dim m As Single, p As Single, i As Single Call read("a1", x) : Call read("b1", e) s = 0 : i = 1: m = 1: p = -1 Call out("a2", "i") : Call out("b2", "m") : Call out("c2", "s") Do While Abs(m) >= e p = -p * x m = p / i s = s + m Call out("a" & (2 + i), i): Call out("b" & (2 + i), Abs (m)): Call out("c" & (2 + i), s) i = i + 1 Loop End Sub

Outra variação do construto Do. . . Loop primeiro executa as instruções do corpo do loop e, em seguida, verifica a condição após cada execução. Essa variação garante que as instruções no corpo do loop sejam executadas pelo menos uma vez:

Faça instruções Loop While condição

As outras duas variedades da construção do loop são semelhantes às anteriores, exceto que o loop é executado enquanto a condição for falsa (False):

O loop não é executado ou é executado muitas vezes:

Faça até condição

Declarações de loop

O loop é executado pelo menos uma vez:

operadores

Condição de loop até

7.2 Loops aninhados.

Você pode colocar estruturas de controle dentro de outras estruturas de controle (por exemplo, um bloco If... Then dentro de um loop For... Next). Uma estrutura de controle colocada dentro de outra estrutura de controle é chamada de aninhada.

A profundidade do aninhamento de estruturas de controle no VBA não é limitada. Para melhorar a legibilidade do código, é prática comum mudar o corpo de uma construção de decisão ou loop no programa quando estruturas de controle aninhadas são usadas.

Ao aninhar um ou mais outros loops em um loop, fala-se de loops aninhados, que distinguem entre loops externos (inclusivos) e internos (aninhados).

Considere um exemplo de soma dos elementos Aij da matriz A(n,m) linha por linha.

Sub example5() Dim a() As Single, s() As Single Dim n As Integer, m As Integer Dim i As Integer, j As Integer Call read("a1", n): Chame read("b1", m ) ReDim a(1 To n, 1 To m), s(1 To n) "Ler matriz Para i = 1 To n Para j = 1 To m Chame readcell(i + 1, j, a(i, j)) Próximo j Próximo i "Cálculo Para i = 1 To n s(i) = 0 Para j = 1 To m s(i) = s(i) + a(i, j) Próximo j Chame outcell(i + 1, m + 1 , s(i)) Próximo i Fim Sub

Observe que o primeiro Next fecha o loop For interno e o último Next fecha o loop For externo. Da mesma forma, para instruções If aninhadas, as instruções End If são aplicadas automaticamente para fechar a instrução If mais próxima. Estruturas aninhadas Do . . . Os loops funcionam de maneira semelhante: a instrução Loop mais distante corresponde à instrução Do mais distante.

Quando a entrada/saída de elementos de uma matriz bidimensional em uma planilha do Microsoft Excel, é conveniente usar procedimentos de entrada/saída personalizados:

Sub readcell(i Como Integer, j Como Integer, val Como Variante) val = Folha1.Cells(i, j).Value End Sub Sub outcell(i Como Integer, j Como Integer, val Como Variant) Leaf1.Cells(i, j).Value = val End Sub

onde I é o número da linha, j é o número da coluna da planilha.

Deixando estruturas de controle

A instrução Exit permite que você saia diretamente de um loop For, um loop Do, um procedimento Sub ou um procedimento Function. A sintaxe da instrução Exit é simples:

Para contador = início Para fim [bloco de instruções] [bloco de instruções] Próximo Faça [(While | Até) condição] [bloco de instruções] [bloco de instruções] Loop

Exit For dentro de um loop For e Exit Do dentro de um loop Do podem aparecer várias vezes.

A instrução Exit Do funciona com todas as variações da sintaxe do loop Do.

As instruções Exit For e Exit Do são usadas quando é necessário encerrar o loop imediatamente, sem continuar outras iterações ou sem aguardar a execução de um bloco de instruções no corpo do loop.

Quando você usa a instrução Exit para sair de um loop, os valores da variável de loop dependem de como o loop termina:

Quando o loop termina normalmente, o valor da variável do loop é um a mais do que o limite superior do número de loops

Quando o loop termina prematuramente, a variável do loop retém seu valor, que recebeu, levando em consideração as regras usuais

Quando o loop termina no final do conjunto, a variável do loop é Nothing se for uma variável de objeto ou Empty se for uma Variant

Última atualização: 30/10/2015

Outro tipo de estrutura de controle são os loops. VB.NET usa vários tipos de loops.

Para...Próximo Loop

Este loop é executado um certo número de vezes, e este número é definido pelo contador:

Para i As Integer = 1 To 9 Console.WriteLine("O quadrado de (0) é (1)", i, i * i) Next

Aqui a variável i desempenha o papel de um contador. Depois da palavra Para colocamos o valor máximo do contador. A cada ciclo, o valor do contador é incrementado em um. E este valor é comparado com o valor após Para. Se esses dois valores forem iguais, o loop termina.

Ao trabalhar com loops, podemos aumentar o valor do contador a cada passagem, não apenas por um, mas por qualquer número em geral. Para fazer isso, você deve usar a palavra-chave degrau e depois disso, especifique o passo do loop pelo qual o valor do contador aumentará, ou você pode aumentar o contador diretamente no loop:

Para i As Integer = 1 a -9 Passo -1 Para j As Integer = 1 a 9 Console.WriteLine("O produto de iej é (0)", i * j) j += 1 Next Next

Observe que um valor negativo é escolhido como o passo no primeiro loop, e o valor do contador diminui em um a cada passagem. No loop interno, o contador j é incrementado em 2 em cada iteração, porque ele é incrementado em um por padrão, e também o incrementamos explicitamente no loop em um. Como resultado, o loop interno funciona cinco vezes e o externo nove, ou seja, de fato, são obtidos 45 ciclos.

Para cada...Próximo Loop

O loop For Each itera sobre os elementos em um grupo específico, como uma matriz ou uma coleção. Suponha que temos algum array do tipo Integer e precisamos inicializar este array com valores aleatórios e então exibir todos os seus elementos na tela:

"Cria um array de cinco números Dim nums(4) As Integer Dim r As New Random() "inicializa o array For i As Integer = 0 To nums.Length - 1 nums(i) = r.Next(100) Next " Exibir array de elementos Para cada i As Integer In nums Console.Write("(0) ", i) Next

Na instrução For Each, primeiro especificamos uma variável que levará os valores dos elementos do array. E depois da palavra-chave Dentro Especifique o grupo no qual você deseja classificar todos os elementos.

loop while

Em um loop While, ele é executado enquanto uma determinada condição, especificada após a palavra While, for atendida:

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

Fazer loop

Um loop Do, como um loop While, é executado enquanto uma determinada condição for atendida. No entanto, tem diferentes formas. Assim, no exemplo a seguir, a condição é verificada primeiro e, em seguida, o bloco de código definido no loop é executado:

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

Neste caso, o laço é executado enquanto o valor de j for maior que zero. Mas existe outra entrada onde a palavra While é usada em vez da palavra Até, e o loop é executado até que uma determinada condição seja atendida, ou seja, até que o valor de j se torne menor que zero:

Dim j As Integer = 10 Faça Até j< 0 Console.WriteLine(j) j -= 1 Loop

Se inicialmente a condição especificada no loop for falsa, o loop não funcionará. Mas podemos definir uma verificação no final do loop, e assim nosso loop será executado pelo menos uma vez:

Dim j As Integer = -1 Do Console.WriteLine(j) j -= 1 Loop Até j< 0 "либо Do Console.WriteLine(j) j -= 1 Loop While j > 0

Declarações Continuar e Sair

Muitas vezes há a necessidade de não esperar o fim do ciclo, mas sair imediatamente do ciclo, se uma determinada condição for atendida. Para isso, use o operador saída, seguido pelo tipo de loop do qual sair, por exemplo, Exit Do (Exit While):

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

Há outra tarefa - sair não do loop, mas da passagem ou iteração atual e ir para a próxima. Para fazer isso, use a instrução Continue, após a qual eles indicam o tipo de loop do qual a saída é feita, por exemplo, Continue While:

Dim r As New Random() Dim num As Integer = r.Next(100) Para i As Integer = 0 To 10 num -= 7 If num< 50 AndAlso num >25 Continue para End If Console.WriteLine(num) Next

Neste caso, em cada passagem do laço, subtraímos o número 7 de num e então vemos se o número num pertence ao intervalo de 25 a 50. E se pertencer, vamos para uma nova iteração do laço, e se não, nós o exibimos na tela.

Trabalho de laboratório sobre os fundamentos da programação

2.1. Tabulação de funções representadas analiticamente
e convergindo nas proximidades

Objetivo

· Consolidação de conhecimentos teóricos sobre os fundamentos da organização de estruturas ramificadas e cíclicas.

· Aquisição de competências práticas de programação utilizando estruturas ramificadas e cíclicas no sistema Visual Basic.

Existem três tipos de instruções de loop em VB:

ciclo de contagem: Para…Para…Próximo

Loops com pré-condições: Do While...Loop, Do Until...Loop, While…WEnd

Loops com pós-condições: Do...Loop While, Do...Loop Until.

Ciclo de contagem - permite percorrer um conjunto de instruções um número especificado de vezes. Sua sintaxe é a seguinte:

Por contador = Começar Para o fim

[operadores]

[operadores]

Próximo[ contador]

Parâmetro contadoré uma variável numérica (inteiro, real ou Data, Variante, Moeda) que é incrementada automaticamente após cada iteração. Valor inicial contador igual ao parâmetro Começar, e o parâmetro final é o fim. Se não for especificado, então o passo é considerado igual a 1, o valor do passo pode ser alterado. Pode ser um número positivo ou negativo.

Existem quatro construções sintáticas para o Do….Loop:

As instruções entre as palavras-chave Do...Loop são executadas um número especificado de vezes dependendo da condição. Por exemplo, no fragmento de programa a seguir, quando C = 100, a condição será atendida e o loop entrará. Dentro do loop, o procedimento é chamado e o valor de C diminui em 1. Em seguida, a condição é verificada novamente (C > 0) e as instruções do loop são executadas novamente (serão executadas 100 vezes no total), até C = 0. Quando a condição C > 0 se torna falsa e o loop para.

Faça enquanto C > 0

O mesmo fragmento de programa executado usando um loop de pré-condição na sintaxe 2:

Neste caso, o loop é executado enquanto a condição for False, ao contrário do caso anterior, ou seja, continua antes da cumprimento da condição C = 0.

As instruções de loop na sintaxe 3 e 4 são muito semelhantes às duas primeiras, exceto que a condição nãoé avaliada até que o loop tenha sido executado pelo menos uma vez.

Nas sintaxes desses loops, você pode usar os operadores de saída incondicional do loop Exit For e Exit Do, que permitem transferir o controle para o operador por trás do loop. Por exemplo, no fragmento de programa a seguir, se o valor inicial de C for >50, o loop será interrompido imediatamente.



Faça até C<= 0

MsgBox "Iniciar. valor é maior que o permitido”, “Erro de entrada”

O loop While...Wend foi usado nas primeiras versões do Visual Basic. Sua sintaxe é a seguinte:

Enquanto<условие>

<Операторы>

Diferentemente do Do..Loop, o loop While ..Wend não possui uma segunda opção, na qual o teste de condição é realizado no final do loop. Além disso, ele não possui uma instrução de saída de loop como Exit Do.

VBA. Organização de ciclos.

As instruções de loop são usadas para repetir a execução de uma ação ou grupo de ações um determinado número de vezes. O número de repetições (iterações de loop) pode ser predefinido ou calculado.

O VBA oferece suporte a dois tipos de construções de loop:

  1. Loops com um número fixo de repetições ( ciclos com contador).
  2. Loops com um número indefinido de repetições ( laços condicionais).

Para todos os tipos de ciclos, o conceito é usado corpo do laço A que define um bloco de instruções entre as instruções de início e fim do loop. Cada repetição das instruções no corpo do loop é chamada iteração.

Ciclos Fixos

O VBA fornece duas estruturas de controle para organizar um loop fixo: For ... Next (um loop com um contador) e For Each ... Next (um loop com uma enumeração).

Para…Próxima declaração é um loop típico com um contador que executa um determinado número de iterações. A sintaxe da instrução For … Next é:

Por<счетчик> = <начЗначение>Este<конЗначение>

<блок операторов>

Próximo[<счетчик>]

Um exemplo de uso da instrução For … Next.

Listagem 1. Para … Próxima instrução

‘ OBJETIVO: Escrever um programa que receba dois números do usuário.

‘ Soma todos os números no intervalo dado por esses dois números e, em seguida,

‘ Exibe a soma resultante.

Subamostra 7()

Dim i As Integer 'contador de loops

Dim sStart 'inicia o valor do contador

Dim sEnd ' valor final do contador

Dim sSum As Long 'soma resultante

sStart = InputBox("Digite o primeiro número:")

sEnd = InputBox("Digite o segundo número:")

sSoma = 0

Para i = CInt(sStart) Para CInt(sEnd)

sSoma = sSoma + i

Proximo eu

MsgBox “A soma dos números de ” & sStart & ” a ” & sEnd & ” é: ” & sSum

final sub

Para cada... Instrução do Próximo Looppertence à categoria de operadores de tipo de objeto, ou seja, aplica-se principalmente a coleções objetos, bem como matrizes . O corpo do loop é executado um número fixo de vezes, correspondendo ao número de elementos no array ou coleção. O formato da instrução For Each … Next é:

Para cada<элемент>Dentro<группа> <блок операторов>Próximo[<элемент>]

Loops condicionais (loops indefinidos)

Loops condicionais são usados ​​quando ações repetidas precisam ser executadas apenas sob certas condições. O número de iterações não é definido e no caso geral pode ser igual a zero (em particular, para loops com pré-condição). O VBA oferece aos desenvolvedores várias estruturas de controle para organizar loops condicionais:

  • Quatro tipos de loops Do..Loop, que diferem no tipo de condição que está sendo verificada e no tempo de execução desta verificação.
  • Um loop While… Wend ininterrupto.

Faça enquanto... Loop - Típico loop com pré-condição. A condição é verificada antes que o corpo do loop seja executado. O ciclo continua seu trabalho até que<условие>é executado (ou seja, é True). Como a verificação é realizada no início, o corpo do loop nunca pode ser executado. Formato do loop Do While…:

Fazer enquanto<условие>

<блок операторов>

ciclo

Listagem 2. Faça While … Loop

‘ OBJETIVO: Escrever um programa que aceite entrada do usuário

‘uma sequência arbitrária de números. A entrada deve ser encerrada

‘ somente depois que a soma dos números ímpares inseridos exceder 100.

Subamostra8()

Dim OddSum As Integer

Dim OddStr As String 'string com números ímpares

Dim Num 'para aceitar números de entrada

OddStr = "" 'inicialização da string de saída

OddSum = 0 'inicialização da soma OddSum

Faça enquanto OddSum< 100 ‘начало цикла

Num = InputBox("Digite o número: ")

Se (Número Mod 2)<>0 Então ‘paridade par

OddSum = OddSum + Num ‘acumulação da soma de números ímpares

OddStr = OddStr & Num & ” ”

Fim se

ciclo

'exibe uma string com números ímpares

Prompt MsgBox:=”Números ímpares: ” & OddStr

final sub

Faça... Loop While Declaraçãodestinado à organizaçãoloop com pós-condição. A condição é verificada após o corpo do loop ser executado pelo menos uma vez. O ciclo continua até<условие>permanece verdadeiro. Do...Loop While formato:

Fazer<блок операторов>loop enquanto<условие>

Listagem 3. Loop com pós-condição

‘ OBJETIVO: Fazer um programa para o jogo “Adivinhe o Número”. O programa deve ser aleatório

‘ de forma a gerar um número na faixa de 1 a 1000, o usuário deve

‘Adivinhe este número. O programa exibe uma dica para cada número inserido.

' "mais ou menos".

Subamostra8()

Randomize Timer ' inicialização do gerador de números aleatórios

Dim msg As String ‘ string de mensagem

Dim SecretNumber As Long, UserNumber As Variant

Begin: SecretNumber = Round(Rnd * 1000) ‘ número gerado por computador

UserNumber = Empty ‘ o número inserido pelo usuário

Jogabilidade

Selecionar caso verdadeiro

Case IsEmpty(UserNumber): msg = "Digite um número"

Caso UserNumber > SecretNumber: msg = “Muitos!”

Número de usuário do caso< SecretNumber: msg = “Слишком мало!”

Finalizar seleção

UserNumber = InputBox(prompt:=msg, Title:=”Adivinhe o número”)

Loop enquanto UserNumber<>número secreto

'exame

If MsgBox("Você quer jogar de novo?", vbYesNo + vbQuestion, "Você acertou!") = vbYes Then

Ir para começar

Fim se

final sub

Faça até... faça um loop e faça... faça um loop até que faça um loop são inversões de laços condicionais previamente considerados. Em geral, eles funcionam de maneira semelhante, exceto que o corpo do loop é executado sob uma condição falsa (ou seja,<условие>=Falso). O formato do Do Until... Loop é:

Fazer até<условие> <блок операторов>ciclo

O formato do loop Do … Loop Until é:

<блок операторов>

Loop até<условие>

Tarefa prática:Reescreva os programas nas Listas 10 e 11 usando instruções de loop invertido.

Enquanto Loop ... Wend também se aplica a loops condicionais. Esta instrução corresponde totalmente à estrutura Do While… Loop. O formato do loop While … Wend é:

Enquanto<условие>

<блок операторов>

Wend

Uma característica distintiva desta instrução é a impossibilidade de terminação forçada (interrupção) do corpo do loop (a instrução Exit Do não funciona no loop While ... Wend).

Interrupção de loop

A instrução Exit é usada para encerrar a iteração e sair do loop. Esta declaração é aplicável em qualquer estrutura cíclica, exceto While ... Wend. A sintaxe geral para usar Exit para interromper um loop é:

<начало_цикла>

[<блок операторов1>]

Sair (Para | Fazer)

[<блок операторов2>]

<конец_цикла>

Quando a instrução Exit é executada, o loop é interrompido e o controle é transferido para a instrução após a instrução<конец_цикла>. O corpo do loop pode conter várias instruções Exit.

Listagem 4. Saída de loop forçado

Subamostra9()

Para i = 1 a 1.000.000

Se i = 10 Then Exit For ' sai do loop quando o contador atinge 10

Próximo

Sintaxe do operador:

PorContador= Começar ToFim[degrauEtapa]

Statement_Block

PróximoContador

Está marcado aqui:

Por por (palavra-chave VB obrigatória);

Para antes da (palavra-chave VB obrigatória);

Statement_Block um ou mais operadores chamados corpo do ciclo;

Contador - uma variável inteira que conta o número de ciclos a serem executados;

Começo, Fim - valores iniciais e finais do contador;

degrau passo (palavra-chave VB);

Etapa - passo de mudança de contador; pode ser negativo; o parâmetro é opcional, pois se o passo for 1, você pode Step Etapa mais baixo;

Next - next (palavra-chave VB obrigatória, entrada de instrução de fim de loop).

Valor do contador (Inicio fim) pode ser constantes numéricas ou variáveis ​​do tipo inteiro ou real, podem ser números negativos ou positivos. Para que o corpo do loop seja executado pelo menos uma vez, ele deve ser Início ≤ Fim, E se Etapa> 0, e Início ≥ Fim, E se Etapa< 0. Assim que descobrir que Contador>Fim ( E se Começar< Конец), a execução do loop termina. Se um Iniciar =Fim, o loop será executado uma vez;

Exemplo 9.1 .Avaliação da funçãoS = 2 – 1.5 sinxao alterar X em incrementos de 0,2 no intervalo.

Um fragmento do programa para calcular Y e gerar o argumento X e a função Y:

Para X = 0 a 2,4 Etapa 0,2

Y = 2 - 1,5*Sin(X)

Para entender como esse loop funciona, aqui está um programa para um loop semelhante criado usando operadorVá para, rótulos, operadorSeEntão.

M1:X=X+0,2

Se X<= 2.4 Then

Y = 2 - 1,5*Sin(X)

Vamos analisar como esse programa funciona. O primeiro cálculo Y não é padrão, por assim dizer, sai do circuito. O loop inicia após a primeira transferência do controle GoToM1 para o rótulo M1. Na linha rotulada M1, o argumento X é aumentado em um passo de 0,2 e imediatamente é feita uma verificação se o novo valor de X não excede o valor final 2,4. Se não exceder, o cálculo de Y é repetido com este novo X. Em seguida, o operador GoToM1 é executado novamente - transferindo o controle para a linha com o rótulo M1. Essas repetições (ciclos) de cálculo de Y terminarão assim que X exceder 2,4.

Agora o programa If é comparável ao loop For…Next.

Para X = 0 a 2,4 Etapa 0,2

substitui duas linhas

M1:X=X+0,2

Se X<= 2.4 Then

São as duas últimas linhas de código que são executadas no loop For, mas não vemos isso. Nós os codificamos com a string cFor... A linha de código GoTo M1 é codificada com a palavra Next X (literalmente: next X). Isso resulta em um design compacto.

Ao usar o loop For…Next, você precisa aprender a usar o contador de loops ao resolver vários problemas. Para descobrir como você pode usar o contador para resolver o problema, você precisa analisar o enunciado do problema, encontrar padrões de mudança em alguns parâmetros do problema.

Exemplo 9.2 . Determinando a soma dos elementos de uma série: .

Fragmento de programa:

S = 0 ‘S é a soma da série

Para i = 1 A 16 ' contador i é o denominador da fração

S = S + 1/i ' soma de acumulação

Imprima "S="; S ' a saída da soma S para a forma

Para cada valor do contador i, a expressão 1/i forma sequencialmente os elementos da série, a partir de 1.

Exemplo 9.3 . Calculando a soma de uma série de elementos
.

Fragmento de programa:

S = 0 ‘S é a soma da série

Para i = 1 A 18 ' contador i - numerador

S = S + i/(i + 1) ' o denominador é maior que o numerador em 1

Imprima "S="; S ' a saída da soma S para a forma

Exemplo 9.4 . Cálculo da soma: 5 + 8 + 11 + ... + 32 + 35

Fragmento de programa:

S = 0 ‘S é a soma da série

Para i = 5 Para 35 Etapa 3 ‘ obter aritmética _

progressão com denominador 3

Imprima "S="; S

Exemplo 9.5. Calculando a soma para um dado x:

A análise do problema mostra que o grau em X muda de 1 para 10. Neste caso, o numerador no coeficiente em X é maior que o grau por 1, e o denominador é por 2. O valor do grau será formado usando o contador i. Então você pode escrever o seguinte programa (fragmento):

S = 1 ‘S é a soma da série

Para i = 1 A 10 ‘ como contador i, o grau muda em X

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

Imprima "S="; S

CiclosPorPróximousado ementrada, saída eprocessamento de matriz .

Exemplo 9.6. Entrada e saída de valores dos elementos do array B(N).

Fragmento de programa:

‘ Omite a atribuição do valor N à variável, _

inserido no formulário no campo de texto txtN:

B(i) = InputBox("Digite o elemento B(" & i & ")", _

"Matriz de entrada B(" & N & “)”)))

imprimir " "; Bi);

Função Caixa de entrada() exibe uma caixa de diálogo com um botão fechar, uma determinada mensagem, um campo de entrada, botões OK,Cancelar, cabeçalho (ou sem ele). Se o número 12 for inserido - o tamanho da matriz N, em nosso exemplo, na primeira aparição, esta janela será semelhante a:

Como você pode ver, a mensagem Insira o elemento B(1) solicita que você insira o valor do 1º elemento na caixa de texto. Esta janela aparecerá 12 vezes, pois o array contém 12 elementos. Isso decorre do cabeçalho do formulário. O índice do elemento B(i) no prompt irá variar de 1 a 12.

Se for necessário exibir apenas os valores dos elementos do array B(N) no formulário, o corpo do loop consistirá em uma instrução:

A visualização dos elementos de um array para realizar alguma ação neles também ocorre usando o operador de loop For…Next.

Vamos trazer exemplos de processamento de matrizes unidimensionais.

Exemplo 9.7 . Determinação do elemento máximo na matriz B(M).

Excluindo a entrada de dados iniciais e a saída de resultados, descrevemos brevemente o algoritmo:

    Vamos declarar a variável Bmax, na qual inseriremos o valor do primeiro elemento do array, e a variável Imax, à qual atribuiremos 1 - o índice do primeiro elemento do array.

    No loop, usando o operador For…Next, examinamos todos os elementos do array, começando do 2º. Usando o operador If…Then, comparamos seus valores com o valor armazenado na variável Bmax.

    Se o valor de um elemento da matriz for maior que Bmax, Bmax será atribuído ao valor desse elemento e o valor de Imax será o índice desse elemento da matriz.

Após o término do loop, a variável Bmax conterá o valor do elemento máximo e Imax conterá seu índice (número).

O programa desta parte do algoritmo.

Bmax = B(1): Imax = 1

Se B(i) > Bmax Então Bmax = B(i): Imax = i

Exemplo 9.8. Determinando a soma, o produto e o número de elementos positivos da matrizD(M).

Variáveis: S, P, K são a soma, produto e número de elementos positivos, respectivamente.

Algoritmo esta definição:

    Atribuímos zero à variável S e K, atribuímos 1 à variável P. Como regra, as variáveis ​​onde a soma é acumulada, aqui é S e k, são zeradas antes do ciclo, e 1 é atribuído ao variáveis ​​nas quais o produto é calculado.

    Usando o loop For…Next, passamos por todos os elementos do array e verificamos se eles são positivos (D(i) > 0).

    Se o elemento for positivo, adicionamos seu valor ao valor da soma S e armazenamos a nova soma na mesma variável. Multiplicamos a variável P pelo valor positivo do elemento e o armazenamos também na variável P. E adicionamos 1 à variável K e armazenamos o novo valor na mesma variável

Programa esta parte do algoritmo se parece com:

S=0: P=1: K=0

Se D(i) > 0 Então

S = S + D(i) ‘é assim que a acumulação da soma _

valores positivos dos elementos do array D(i)

P = P*D(i)' definição do produto de positivo

‘elementos da matriz

K = K + 1 ‘ este operador chama-se CONTADOR, aqui está

‘determina o número de elementos positivos do array

Exemplo 9.9. Determinação da soma, produto, número e média dos elementos ímpares da matrizD(M).

Apresentamos um fragmento do programa de tal definição.

S=0: P=1: K=0

Se D(i) Mod 2<>0 Então

Ssr = S/k' cálculo da média dos elementos ímpares

Compare este fragmento de programa com o programa do Exemplo 9.8. Este programa repete quase completamente o anterior. Apenas a condição na instrução If foi alterada. Condição D(i) Mod 2<>0 significa que estamos procurando por elementos da matriz D(i) que não são divisíveis por 2, ou seja, elementos ímpares. Se verificarmos a condição D(i) Mod 2 = 0, selecionaremos os elementos pares do array.

Como você sabe, a divisão Mod dá como resultado o resto da divisão em números inteiros. Por exemplo, após executar o operador d= 34Mod4, a variável d será igual a 2. Portanto, para selecionar elementos do array que são múltiplos de 4, é necessário verificar a condição D(i) Mod 4 = 0. A condição será ser semelhantes se procurarmos por elementos que são múltiplos de outros números. Em vez de 4, esses outros números serão escritos.

Exemplo 9.10. Escrevendo elementos de arrayR(N) divisível por 5 em outro array e exibindo o novo array no formulário.

A outra matriz será denotada, por exemplo, por R5(N). O tamanho deste novo array deve ser assumido como o mesmo do original, pois no caso limite todos os elementos podem ser múltiplos de 5.

Algoritmo de tarefa:

    Reiniciamos o contador k. Usando o operador de loop For…Next, examinamos todos os elementos do array R(N).

    Verificamos cada elemento para uma multiplicidade de 5 usando o operador If…Then e a divisão do elemento da matriz por Mod.

    Se o elemento for um múltiplo de 5, então usando um contador como k=k+ 1, formamos os índices do array R5(N), começando em 1, e escrevemos neste outro array –R5(N).

    Se k for diferente de zero, imprima o arrayR5() no formulário.

    Se k for igual a zero, produzimos: "Não há elementos que sejam múltiplos de 5".

Fragmento de programa:

Se R(i) Mod 5 Então k = k + 1: R5(k) = R(i)

Se k<>0 Então

Imprima “Nenhum elemento divisível por 5”

Loops podem ser aninhados dentro de outros loops.

Vamos demonstrar o trabalho loops aninhados . Abaixo, o programa organiza a saída dos valores dos contadores de ciclo i, j e k. A partir da saída de i,j,k fica claro como os laços aninhados são executados.

Sub privada frmCycle_DblClick()

ScaleMode = 4 'unidades - símbolos

Para i = 1 A 3 'loop externo

Imprima "i = "; eu;

Para j = 1 A 4 ‘1º laço aninhado

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

Imprima "j="; j;

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

Para k = 1 a 5 ‘2º loop aninhado

O formulário exibido (Fig. 1) mostra os resultados da exibição dos contadores de todos os três loops: o loop externo - contador i, o primeiro loop aninhado - counterj e o segundo, o loop mais interno - counterk. Como vemos, o contador "mais lento" do loop externo(pois), e o “mais rápido” é o contador do loop mais interno (de acordo comk).

O programa é executado depois de clicar duas vezes no formulário frmCicli com o botão esquerdo do mouse.

CurrentX, CurrentY - propriedades do formulário que especificam as coordenadas X, Y do ponto inicial para a saída de informações pelo método Print (veja a localização dos eixos X e Y no formulário na Fig. 1).

TextWidth() é uma função que retorna a largura do texto fornecida na função como um argumento entre aspas duplas.

Loops aninhados são usados ​​ao processar matrizes bidimensionais (matrizes). Mas em algumas tarefas, excluindo a entrada e saída de elementos de uma matriz bidimensional, você pode se limitar a um ciclo. Considere alguns exemplos de programação matricial.

Exemplo 9.11. Entrada e saída de uma matriz (array bidimensional) de inteirosintA(N).

Você pode inserir uma matriz por linhas e por colunas . É mais fácil - linha por linha, se a saída dos elementos do array para o formulário for programada imediatamente após sua entrada.

Entrada e saída da matrizlinha por linha - fragmento 1.

Dim M As Integer, N As Integer, i As Integer, j As Integer

Dim intA() As Integer ‘ declara um array dinâmico

M = Val(txtN.Text) ' M é o número de linhas

N = Val(txtN.Text) ‘ N é o número de colunas

ReDim intA(M, N) As Integer ‘ redefine o array

Para i = 1 Para M ‘i manterei seu valor até que

‘loop aninhado em j não será executado

imprimir " "; intA(i,j); ' saída linha por linha

Print ‘salta para o início de uma nova linha

Para inserir uma matriz por colunas, é necessário fazer o loop externo em j (configura os números das colunas) e o loop interno em i (configura os números das linhas).

Entrada e saída da matrizpor colunas fragmento 2.

PrY = 2500: CurrentY = PrY ‘ PrY define a coordenada Y do início

' gera o primeiro elemento de cada coluna no formulário

Para j = 1 To N ‘j manterá seu valor até que

'loop aninhado em i não será executado

intA(i,j) = InputBox("Digite o elemento intA(" & i & “,” & j & ")", _

"Matriz de entrada intA(" & M & “,” & N & ")")

Imprimir Tab(6 * j); intA(i, j) ‘exibir por colunas

CurrentY = PrY ' para exibir o primeiro elemento

'próxima coluna

Este segundo fragmento do programa não repete as primeiras 5 linhas do primeiro fragmento. A função Tab(6 * j) define o início da saída em uma linha (em caracteres) a partir da borda esquerda do formulário. A coordenada PrY aqui é de 2500 twips, mas você pode escolher outro valor.

Exemplo 9.12 . Ordenando valores de elementos de matrizV(N) Ascendente.

Existem vários algoritmos para ordenar arrays. Aqui está um deles: usando loops aninhadosPorPróximoselecionar elementos do primeiro ao penúltimo e comparar cada um deles com os elementos subsequentes; se o próximo elemento for menor que o selecionado, troque-os.

Um fragmento de um programa que implementa este algoritmo:

Para i = 1 Para N - 1

Para j = i + 1 Para N

Se V(j)< V(i) Then P = V(i): V(i) = V(j): V(j) = P

Vamos explicar este fragmento do programa.

Com a ajuda de um loop externo com um contador i, selecionamos o elemento V (i) para comparação com os elementos subsequentes. O laço interno com contador j seleciona elementos subsequentes de V(j) para comparação. O valor inicial de j é i + 1. Este é o primeiro elemento do seguinte.

Para trocar os valores dos elementos V(i) e V(j), introduzimos alguma variável P, na qual “escondemos” temporariamente o valor de um dos elementos do array (no programa, este é V(i )). Então ao elemento V(i) é atribuído o valor do elemento V(j), e ao elemento V(j) é atribuído o valor V(i), que é armazenado na variável P. Se “escondermos” o valor de V(j) em P, então o código de troca de valor será o seguinte: P = V(j): V(j) = V(i): V(i) = P. resultado não mudará.

Para ordenar array em ordem decrescente, basta escrever a condição de verificação na forma V(j) > V(i), ou seja, mudar o sinal da desigualdade para outro.

Se o array não for numérico, mas string, e os elementos do array estiverem preenchidos com sobrenomes, então, usando o programa do Exemplo 9.12, você poderá classificar a lista de sobrenomes em ordem alfabética. O fato é que para as letras do alfabeto usadas no computador, as desigualdades são verdadeiras: A< Б < В < Г….< Я и т. д., поскольку числовые коды букв алфавита последовательно увеличиваются, начиная с А и до конца алфавита. Это же справедливо и для букв английского алфавита.

Exemplo 9.13 . Calculando a soma de elementos positivos para colunas ímpares de uma matrizF(M, N) e exibindo as somas no formulário.

Algoritmo do programa:

    Usando um loop externo com um passo de 2, formamos o índice das colunas ímpares da matriz, começando pela primeira coluna.

    Reiniciamos a soma S, na qual será acumulada a soma dos elementos positivos.

    No loop interno, verificamos o sinal do elemento do array.

    Se o elemento do array for positivo (> 0), calcule a soma S.

    Após o final do loop interno, imprima a soma S no formulário.

Fragmento programas:

Para j = 1 Para N Etapa 2

Se F(i, j) > 0 Então S = S + F(i, j)

Imprimir “Soma da coluna”; j; ":"; S ‘j é o número da coluna!

Loops aninhados permitem que você organize enumeração de opções e resolver problemas que não podem ser resolvidos analiticamente. Como resultado da enumeração, são obtidas soluções, dentre as quais são selecionadas uma ou mais que atendem à condição do problema.

Exemplo 9.14. Há 1801 rublos. Quantos chocolates você pode comprar por 31 rublos. e um rolo de 18 rublos para gastar todo o dinheiro.

Programa:

Valor = 1801

TodosChocolates = Soma \ 31: Todos os Pães = Soma \ 18

Para i = 1 Para TodosChocolates

Para j = 1 Para TodosBulki

Preço = i * 31 + j * 18 'preço total de compra

Se Preço = 1801 Então

Imprimir "Chocolate: "; eu; Tab(19); "Bolo: "; j

Vamos explicar o programa no qual usamos variáveis ​​nomeadas em russo.

Primeiro, determinamos qual é o número máximo de apenas chocolates ou apenas pãezinhos que podem ser comprados pelo valor total. Os valores obtidos de VseChocolate e VseBulki são usados ​​para limitar o número de buscas pelo número de chocolates e pãezinhos. Para cada valor do número de chocolates (i) e do número de pãezinhos (j), determinamos o Preço total para sua compra. Se o Preço calculado for 1801, a opção selecionada é uma das soluções para o problema.

A função Tab() especifica em qual posição da borda do formulário as informações após esta função serão exibidas. Se Tab(19), então a partir da 19ª posição.

O programa exibe 3 opções de compra possíveis:

Chocolates 7, rolos 88

Chocolates 25, pãezinhos 57

Chocolates 43, pãezinhos 26

Se você quiser dar uma resposta inequívoca, você deve formular uma condição adicional. Por exemplo, “compraram-se menos pães do que chocolates”. Então a única solução seria a 3ª opção.

Existem muitos problemas matemáticos que são resolvidos simplesmente pela iteração por meio da programação de loops aninhados.