Search code examples
fortranfortran77

Unexpected Statement Function at 1 in Fortran


I am new to Fortran and writing this small program to write out 100 ordered pairs for a circle.

But I get the error mentioned above and I don't know how to resolve.

  implicit real*8(a-h,o-z)
  parameter(N=100)
  parameter(pi = 3.14159265358979d0)
  integer*8 k


  dtheta=2*pi/N
  r=1.0d0
  x00=0.0d0
  y00=0.0d0
  do k=0,N-1
   xb(k)=r*cos(k*dtheta)-x00
   yb(k)=r*sin(k*dtheta)-y00
  enddo

  open(64,file='xbyb.m',status='unknown')
  write(64,*) (xb(k),k=0,N-1),(yb(k),k=0,N-1)

  close(64)
  end

Solution

  • You do not declare the arrays xb and yb.

    Although not technically FORTRAN 77 I still suggest using implicit none or at least an equivalent compiler option to be forced to declare everything explicitly. Implicit typing is evil and leads to bugs.

    As High Performance Mark reminds, the syntax

      f(k) = something
    

    declares a feature (now obsolescent in Fortran 95 and later) called a statement function. It declares a function of one argument k. The only way for the compiler to recognize you mean an array reference instead is to properly declare the array. The compiler complains the statement function is unexpected because the declaration must be placed before the executable statements.

    Your implied do loop in the write statement is Fortran 90 anyway, so no need to stick to FORTRAN 77 in the 21st century.

    Other tips: status='unknown' is redundant, that is the default, just leave it out. You can just write r = 1 and x00 = 0.