Why Does My Fortran Code Give an Unclassifiable Statement Error?

Join the discussion
Ask a follow-up here, or get your own question answered by working scientists, mathematicians and engineers — people, not an autocomplete.
Real named experts · corrections over time · the nuance an AI answer skips
3 replies · 3K views
gabforse
Messages
1
Reaction score
0
Hey so I'm getting the error message:
Code:
Euler_Method.f90:43.1:
fun=(c)(1-c)/(d+2)
1
Error: Unclassifiable statement at (1)
And here is my code:
Fortran:
PROGRAM Euler_Method

!-------------------------------------------------------------------
! The purpose of this program is to read in endpoints, initial
!conditions, and a stepsize from the user, and then use Euler's
!method to approximate the value of the function f(x,y)=y(1-y)/x+2
!over that interval.
!-------------------------------------------------------------------

IMPLICIT NONE

REAL:: alpha, h, inr, x, y
INTEGER:: i, b

WRITE(*,*) "Please enter the rightmost endpoint"
WRITE(*,*) "of the interval over which you wish to find an"
WRITE(*,*) "approximation of f(x,y). (Must be integer value)"
READ(*,*) b

WRITE(*,*) "Please enter x of y(x)."
READ(*,*) inr
WRITE(*,*) "Please enter y of y(x)."
READ(*,*) alpha

WRITE(*,*) "Please enter the stepsize."
READ(*,*) h

DO i=0, b
y=2
x=0
x=x+h*fun(x,y)
y=y+h
!Output at each step
WRITE(*,*) x
END DO

WRITE(*,*)"The final approximation is:",x,"."

CONTAINS
REAL FUNCTION fun(c,d)
IMPLICIT NONE
REAL, INTENT(in):: c,d
fun=(c)(1-c)/(d+2)
RETURN
END FUNCTION fun

END PROGRAM Euler_Method
 
on Phys.org
gabforse said:
Hey so I'm getting the error message:
Euler_Method.f90:43.1:
fun=(c)(1-c)/(d+2)
1
Error: Unclassifiable statement at (1)

And here is my code:
PROGRAM Euler_Method

!-------------------------------------------------------------------
! The purpose of this program is to read in endpoints, initial
!conditions, and a stepsize from the user, and then use Euler's
!method to approximate the value of the function f(x,y)=y(1-y)/x+2
!over that interval.
!-------------------------------------------------------------------

IMPLICIT NONE

REAL:: alpha, h, inr, x, y
INTEGER:: i, b

WRITE(*,*) "Please enter the rightmost endpoint"
WRITE(*,*) "of the interval over which you wish to find an"
WRITE(*,*) "approximation of f(x,y). (Must be integer value)"
READ(*,*) b

WRITE(*,*) "Please enter x of y(x)."
READ(*,*) inr
WRITE(*,*) "Please enter y of y(x)."
READ(*,*) alpha

WRITE(*,*) "Please enter the stepsize."
READ(*,*) h

DO i=0, b
y=2
x=0
x=x+h*fun(x,y)
y=y+h
!Output at each step
WRITE(*,*) x
END DO

WRITE(*,*)"The final approximation is:",x,"."

CONTAINS
REAL FUNCTION fun(c,d)
IMPLICIT NONE
REAL, INTENT(in):: c,d
fun=(c)(1-c)/(d+2)
RETURN
END FUNCTION fun

END PROGRAM Euler_Method
fun=(c)(1-c)/(d+2) should be fun=(c)*(1-c)/(d+2), I think.

EDIT: lol
 
@gabforse, Krylov and Samy_A both figured out the reason for your compile error. The lesson for you is that you can't use mathematics or physics notation in programming languages. To denote multiplication, you can't just put symbols next to each other, as in ab; you have to explicitly add the multiplication operator *.

Another difference the new programming students stumble on is that in mathematics, = means "equal to." In many programming languages, = is used to assign a value to a variable, and a different operator is used to compare two values for equality. Fortran uses .EQ., and newer Fortran versions use == as well (taking a cue from C, C++, and others).