Construção do loop while(enquanto) no C++.
Formato:
while(expressão)
{
//Aqui vai o codigo.
}
//Aqui continua o código após o loop.
Quando o programa encontra o loop while, ele avalia a expressão entre parênteses.
Se a expressão for verdadeira, true, ele passa o controle para a primeira linha dentro de {. Quando o controle chegar a }, o programa volta para a expressão e recomeça.
O controle continua a circular entre as chaves até que a expressão passe para falsa, false, ou até que outra coisa rompa o loop.
Vamos avaliar com um programa:
------------------------------------------------------------------------------------------------------------
#include<cstdio>
#include<cstdlib>
#include<iostream>
using namespace std;
int main(int nNumberofArgs, char* pszArgs[])
{
int nAlvo;
cout << "Este programa calcula os fatores.\n"
<< "Entre com o numero.";
cin >> nAlvo;
int nAcumulador = 1;
int nValor = 1;
while(nValor <= nAlvo)
{
cout << nAcumulador << " * "
<< nValor << " igual ";
nAcumulador = nAcumulador * nValor;
cout << nAcumulador << endl;
nValor++;
}
//Imprimindo o resultado.
cout << nAlvo << " Fator = "
<< nAcumulador << endl;
system("PAUSE");
return 0;
}
------------------------------------------------------------------------------------------------------------
Após solicitar o valor para o usuário, o programa coloca o valor em nAlvo e já inicia nAcumulador e nValor para 1.
O programa compara o nValor com nAlvo. Caso tenha digitado o valor 5, surge o primeiro loop com a seguinte questão: 1 é menor ou igual a 5? Como a resposta é true, verdadeira, o loop continua.
Antes de multiplicar, o programa imprime os valores de nAcumulador e nValor, ambos igual a 1.
Feito isto, o programa multiplica nAcumulador por nValor e atribui o resultado da multiplicação para nAcumulador, que passa de 1 para 2.
Em seguida, o loop recomeça com a seguinte pergunta: 2 é menor ou igual a 5? Como a resposta ainda é true, verdadeira, o loop continua.
O loop continua até que nValor chegue a 6, deixando de ser menor ou igual a 5 digitado pelo usuário.
Desta forma, o controle passa para a primeira declaração feita após a chave de fechamento } e imprime o resultado final.
Caso usuário digite 0, o controle vai direto para a instrução após a chave de fechamento } e o loop não será executado nenhuma vez. Isto por que, nValor é menor ou igual a 0 e a declaração foi falsa.
Para interromper um loop em execução, o C++ oferece dois comandos de controle:
Break: sai imediatamente do interior do loop.
Continue: retorna o controle para o inicio do loop.
Vamos ver os dois exemplos em um programa que multiplica valores positivos fornecidos pelo usurário, até que seja digitado um número negativo. O programa ignora zero.
------------------------------------------------------------------------------------------------------------
#include<cstdio>
#include<cstdlib>
#include<iostream>
using namespace std;
int main(int nNumberofArgs, char* pszArgs[])
{
cout <<"Programa para multiplicar os numeros digitados\n\n"
<<"Para parar o programa, digite um numero negativo\n\n"
<<"O programa iguinora zero\n\n"
<< endl;
int nProduto = 1;
while(true)
{
int nValor;
cout << "Digie o numero para multiplicar: ";
cin >> nValor;
if(nValor < 0)
{
cout << "Saindo. Tchau!\n\n" << endl;
break;
}
if(nValor == 0)
{
cout << "O programa iguinora zero. Por gentileza, digite um numero positivo.\n\n" << endl;
continue;
}
//Multiplicando e imprimindo o resultado no console.
cout << nProduto << " * " << nValor;
nProduto *= nValor;
cout << " igual " << nProduto << endl;
}
system("PAUSE");
return 0;
}
------------------------------------------------------------------------------------------------------------
#include<cstdio>
#include<cstdlib>
#include<iostream>
using namespace std;
int main(int nNumberofArgs, char* pszArgs[])
{
cout <<"Programa para multiplicar os numeros digitados\n\n"
<<"Para parar o programa, digite um numero negativo\n\n"
<<"O programa iguinora zero\n\n"
<< endl;
int nProduto = 1;
while(true)
{
int nValor;
cout << "Digie o numero para multiplicar: ";
cin >> nValor;
if(nValor < 0)
{
cout << "Saindo. Tchau!\n\n" << endl;
break;
}
if(nValor == 0)
{
cout << "O programa iguinora zero. Por gentileza, digite um numero positivo.\n\n" << endl;
continue;
}
//Multiplicando e imprimindo o resultado no console.
cout << nProduto << " * " << nValor;
nProduto *= nValor;
cout << " igual " << nProduto << endl;
}
system("PAUSE");
return 0;
}
------------------------------------------------------------------------------------------------------------
O programa começa com o valor inicial de 1 no produto. Depois, avalia a expressão lógica true. Como true é verdadeiro, o programa entra no loop e continua solicitando ao usuário outro número para multiplicação.
Caso um valor negativo seja digitado, o programa envia a frase de despedida antes de executar o break, que passa o controle para fora do loop.
Caso o valor digitado seja zero, o programa notifica o usuário e retorna o controle para continue assim, o usuário pode continuar digitando.
Loops Aninhados.
O corpo de um loop ponde conter outro loop que é conhecido como nested loops ou loop alinhado.
O lopo alinhado deve executar totalmente através do loop externo.
O lopo alinhado deve executar totalmente através do loop externo.
Vamos escrever um programa que utiliza o loop alinhado para criar uma tabela de multiplicação.
Cada posição da tabela sera apenas a fileira de número, vezes a coluna de número.
------------------------------------------------------------------------------------------------------------
#include<cstdio>
#include<cstdlib>
#include<iostream>
using namespace std;
int main(int nNumberofArgs, char* pszArgs[])
{
//Mostrando a coluna
int nColuna = 0;
cout << " ";
while(nColuna < 0)
{
cout.width(2); //Setando uma constante para imprimir no console dois caracteres ou dois digitos.
cout << nColuna << " "; // Agora, imprimindo as colunas
nColuna++; //Incrementa para a proxima coluna
}
cout << endl;
//Agora, o loop para percorrer as linhas
int nLinha = 0;
while(nLinha < 10)
{
cout << nLinha << " - "; //Começando com o valor das linhas.
nColuna = 0; //Agora para cada linha, iniciamos a coluna 0 e vamos para a coluna 9.
while(nColuna < 10)
{
cout.width(2); //Imprimindo o produto de coluna * linha usando 2 caracteres mesmo quando temos apenas 1 digito.
cout << nLinha * nColuna << " ";
nColuna++; //Indo para a proxima coluna
}
nLinha++; //Indo para a proxima linha
cout << endl;
}
system("PAUSE");
return 0;
}
------------------------------------------------------------------------------------------------------------
A expressão cout.width(2) ajusta a largura da exibição para duas colunas - C++ coloca um espaço a esquerda em números com apenas 1 digito.
Nenhum comentário:
Postar um comentário