Fortran Why Does My Fortran Code Give an Unclassifiable Statement Error?

AI Thread Summary
The discussion centers around a Fortran code error encountered in an Euler method program. The error message indicates an "Unclassifiable statement" due to incorrect syntax in the function definition. The specific issue is the absence of a multiplication operator in the line defining the function `fun`, which should read `fun=(c)*(1-c)/(d+2)` instead of `fun=(c)(1-c)/(d+2)`. Participants emphasize that programming languages require explicit operators for multiplication, contrasting with mathematical notation where such operators can be implied. Additionally, they note the difference in the use of the equals sign for assignment in programming versus its use for comparison in mathematics.
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
 
Technology news 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)
You forgot to add a "*" to multiply. It should be "fun=(c)*(1-c)/(d+2)".
 
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).
 
Thread 'Is this public key encryption?'
I've tried to intuit public key encryption but never quite managed. But this seems to wrap it up in a bow. This seems to be a very elegant way of transmitting a message publicly that only the sender and receiver can decipher. Is this how PKE works? No, it cant be. In the above case, the requester knows the target's "secret" key - because they have his ID, and therefore knows his birthdate.
I tried a web search "the loss of programming ", and found an article saying that all aspects of writing, developing, and testing software programs will one day all be handled through artificial intelligence. One must wonder then, who is responsible. WHO is responsible for any problems, bugs, deficiencies, or whatever malfunctions which the programs make their users endure? Things may work wrong however the "wrong" happens. AI needs to fix the problems for the users. Any way to...

Similar threads

Replies
12
Views
2K
Replies
5
Views
5K
Replies
4
Views
27K
Replies
8
Views
4K
Replies
3
Views
14K
Replies
2
Views
3K
Replies
59
Views
11K
Back
Top