Jump to content

do..while e while


acr
 Share

Recommended Posts

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! 👍

Link to comment
Share on other 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.

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

Link to comment
Share on other 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...

Link to comment
Share on other 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.

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

Link to comment
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
 Share

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