P_50_E24-Calcular+coseno+mediante+serie+de+Taylor

=__**Cálculo del Coseno utilizando la serie de Taylor**__=

El desarrollo en serie de Taylor de la función coseno es: donde el ángulo x viene expresado en radianes.

Escribir un programa que calcule el valor aproximado de coseno (x), utilizando para ello los N primeros términos de la serie de Taylor. El número de términos N de la serie dependerá del valor del último, es decir, se añadirán términos a la serie hasta que el valor absoluto del último término añadido sea menor que 0.0005.

Para escribir el programa se utilizará, al menos, un subprograma que permita evaluar potencias y otro que calcule el factorial de un número.

code format="pascal" PROGRAM Subrp_20 ; CONST rPRECISION = 0.0005 ;

FUNCTION fnrFactorial (iNum : Integer) : Real ; VAR rFact : Real ; i    : Integer ; BEGIN rFact := 1 ; FOR i := 2 TO iNum DO      rFact := rFact * i ;

fnrFactorial := rFact END ;

FUNCTION fnrPotencia (rBase : Real ; iExponente : Integer) : Real ; VAR rPot : Real ; i   : Integer ; BEGIN rPot := 1 ; FOR i := 1 TO iExponente DO     rPot := rPot * rBase ; fnrpotencia := rPot ; END ;

FUNCTION fnrCoseno ( rAngulo : Real ) : Real ; VAR i, iSigno             : Integer ; rTermino, rValorCoseno : Real ; BEGIN { Si el ángulo es superior a 2 * PI se sustituye por su equivalente } rAngulo := Frac ( rAngulo / (2 * PI) ) * (2 * PI) ;

rValorCoseno := 1  ; i            := 0  ; iSigno       := +1 ;

REPEAT i        :=  i + 1 ; iSigno   := - iSigno        ; rTermino := fnrPotencia   (rAngulo, 2 * i) / fnrFactorial  (2 * i) ;

rValorCoseno := rValorCoseno + iSigno * rTermino UNTIL rTermino <= rPRECISION ;

fnrCoseno := rValorCoseno ; { Devolver el valor calculado} END ;

{ Variables del Programa Principal --} VAR rAngulo : Real ;

BEGIN { -- Programa Principal --} Write ('Escribe el valor del Angulo: ') ; ReadLn (rAngulo) ;

Writeln ; Writeln ; WriteLn ('El coseno de ', rAngulo:0:2, ' es: ', fnrCoseno (rAngulo):0:5) ;

Writeln ; Writeln ('Comprobacion:') ; WriteLn ('Utilizando la funcion Cos se obtiene: ', Cos(rAngulo):0:5) ;

WriteLn ; ReadLn ; END. { FIN del PROGRAMA }

code