Soma de Impares

3 respostas
T

Recebe dois valores numéricos inteiros (num1 e num2), maiores do que 0, e
retorna o valor do somatório de todos os números ímpares presentes na faixa
de num1 até num2.

Eu tinha pensado em algo parecido com isso:

public class Segundo{

public void Impares (int num1, int num2){

int soma;

int ProxNum;

num1 = num1;

num2 = num2;

soma = 1+3;

ProxNum = 5;

while (ProxNum <= num2) {

soma = soma + ProxNum;

ProxNum = ProxNum + 2;

System.out.println (soma);

}

}

}

ta certo?

3 Respostas

ViniGodoy

No geral, a lógica está certa. Mas faltou prestar mais atenção nos detalhes do enunciado.
O exercício pede especificamente para você somar os números ímpares que sejam maiores que num1. No seu programa, você começou sempre do 1.
Além disso, ele pede para imprimir só o somatório final, não toda a sequência.

Para testar se um número é ímpar, basta ver se o resto dele por 2 é igual a 1:

public int somaImpares(int num1, int num2) {
    int soma = 0;
    if (num1 % 2 == 1) {
        soma = num1;
    } else {
       //Se num1 for par, começamos a somar do próximo numero.
       soma = num1+1;
    }
    int proxNum = soma+2;
    while (proxNum &lt;= num2) {
        soma += proxNum;
        proxNum += 2;
    }
    return soma;
}

public static void main(String[] args) {
    System.out.println(somaImpares(10, 30));
}

Outra coisa. Preste atenção na convenção de código:

  • Nome de classes começam com letra maíscula (a sua está ok);
  • Nome de variáveis sempre começam com letra minúscula. Assim o melhor seria ter declarado proxNum ao invés de ProxNum;
  • Nome de métodos também começam com letra minúcula (impares ao invés de Impares).
ViniGodoy

Outras formas de resolver o mesmo problema.

1. Usando for:

public int somaImpares(int num1, int num2) {  
    //Garante que num1 seja impar
    if (num1 % 2 == 0) {
        num1 += 1;
    }

    int soma = 0;  
    for (int proxNum = num1; proxNum &lt;= num2; proxNum += 2) {
        soma += proxNum;  
    }  
    return soma;  
}
2. Usando a soma dos termos de uma PA. A fórmula é:
(a1 + an) * n
---------------
      2

Onde:
a1 = num1
an = num2
n = (a1 - an) / 2 + 1

public int somaImpares(int num1, int num2) {  
    //Garante que num1 seja impar
    if (num1% 2 == 0) {
        num1++;
    }

   //Garante que num2 seja impar também
   if (num2 % 2 == 0) {`
        num2--;
   }
   int n = (num1 - num2)  / 2 + 1;
   return ((num1 + num2) * n) / 2;
}

Sendo a última, apesar de estranha, o jeito mais eficiente de se calcular essa soma.

T
ViniGodoy:
Outras formas de resolver o mesmo problema.

1. Usando for:

public int somaImpares(int num1, int num2) {  
    //Garante que num1 seja impar
    if (num1 % 2 == 0) {
        num1 += 1;
    }

    int soma = 0;  
    for (int proxNum = num1; proxNum &lt;= num2; proxNum += 2) {
        soma += proxNum;  
    }  
    return soma;  
}
2. Usando a soma dos termos de uma PA. A fórmula é:
(a1 + an) * n
---------------
      2

Onde:
a1 = num1
an = num2
n = (a1 - an) / 2 + 1

public int somaImpares(int num1, int num2) {  
    //Garante que num1 seja impar
    if (num1% 2 == 0) {
        num1++;
    }

   //Garante que num2 seja impar também
   if (num2 % 2 == 0) {`
        num2--;
   }
   int n = (num1 - num2)  / 2 + 1;
   return ((num1 + num2) * n) / 2;
}

Sendo a última, apesar de estranha, o jeito mais eficiente de se calcular essa soma.

Rapaz... muito obrigado pela ajuda e pelas dicas tbm!
Abraços!

Criado 10 de outubro de 2015
Ultima resposta 10 de out. de 2015
Respostas 3
Participantes 2