Programacion c++.. Se puede calcular el seno de forma aproximada sumando los n primeros términos de la serie infinita

sen x = x^/1! +x ^3/3!-x ^5/5! + x ^7/5!...x ^n/n!    

Escriba un programa que lea el valor de x y n, escriba su seno para los n términos.

! Significa factorial por ejemplo el factorial de 3 es 1 x2x3=6

Les dejo un esquema de lo que mas o menos podria ser, pero tengo algunos errores.

#include<conio.h>
#include<stdio.h>
#include <math.h>
main()
{
int senx=0;
float r,x,i;

int n;
int sw;
int fact;
{
printf("introduzca la base x ");
scanf("%f",&x);
printf("introduzca el exponente n ");
scanf("%d",&n);
}

for(i=1;i<=n;i=i+2)
{
r= pow(x,i)/factorial(i);
printf("r = %.2f",r);
{
fac=i*fac;
}
if(sw==1)
{
senx=senx + r
sw==0;
}
else
{
senx=senx-r
sw==1;
}
getch ();
return 0;
}

1 Respuesta

Respuesta

Si, se puede calcular, aunque si conoces la teoría de los polonomios de Taylor sabrás que el resultado es tanto más exacto cuanto más proximo a 0 sea x. Además si pones números superiores a 1 y un exponente alto te puede dar algún error de desbordamiento al calcular la potencia x a la i, pow(x, i)

El programa que lo hace bastante optimizado es este.

#include<conio.h>
#include<stdio.h>
#include <math.h>
main()
{
      float x, senx=0;
      int i, n, fact=1, sw=1;
      printf("Introduzca el valor x: ");
      scanf("%f",&x);
      printf("Introduzca el exponente maximo n: ");
      scanf("%d",&n);
      for(i=1;i<=n;i=i+2)
      {      
          senx=senx + sw*pow(x,i)/fact;
          printf("sen = %.8f\n",senx);
          fact=(i+1)*(i+2)*fact;
          sw=-sw;
      }
      getch ();
      return 0;
}

Como puedes ver sw va tomando alternativamente los valores 1 y -1 gracias a la asignación

sw=-sw

Con los cual no es necesario usar sentencias condicionales.

Y el factorial fact en cada bucle debe ser multiplicado por (i+1) y por (i+2) ya que el bucle pasará de i a i+2.

Y en vez de escribir r como escribías hay que escribir el valor del seno y así ves si ya no tiene mejora porque se repiten los valores o todavía tenía variación.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas