Ir para conteúdo
Fórum Script Brasil
  • 0

soma de fatorial em linguagem C


tony_alfa

Pergunta

 Olá pessoal sou no aqui forum, como estou estudando linguagem C agora estou com dúvidas e problemas a serem resolvidos, e tenho a seguinte questão que estou tentando resolver, porém os resultados do programas que fiz esta dando errado gostaria de saber onde posso estar errando, agradecido.

 

Escrever um algoritmo que le um valor N inteiro e positivo e que
calcula e escreve o valor de E. E = 1 + 1/1! + 1/2! + 1/3!... + 1/N!.

 

consegui isso, mas a respostas estão dando erradas.

 

#include<stdio.h>

 

int main (void){
        int i, n;
        float fat, result;

        printf("Digite um numero : \n ");
        scanf("%d", &n);

        fat = 1;

        for(i=1; i<=n; i++){

            fat = fat * i;

             result = result + (1/fat);

            }
            printf("O valor de E é %d :", result);

return 0;

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Para postar códigos use a tag CODE apertando o botão <> no topo do campo de respostas, assim você preserva a formatação do código e evita que o fórum faça alterações nele.

 

Primeiramente, a variável result não está sendo inicializada, então você tá somando os inversos dos fatoriais a algum valor lixo que está na memória onde result guarda seus valores. Result deveria começar com valor 1.

Segundo, para imprimir número com ponto flutuante (float) deve-se usar %f ou %g ou %e no printf(), que é o caso da variável result. (%d é para números inteiros.)

Corrigido o programa fica assim:

#include<stdio.h>

int main (void){
    int i, n;
    float fat, result;

    printf("Digite um numero:\n");
    scanf("%d", &n);
    
    result = 1.0;
    fat = 1.0;
    for(i=1; i<=n; i++){
        fat = fat * i;
        result = result + 1.0/fat;
    }
    
    //printf("%f\n", fat);
    printf("O valor de E é: %f\n", result);

    return 0;
}

 

 

Note que fat estoura rapidamente conforme n cresce, indo para infinito, e ficando grande demais para ser armazenado numa variável do tipo float.

Uma maneira de evitar isso seria fazer calcular o inverso do fatorial diretamente e somá-lo ao resultado, visto que:

1/n! = 1/1 * 1/2 * 1/3 * 1/4 *...* 1/(n-1) * 1/n

E o inverso do fatorial converge para 0 quanto maior for n, e não estoura.

Então o programa poderia ser feito assim:

#include<stdio.h>

int main (void){
    int i, n;
    float invfat, result;

    printf("Digite um numero:\n");
    scanf("%d", &n);
    
    result = 1.0;
    invfat = 1.0;
    for(i=1; i<=n; i++){
        invfat = invfat * 1.0/i;
        result = result + invfat;
    }
    
    //printf("%f\n", invfat);
    printf("O valor de E é: %f\n", result);

    return 0;
}

 

Editado por isrnick
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152.1k
    • Posts
      651.8k
×
×
  • Criar Novo...