Ir ao conteúdo

Função SENO


Marejio

Posts recomendados

Postado

Olá, como vão?

Eu tenho um problema com relação a implementação de uma função seno...

39901da1b4ba7f3bf07716e4d06b68ba.png

#define PI 3.14
#include <stdio.h>
#include <stdlib.h>
double exponencial(double base, int expoente);
double exponencial(double base, int expoente){

double resultado;
int contador;

resultado = 1;

if(expoente == 0){
resultado = 1;
} else {
for(contador = 0;contador < expoente; contador++){
resultado = resultado * base;
}
}
return resultado;
}
double fatorial(int numero);
double fatorial(int numero){

double resultado;

resultado = numero;

while(numero>1){
resultado = resultado*(numero-1);
numero--;
}

return resultado;
}
double seno(double angulo);
double seno(double angulo){

int soma=1;
double esp1;
double fatorial1;
double r_cos=1, n_esp;
while(angulo>(2*PI)){
angulo=angulo-2*PI;
}
for(esp1=1; esp1<=20; esp1=esp1+2){
n_esp = exponencial(angulo,esp1);
fatorial1 = fatorial(esp1);
if((soma%2)==1){
r_cos=r_cos+(n_esp/fatorial1);
}else{
r_cos=r_cos-(n_esp/fatorial1);
}
soma++;
}
return r_cos;
}
int main(){

int angulo;
double resultado;

printf("Bem vindo a Cálculadora de Senos!\n");
printf("Digite o valor do angulo:\n");
scanf("%d", &angulo);

resultado = seno(angulo)-1;
printf("O seno de %d é %lf\n", angulo, resultado);
return 0;
}

Como podem ver, esse código seria um exagero, pois já existe a função pronta "sin()" da biblioteca <math.h> de C... aí que vem as regras:

Eu devo implementá-la sem usar a biblioteca math.

Destaco que testei todas as outras funções, tal como exponenciação e fatoriação... ambas funcionam, o problema é na função seno... ela não retorna os valores corretos.

Alguem me dá uma luz por favor referente ao problema que tenho que corrigir na minha lógica dessa função para que o programa funcione corretamente?

MUITO OBRIGADO!

Postado
http://br.answers.yahoo.com/question/index?qid=20071214151830AAocNpS

Olha ai que tem uma forma interessante pra calcular seno

Cara, eu dei uma olhada mas não ajudou em nessa isso aí, porque é como eu tinha dito, não podia ter nada pronto, teria que sair de um cálculo mesmo.

Bom, ta aí a resolução, tive como base a série de Taylor...

Ta funcionando certinho, com precisão alta e pra qualquer angulo (não exagerando muito no número (ex.: 800000).

#define PI 3.14159265 //usado para redução de angulos
#define PRE 100 //precisão do programa
#include <stdio.h>
double exponencial(double base, int expoente);
double exponencial(double base, int expoente){

double resultado;
int contador;

resultado = 1;

if(expoente == 0){
resultado = 1;
} else {
for(contador = 0;contador < expoente; contador++){
resultado = resultado * base;
}
}
return resultado;
}
double fatorial(int numero);
double fatorial(int numero){

double resultado;

resultado = numero;

while(numero>1){
resultado = resultado*(numero-1);
numero--;
}

return resultado;
}
double seno(double x);
double seno(double x){

int contador;
double resultado;
resultado = 0;
while(x>(2*PI)){
x=x-2*PI;
}
for(contador = 0; contador < PRE;contador++){
resultado = resultado + exponencial(-1, contador) * exponencial(x, 2*contador + 1) / fatorial(2*contador + 1);
}

return resultado;
}
int main(){

int angulo;
double resultado;

printf("Bem vindo a Cálculadora de Senos!\n");
printf("Digite o valor do angulo em radianos:\n");
scanf("%d", &angulo);

resultado = seno(angulo);
printf("O seno de %d é %lf\n", angulo, resultado);
return 0;
}

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...