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";
}
//---------------------------------------------------------------------------
|
HOME || MAPA DO SITE || CURSOS || TUTORIAIS || LINKS || FORUM || CONTATO |