12,817,428 members (33,914 online)
alternative version

#### Stats

60.6K views
15 bookmarked
Posted 1 Oct 2009

# Equation Solver in C

, 1 Oct 2009 CPOL
 Rate this:
Solves linear equation in one variable, 2 linear equations in 2 variables, quadratic equations and cubic equations

## Introduction

This program can solve 4 types of equations.

## Background

I'm a ninth grader from India. I was too bored to solve equations and check them all by myself. So I wrote this program.

Knowledge of the quadratic formula (including imaginary roots) and synthetic division will help a lot.

## Using the Code

The method for solving linear equations in one variable is quite simple.

`ax+b = 0` is the format for one variable equations. The variables `a `and `b `are determined and `x `is computed by `-b/a`.

The method I have implemented for solving linear equations in two variables is a formula which can be derived by operating on both sets of the equation. The formula for the equations is:

`ax + by + c = 0  `
`dx + ey + f = 0  `
`x = (fb-ce)/(ae-db) `
`y = (cd -fa)/(ae-db) `

```Root 1 = (-b + Sqrt(b2 - 4ac))/2a
Root 2 = (-b - Sqrt(b2 - 4ac))/2a   ```

`b<sup>2</sup>-4ac` is called the "Discriminant" which is generally denoted by D.

If D >= 0, we will get Real roots.

Things get complicated when we get imaginary roots.

If D<0, then we get imaginary roots and the roots will change as follows:

```Root 1 = (-b + Sqrt(4ac - b<sup>2</sup>)i)/2a
Root 2 = (-b + Sqrt(4ac - b2)i)/2a```

C does not support complex numbers. So, I decided to print the root as a string:

```printf("\nRoot 1 : %f+%fi",((-b)/(2*a)),disc);
```

The first `%f `in the roots is `-b/2a` which is the real part of the root and the second `%f` prints `4ac-b<sup>2</sup>` with '`i`' representing the imaginary part.

I don't know a method to solve all sorts of cubic equations. If anyone gets to know of a method, please inform me of the method in a language a ninth grader like me can understand.

```float a,b,c,d,x1,x2,x3,disc;
int i;
float expr;
clrscr();
printf("ax^3 + bx^2 + cx + d = 0\n Enter a,b,c,d : \n");
scanf("%f,%f,%f,%f",&a,&b,&c,&d);
i = 0;
while(i<abs(d))
{
expr = a*pow(i,3)+b*pow(i,2)+c*i+d;
if(expr==0)
{
x1=i;
break;
}
expr = a*pow(-i,3)+b*pow(-i,2)+c*(-i)+d;
if(expr==0)
{
x1=-i;
break;
}
i++;
}
printf("Root 1 = %f",x1);
b = b + (a*(x1));
c = c + (b*(x1));
disc = (b*b)-(4*a*c);
if(disc>=0)
{
x2 = (-b+sqrt(disc))/(2*a);
x3 = (-b-sqrt(disc))/(2*a);
printf("\nRoot 2 = %f\nRoot 3 = %f",x2,x3);
}
else
{
disc = ((4*a*c)-pow(b,2))/(2*a);
printf("\nRoot 2 : %f+%fi",((-b)/(2*a)),disc);
printf("\nRoot 3 : %f-%fi",((-b)/(2*a)),disc);
}	```

One root is found by trial and error method. If this fails, we cannot find any other root of the expression in this program. This is the method which I have implemented in the program. All the numbers (both positive and negative) till `d` are checked by substitution. If it succeeds, then the program moves to the next step.

```b = b + (a*(x1));
c = c + (b*(x1));  ```

This is the place where synthetic division comes into play.

Synthetic division is a shortcut method for dividing a polynomial by a linear polynomial instead of using the long division method.

I will explain the process with an example.

Let the polynomial be `(x<sup>3</sup> + 2x<sup>2</sup> - 4x + 8)` and the linear polynomial `(x + 2)`.

We have to divide them.

1. Reverse the sign of the constant in the divisor. In this case, we have to make 2 into -2.
2. Then write the co-efficients a, b, c and d in order. It will look like this: `-2|1 2 -4 8`
3. Bring down the first co-efficient and multiply it by the divisor. Then add this to the second co-efficient. `2+(-2*1) = 0`. The general form is `b<sub>new</sub> = b+(divisor * a)`.
4. Then multiply the divisor again by the obtained result and add with the next co-efficient. `-4+(-2*0) = -4`. The general form is `c<sub>new</sub>= c+(divisor * b<sub>new</sub>)`.
5. Again multiply the divisor by the result obtained and add this to the next (last in this case) co-efficient. `8+ (-2*-4) =16`.

In this example, we get the remainder as `16`. If the polynomial is divided by one of its roots, we will get zero as the remainder in the last step. Then, the polynomial will be reduced to a quadratic equation of the form `Ax<sup>2</sup>+Bx+C=0` where `A` is `a`, `B `is `b<sub>new</sub>` and `C `is `c<sub>new</sub>`.

Then the quadratic equation is solved.

Now, we have all 3 roots of the equation.

Any suggestions or improvements are welcome. Please inform me if there is another fool-proof method for solving 3rd degree equations. Methods suggested for solving 4th degree and higher degree equations are welcome with open hands.

## History

• 1st October, 2009: Initial post

## Share

 Student India
No Biography provided

## You may also be interested in...

 View All Threads First Prev Next
 Cubic Equations Michael Waters7-Oct-09 10:16 Michael Waters 7-Oct-09 10:16
 Re: Cubic Equations pranav957-Oct-09 16:10 pranav95 7-Oct-09 16:10
 Re: Cubic Equations Michael Waters8-Oct-09 5:34 Michael Waters 8-Oct-09 5:34
 Re: Cubic Equations pranav958-Oct-09 5:37 pranav95 8-Oct-09 5:37
 Last Visit: 31-Dec-99 19:00     Last Update: 24-Mar-17 2:30 Refresh 1

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Web01 | 2.8.170308.1 | Last Updated 1 Oct 2009
Article Copyright 2009 by Anshul R