Do while
O do while é um laço de repetição que executa primeiro o bloco de comandos e depois testa a condição. Caso a condição seja verdadeira, o laço é executado novamente. Quando a condição é falsa, a execução do laço é terminada.
Essa característica de executar e depois testar, garante que o laço será executado ao menos uma vez, diferentemente do while, o qual não executa quando sua condição é falsa.
A validação de entrada é um exemplo pertinente para o uso do do while, uma vez que a leitura do dado deverá ser executada ao menos uma vez. Quando o dado não é consistente com o conjunto de dados esperados, uma nova leitura é solicitada.
Veja o exemplo abaixo:
001: #include <stdio.h>
002: #include <stdlib.h>
003:
004: int main(int argc, char * argv[])
005: {
006: char sexo;
007:
008: do
009: {
010: printf("Digite o sexo: ");
011: fflush(stdin); scanf("%c", &sexo);
012: if(sexo != 'M' && sexo != 'F')
013: {
014: printf("Digite M ou F\n");
015: }
016: }while(sexo != 'M' && sexo != 'F');
017: system("PAUSE");
018: return 0;
019: }
Note que o código é feito para importunar o usuário de forma que ele digite M para masculino ou F para feminino. Em outras palavras, o programa ficará em loop até que M ou F seja digitado. Baseado nisso, posso afirmar que a condição de saída do laço é M ou F.
Com este post finalizei a trilogia de laços de repetição, o que não quer dizer que esgotei o assunto...
sábado, 9 de agosto de 2008
Do while
quinta-feira, 7 de agosto de 2008
While
Retomando o assunto Laços de Repetição, abordado em abril/2008, hoje vamos tratar do while.
A forma geral desse laço é:
while
while(condicao)
{
comandos...
}
É importante saber que dentro do bloco de comandos do while é necessário tornar a condicao falsa. Caso isso não ocorra, o while entrará em loop infinito.
Vamos recorrer a um exemplo simples:
Suponha que uma cidade A possua 1.500.000 habitantes e taxa de crescimento anual de 1%. Suponha também que uma cidade B com 500.000 habitantes cresce anualmente a 3%. Você deseja saber em quantos anos, mantendo-se as taxas de crescimento, a população de B será maior que a população de A.
001: #include <stdio.h>
002: #include <stdlib.h>
003:
004: int main(int argc, char * argv[])
005: {
006: int anos=0;
007: float popA=1.5, popB = 0.5;
008:
009: while(popA >= popB)
010: {
011: popA = 1.01 * popA;
012: popB = 1.03 * popB;
013: anos += 1;
014: }
015: printf(“Quantidade de anos necessaria: %d\n”, anos);
016: system("PAUSE");
017: return 0;
018: }
O exemplo mostra que enquanto a condição for verdadeira, ou seja, a população de A for maior ou igual a B, os anos passam (linha 13), e a população cresce (linhas 11 e 12).
Os dados de população e taxa de crescimento possibilitam que em algum ano, a população da cidade B será maior que a de A.
Caso a taxa de crescimento de A fosse maior que a de B, nunca a condição de saída seria atingida.
Sempre que trabalhar com o while, verifique a condição e identifique quais linhas tornarão seu resultado falso e se isso acontecerá. Com essa verificação seu laço não entrará em loop infinito.
Agora farei algumas considerações com relação aos cálculos praticados nas linhas 11 e 12, os quais podem parecer obscuros a alguém.
A linha 11 poderia ser reescrita como:
popA = popA + 1.0/100 * popA;
Dividindo 1.0/100 temos:
popA = popA + 0.01 * popA;
Colocando popA em evidência temos:
popA = (1 + 0.01) * popA;
Efetuando a soma 1 + 0.01 fica:
popA = 1.01 * popA;
Bendita ou maldita matemática. :D