O loop while



LAÇOS - Algumas vezes um aplicativo precisa executar operações repetitivas. A fim de evitar que um programador tenha de repetir uma diversidade de vezes um mesmo código, criou-se o conceito de loop (ou laço).


Laços são comandos que fazem com que uma ou mais instruções sejam repetidas enquanto determinada condição não estiver satisfeita.


A linguagem C++ possui três formas de laços:


for


while


do ... while


Podemos imaginar os laços como uma roda gigante que fica girando até que determinada condição se verifique. E a cada giro da roda, determinada tarefa é realizada. A ocorrência da última tarefa dar-se-ia com a satisfação da condição.


Quando não possuímos prévio conhecimento acerca do número de vezes que o corpo de um loop deverá ser executado, o while se mostra como opção mais correta, que, basicamente, fará o seguinte: testará uma condição definida inicialmente; enquanto o comando verificar que a condição continua verdadeira, o conjunto de instruções contido no corpo do laço continuará sendo executado. No instante em que o comando verificar um valor de retorno falso para a condição, o processamento será desviado para fora do laço.


Voltando ao exemplo da roda gigante, no while não haveria a necessidade de uma catraca contando o número de giros, mas um funcionário aguardando a ocorrência de determinado fato para desligar o aparelho, como, por exemplo, uma pessoa pedir para descer do aparelho.


Se a condição avaliada for falsa logo no início do loop, o conjunto de instruções será ignorado e o laço não será executado.


Eis a forma do laço while:


while(condição)

corpo_do_loop;


O exemplo a seguir usa um Label no Form. Quando o usuário dá um clique no label, inicia-se um loop onde o comando while irá procurar nove caracteres z, ou Z, em quantas tabelas ASCII forem necessárias, sendo que essas tabelas serão imprimidas no label. Depois informará o resultado da busca no próprio label.

//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
Label1->Caption =       "Dê um clique em mim para iniciar um loop while "
                        "\nonde serão montadas sucessivas tabelas ASCII "
                        "\naté encontrar as letras 'z' ou 'Z' nove vezes!";
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Label1Click(TObject *Sender)
{
Label1 -> Caption = ""; // Apaga o Caption de Label1

// Declara e inicializa três variáveis para ser incrementadas no loop
int contador = 0;       // variável que contará o número de loops
int paraZ = 0;          // variável que contará ocorrências de z e Z
unsigned char caract = 0;       // variável usada para montar as tabelas ASCII

while( paraZ < 9) // enquanto a variável paraZ form menor do que 9
{
        contador++;     // incrementa contador a cada giro do loop
        caract++;       // incrementa caract a cada giro do loop

/* A tabela ASCII vai sendo construída no Caption de Label1 */
        Label1->Caption = Label1->Caption + char(caract);

/* Um comando de decisão switch ... case dentro do corpo do loop*/
        switch(caract)  /* o comando switch ... case avaliará os valores de caract*/
        {

/*caso o valor de caract seja 100, 200 ou 256, a tabela ASCII continuará
sendo imprimida na linha de baixo do Label1*/
                case 100:       Label1->Caption = Label1->Caption + '\n';       break;          /* o break remete o processamento para fora do comando switch*/
                case 200:       Label1->Caption = Label1->Caption + '\n';       break;
                case 256:       Label1->Caption = Label1->Caption + '\n';       break;

/*caso o valor de caract seja Z ou z, a variável paraZ sofre 
um incremento e a execução do programa sai do switch*/
                case 'Z':       paraZ++;        break;
                case 'z':       paraZ++;        break;
        }       // fim do comando switch ... case
}       // fim do loop while

/*o label usará as variáveis paraZ e contador para informar os resultados da busca*/
Label1->Caption =       Label1->Caption + "\n\nEncontrei os caracteres "
                        "\"Z\" e  \"z\" " + String(paraZ) + " vezes!";
Label1->Caption =       Label1->Caption + "\n\nPara encontrar esses caracteres, "
                        "o loop foi executado " + String(contador) + " vezes";

}
//---------------------------------------------------------------------------  

anterior

índice

próxima



HOME || MAPA DO SITE || CURSOS || TUTORIAIS || LINKS || FORUM || CONTATO