Jump to content
Fórum Script Brasil
  • 0

Variável recebendo valor nan


frankxx

Question

Antes de mais nada agradecer os membros do fórum pela ajuda dada.

Minha dúvida vem quanto ao seguinte código para calcular o sen de algum número pela sequência de Taylor.

Não sei o erro mas ela me retorna um valor nan . Nunca tinha visto antes. Grato desde já !

#include <iostream>
#include <cstdlib>

using namespace std;

const double pi = 3.141592653589793;

double Fatorial ( int n )
{
    if ( n == 1 )
    {
        return 1;
    }
    else
    {
        double fatorial = 1;
        fatorial *= n * Fatorial ( n - 1 );
    }
}

double Potencia ( double x , int y )        // Calcula a potência de x elevado a y. OBS : y é um inteiro , negativo ou positivo
{
    if ( y == 0 ) { return 1; }           // Caso y = 0 , todo número elevado a zero = 1

    if ( y >= 1 )                         // Caso y > 1 onde será necessário multiplicações sucessivas
    {
        double Potencia = x;

        while ( y > 1 )
        {
            Potencia *= x;
            y--;
        }
    return Potencia;
    }
}

int main()
{
    double x;
    cout << " Digite o x em graus para saber sen(x) : ";
    cin >> x;
    int termos;
    cout << " Digite o numero de termos da sequencia de Taylor que deseja : ";
    cin >> termos;

    x = (x*pi)/180;

    double Seno = 0;

    for ( int n = 0; n < termos; n++ )
    {
        Seno += Potencia ( -1 , n ) * Potencia ( x , 2 * n + 1 ) / Fatorial ( 2* n + 1 );
    }

    cout << Seno;
    
    system ("pause");
    return 0;
}

Link to comment
Share on other sites

3 answers to this question

Recommended Posts

  • 0

Olá!

O problema é com a função Fatorial que não retorna o valor. Ela tem return apenas para quando n for 1!

O correto seria:

double Fatorial ( int n )
{
    if ( n == 1 )
    {
        return 1;
    }
    else
    {
        return n * Fatorial ( n - 1 );
    }
}
Outro problema que vejo na sua lógica é que, na função Potencia, se y tiver valor negativo, a função não retorna nada. Traduzindo: retornará lixo! O correto seria retornar algum valor nesse caso como demonstrado abaixo:
double Potencia ( double x , int y )        // Calcula a potência de x elevado a y. OBS : y é um inteiro , negativo ou positivo
{
    if ( y == 0 ) { return 1; }           // Caso y = 0 , todo número elevado a zero = 1

    if ( y >= 1 )                         // Caso y > 1 onde será necessário multiplicações sucessivas
    {
        double Potencia = x;

        while ( y > 1 )
        {
            Potencia *= x;
            y--;
        }
    return Potencia;
    }

    return 0;
}

Abraços,

Marcelo Utikawa da Fonseca

Link to comment
Share on other sites

  • 0
Olá!

O problema é com a função Fatorial que não retorna o valor. Ela tem return apenas para quando n for 1!

O correto seria:

double Fatorial ( int n )
{
    if ( n == 1 )
    {
        return 1;
    }
    else
    {
        return n * Fatorial ( n - 1 );
    }
}
Outro problema que vejo na sua lógica é que, na função Potencia, se y tiver valor negativo, a função não retorna nada. Traduzindo: retornará lixo! O correto seria retornar algum valor nesse caso como demonstrado abaixo:
double Potencia ( double x , int y )        // Calcula a potência de x elevado a y. OBS : y é um inteiro , negativo ou positivo
{
    if ( y == 0 ) { return 1; }           // Caso y = 0 , todo número elevado a zero = 1

    if ( y >= 1 )                         // Caso y > 1 onde será necessário multiplicações sucessivas
    {
        double Potencia = x;

        while ( y > 1 )
        {
            Potencia *= x;
            y--;
        }
    return Potencia;
    }

    return 0;
}

Abraços,

Marcelo Utikawa da Fonseca

Obrigado , resolveu o problema ! Segundo post que me ajuda não sei nem como agradecer . Sou novo no fórum . Como fecho o tópico para resolvido e te dou "curti" ou não sei ;D

Link to comment
Share on other sites

  • 0

De nada! A intenção é de ajudar mesmo... :)

Precisando de algo mais é só perguntar.

E a única ajuda que espero é a boa vontade das pessoas em aprender. Com certeza isso já será o bastante... B)

Sobre fechar o tópico: Tente alterar o título do tópico adicionando [RESOLVIDO] no início.

Abraços,

Marcelo Utikawa da Fonseca

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652.1k
×
×
  • Create New...