guilhoto Posted May 5, 2012 at 05:37 PM Report #453310 Posted May 5, 2012 at 05:37 PM tenho que fazer um programa que conte a quantidade de numeros pares. este e parte do meu codigo que deveria contar os numeros pares quando n1 e par...mas nao o faz...por exemplo quando meto 2 e 8 (como limites) deveria dar-me 4 e da-me 10... alguem me consegue explicar o erro? printf("Insira o limite minimo:\n"); scanf(" %d", &n1); printf("Intrudza o limite maximo:\n"); scanf(" %d", &n2); if(n1%2==0) for(i=n1; i<=n2; i+=2){ } printf(" %d \n", i); EDIT: GeSHi adicionado (pmg)
pmg Posted May 5, 2012 at 05:58 PM Report #453314 Posted May 5, 2012 at 05:58 PM (edited) Com outra indentação o teu código fica assim: printf("Insira o limite minimo:\n"); scanf("%d", &n1); printf("Intrudza o limite maximo:\n"); scanf("%d", &n2); if (n1 % 2 == 0) for (i = n1; i <= n2; i += 2) { } printf(" %d \n", i); Vê lá se assim consegues descobrir o que está mal ... Edited May 14, 2012 at 09:49 AM by pmg GeSHi update What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
KTachyon Posted May 5, 2012 at 06:01 PM Report #453316 Posted May 5, 2012 at 06:01 PM Para além disso, mesmo depois de corrigido, não achas que estar a verificar se um número é par utilizado o resto da divisão de todos os números nesse espaço é desperdício de tempo de processador? Podes simplesmente fazer uma divisão para conseguires o resultado que pretendes. Não devia ser necessário fazeres isto com um ciclo for. “There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.” -- Tony Hoare
petvetbr Posted May 5, 2012 at 06:04 PM Report #453318 Posted May 5, 2012 at 06:04 PM O que acontece no seu código é o seguinte: Você pegar o i, inicializa com o primeiro valor fornecido, neste caso 2, e vai adicionando 2 a cada iteracao, então funciona assim: 1) condicao inicial: i=2 primeio laço for 2) i=4 segundo laco for 3) i=6 terceiro laco for 3) i=8 quarto laco for 4) i=10 portanto não passa no teste do for 5) printf imprime 10; Acho que o que você queria fazer era algo assim: int n1, n2,i, numeroDePares=0; printf("Insira o limite minimo:\n"); scanf(" %d", &n1); printf("Intrudza o limite maximo:\n"); scanf(" %d", &n2); if(n1%2==0) for(i=n1; i<=n2; i+=2){ ++numeroDePares; } printf(" %d \n", numeroDePares); Porém como mencionaram, há formas muito mais simples de fazer isto, como por exemplo tirar a diferença do primeiro e último item, dividir por 2 e adicionar 1. Ficaria assim a formula: numeroDePares=((n2-n1)/2)+1; Fernando Lage Bastos - MCP/MCTS/MCPD
guilhoto Posted May 5, 2012 at 06:09 PM Author Report #453319 Posted May 5, 2012 at 06:09 PM pmg: amigo com isso continua a dar aquele erro... KT: eu verifico apenas se o 1º numero e par...por isso e que o if esta depois, porque o for utilizado e diferente em par ou impar...se for par, o i vai de 2 em 2, mas se o primeiro por impar, tenho que somar 1 e so depois fazer i+=2... petvetbr: tens razao...nao estava a ver isso...obrigado 😄 e muito obrigado a todos pela ajuda 🙂 , estou a iniciar o C e cada vez gosto mais disto eheh
guilhoto Posted May 5, 2012 at 06:10 PM Author Report #453320 Posted May 5, 2012 at 06:10 PM eu sei dessa formula e inicialmente fiz com isso...mas o meu stor disse que tinha que ser com ciclos...
pmg Posted May 5, 2012 at 06:30 PM Report #453322 Posted May 5, 2012 at 06:30 PM pmg: amigo com isso continua a dar aquele erro... O código que eu pus é exactamente o mesmo código que tu tinhas posto antes, apenas com outra indentação. O que o teu código faz (na tua versáo original ou na minha, que é igual) é um ciclo vazio dentro do if. Se o programa entrar no if, faz um ciclo vazio; se não entrar no if não faz esse ciclo. What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
KTachyon Posted May 5, 2012 at 06:37 PM Report #453325 Posted May 5, 2012 at 06:37 PM KT: eu verifico apenas se o 1º numero e par...por isso e que o if esta depois, porque o for utilizado e diferente em par ou impar...se for par, o i vai de 2 em 2, mas se o primeiro por impar, tenho que somar 1 e so depois fazer i+=2... E porque é que somas num ciclo e não calculas logo o número de pares entre os dois valores? Assim: int inc = !(n1%2)||!(n2%2); int n = (n2 - n1)/2 + inc; Não te dá os números pares? A vantagem é que não gastas tanto tempo de processador, por não estares a testar todos os números no intervalo... “There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.” -- Tony Hoare
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