Jump to content

Recommended Posts

Posted

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)

Posted (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 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!

Posted

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

Posted

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

Posted

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

Posted

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!

Posted

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

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