Почему я в бесконечном цикле?
PROGRAM tayls
USE kertoma
USE tforexp
IMPLICIT NONE
INTEGER :: n= 5
INTEGER :: i
REAL :: x
WRITE(*,*) "f1(x)= (e**x-1)/x"
DO i=1,10
x= 0.01*i
WRITE(*,*)x, (taylexp(x,n)-1)/x
END DO
END PROGRAM tayls
с участием
MODULE tforexp
USE kertoma
IMPLICIT NONE
CONTAINS
FUNCTION taylexp(x,ord)
REAL :: taylexp, x, sum
INTEGER :: ord, i
sum= 1.0
DO i=1,ord
sum= sum+ x**i/fact(i)
END DO
taylexp= sum
END FUNCTION taylexp
END MODULE tforexp
а также
MODULE kertoma
IMPLICIT NONE
CONTAINS
FUNCTION fact(n)
INTEGER :: fact,n,y=1
DO WHILE (n>1)
y= y*n
n= n-1
END DO
fact = y
END FUNCTION fact
END MODULE kertoma
Бесконечный цикл начинается сразу после первого вывода "f1(x)=...". Поэтому я думаю, что при первом вызове функции taylexp происходит бесконечный цикл, но я не понимаю, почему. Я думаю, что это как-то связано с фортраном, использующим общедоступные переменные, но я не знаю, как последовательно избегать этого. Сначала я попытался вызвать функцию без определения x, просто используя «0.01*i», и я подумал, что, возможно, проблема в том, что эта функция использует то же имя для фиктивного индекса, но это явно не решает проблему.
integer :: y=1
возможно не делает то, что вы думаете. - person francescalus   schedule 21.01.2015taylerr
? Зачем тогда в посте? - person John Alexiou   schedule 25.01.2015