terça-feira, 14 de junho de 2011

CALCULANDO O SENO USANDO A SÉRIE DE TAYLOR

sin(x)= x+ (-1x^3/3!)+ (1x^5/5!)+...... (1x^(2n+1)/(2n+1)!)


onde x é o valor do ângulo em radianos. Considerar pi = 3.141593
e n é a precisao!

O usuario ira informar o angulo em graus, ou seja voce deve passar esse angulo para radianos...

RESOLVENDO:



#include<stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <math.h>

#define Pi 3.141593
int conf(float graus);
float pasrad(float *graus);
float expo(int n);
float fatorial(int *fat);
float calculox(float x, int *epx);

int main()
{
int cond=0,epx=2, fat=2, n=1;
double cf, aux;
float x,graus, cx,sin;
printf("\nEntre com o valor do angulo\n");
scanf("%f",&graus);
x=pasrad(&graus);
sin=x;
do
{


cf=fatorial(&fat);
aux=expo(n);
cx=calculox(x,&epx);
sin+=((aux*cx)/cf);

n++;
cond++;
}while(cond!=4);
sin=sin*(conf(graus));
printf("\nO valor do seno e: %f \n", sin);
getch();
return 1;
}

float pasrad(float *graus)//passa de graus para radianos
{
int aux;
if(*graus>360){//caso tenha dado mais de uma volta no circulo, calcula-se onde parou-se
*graus=*graus/360;
aux=*graus;//pego somente a parte inteira do numero de voltas
*graus=*graus-aux;
*graus*=360;//calcula a quantidade a mais que girou o circulo
}
if(*graus >90 &&*graus <=180)
*graus=180-*graus;
else if(*graus >180 &&*graus <=270)
*graus=*graus-180;
else if(*graus >270 &&*graus <=360)
*graus=360-*graus;
float rad;
rad=(*graus*Pi)/180;
return rad;

}
float expo(int n)//calcula o sinal do termo
{

int fator=1, i=0;
while(i!=n){
fator*=-1;
i++;
}
return fator;

}

float fatorial(int *fat)//calcula fatorial do denominador da serie
{

int cf=1,i,cont;
cont=*fat+1;
for(i=1;i<=cont;i++)
cf*=i;
*fat=(2*(*fat));
return cf;
}

float calculox(float x, int *epx)//calcula x(angulo em radianos) elevado a potencia.
{
float prod;
int aux=*epx+1;
prod=pow(x,aux);
*epx=(2*(*epx));
return prod;

}

int conf(float graus)
{
if(graus <=90)
return 1;
else if(graus >90 &&graus <=180)
return 1;
else if(graus >180 &&graus <=270)
return -1;
else if(graus >270 && graus <=360)
return -1;

}

P.S; A PRECISAO VOCE PODE ALMENTA-LA, TUDO DEPENDO DO SEU PC
SER DER, COMENTEM!!!

13 comentários:

  1. noooosssaaaaaaaaaa Di!
    muito bom esse blog, me passa seu cel?
    bjim

    ResponderExcluir
  2. Resultado bom e preciso, muito obrigada

    ResponderExcluir
  3. NOSSA!!!!! juro q tem mandei uma cartinha,como vc nao respondeu... to comentando aki , me liga bjooo

    ResponderExcluir
  4. nosssa que pessoas mais chaaaatas! Me amam

    ResponderExcluir
  5. meo tava precisando muito disso e tava me batendo em coisa besta....
    vc eh muito lindo
    me ajudou muito

    Deus te ilumine meu querido!

    Hail Tafari

    ResponderExcluir
  6. Ótimo blog, mas vou da uma dica use um script para deixar o codigo bonito, vai um exemplo de como fazer isso nesse link: http://alexgorbatchev.com/SyntaxHighlighter/manual/brushes/

    ResponderExcluir
  7. Estou fazendo um programa parecido, porém é para calular o seno e o cosseno. Estou com dúvida em relação ao n(precisão), com calculo o valor do n para que a resposta esteja exata até a terceira casa após a vírgula?

    ResponderExcluir
  8. Como demonstrar a série de Taylor para senos?

    ResponderExcluir
  9. Cara programa muito enrolado, fiz um bem mais simples com melhores resultados, por exemplo, no teu programa sin(90) = 1,004357, maior do que 1 !!! Já no meu programa temos sin(90) = 0,999 resultado mais correto!!! Posto que -1 <= sin(x) <= 1.

    ResponderExcluir
    Respostas
    1. Pode postar o código? To enrolada nesse, na verdade, tá "avançado" pra mim. Vlw ;)

      Excluir
    2. Pode postar o código? To enrolada nesse, na verdade, tá "avançado" pra mim. Vlw ;)

      Excluir