# 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   ```

`b2-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-b2` 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 `(x3 + 2x2 - 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 `bnew = 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 `cnew= c+(divisor * bnew)`.
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 `Ax2+Bx+C=0` where `A` is `a`, `B `is `bnew` and `C `is `cnew`.

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

 First Prev Next
 oh hi NoPoinT ba DA 10-Feb-13 1:36
 Re: oh hi pranav95 10-Feb-13 1:59
 Cubic Equations Michael Waters 7-Oct-09 10:16
 Re: Cubic Equations pranav95 7-Oct-09 16:10
 Re: Cubic Equations Michael Waters 8-Oct-09 5:34
 Re: Cubic Equations pranav95 8-Oct-09 5:37
 Nice Article stoni 2-Oct-09 4:48
 That's the way I started to use computers 30 jears ago.   In order to solve a polinomial equatation of n-th degreee (cubical is 3rd) "Newtons Method" will do the job. It's an approximate method. Google for it - there are many good descriptions/and pseudocode examples on the net - an code it.   I remember having fun coding it using pascal in the late 1980s for num mat lesson at university, but unfortunately I do not have the code anymore. Also interesting is the "Gaussian elimination" to solve a linear equitation system (n equitations, n variables) . It's fun as well.
 Re: Nice Article pranav95 2-Oct-09 20:34
 Good Job! kopota 1-Oct-09 20:51
 Good job Marius Iulian Mihailescu 1-Oct-09 20:08
 Last Visit: 31-Dec-99 19:00     Last Update: 27-Mar-15 4:15 Refresh 1