Sie sind auf Seite 1von 7

Diferena de WHILE e DO WHILE na linguagem C ou C++?

"While" - Testa uma condio. Se a condio for verdadeira ele executa o bloco, caso contrrio ele sai.. "Do... While" - Esse cara aqui quase a mesma coisa, mas ele testa a condio no final. Ou seja, o bloco ser executado pelo menos uma vez, para depois decidir se ser executado novamente ou no. Exemplo de "While": while ( condio ) { // Bloco } Exemplo de "Do... While": Do { // Bloco } while ( condio ); Bem, isso no um bicho de sete cabeas! Para ficar mais fcil, imagine que o "Do... While" um "While" comum.. Porm, executado de baixo pra cima.

Ao encontrar uma instruo while tal como a do cdigo abaixo, o computador segue uma certa sequncia de passos, descrita logo a seguir.

int soma = 0, a = 1; while ( a != 0 ) { printf("\nDigite um numero inteiro para somar, ou zero para terminar a soma: "); scanf("%d", &a); soma = soma + a; } printf("\nA soma %d.", soma);

A primeira coisa que o computador faz verificar se a condio de execuo satisfeita. No caso, como atribumos o valor 1 varivel a, ela diferente de 0, e portanto o bloco de instrues ser executado. Nesse bloco, feita uma atribuio de valor varivel a pelo usurio - note que portanto o usurio pode entrar com nmeros diferentes de zero um nmero indeterminado de vezes - e o bloco ser executado at que o usurio entre com o valor 0 para a varivel a. Assim que a condio de execuo

deixa de ser satisfeita, o fluxo passa para a primeira instruo aps o lao while, que no exemplo acima imprime o contedo da varivel soma.

Neste exemplo, tivemos de atribuir um valor no-nulo varivel a antes do lao while pois se apenas declarssemos esta varivel, seu valor inicial, que comumento chamado de "lixo", poderia eventualmente ser igual a zero, e nesse caso o lao no seria executado nem mesmo uma vez, resultando em o programa imprimir o valor que estiver contido ena varivel soma, no caso, 0. Uma maneira alternativa de resolver esse problema utilizando o lao do ... while:

int soma = 0, a; do { printf("\nDigite um nmero inteiro para somar, ou zero para terminar a soma: "); scanf("%d", &a); soma = soma + a;

} while ( a != 0 ); printf("\nA soma %d.", soma); Neste ltimo exemplo, s ser impresso que a soma zero se o usurio digitar 0 como o primeiro nmero ao ser pedido que digite um nmero para somar. Exemplo: obter o primeiro fatorial que maior que 1000. int fatorial = 1, n = 1; do { fatorial = fatorial * n; n++; } while ( fatorial <= 1000); Exerccio: obtenha o primeiro quadrado maior que 2000. Exemplo: imprimir o produto de dois nmeros at que esse produto seja maior que 1000 ou menor que 10. int produto, a, b; do

{ printf("\nDigite um numero inteiro: "); scanf("%d", &a); printf("\nDigite outro numero inteiro: "); scanf("%d", &b); produto = a * b; printf("\na * b = %d.", produto); } while ( produto >= 10 && produto <= 1000); Exerccio: imprima a soma de dois nmeros at que ocorra de uma soma ser mpar. Exemplo: somar e imprimir a soma de uma sequncia de nmeros inteiros estritamente crescente. int anterior = -1001, atual, soma = 0; do { printf("\nDigite um numero real entre -1000 e 1000:"); scanf("%f", &atual); if (atual > anterior) soma = soma + atual; anterior = atual; } while ( atual > anterior ); printf("\nA soma da sequencia estritamente crescente eh: %d", &soma);

Estrutura de repetio - DO WHILE


A estrutura de repetio DO WHILE parte do princpio de que deve-se fazer algo primeiro e s depois comparar uma varivel para saber se o loop ser executado mais uma vez. Devemos proceder da seguinte maneira: DO {bloco de instrues} WHILE (comparao); Usamos DO, depois escrevemos tudo que o DO deve fazer no bloco de instrues, no final do bloco colocamos o WHILE com a comparao entre parnteses, e no se esquea que neste caso termina-se a linha do WHILE com ponto-e-vrgula (;). Veja:

01.#include <iostream> 02.#include <cstdlib> 03.using namespace std; 04. 05.int main (void){ 06. int nr; 07. do 08. { 09. cout <<"Digite um numero (0 para finalizar): "; 10. cin >> nr; 11. cin.ignore (); 12. if (nr%2==0) 13. /* se nr for divisivel por 2 14. (O resto da diviso por 2 for 0)*/ 15. cout <<"Este numero e par\n"; 16. else 17. cout <<"Este numero e impar\n"; 18. system ("pause"); 19. system ("cls"); 20. } while (nr!=0); //enquanto nr for diferente de 0 21. return 0; 22.}
Este programa verifica se um nmero par ou mpar, e finaliza em 0. Partindo do ponto de vista que o usurio ir digitar o valor da varivel nr durante o bloco do DO e s depois ser comparada no WHILE no final do bloco, ento no tem porque inicializar a varivel (int nr;). Isso pode ajudar muitas vezes em que necessrio executar um loop, nem que seja uma vez.

Estrutura de repetio - WHILE


Uma outra forma de iterao (repetio) em C/C++ o WHILE. While executa uma comparao com a varivel. Se a comparao for verdadeira, ele executa o bloco de instrues ( { } ) ou apenas a prxima linha de cdigo logo abaixo.

Procedemos da seguinte maneira: WHILE (comparao) Veja o exemplo abaixo. Visualizar Codigo Fonte Imprimir?

01.#include <iostream> 02.#include <cstdlib> 03.using namespace std; 04. 05.int main (void){ 06. int par=0; 07. cout <<"Os numeros pares de 0 a 100 sao:\n\n"; 08. while (par<=100) 09. { 10. cout <<par<<"\t"; 11. par+=2; //o mesmo que par=par+2 12. } 13. system ("pause"); 14. return 0; 15.}
Neste exemplo sero mostrados os nmeros pares entre 0 e 100. Algumas precaues O WHILE muitas vezes pode nos pregar peas. Se prestarmos ateno, no exemplo acima inicializamos a varivel par em 0, pois quando usamos no while uma varivel sem inicializa-la pode causar comportamentos estranhos. E por que isso acontece? simples. C/C++ no inicializa variveis automaticamente em 0, ou seja, se voc comparar uma varivel no inicializada, essa varivel pode ser qualquer coisa, ex.: 1557745, -9524778, 1 ou at mesmo 0. Outro problema comum com o while o loop infinito. O WHILE, diferentemente de FOR, no incrementa ou decrementa automaticamente uma varivel, isso deve estar expressado dentro do bloco de instrues, como podemos ver na linha par+=2. Caso contrrio, par sempre seria zero e nunca chegaria a 100 para o loop parar, causando o loop infinito. O ideal utilizar o WHILE em um loop definido pelo usurio, que a partir de uma entrada ele termine. Ou seja, enquanto o usurio no fizer determinada ao, o loop continuar a dar voltas. Como no exemplo abaixo. Visualizar Codigo Fonte Imprimir?

01.#include <iostream> 02.#include <cstdlib> 03.using namespace std; 04. 05.int main (void){ 06. int nr=1; 07. while (nr!=0) //enquanto nr for diferente de 0 08. { 09. cout <<"Digite um numero (0 para finalizar): "; 10. cin >> nr; 11. cin.ignore (); 12. if (nr>0) 13. cout <<"Este numero e positivo\n"; 14. else 15. cout <<"Este numero e negativo\n"; 16. } 17. return 0; 18.}

No exemplo, o programa s ir parar quando o usurio digitar 0, qualquer outro nmero far com que o programa continue dando loop. Perceba que a varivel ainda est sendo inicializada.

Das könnte Ihnen auch gefallen