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!!!
Parabens!
ResponderExcluirotimo blog!
noooosssaaaaaaaaaa Di!
ResponderExcluirmuito bom esse blog, me passa seu cel?
bjim
Resultado bom e preciso, muito obrigada
ResponderExcluirNOSSA!!!!! juro q tem mandei uma cartinha,como vc nao respondeu... to comentando aki , me liga bjooo
ResponderExcluirdidi s2 fifi!!!!!!!!!!
ResponderExcluirnosssa que pessoas mais chaaaatas! Me amam
ResponderExcluirmeo tava precisando muito disso e tava me batendo em coisa besta....
ResponderExcluirvc eh muito lindo
me ajudou muito
Deus te ilumine meu querido!
Hail Tafari
Ó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/
ResponderExcluirEstou 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?
ResponderExcluirComo demonstrar a série de Taylor para senos?
ResponderExcluirCara 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.
ResponderExcluirPode postar o código? To enrolada nesse, na verdade, tá "avançado" pra mim. Vlw ;)
ExcluirPode postar o código? To enrolada nesse, na verdade, tá "avançado" pra mim. Vlw ;)
Excluir