• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

acr

do..while e while

6 mensagens neste tópico

Boas. Estava aqui a fazer um programa para achar o perimetro de um determinado rectangulo, e deparei-me com um problema. Porque é que não posso utilizar o código while, e tenho obrigatoriamente de usar o 'do while' para que o programa corra decentemente (para um limite de largura e comprimento entre 0 a 10 000)?

aqui estão os dois códigos.

Código para WHILE (que aparentemente está incorrecto):

#include <iostream>
using namespace std;

int perimetro(int a, int b);

int main(){
int comprimento;
int largura;

while (0 >= comprimento || 10000 <= comprimento){
cout << "Introduza um valor entre 0 a 10000 para o comprimento: " << endl;
cin >> comprimento;
}

while (0 >= largura || 10000 <= largura){
cout << "Introduza um valor entre 0 a 10000 para a largura: " << endl;
cin >> largura;
}

cout << "O perimetro e " << perimetro(comprimento,largura) << endl;

}

int perimetro (int a, int b){
int valor;

valor = (2* (a + b));

return(valor);
}

----------------------

E o outro código é para o do while, ou seja, as outras partes ficam iguais, tirando esta: ( código valido)

do {
cout << "Introduza um valor entre 0 a 10000 para o comprimento: " << endl;
cin >> comprimento;
}while (0 >= comprimento || 10000 <= comprimento);

do {
cout << "Introduza um valor entre 0 a 10000 para a largura: " << endl;
cin >> largura;
} while (0 >= largura || 10000 <= largura);

cout << "O perimetro e " << perimetro(comprimento,largura) << endl;

}

Obrigado pessoal! :thumbsup:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu não verifiquei os cálculos, mas o do.. while executa SEMPRE pelo menos uma vez. O while pode nunca executar se a condição for logo inválida. E pode ser mesmo por isso que esteja a dar resultados diferentes.

PS: Já agora, em termos de verificação de condições, com o while é feita no inicio... com o do while é feita no fim, o que me levou a pensar que por causa disso, no teu caso, o do while execute mais uma vez o código do que com o while.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu não verifiquei os cálculos, mas o do.. while executa SEMPRE pelo menos uma vez. O while pode nunca executar se a condição for logo inválida. E pode ser mesmo por isso que esteja a dar resultados diferentes.

Sim, eu sabia disso. Mas o problema é que se compilar e executar o código em cima simplesmente com o cículo while ( ou seja, o primeiro código ), ves que o programa executado dá te logo um resultado do perimetro, sem introduzires quaisquer dados. Ou seja, compila mas está errado. No segundo código (com o do..while), já te pede o comprimento e o lado, e seguidamente calcula-te o perimetro correctamente. É por isso que ainda não continuo a perceber muito bem...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O código do while (o primeiro) com o meu compilador deu bem....

Mas o melhor que tens a fazer, aliás eu devia ter reparado nisso, estás logo a fazer uma comparação no inicio com uma variável sem valor. Recomendo que inicializes as variáveis comprimento e largura, neste caso, para um valor válido, tipo 1.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ao não inicializares as variáveis, elas são inicializadas com lixo. Ou seja, é bem provável que assumam valores superiores a 0, e por isso, nem entrem nos whiles. Já com o do while, como a verificação é feita no fim, as variáveis têm um valor real.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Heyy é verdade, esqueci-me das variáveis.. que estupidez.

Obrigado pelo reparo, pessoal! :ipool:

*solved*

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora