Won't Compile the simplest of programs! Am I being stupid?

  1. Won't Compile the simplest of programs! Am I being stupid???

    Hi, I'm just getting my teeth back into Fortran 90 I had a course on it last year, and just want to familirise myself with it before I apply for post grad stuff.

    Anyway, the program i have written is:

    program emosix

    real:: a, roota

    write(*,*) 'Type an interger to find the square root (must be a positive number)'
    read(*,*) a

    if(a>=0.0)
    stop

    roota = sqrt(a)

    write(*,*) 'The sqaure root of ', a, ' = ', roota

    pause

    end program emosix


    and I get the error code:

    Error: Cannot assign to a named constant at (1)
    C:\Users\James\Documents\Programming\Emo6\~emo6.f90:15.5:

    pause
    1
    Warning: Deleted feature: PAUSE statement at (1)


    The warning about deleted feature hasn't made any difference in the past, so I don't think its that, but I have no idea what the cannot assign... part means?? Any ideas?

    Thanks Jim
     
  2. jcsd
  3. Mark44

    Staff: Mentor

    Re: Won't Compile the simplest of programs! Am I being stupid???

    Why is that stop in there after the if statement?

    Also, your if statement needs an end if, I believe.
    Code (Text):

    program emosix

    real:: a, roota

    write(*,*) 'Type an interger to find the square root (must be a positive number)'
    read(*,*) a

    if(a>=0.0) then
      roota = sqrt(a)
      write(*,*) 'The sqaure root of ', a, ' = ', roota

      pause
    end if
    stop
    end program emosix
     
     
  4. Re: Won't Compile the simplest of programs! Am I being stupid???

    Hi

    Thanks for the response, its in there to stop the program if the user puts a negative number in, as you can't have a square root of negative number.

    I put in the end if and it gives me another error

    if(a>=0.0)
    1
    Error: Cannot assign to a named constant at (1)
    C:\Users\James\Documents\Programming\Emo6\~emo6.f90:11.3:

    end if
    1
    Error: Expecting END PROGRAM statement at (1)
    C:\Users\James\Documents\Programming\Emo6\~emo6.f90:17.5:

    pause
    1
    Warning: Deleted feature: PAUSE statement at (1)


    that is what I get now.
     
  5. Re: Won't Compile the simplest of programs! Am I being stupid???

    oops its supposed to be 'a<=0.0' but that didn't change anything.

    Thanks

    Jim
     
  6. Mark44

    Staff: Mentor

    Re: Won't Compile the simplest of programs! Am I being stupid???

    Well, you can, but the result won't be real. Instead of stopping the program, you should have logic that prevents the program from attempting to take the square root of a negative number.
    You can take the square root of 0, so you should make the test expression a < 0.0.

    As far as the "can't assign to a named constant" business, try using a different variable for roota.

    What does your code look like now? You if statement wasn't formed correctly before, and it still might not be right.
     
  7. jtbell

    Staff: Mentor

    Re: Won't Compile the simplest of programs! Am I being stupid???

    You need a "then". For example (also fixing your test condition):

    Code (Text):

          if (a <= 0.0) then
             stop
          end if
     
    For some reason, the missing "then" triggers the "can't assign to a named constant" error.
     
  8. Mark44

    Staff: Mentor

    Re: Won't Compile the simplest of programs! Am I being stupid???

    I added one in the code I showed in post #2, but didn't say that explicitly. I should have, since the OP seems to have missed it.
    The condition can be written as a < 0.0.
     
  9. Re: Won't Compile the simplest of programs! Am I being stupid???

    suggestion of mark is absolutely correct

    the error is coming due to absence of THEN statement

    thanx
     
  10. uart

    uart 2,768
    Science Advisor

    Re: Won't Compile the simplest of programs! Am I being stupid???

    I know this is an old thread that's been bumped for some reason, but I would like to add one more thing.

    The Fortran "if" statement doesn't require a "then" (or an "endif" either) when the "if" is only controlling a single statement.

    In this sense the OP's code should (almost) have worked correctly, had he not put the "new line" after the "if" statement (since end of line is more than just white space in Fortran source code).

    Code (Text):
       if (a <= 0.0) stop
    This should have worked correctly without "then" and without "endif"
     
Know someone interested in this topic? Share a link to this question via email, Google+, Twitter, or Facebook

Have something to add?
Similar discussions for: Won't Compile the simplest of programs! Am I being stupid?
Loading...