Fortran Problem Solving 2 | Fortran Tutorial 10

Fortran Problem Solving part 1 is already published. So go and check it out.

This article covers some questions that can be solved using Fortran Programming Language and you need some knowledge before proceeding here. So, I suggest you read all the previous lessons covered in Fortran.

Fortran Problem Solving: Question

Solve this quadratic equation: x^2 + 5x + 6 = 0

In order to solve this quadratic equation, first let’s know about it.

Quadratic Equation

The general form of quadratic equation is ax^2 + bx + c = 0.

The value of x from the above equation is called the roots of that equation. Why roots?? because the above equation gives two values of x.

The formula to calculate the roots from quadratic equation is:

x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a}

Using plus and minus sign separately, gives two different values of x.

Now let’s implement that formula in Fortran code to solve a quadratic equation : x^2 + 5x + 6 = 0

Fortran Code to Solve Quadratic Equation

There is one thing that should be considered before writing a formula to code directly.

In the above formula, there is a calculation of the square root of b^2 - 4ac. The result of that might be real or imaginary based upon the positive value or negative value that we get from the calculation of b^2-4ac. If the calculation gives negative value in code, we might get an error. So we need to set up a condition in a code.

So first we will calculate b^2 - 4ac and store the result in another variable det (let say). Then we proceed only if the value of det is greater or equal to zero. Because we don’t want to proceed with the negative value of det, as square root of negative value gives an imaginary part.

program quadratic
  implicit none
  real :: a, b, c
  real :: det
  real :: root1, root2
    ! using value of a, b and c from x^2 + 5x + 6 = 0
     a = 1     
     b = 5
     c = 6
    det = b**2 - 4*a*c
    ! checking condition to avoid error due to imaginary value
    if (det => 0)then
       root1 = (-b + sqrt(det))/2*a
       root2 = (-b - sqrt(det))/2*a
    end if
    ! printing the final result
    print*, root1, root2
end program

The output of the above code is:

-2.00000000    -3.00000000

You can make the above code even more dynamic by asking the user to put the value of a,b and c.

For the user input, you have to use read(*,*) statement. See the code below:

program quadratic
  implicit none
  real :: a, b, c
  real :: det
  real :: root1, root2
    ! asking user for the value of a,b and c
     write(*,*)"Enter the value of a,b and c."
     read(*,*)a, b, c
    det = b**2 - 4*a*c
    ! checking condition to avoid error due to imaginary value
    if (det => 0)then
       root1 = (-b + sqrt(det))/2*a
       root2 = (-b - sqrt(det))/2*a
    end if
    ! printing the final result
    print*, root1, root2
end program

Output:

Enter the value of a, b and c
1, 5, 6
-2.00000000   -3.00000000

You can check using different values of a, b and c. Play around.

Now try to write a code to show the roots even for imaginary number. Can you??

And also try to put the condition when a=0, b=0 and c=0.

Have Fun. Enjoy coding.

If you are unclear I recommend you watching the video on this lesson.

Share this post:

1 thought on “Fortran Problem Solving 2 | Fortran Tutorial 10”

Leave a Comment

Your email address will not be published. Required fields are marked *