sábado, 18 de maio de 2013

While Rodando em Círculos.

Outro recurso importante é a habilidade de fazer um loop.
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;
}
------------------------------------------------------------------------------------------------------------
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.

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