Exercise 4.2: quadratic-5.0.cpp
//quadratic-5.0.cpp
//Solution to Exercise 4.2
//Adapts quadratic-4.0.cpp to output in better format
//Simple program to solve a quadratic equation.
//Reads coefficients from a file and
//outputs solutions in good format
//to a different file.
//Uses complex numbers for solutions
//Steven Bamford
#include <cstdlib>
#include <iostream>
#include <iomanip>
#include <fstream>
#include <cmath>
#include <complex>
using namespace std;
int main()
{
double a, b, c; //coefficients of quadratic
//a*x*x + b*x + c = 0
complex<double> des; //variable for the discriminant
complex<double> x1, x2; //two complex solutions
ifstream infile; //input file buffer
ofstream outfile; //output file buffer
int width = 10; //width of output fields
int precision = 6; //precision of output values
infile.open("quadratic.in"); //assign file to input buffer
outfile.open("quadratic-5.0.out"); //assign file to output buffer
while (true)
{
infile >> a >> b >> c; //read data
if (infile.eof()) break; // break loop if at end of file
des = b*b - 4*a*c; //calc discriminant
x1 = (-b + sqrt(des))/(2*a); /* note des complex so */
x2 = (-b - sqrt(des))/(2*a); /* complex sqrt() used */
outfile.setf(ios::fixed, ios::floatfield); //set format
outfile.precision(precision); //set precision
//output solutions to file
outfile << "(" << setw(width) << x1.real() << ","
<< setw(width) << x1.imag() << ") , "
<< "(" << setw(width) << x2.real() << ","
<< setw(width) << x2.imag() << ")" << endl;
}
infile.close(); //close input file
outfile.close(); //close output file
return(0);
}