sono riuscito a risolvere un esercizio in c (in questo linguaggio è perfettamente funzionante), ma ora che provo a convertirlo in fortran riscontro un problemino insolito: tento di compilare il sorgente, e dopo aver corretto eventuali errori, l'eseguibil parte e si richiude senza chiedermi niente. Non riesco a capire perché mi faccia questo scherzo...
Il codice sorgente è il seguente ed è stato compilato con fortran g95.
! --------------------------------------------------
PROGRAM SENO
! --------------------------------------------------
IMPLICIT NONE
INTEGER, PARAMETER :: k=selected_real_kind(10)
REAL(kind=k),EXTERNAL :: Calcola
REAL(kind=k) :: punto
PRINT *, "Inserisci il punto: "
READ *, punto
PRINT *, "serie: ",Calcola(punto)
END PROGRAM
! --------------------------------------------------
FUNCTION Somma(n,punto) RESULT (output_8)
! --------------------------------------------------
IMPLICIT NONE
INTEGER, PARAMETER :: k=selected_real_kind(10)
REAL(kind=k) :: output_8
INTEGER :: n
REAL(kind=k) :: punto
REAL(kind=k),EXTERNAL :: Serie
INTEGER :: i
REAL(kind=k) :: risultato=0
DO i = 1,(n+1)-1
risultato = risultato+Serie(i,punto)
END DO
output_8 = risultato
RETURN
END FUNCTION
! --------------------------------------------------
FUNCTION Calcola(punto) RESULT (output_8)
! --------------------------------------------------
IMPLICIT NONE
INTEGER, PARAMETER :: k=selected_real_kind(10)
REAL(kind=k) :: output_8
REAL(kind=k) :: punto
REAL(kind=k),PARAMETER :: costante=0.0000000005
REAL(kind=k),EXTERNAL :: Somma
INTEGER :: n=1
DO WHILE ( Abs(Somma(n,punto) - Somma(n+1,punto)) > costante )
PRINT *, "Somma fino a termine ",n,": ",Somma(n,punto)
PRINT *, "Somma fino a termine ",n+1,": ",Somma(n+1,punto)
PRINT *, "Differenza: ",abs(Somma(n,punto) - Somma(n+1,punto))
n = n+1
PRINT *, n
END DO
output_8 = Somma(n+1,punto)
RETURN
END FUNCTION
! --------------------------------------------------
FUNCTION Serie(n,punto) RESULT (output_8)
! --------------------------------------------------
IMPLICIT NONE
INTEGER, PARAMETER :: k=selected_real_kind(10)
REAL(kind=k) :: output_8
INTEGER :: n
REAL(kind=k) :: punto
REAL(kind=k),PARAMETER :: menouno=-1.0
REAL(kind=k),EXTERNAL :: Fattoriale
REAL(kind=k) :: risultato
risultato = ( menouno**(n-1) ) * ( punto**((2*n)-1) ) / Fattoriale( 2*n-1 )
output_8 = risultato
RETURN
END FUNCTION
! --------------------------------------------------
FUNCTION Fattoriale(numero) RESULT (output_8)
! --------------------------------------------------
IMPLICIT NONE
INTEGER, PARAMETER :: k=selected_real_kind(10)
REAL(kind=k) :: output_8
INTEGER :: numero
INTEGER :: i
REAL(kind=k) :: somma
somma = 1
DO i = 1,(numero+1)-1
somma = i*somma
END DO
output_8 = somma
RETURN
END FUNCTION
Se qualcuno può spiegarmi dove sbaglio mi farebbe davvero un piacere!
Grazie Mille!
Pole