Ir ao conteúdo

Posts recomendados

Postado

Calcule seno(x), x em radianos, usando sua própria função: double seno(double x, double eps), a partir da série seno_x =  x/(1!) - x3/(3!) + x5/(5!) - ..... Teste para valores conhecidos e compare com o resultado da função double sin(double) da biblioteca da linguagem. Use precisão eps=0.0000001. Podem me ajudar estou tendo problemas com esse exercicio

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

double seno(double x,double eps);
int main()
{double x,eps;
printf("insira em radianos o seno que deseja encontrar:");
scanf("%f",&x);
printf("seno(math.h):\t%f",sin(x));
printf("seno(funcao):\t%f",seno(x,eps));

  
system("PAUSE");    
return 0;
}
double seno(double x,double eps)
{double seno_x,seno_x1,i;
i=2;
seno_x=x;
eps=x;
do
{
seno_x=seno_x1;
seno_x1 =  seno_x*(x*x/i*(i+1));
eps=eps+seno_x1;
i=i+2;
}while (eps>0.0000001);
}
Nao estou conseguindo fazer a funçao funcionar

Postado

@Antonio_FPS  Olá. A princípio só uma correção: Você está trabalhando com valores do tipo double. Logo, para fazer a leitura de um valor desse tipo seria isso:

 

scanf("%lf", &x);

 

Postado

@Antonio_FPS  O problema então está na sua função

adicionado 8 minutos depois

Perceba que no main você cria a variável do tipo double eps e, mesmo sem atribuir nenhum valor a ela, você passa ela como parâmetro ao chamar sua função 

adicionado 56 minutos depois

@Antonio_FPS  só uma pergunta. O q seria o eps?

Postado

@Antonio_FPS  Tem um outro ponto. Sua função deve ter o tipo de retorno double e você não está retornando nada

Postado

@isrnick  Obrigado pela explicação.

Também pensei em algo assim: essa precisão ser passada como parâmetro.da função.

Se acaso tiver alguma sugestão para orientar o autor do tópico fique a vontade

Postado

Mudei um pouco a função e consegui fazer a mesma funcionar, obrigado pela ajuda

programa:

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

double seno(double x);
int main()
{double x;
double y,z;
printf("Insira o grau cujo o seno deseja encontrar:");
scanf("%lf",&y);
x=y*3.14159265/180.0;
printf("\n%1.lf em radianos:\t%lf\n",y,x);
printf("\nSeno de %lf (funcao proposta):\t%lf",x,seno(x));
z=sin(x);
printf("\nSeno de %lf (math.h):\t\t%lf",x,z);


printf("\n\n");  
system("PAUSE");    
return 0;
}
double seno(double x)
{double novo,antigo,i,soma;
i=2;
soma=x;
novo=x;
do
{
antigo=novo;
novo=-antigo*(x*x/(i*(i+1)));
soma=soma+novo;
i=i+2;
}while(fabs(novo)>0.0000001);
return soma;
}
 

Sem título2.png

Postado

@Antonio_FPS  Olá. Realmente sua função está funcionando agora. 

Mas ficou um certo ponto: No enunciado do exercício é falado como deve ser assinatura da sua função, que seria double seno(double x, double eps). Devemos fazer de acordo com o enunciado. Logo, se você pensar um pouco, vai saber como resolver seu exercício usando a assinatura para sua função de acordo com o enunciado.

Dica: Dê uma olhada nos comentários acima

adicionado 31 minutos depois

Se não está conseguindo resolver olhando para os comentários feitos avisa, ok?

 

adicionado 34 minutos depois
12 horas atrás, isrnick disse:

e imagino que a função deva receber a precisão como parâmetro e usar ela para definir quando para de calcular

 

Postado

@Antonio_FPS  Olá. Gostaria de dar uma breve explicação para se trabalhar com valores do tipo double

Para o caso de ler do teclado um valor desse tipo, já comentei aqui, mas apenas para reforçar:

 

scanf("%lf", &y);

Já para o caso de imprimir um valor do tipo double seria da mesma forma q um valor do tipo float.  

Veja nesse exemplo q peguei do seu exercício:

 

printf("\nSeno de %f (funcao proposta):\t%f", x, seno(x, eps));

Como pode ver, para o caso de impressão não é necessário o "%lf" .

Se quiser usar formatação, como, por ex,  definir quantas casas decimais você quer mostrar, seria bem simples.

Nesse exemplo fictício estou querendo imprimir os valores do tipo double com apenas com 2 casas decimais:

 

printf("\nSeno de %.2f (funcao proposta):\t%.2f", x, seno(x, eps));

Onde o número 2 depois do ponto equivale a quantidade de casas decimais.

Se fosse com 10 casas decimais, seria isso: %.10f 

Se deu para entender o q procurei passar ok! Se acaso ficou alguma dúvida fique a vontade para perguntar

Obs: Caso o valor em questão fosse do tipo long double, aí sim seria preciso fazer uso do %lf para impressão, mas esse não é o foco dessa explicação e se deu para entender o q foi passado com relação a valores do tipo double ótimo!

Postado

Se alguém tiver sugestões para passar para o autor do tópico fique a vontade p postar

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!