acr Posted November 23, 2009 at 04:30 PM Report Share #297293 Posted November 23, 2009 at 04:30 PM 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 More sharing options...
renafi Posted November 23, 2009 at 07:49 PM Report Share #297324 Posted November 23, 2009 at 07:49 PM 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 More sharing options...
acr Posted November 23, 2009 at 07:54 PM Author Report Share #297325 Posted November 23, 2009 at 07:54 PM 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 More sharing options...
renafi Posted November 23, 2009 at 08:03 PM Report Share #297328 Posted November 23, 2009 at 08:03 PM 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 More sharing options...
_deXter Posted November 23, 2009 at 08:20 PM Report Share #297332 Posted November 23, 2009 at 08:20 PM 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. Link to comment Share on other sites More sharing options...
acr Posted November 23, 2009 at 08:40 PM Author Report Share #297335 Posted November 23, 2009 at 08:40 PM Heyy é verdade, esqueci-me das variáveis.. que estupidez. Obrigado pelo reparo, pessoal! ? *solved* Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now