next up previous contents
Nächste Seite: Aufgabe 8 Aufwärts: Lösungen Vorherige Seite: Aufgabe 6   Inhalt

Aufgabe 7

PROGRAM C_03
 IMPLICIT NONE
 REAL, ALLOCATABLE :: feld(:)
 REAL :: x, h, wert
 REAL, EXTERNAL :: sincos
 INTEGER :: i, n

 WRITE (*,*) 'n, x, h = '
 READ (*,*) n, x, h
 ALLOCATE (feld(0:n))
 CALL taylor (n, x, sincos, feld)
 wert = DOT_PRODUCT(feld, (/ (h**i, i=0,n) /))
 WRITE (*,*) 'sinus(x+h) = ', wert, SIN(x+h)
END PROGRAM

REAL FUNCTION sincos (x, index)
 REAL :: x
 INTEGER :: index
 IF (MOD(index,2) == 0) THEN
  sincos = sin(x) * (-1)**(index/2)
 ELSE
  sincos = cos(x) * (-1)**(index/2)
 ENDIF
END FUNCTION

SUBROUTINE taylor (n, x, f_abl, koeff)
 REAL :: koeff(0:n)
 INTEGER :: fac
 koeff = 0.0
 koeff(0) = f_abl(x,0)
 fac = 1.0
 DO i = 1, n
  IF (HUGE(fac)/i < fac) RETURN   ! zu grosz !!
  fac = fac * i
  koeff(i) = f_abl(x,i) / fac
 ENDDO
END SUBROUTINE


Reinfried O. Peter 2001-09-07