Ir ao conteúdo
  • Cadastre-se
cassinhodabahia

RESOLVIDO Programa soma S Duvida

Recommended Posts

Olá pessoal estou com  um problema, não consigo fazer o método para calcular a somaS de um número..
ex: se o usuario digitar o número 3 o método tem que fazer : 1/3! + 1/2! + 1, já fiz o metodo fatorial mas não consigo chamar ele para o metodo SomaS

Compartilhar este post


Link para o post
Compartilhar em outros sites


public class Teste {

public static void main(String[] args) {

// cria o vetor aqui

// somaS(numero);

}

public float fatorial(float x) {

// ...

}

public float somaS(int x) {

// ...

// cria o laço for aqui percorrendo o vetor e chamando a função fatorial quando necessário

// fat = fatorial(n);

}

}

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
Olha como esta o meu
 
package Lp1;import java.util.Scanner;public class Menu {private static Scanner ler;public static void main(String[] args) {int opcao = 1;double fat;int num ;ler = new Scanner(System.in);while (opcao != 0){System.out.println("******* Escolha uma Opção*******");System.out.println("0- sair");System.out.println("1- Soma S");System.out.println("2- Fatorial");    opcao = ler.nextInt();switch (opcao){case 0:  System.out.println("Fim Programa");break;  case 1:  System.out.println("Digite um número:  ");   num = ler.nextInt(); // soma = SomaS(num); // System.out.println("A somaS de" + num + "é" + soma);    break;case 2:   System.out.println("Digite um número:  ");num = ler.nextInt();fat = fatorial(num);System.out.println("O Fatorial de " + num + " é " + fat);break;default:System.out.println("Opção Invalida");break;}} } private static double fatorial(int num) {if(num <= 1){return 1;}else{return num*fatorial (num-1);}}     }

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

A função somaS tá em outra classe? Se sim, vai ter que fazer fatorial public.

não, não estou conseguindo fazer a SomaS

não, não estou conseguindo fazer a SomaS

tentei fazer com for mas não certo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ah, entendi... pensei que não estava conseguindo chamar o método somaS de outro arquivo.

Então... o método soma nesse problema vai receber um valor N (que vai ser o tamanho da equação) e vai retornar a soma dos elementos da equação.

Se N for igual a 3:

soma = 1/fatorial(1) + 1/fatorial(2) + 1/fatorial(3)

Se N for igual a 5:

soma = 1/fatorial(1) + 1/fatorial(2) + 1/fatorial(3) + 1/fatorial(4) + 1/fatorial(5)

É só fazer um loop simples contando de 1 até N:

 

    public float somaS(int num) {        float soma = 1; // pra não precisar somar aquele "1" solitário na equação, a gente já inicializa soma em "1".        for (int x=num; x > 0; --x)            soma = soma + 1/fatorial(x);        return soma;    }
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ah, entendi... pensei que não estava conseguindo chamar o método somaS de outro arquivo.

Então... o método soma nesse problema vai receber um valor N (que vai ser o tamanho da equação) e vai retornar a soma dos elementos da equação.

Se N for igual a 3:

soma = 1/fatorial(1) + 1/fatorial(2) + 1/fatorial(3)

Se N for igual a 5:

soma = 1/fatorial(1) + 1/fatorial(2) + 1/fatorial(3) + 1/fatorial(4) + 1/fatorial(5)

É só fazer um loop simples contando de 1 até N:

 

    public float somaS(int num) {        float soma = 1; // pra não precisar somar aquele "1" solitário na equação, a gente já inicializa soma em "1".        for (int x=num; x > 0; --x)            soma = soma + 1/fatorial(x);    }

olha como ficou

 

package Lp1;import java.util.Scanner;public class Menu {private static Scanner ler;public static void main(String[] args) {int opcao = 1;float fat,soma;int num ;ler = new Scanner(System.in);while (opcao != 0){System.out.println("******* Escolha uma Opção*******");System.out.println("0- sair");System.out.println("1- Soma S");System.out.println("2- Fatorial");    opcao = ler.nextInt();switch (opcao){case 0:  System.out.println("Fim Programa");break;  case 1:  System.out.println("Digite um número:  ");   num = ler.nextInt();  soma = (float) somaS(num);  System.out.println("A somaS de" + num + "é" + soma);    break;case 2:   System.out.println("Digite um número:  ");num = ler.nextInt();fat = fatorial(num);System.out.println("O Fatorial de " + num + " é " + fat);break;default:System.out.println("Opção Invalida");break;}} }private static  float fatorial(int num) {if(num <= 1){return 1;}else{return num*fatorial (num-1);}}public static float somaS(int num) {        float soma = 1; // pra não precisar somar aquele "1" solitário na equação, a gente já inicializa soma em "1".        for (int x=num; num > 0; --num)            soma = soma + 1/fatorial(num);return soma;    }             }

 

olha como ficou

 

package Lp1;
 
import java.util.Scanner;
 
public class Menu {
 
private static Scanner ler;
 
public static void main(String[] args) {
int opcao = 1;
float fat,soma;
int num ;
ler = new Scanner(System.in);
while (opcao != 0){
System.out.println("******* Escolha uma Opção*******");
System.out.println("0- sair");
System.out.println("1- Soma S");
System.out.println("2- Fatorial");
 
    opcao = ler.nextInt();
 
switch (opcao){
 
case 0:
  System.out.println("Fim Programa");
break;
 
  case 1:
  System.out.println("Digite um número:  ");
  num = ler.nextInt();
  soma = (float) somaS(num);
  System.out.println("A somaS de" + num + "é" + soma);
  
  
break;
 
 
case 2:
   System.out.println("Digite um número:  ");
num = ler.nextInt();
fat = fatorial(num);
System.out.println("O Fatorial de " + num + " é " + fat);
 
 
break;
 
default:
 
System.out.println("Opção Invalida");
break;
}
}
}
private static  float fatorial(int num) {
 
if(num <= 1){
return 1;
}else{
return num*fatorial (num-1);
}
}
 
 
public static float somaS(int num) {
        float soma = 1; // pra não precisar somar aquele "1" solitário na equação, a gente já inicializa soma em "1".
        for (int x=num; num > 0; --num)
            soma = soma + 1/fatorial(num);
return soma;
    }
     
    
 
    }

 

ta rodando beleza amigo apenas o resultado esta dando 1.0 a mais..

ex: soma S de 2 dar 1.5   no meu programa ta dando 2.5

olha como ficou

 

package Lp1;
 
import java.util.Scanner;
 
public class Menu {
 
private static Scanner ler;
 
public static void main(String[] args) {
int opcao = 1;
float fat,soma;
int num ;
ler = new Scanner(System.in);
while (opcao != 0){
System.out.println("******* Escolha uma Opção*******");
System.out.println("0- sair");
System.out.println("1- Soma S");
System.out.println("2- Fatorial");
 
    opcao = ler.nextInt();
 
switch (opcao){
 
case 0:
  System.out.println("Fim Programa");
break;
 
  case 1:
  System.out.println("Digite um número:  ");
  num = ler.nextInt();
  soma = (float) somaS(num);
  System.out.println("A somaS de" + num + "é" + soma);
  
  
break;
 
 
case 2:
   System.out.println("Digite um número:  ");
num = ler.nextInt();
fat = fatorial(num);
System.out.println("O Fatorial de " + num + " é " + fat);
 
 
break;
 
default:
 
System.out.println("Opção Invalida");
break;
}
}
}
private static  float fatorial(int num) {
 
if(num <= 1){
return 1;
}else{
return num*fatorial (num-1);
}
}
 
 
public static float somaS(int num) {
        float soma = 1; // pra não precisar somar aquele "1" solitário na equação, a gente já inicializa soma em "1".
        for (int x=num; num > 0; --num)
            soma = soma + 1/fatorial(num);
return soma;
    }
     
    
 
    }

ta rodando beleza amigo apenas o resultado esta dando 1.0 a mais..

ex: soma S de 2 dar 1.5   no meu programa ta dando 2.5

deve ser a soma desse 1

olha como ficou

 

package Lp1;
 
import java.util.Scanner;
 
public class Menu {
 
private static Scanner ler;
 
public static void main(String[] args) {
int opcao = 1;
float fat,soma;
int num ;
ler = new Scanner(System.in);
while (opcao != 0){
System.out.println("******* Escolha uma Opção*******");
System.out.println("0- sair");
System.out.println("1- Soma S");
System.out.println("2- Fatorial");
 
    opcao = ler.nextInt();
 
switch (opcao){
 
case 0:
  System.out.println("Fim Programa");
break;
 
  case 1:
  System.out.println("Digite um número:  ");
  num = ler.nextInt();
  soma = (float) somaS(num);
  System.out.println("A somaS de" + num + "é" + soma);
  
  
break;
 
 
case 2:
   System.out.println("Digite um número:  ");
num = ler.nextInt();
fat = fatorial(num);
System.out.println("O Fatorial de " + num + " é " + fat);
 
 
break;
 
default:
 
System.out.println("Opção Invalida");
break;
}
}
}
private static  float fatorial(int num) {
 
if(num <= 1){
return 1;
}else{
return num*fatorial (num-1);
}
}
 
 
public static float somaS(int num) {
        float soma = 1; // pra não precisar somar aquele "1" solitário na equação, a gente já inicializa soma em "1".
        for (int x=num; num > 0; --num)
            soma = soma + 1/fatorial(num);
return soma;
    }
     
    
 
    }

ta rodando beleza amigo apenas o resultado esta dando 1.0 a mais..

ex: soma S de 2 dar 1.5   no meu programa ta dando 2.5

deve ser a soma desse 1

for (int x=num; num > 0; --num)  esse int  x o programa também esta mostrando que n esta sendo usado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ah, foi mal... normalmente essa equação é 1/0! + 1/1! + 1/2!...etc.

Notei que no teu primeiro post não tem o "1/0!". Basta retirar então aquele "soma = 1" do começo e deixar em zero mesmo.

    public static float somaS(int num) {        float soma = 0;         for (int x=num; x > 0; --x)            soma = soma + (1/fatorial(x));        return soma;    }
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ah, foi mal... normalmente essa equação é 1/0! + 1/1! + 1/2!...etc.

Notei que no teu primeiro post não tem o "1/0!". Basta retirar então aquele "soma = 1" do começo e deixar em zero mesmo.

 

    public static float somaS(int num) {        float soma = 0;         for (int x=num; x > 0; --x)            soma = soma + (1/fatorial(x));        return soma;    }

valeu cara você é fera ... deu certo

e sobre esse int x que o programa diz que n precisa, triei ele e deu o mesmo resultado, acha melhor deixar sem?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Existe um limite pros valores que o float consegue representar.

Então se você usar um número muito alto, e o resultado dele for maior que a capacidade do float, ele vai dar erro.

Pra resolver isso você pode usar "double" em vez de "float", que tem uma capacidade maior.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@dontpanic fui mudando algumas coisas que o propio eclipse pediu ai ficou desse jeito

public static double somaS(int num) {        double soma = 0;         for (; num > 0; --num)            soma = soma + 1 /fatorial(num);return soma;
Só que agora fiquei sem saber explicar quando for apresentar,
tipo: porque esse ponto e virgula ficou ai antes do num e onde soma o mais o +1 já que esse 1 ai é da divisão?

Compartilhar este post


Link para o post
Compartilhar em outros sites

A sintaxe do FOR é:

for (<inicio>; <condição>; <incremento>) { ... }

A parte do <inicio> é opcional, mas você ainda precisa colocar o ponto e vírgula pro compilador saber o que é <inicio> e o que é <condição>.
Se quiser você pode substituir aquilo por um while pra ficar mais fácil de explicar.

while (num > 0) {  soma = soma + (1 / fatorial(num));  --num;}

Quanto a segunda pergunta, aquele +1 da equação é o mesmo que (1 / fatorial(1)). Fatorial de 1 é 1... e (1 / 1) = 1 também.
Então isso: 1/3! + 1/2! + 1
É o mesmo que isso: 1/3! + 1/2! + 1/1!

Como o seu laço de repetição vai de (1 / NUM!) até (1 / 1!), então você já tá somando tudo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ué... é o somatório da função.

Soma = 0;

Soma = Soma + 1/1! --> 0 + 1/1!

Soma = Soma + 1/2! --> 0 + 1/1! + 1/2!

Soma = Soma + 1/3! --> 0 + 1/1! + 1/2! + 1/3!

...etc.

O zero no começo é só pra inicializar a variável.

Em algumas linguagens de programação, se você usar uma variável sem inicializar ela antes, pode dar alguns problemas pois o valor fica indefinido.

Não lembro se no Java precisa fazer isso... mas não faz mal nenhum garantir.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×