Buscar

Loops for e do

Prévia do material em texto

Utilizando loops e timers
Escrevendo loops For ... Next
 Com um loop For ... Next, você pode executar um grupo específico de instruções de programa um número predefinido de vezes em um procedimento de evento ou em um módulo de código. Essa abordagem pode ser útil se você estiver fazendo vários cálculos relacionados, trabalhando com elementos na tela ou processando várias partes da entrada de usuário. Um loop For ... Next é na realidade apenas uma maneira abreviada de escrever uma longa lista de instruções de programa. Como cada grupo de instruções nessa lista faz essencialmente a mesma coisa, você pode definir somente um grupo de instruções e solicitar que este executado quantas vezes você quiser. 
 A sintaxe para um loop For ... Next se parece com isto
For variável = início To fim
	Instruções a serem repedidas
Next [variável]
Nessa instrução de sintaxe, For, To e Next são palavras-chave obrigatórias como o é o operador igual a ( = ). Você substitui a variável pelo nome de uma variável numérica que monitora a contagem atual do loop (a variável após Next é opcional) e substitui o início e o fim por valores numéricos que representam os pontos inicial e final para o loop. (Observe que você deve declarar a variável antes de ela ser utilizada na instrução For ... Next.) A linha ou linhas entre as instruções For ... Next são as instruções que são repetidas toda vez que o loop é executado.
Por exemplo, o seguinte loop For ... Next emite quatro bips em rápida sucessão a a partir do alto-falante do computador (embora o resultado talvez seja difícil de ouvir):
Dim i As Integer
For i = 1 To 4
	Beep()
Next i
Esse loop é o equivalente funcional de escrever a instrução Beep quatro vezes em um procedimento.
O compilador trata isso da mesma maneira que
Beep()
Beep()
Beep()
Beep()
A variável utilizada no loop é i, uma única letra que, por convenção, significa o primeiro inteiro em um loop For ... Next e é declarada como tipo Integer. Toda vez que o loop é executado a variável contadora é incrementada por um. (Na primeira passagem pelo loop, a variável contém o valor de 1, o valor de início, na última passagem, ela contém o valor de 4, o valor de fim.) Como verá no exemplo a seguir, você pode utilizar essa variável contadora com grande utilidade em seus loops.
Exibindo uma variável contadora em um controle TextBox
Uma variável contadora é simplesmente como qualquer outra variável em um procedimento de evento. Ela pode ser atribuída a propriedades, utilizada em cálculos ou exibida em um programa. Um dos usos práticos de uma variável contadora é exibir saída em um controle TextBox. Há um truque para exibir mais de uma linha, é simplesmente configurar a propriedade Multiline do controle TextBox como True e configurar a propriedade Multline do controle ScrollBars como Vertical. Utilizando essas configurações simples, o objeto caixa de texto de uma linha torna-se um objeto caixa de texto multinha com barras de rolagem para fácil acesso. 
Exiba informações um loop For ... Next
Inicie o Visual Studio e crie um novo projeto Visual Basic Windows Forms Application chamado Loop For
Um formulário em branco abre no Designer. Seu primeiro passo de programação é adicionar um controle Button ao formulário, mas dessa vez você fará de uma maneira nova.
Dê um clique duplo no controle Button na ToolBox
O Visual Studio coloca um objeto no canto superior esquerdo do formulário. Com o controle Button e muitos outros, dar um clique duplo no controle é uma maneira rápida de criar um objeto de tamanho padrão no formulário. Agora você pode arrastar o objeto botão para onde quiser e personalizá-lo com configurações de propriedades.
Arraste o objeto botão para a direita e o centralize próximo da parte superior do formulário.
Abra a janela Properties e então configure a propriedade Text do botão como “Loop”.
Dê um clique duplo no controle TextBox na ToolBox.
O Visual Basic cria um pequeno objeto caixa de texto no formulário.
Configurar a propriedade Multline do objeto caixa de texto como True e então configure a propriedade ScrollBars do objeto caixa de texto como Vertical.
Essas configurações preparam a caixa de texto para exibir mais de uma linha de texto.
Mova a caixa de texto para baixo do botão e a expanda de modo que ela ocupe dois terços do formulário.
Dê um clique duplo no botão Loop no formulário.
O procedimento de evento Button1_Click aparece no Code Editor
Digite as seguintes instruções de programa no procedimento:
Dim i As Integer
Dim Encaixar As String
Encaixar = Chr(13) & Chr(10)
For i = 1 To 10
	TextBox1.Text = TextBox1.Text & “Linha” & I & Encaixar
Next i
Esse procedimento de evento declara duas variáveis uma do tipo Integer (i) e uma do tipo String (Encaixar). Ele então atribui um valor String representando o caractere de retorno de carro à segunda variável.
Observação: Para um programador, um caractere de retorno de carro é o equivalente a pressionar a tecla Enter no teclado. Foi criada uma variável especial (Encaixar), no código do programa, que é composta dos elementos quebra de linha e retorno, para tornar a codificação de um retorno de carro menos complicada. O elemento retorno, Char(13) move o cursor em forma de I para o início da linha. O elemento quebra de linha Chr(10), move o cursor em forma de I para a próxima linha.
Depois da declaração e atribuição de variável, utilizamos o loop For .. Next para exibir a linha X 10 vezes no objeto caixa de texto, onde X é o valor atual da variável contadora (em outras palavras, da linha 1 à linha 10). Os caracteres de concatenação de strings (&) unem as partes componentes de cada linha na caixa de texto. Primeiro, o valor inteiro da caixa de texto, que é armazenado na propriedade Text, é adicionado ao objeto de modo que as linhas anteriores não sejam descartadas quando novas forem adicionadas. Em seguida, a string “Linha”, o número da linha atual e o caractere de retorno de carro (Encaixar) são combinados para exibir uma nova linha e mover o cursor em forma de I para a margem esquerda e para baixo de uma linha. A instrução Next completa o loop.
Observe que Visual Studio automaticamente adiciona a instrução Next à parte inferior do loop quando você digita For para iniciar o loop. Nesse caso, foi editada a instrução Next para incluir o nome da variável i – que é um esclarecimento opcional de sintaxe que é bom utilizar. (O nome da variável torna claro qual variável está sendo atualizada, especialmente em loops For ... Next aninhados.)
Clique no botão Save All na barra de ferramentas Standard para salvar suas alterações e especifique a sua pasta criada como a localização.
Agora você está pronto para executar o programa. 
Clique no botão Start Debugging na barra de ferramentas Standard.
Clique no botão Loop.
O loop For ... Next exibe 10 linhas na caixa de texto, como mostrado na figura a seguir:
Clique no botão Loop novamente.
O loop For ... Next exibe outras 10 linhas no formulário. (Você pode ver qualquer linha não-visível utilizando a barra de rolagem vertical para rolar para baixo.) Toda vez que o loop é repetido, ele adiciona mais 10 linhas ao objeto de texto. 
Observação: Preocupado com o espaço no objeto caixa de texto? Será um pouco demorado se você só estiver exibindo linhas de texto simples. Um objeto caixa de texto multilinha tem um limite de 64Kb de texto! Se quiser mais espaço e opções de formatação, você pode utilizar o controle RichTextBox na ToolBox – um controle semelhante capaz de exibir e manipular texto. 
Clique no botão Close no formulário para parar o programa.
Como você pode ver, um loop For ... Next pode simplificar consideravelmente o código e reduzir o número total de instruções que você precisa digitar. No exemplo anterior, um loop de três linhas processou o equivalente a 10 instruções de programa a cada vez que você clicou no botão Loop.
Criando loops For ... Next complexos
A variável contadoraem um loop For ... Next pode ser uma ferramenta poderosa em seus programas. Com um pouco de imaginação, você pode utilizá-la para criar várias sequências úteis de números em seus loops.
Para criar um loop com um padrão de contagem diferente de 1, 2, 3, 4 etc., você pode especificar um valor diferente para início no topo e utilizar a palavra-chave Step para incrementar o contador em intervalos diferentes. Por exemplo, o código
Dim i As Integer
Dim Encaixar As String
Encaixar = Chr(13) & Chr(10)
For i = 5 To 25 Step 5
	TextBox1.Text = TextBox1.Text & “Linha” & I & Encaixar
Next i
Exibe a seguinte sequência de números de linha em uma caixa de texto:
Linha 5
Linha 10
Linha 15
Linha 20
Linha 25
Você também pode especificar valores decimais em um loop se declarar i como um tipo de precisão simples ou dupla. Por exemplo, o loop For Next:
Dim i As Single
Dim Encaixar As String
Encaixar = Chr(13) & Chr(10)
For i = 1 To 2.5 Step 0.5
	TextBox1.Text = TextBox1.Text & “Linha” & I & Encaixar
Next i
Exibe a seguinte sequência de números de linha em uma caixa de texto:
Linha 1
Linha 1.5
Linha 2
Linha 2.5
A instrução Exit For
 	A maioria dos loops For ... Next executa até sua conclusão sem incidentes, mas de vez em quando você achará útil acabar o processamento de um For...Next se uma particular “condição de saída” ocorrer.
	O VB permite essa possibilidade fornecendo a instrução Exit For, que você pode utilizar para finalizar a execução de um loop..Next antes do tempo e mover a execução para a primeira instrução depois do loop.
	Por exemplo, o seguinte loop For...Next solicita ao usuário 10 nomes e os exibe um por um em uma caixa de texto, a não ser que o usuário insira a palavra “Acabado”:
Dim i As Integer
 Dim Nome As String
 Dim Encaixar = Chr(13) & Chr(10)
 For i = 1 To 4
 Nome = InputBox("Entre com um nome ou Acabado para sair.")
 If Nome = "Acabado" Then
 Exit For
 End If
 TextBox1.Text = TextBox1.Text + Nome & Encaixar
 Next i
Escrevendo loops Do
	Como uma alternativa a um loop For ... Next, você pode escrever um loop Do que executa um grupo de instruções até que certa condição seja True. Os loops Do são valiosos porque você pode não saber de antemão quantas vezes um loop deve se repetir. Por exemplo, talvez você queira deixar o usuário inserir nomes em um banco de dados até ele digitar a palavra “Fim” em caixa de entrada. Nesse caso, você pode utilizar um loop Do que se repete indefinidamente até que a string de texto “Fim” seja inserida.
Um loop Do tem vários formatos, dependendo de onde e como a condição do loop é avaliada.
A sintaxe mais comum é
Do while Condição
	Bloco de instruções a ser executado
Loop
Por exemplo, o seguinte loop Do solicita ao usuário uma entrada e exibe essa entrada em uma caixa de texto até que a palavra “Fim” seja digitada na caixa de entrada:
Dim NomeEntrada As String
Do while NomeEntrada <> “Fim”
	NomeEntrada = InputBox (“Entre com um nome ou digite Fim para sair.”)
	If NomeEntrada <> “Fim” Then
		TextBox1.Text = NomeEntrada
Loop
A instrução condicional nesse loop é NomeEntrada <> “Fim”, que o compilador do Visual Basic, traduz para significar “execute o loop enquanto a variável NomeEntrada não contiver exatamente a palavra “Fim”. Isso traz à tona um fato interessante sobre loops Do: se a condição na parte superior do loop não for True quando a instrução Do for avaliada pela primeira vez, o loop Do nunca será executado. Aqui, se a variável string NomeEntrada contiver o valor “Fim” antes de o loop iniciar (talvez devido a uma atribuição no procedimento do evento), o Visual Basic pularia o loop completamente e continuaria com a linha abaixo da palavra chave Loop.
Se você quiser que o loop sempre execute pelo menos uma vez em um programa, coloque o teste condicional na parte inferior do loop. Por exemplo, o loop:
Dim NomeEntrada As String
Do
	NomeEntrada = InputBox (“Entre com um nome ou digite Fim para sair.”)
	If NomeEntrada <> “Fim” Then
		TextBox1.Text = NomeEntrada
Loop while NomeEntrada <> “Fim”
É essencialmente o mesmo que o loop Do anterior, mas aqui a condição do loop é testada depois que um nome é recebido da função InputBox. Isso tem a vantagem de atualizar a variável NomeEntrada antes do teste condicional no loop de modo que um valor “Fim” preexistente não fará com que o loop seja pulado. Testar a condição do loop na parte inferior assegura que seu loop seja executado pelo menos uma vez, mas frequentemente nos força adicionar algumas instruções extras para processar os dados. 
Observação: Os exemplos de código anteriores solicitaram ao usuário digita “Fim” para encerrar o programa. Observe que o teste do texto inserido diferencia letras minúsculas de maiúsculas, o que significa se você digitar “fim” ou “FIM” não encerra o programa. Você pode fazer com que o teste não diferencie maiúsculas de minúsculas utilizando a função StrComp.
Evitando um loop infinito
Devido à natureza inexorável dos loops Do, é muito importante projetar suas condições de teste de modo que cada loop tenha um ponto de saída verdadeiro. Se um teste de loop nunca avaliar como False, o loop executa indefinidamente e seu programa talvez não responda a nenhuma entrada. Considere o seguinte exemplo:
Dim Numero As Double
Do
Numero = InputBox(“Entre com um numero para elevar ao quadrado. Digite -1 para sair.”)
Numero = Numero * Numero
TextBox1.Text = Numero
Loop While Numero >= 0
Nesse loop, o usuário insere número após número e o programa eleva cada número ao quadrado e exibe o resultado na caixa de texto. Infelizmente, quando o usuário estiver satisfeito, ele não pode encerrar o programa porque a condição anunciada de saída não funciona. Quando o usuário insere -1, o programa eleva esse número ao quadrado e a variável Numero recebe o valor 1. (O problema pode ser corrigido configurando uma condição de saída diferente.) Observar loops infinito é essencial ao escrever loops Do. Felizmente é muito fácil detectá-los se você testar seus programas completamente.
Importante: Certifique-se de que cada loop tem uma condição de saída legítima.
O exercício a seguir mostra como você pode utilizar um loop Do para converter temperaturas Fahrenheit em Celsius. O programa simples solicita ao usuário a entrada utilizando a função InputBox, converte a temperatura e exibe a saída em uma caixa de mensagem.
Converte temperaturas utilizando um loop Do
No menu file, clique em New Project.
A caixa de diálogo New Project abre.
Crie um novo Visual Basic Windows Forms Application chamado Conversão para Celsius.
O novo projeto é criado, e um formulário em branco abre no Designer. Desta vez, você colocará todo o código para seu programa no procedimento de evento Form1_Load de modo que o Visual Basic imediatamente solicite-lhe temperatura Fahrenheit ao iniciar a aplicação. Você utilizará uma função InputBox para solicitar os dados Fahrenheit e utilizará uma função MsgBox para exibir o valor convertido.
Dê um duplo clique no formulário
O procedimento de evento Form1_Load aparece no Code Editor.
Digite as seguintes instruções de programa no procedimento de evento Form1_Load:
 Dim FTemp, Celsius As Single
 Dim strFTemp As String
 Dim Entrada As String = "Entre com uma temperatura em Fahrenheit: "
 Do
 strFTemp = InputBox(Entrada, "Fahrnheit para Celsius")
 If strFTemp <> "" Then
 FTemp = CSng(strFTemp)
 Celsius = Int((FTemp - 32) / 1.8)
 MsgBox(Celsius, , "Temperatura em Celsius")
 End If
 Loop While strFTemp <> ""
 End
Importante: Certifique-se de incluir a instrução End na parte inferior do procedimento de evento Form1_Load.
Esse código trata os cálculos para o projeto.A primeira linha declara duas variáveis de precisão simples, FTemp e Celsius, para armazenar as temperaturas Fahrenheit e Celsius, respectivamente. A segunda linha declara uma variável string chamada strFTemp que armazena uma versão string da temperatura Fahrenheit. A terceira linha declara uma variável string chamada Entrada, que será utilizado na função InputBox, e lhe atribui um valor inicial. O loop Do solicita repetidamente ao usuário uma temperatura Fahrenheit, converte-a para Celsius e, em seguida, exibe na tela utilizando a função MsgBox.
O valor que o usuário digita na caixa de entrada é armazenado na variável strFTemp. A função InputBox sempre retorna um valor do tipo string, ainda que o usuário insira apenas números.
Como queremos realizar cálculos matemáticos com o valor inserido, strFTemp deve ser convertido em número. A função CSng é utilizada para converter uma string no tipo de dados Single. CSng é uma das muitas funções de conversão que você pode utilizar para converter uma string em um tipo de dados diferentes. O valor individual convertido então é armazenado na variável FTemp.
O loop executa até o usuário clicar no botão Cancela ou até o usuário pressionar Enter ou clicar em OK sem nenhum valor na caixa de entrada. Clicar no botão Cancela ou não inserir nenhum valor retorna uma string vazia (“”). O loop verifica se a string está vazia utilizando um teste condicional While na parte inferior do loop. A instrução de programa:
Celsius = Int((FTemp - 32) / 1.8)
Trata a conversão de Fahrenheit para Celsius no programa. Essa instrução emprega uma fórmula padrão de conversão, mas utiliza a função Int para retornar um valor que não contém casas decimais para a variável Celsius. (Tudo à direita do ponto de fração decimal é descartado.) Esse corte sacrifica a exatidão, mas ajuda a evitar números imprevisívelmente longos como 21.111111, o valor de Celsius para 70 graus Fahrenheit.
Clique no botão Save All na barra de ferramentas Standard para salvar suas alterações. Especifique a sua pasta como localização.
Agora você tentará executar o programa.
Clique no botão Star Debugging na barra de ferramentas Standard.
O programa inicia e a função InputBox solicita uma temperatura Fahrenheit.
Digite 212
Sua tela é semelhante a esta:
Clique OK
A temperatura 212 Fahrenheit é convertida para 100 graus Celsius, como mostrado nesta caixa de mensagem:
Clique em OK. Então digite 72 na caixa de entrada e clique em OK, novamente.
A temperatura 72 graus Fahrenheit é convertida em 22 graus Celsius.
Clique em OK e então clique em Cancel na caixa de entrada.
O programa se fecha e o ambiente de desenvolvimento retorna.
 
�
�
�

Continue navegando