Jump to content
Sign in to follow this  
acr

do..while e while

Recommended Posts

acr

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:

Share this post


Link to post
Share on other sites
renafi

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.


Oracle Certified Professional - AdministraçãoOracle Certified Professional - Pl/sqlMCPD - Microsoft Certified Professional DeveloperMCTS - Microsoft Certified Technology Specialist

Share this post


Link to post
Share on other sites
acr

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...

Share this post


Link to post
Share on other sites
renafi

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.


Oracle Certified Professional - AdministraçãoOracle Certified Professional - Pl/sqlMCPD - Microsoft Certified Professional DeveloperMCTS - Microsoft Certified Technology Specialist

Share this post


Link to post
Share on other sites
_deXter

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.

Share this post


Link to post
Share on other sites
acr

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

Obrigado pelo reparo, pessoal! 😎

*solved*

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.