Fortran Fortran 90 very basic question : else if statement

Click For Summary
The discussion revolves around a Fortran program designed to find the roots of a quadratic binomial based on user-input coefficients a, b, and c. The main issue addressed is how to handle the case when the coefficient a is zero, which would invalidate the quadratic equation. The user initially struggles with syntax errors related to the conditional statement checking if a equals zero. It is clarified that the correct syntax requires using "==" instead of "=" for comparison. The solution involves implementing an error message when a=0 and using a "goto" statement to prompt the user to re-enter the coefficients. The program structure is adjusted to ensure proper flow, with the addition of a loop that allows users to try again if they input a=0. The final version of the program successfully compiles and runs, providing feedback to the user and handling invalid input gracefully.
fluidistic
Gold Member
Messages
3,931
Reaction score
281
Hi there,
I've tried all I could in order to complete a very simple and basic program that finds the roots of any quadratic binomial.
You have to enter the coefficients a, b and c and it would find the roots. I could do that, but a problem occurred if I typed a=0. Of course if a=0 the binomial is not quadratic (and not even a binomial), so I wanted to let it know to the user of the program. Here my problems started... I don't know how to insert in my program that if a=0 then a message would appear saying that it isn't a quadratic binomial.
Here it comes :
Program findroot
implicit none

Real(8) :: a,b,c,delta,z,y,g


Write(*,*)'Enter a, b and c'
Read(*,*)a,b,c


if (a=0) then
write(*,*)'This is not a quadratic binomial'
endif


delta=b**2-4*a*c

If (delta>=0) then
z=(-b+sqrt(delta))/(2*a)
y=(-b-sqrt(delta))/(2*a)
Write(*,*)'The roots are',z,y


Elseif (delta<0) then
write(*,*)'The binomial has no root in R but in C its roots are',-b,'+i',sqrt(-delta)/(2*a),'and',-b,'-i',sqrt(-delta)/(2*a)



endif




End program findroot
I'm almost sure that I cannot type endif and then type if...
But I tried many other things like
if (a=0) then
write(*,*)'This is not a quadratic binomial'



delta=b**2-4*a*c

elseIf (delta>=0) then
z=(-b+sqrt(delta))/(2*a)
y=(-b-sqrt(delta))/(2*a)
Write(*,*)'The roots are',z,y


Elseif (delta<0) then
write(*,*)'The binomial has no root in R but in C its roots are',-b,'+i',sqrt(-delta)/(2*a),'and',-b,'-i',sqrt(-delta)/(2*a)



endif
and changing the order of the if statements... I always get errors and the program doesn't compile.
Any help is appreciated.

Note: If I erase the if (a=0) statement the program works well. (it compiles and find roots unless I type a=0).
 
Technology news on Phys.org
Ok. It has been a long time (fortran77) but try an else in place of your first endif.
 
Thanks for the answer.
It doesn't work, I get an error : Unexpected ELSE statement.
By the way the other error is : Error: Syntax error in IF-expression at (1). (It points out the "a" in "if (a=0) then". I don't see why it is a syntax error... strange.
 
Look at this and see what you think. It compiled on a G77 compiler. It needed a == in the
if (a=0) then

there is still a problem with ending the prog after the message on a=0

Program findroot

Write(*,*)'Enter a, b and c'
Read(*,*)a,b,c


if (a == 0) then
write(*,*)'This is not a quadratic binomial'
delta = b**2-4*a*c
endif

If (delta >= 0) then
z = (-b+sqrt(delta))/(2*a)
y = (-b-sqrt(delta))/(2*a)
Write(*,*)'The roots are',z,y


Elseif (delta<0) then
write(*,*)'The binomial has no root in R but in C its roots

are',-b,'+i',sqrt(-delta)/(2*a),'and',-b,'-i',sqrt(-delta)/(2*a)

endif

End program



There are some variable declaration differences between my compiler and your also
so ignore my lack of declaration. I am still messing with it so hang with me.
 
how about this?

Program findroot

Write(*,*)'Enter a, b and c'
Read(*,*)a,b,cif (a == 0) then
write(*,*)'This is not a quadratic binomial'
goto 90
endif

delta = b**2-4*a*c
If (delta >= 0) then
z = (-b+sqrt(delta))/(2*a)
y = (-b-sqrt(delta))/(2*a)
Write(*,*)'The roots are',z,yElseif (delta<0) then
write(*,*)'The binomial has no root in R but in C its roots

are',-b,'+i',sqrt(-delta)/(2*a),'and',-b,'-i',sqrt(-delta)/(2*a)

endif
90 write(*,*)'Goodbye'
End program
 
Thanks a lot montoyas!
It works great... I forgot that 2 signs "=" were needed. That's nice.
What about this :
100 Write(*,*)'Enter a, b and c'
Read(*,*)a,b,cif ( a==0 ) then
write(*,*)'This is not a quadratic binomial, try again'
goto 100
endif
:)
 
Last edited:
That's even better. And you are welcome.

That was a fun trip in the way back machine.
 

Similar threads

  • · Replies 4 ·
Replies
4
Views
3K
  • · Replies 12 ·
Replies
12
Views
2K
  • · Replies 25 ·
Replies
25
Views
3K
  • · Replies 5 ·
Replies
5
Views
3K
  • · Replies 4 ·
Replies
4
Views
2K
  • · Replies 4 ·
Replies
4
Views
2K
  • · Replies 3 ·
Replies
3
Views
2K
  • · Replies 19 ·
Replies
19
Views
6K
  • · Replies 54 ·
2
Replies
54
Views
5K
  • · Replies 8 ·
Replies
8
Views
2K