Boas alguém me pode ajudar neste exercico?
crie uma função para calcular Sn= 1 + 1/1 + 1/2 + 1/3 + 1/4...1/n
o n é o numero que o utilizador digita.
o código que tentei fazer foi:
public static void main(String[] args) {
Scanner teclado = new Scanner(System.in);
System.out.println("Introduza um número n:");
int n = teclado.nextInt();
calcularS(n);
}
public static int calcularS(int n){
int count=1;
double divide =0;
double soma =0;
for (int i = 0; i <= n;i++) {
if(n<9){
count++;
divide = n/count;
soma *= divide;
System.out.println("total: "+soma);
}
}
return count;
}
}
Soluções para a tarefa
Respondido por
1
De fato o programa tem alguns problemas.
Primeiro, a soma de uma série 1 + 1/1 + 1/2 + 1/3 + 1/4 ... + 1/n vai resultar num número fracionário, real. Não num int
Acontece que a função que você criou,
public static int calcularS(int n)
está definida como int !! Não pode ! ela tem que ser double. assim
public static double calcularS(int n)
dentro da função a coisa complicou .
você criou duas variáveis que não são necessárias
count não é necessária pois você já usará a própria variável i para fazer o contador
divide também não é necessária porque basta dividir 1 pelo contador e somar.
A variável soma está definida corretamente porém ela tem que ser iniciada com 1 e não com 0. Observe a série
1 + 1/1 + 1/2 + 1/3 + 1/4 ... 1/n
Ora toda série começa com 1 + alguma coisa
imagine que o denominador dessas frações acima será o i que vai variar de 1 até n inclusive
Portanto soma = 1;
Depois o loop for começa de 1 e vai até n inclusive
Dentro do loop você faz um if se o n < 9 ... para que ?
Esse if é totalmente desnecessário. Não precisa testar isso
Aí vem o erro na soma
você está usando o operador *= que é multiplicar por
esse comando foi escrito por você assim
soma *= divide;
Bom, já expliquei que o divide não é necessário. basta colocar 1/i;
Mas além disso, é preciso SOMAR e não MULTIPLICAR. Do jeito que você fez a série seria
1 * 1/1 * 1/2 * 1/3 * 1/4 .... * 1/n
não é isso que o enunciado pediu. O enunciado pediu SOMA e não MULTIPLICACAO então o operador deve ser += assim
soma += 1/i;
Aí tem um problema. Em Java, divisão de operadores inteiros resulta em divisão inteira. então 1/i, será sempre 0 para qualquer i maior que 1
quanto é 1 divido por 2 ? se a divisão for inteira vai dar 0. Se a divisão for ponto flutuante vai dar 0.5 e é essa que queremos
Então usamos um truque para tornar a divisão ponto flutuante fazemos assim
soma += 1.0 / i ;
O numerador da fração deixou de ser 1 (int) para ser 1.0 (double) e aí tudo vai ser calculado corretamente.
Por último, você colocou DENTRO do laço for a impressão do resultado do cálculo. Isso significa que o resultado intermediário do cálculo será exibido sem necessidade. A boa prática recomenda que não se imprima dentro das funções. A função deve apenas calcular o valor e a decisão se imprime ou não fica a cargo do programa principal.
Corrigindo o código, fica bem mais simples assim
/*
crie uma função para calcular Sn= 1 + 1/1 + 1/2 + 1/3 + 1/4...1/n
o n é o numero que o utilizador digita.
*/
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner teclado = new Scanner(System.in);
System.out.println("Introduza um número n:");
int n = teclado.nextInt();
System.out.println("Resultado da série : "+calcularS(n));
}
public static double calcularS(int n){
double soma =1;
for (int i = 1; i <= n;i++) {
soma += 1.0 / i ;
};
return soma;
}
}
se quiser ver o programa funcionando, acesse o link
https://repl.it/@bokomoko/soma-de-serie-1n
Você quer tornar-se programador ?
Primeiro, a soma de uma série 1 + 1/1 + 1/2 + 1/3 + 1/4 ... + 1/n vai resultar num número fracionário, real. Não num int
Acontece que a função que você criou,
public static int calcularS(int n)
está definida como int !! Não pode ! ela tem que ser double. assim
public static double calcularS(int n)
dentro da função a coisa complicou .
você criou duas variáveis que não são necessárias
count não é necessária pois você já usará a própria variável i para fazer o contador
divide também não é necessária porque basta dividir 1 pelo contador e somar.
A variável soma está definida corretamente porém ela tem que ser iniciada com 1 e não com 0. Observe a série
1 + 1/1 + 1/2 + 1/3 + 1/4 ... 1/n
Ora toda série começa com 1 + alguma coisa
imagine que o denominador dessas frações acima será o i que vai variar de 1 até n inclusive
Portanto soma = 1;
Depois o loop for começa de 1 e vai até n inclusive
Dentro do loop você faz um if se o n < 9 ... para que ?
Esse if é totalmente desnecessário. Não precisa testar isso
Aí vem o erro na soma
você está usando o operador *= que é multiplicar por
esse comando foi escrito por você assim
soma *= divide;
Bom, já expliquei que o divide não é necessário. basta colocar 1/i;
Mas além disso, é preciso SOMAR e não MULTIPLICAR. Do jeito que você fez a série seria
1 * 1/1 * 1/2 * 1/3 * 1/4 .... * 1/n
não é isso que o enunciado pediu. O enunciado pediu SOMA e não MULTIPLICACAO então o operador deve ser += assim
soma += 1/i;
Aí tem um problema. Em Java, divisão de operadores inteiros resulta em divisão inteira. então 1/i, será sempre 0 para qualquer i maior que 1
quanto é 1 divido por 2 ? se a divisão for inteira vai dar 0. Se a divisão for ponto flutuante vai dar 0.5 e é essa que queremos
Então usamos um truque para tornar a divisão ponto flutuante fazemos assim
soma += 1.0 / i ;
O numerador da fração deixou de ser 1 (int) para ser 1.0 (double) e aí tudo vai ser calculado corretamente.
Por último, você colocou DENTRO do laço for a impressão do resultado do cálculo. Isso significa que o resultado intermediário do cálculo será exibido sem necessidade. A boa prática recomenda que não se imprima dentro das funções. A função deve apenas calcular o valor e a decisão se imprime ou não fica a cargo do programa principal.
Corrigindo o código, fica bem mais simples assim
/*
crie uma função para calcular Sn= 1 + 1/1 + 1/2 + 1/3 + 1/4...1/n
o n é o numero que o utilizador digita.
*/
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner teclado = new Scanner(System.in);
System.out.println("Introduza um número n:");
int n = teclado.nextInt();
System.out.println("Resultado da série : "+calcularS(n));
}
public static double calcularS(int n){
double soma =1;
for (int i = 1; i <= n;i++) {
soma += 1.0 / i ;
};
return soma;
}
}
se quiser ver o programa funcionando, acesse o link
https://repl.it/@bokomoko/soma-de-serie-1n
Você quer tornar-se programador ?
xremix20:
Sim. Eu ando a estudar numa universidade meu problema é que muitas das vezes não consigo chegar facilmente á conclusão do problema. penso que esteja relacionado com a matemática.
Perguntas interessantes
Matemática,
9 meses atrás
Português,
9 meses atrás
Matemática,
9 meses atrás
Geografia,
1 ano atrás
Matemática,
1 ano atrás
História,
1 ano atrás
Filosofia,
1 ano atrás
Matemática,
1 ano atrás