Ajuda com algoritmo em C

Pessoal estou cursando faculdade e travei em um exercicio da lista, é um algoritmo em C, poderiam me ajudar

meu problema é que eu coloco um numero para servir a variavel x e ela calcula umas 4 vezes de maneira adequada, os numeros saem diferentes, depois o resultado sai todo igual, ate dar o loop 10 vezes, obrigado pela ajuda

A questão é a seguinte
O cosseno de um ângulo X (em radianos) pode ser calculado utilizando-se a série
COS(X) = 1 – X2/2! + X4/4!- X6/6! +, …
Escrever um algoritmo que leia um valor para X, calcule e escreva o valor da soma dos 10
primeiros termos da série. Voce deve usar uma estrutura de repetição.

#include <stdio.h>

int main ()
{
float x,m,e,h,y,n,f,b,l,k,w;
int s;
printf(“Digite um valor para o angulo em radiano \n”);
scanf ("%f", &x);
w = 0;
k = 0;
y = 0;
h = 1;
f = 0;
for (s=1;s<=8;s++){

  b = s%2;
   
/*Colocar o valor positivo e negativo usando o if*/
  if (b==0){
  w = w + 2;
  y = pow(x,w);
  y = y*(-1);}
  else{
  w = w + 2;
  y = pow(x,w);
  y = y*1;}
 
  /*Calculo do fatorial*/
  k = 1;
  f = f+2;
  m = f;
  for (;m>0;m=m-1)
  k = m * k;

  /*resultado final*/
  h = y/k + h;
  printf("%f\n",h);

}
return 0;
}

Primeiramente bem vindo! Olha, a sua pergunta ficou um pouco confusa e seu código ficou com a formatação errada. O que você quer fazer? E qual a dúvida? Vi que seu código tem números negativos, ângulo e fatorial, qual é o objetivo da questão?

Ola, obrigado! Não consegui formatar direitinho, e esqueci de colocar o enunciado da questão, a questão é a seguinte
O cosseno de um ângulo X (em radianos) pode ser calculado utilizando-se a série
COS(X) = 1 – X2/2! + X4/4!- X6/6! +, …
Escrever um algoritmo que leia um valor para X, calcule e escreva o valor da soma dos 10
primeiros termos da série. Voce deve usar uma estrutura de repetição.

1 curtida

Olá, fiz um exemplo aqui!

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

/* Função para calcular o fatorial de um numero */
long calcularfatorial(int n) {
    int i;
    long fatorial = 1;
    
    for(i = 1; i <= n; i++) {
        fatorial *= i;
    }
    
    return fatorial;
}

int main() {
    
    double anguloRad, soma = 0;
    int i, k;
    long fatorial;
    
    printf("Entre com o ângulo em radiano: ");
    scanf("%lf", &anguloRad);
    
    for(i = 1; i <= 10; i++) {
        k = 2 * i;  // sequencia: 2 4 6 8 10 12 14...
        fatorial = calcularfatorial(k);
        
        /* Se i for par, subtrai | se for impa, soma */
        if(i % 2 == 0) {
            soma -= pow(anguloRad, k) / fatorial;
        } else {
            soma += pow(anguloRad, k) / fatorial;
        }
    }
    
    double result = 1 - soma;
    
    printf("\ncos(%lf) = %lf\n", anguloRad, result);
    
    return 0;
}

Nesse código, para anguloRad > 7 o resultado começa a retornar valores errados! Eu realmente não sei o motivo!

Qualquer dúvida sobre a lógica ou se você encontrou uma solução melhor, você pode compartilhar aqui.

Para finalizar eu usei a formula:
cos(x) = 1 - x²/2! + x⁴/4! - x⁶/6! + x⁸/8! -…

Como é um exercício, provavelmente “querem” que você calcule a potência e o fatorial manualmente, mas na verdade isso não é necessário.

Por exemplo, no segundo termo, o numerador é x2 e no terceiro termo é x4. Você não precisa calcular x elevado a 4, basta pegar o valor anterior e multiplicar por x duas vezes. E a cada termo, como o expoente aumenta de 2 em 2, basta seguir multiplicando por x duas vezes.

No denominador, mesma coisa: no segundo termo ele vale 2!, ou seja, 2 multiplicado por 1. No terceiro termo, para obter 4!, basta multiplicar o que falta (3 e 4), no quarto termo, basta multiplicar o que falta (5 e 6), em vez de multiplicar tudo de novo.

Traduzindo isso para código:

float x;
// ler valor de x, etc...

float total = 1.0; // começa no 1
int sinal = -1;
float num = 1.0, den = 1.0;
for (int i = 1; i < 10; i++) {
    num *= x * x;
    den *= 2 * i * ((2 * i) - 1);
    total += sinal * (num / den);
    sinal *= -1;
}
printf("%f",total);

Também criei uma variável para controlar o sinal (bastando inverter de -1 para 1, para -1, etc).

E como o primeiro termo é 1, já inicializei o total com esse valor, e no loop só calculei os 9 termos restantes.

1 curtida