0

I am struggling with creating a function that is void. I can write the code inline without a function as follows :

```
#include <iostream>
#include <cmath>
#include <string>
#include <iomanip>
using namespace std;
int main()
{
string answer;
answer = "Yes";
while ( answer[0] == 'Y' || answer[0] == 'y' ) { // continue processing
// Announce purpose of program:
cout << "This program finds roots of a quadratic equation." << endl;
// Input the coefficients:
cout << "Enter the coefficients a, b, and c, separated by spaces:>";
double a;
double b;
double c;
cin >> a >> b >> c;
// Compute the discriminant:
double discriminant = b*b - 4*a*c;
// Compute and output the roots:
if ( discriminant > 0 ) {
cout << "Two real roots: "
<< setprecision (4) << (0 - b + sqrt(discriminant)) / (2 * a)
<< " and "
<< setprecision (4) << (0 - b - sqrt(discriminant)) / (2 * a)
<< "." << endl;
} else if ( discriminant < 0 ) {
cout << "Two complex roots, where the real part is "
<< setprecision (4) << (0 - b) / (2 * a) << endl
<< "and the imaginary part is plus or minus "
<< setprecision (3) << abs(sqrt(0 - discriminant) / (2 * a)) << "." << endl;
} else { // if ( discriminant == 0 || discriminant == -0 )
cout << "Two identical real roots, both "
<< setprecision (4) << (0 - b) / (2 * a)
<< "." << endl;
} // else
// function main
cout << "How about that!" << endl;
cout << "Do you want to continue (Y/N)? ";
cin >> answer;
}
return(0);
}
I can write the function as below and it works, however it runs the functions output and then gives me a 0. :
#include <iostream>
#include <cmath>
#include <string>
#include <iomanip>
using namespace std;
// Function
int Calc(double a, double b, double c)
{
// Compute the discriminant:
double discriminant = b*b - 4*a*c;
// Compute and output the roots:
if ( discriminant > 0 || discriminant == 0 ) {
cout << "Two real roots: "
<< setprecision (4) << (0 - b + sqrt(discriminant)) / (2 * a)
<< " and "
<< setprecision (4) << (0 - b - sqrt(discriminant)) / (2 * a)
<< "." << endl;
} else {
cout << "In this case, the roots of the equation are imaginary." << endl
<< "We will not perform any calculations" << endl;
}
return (0);
}
int main()
{
// Declare local variables
string answer;
double a;
double b;
double c;
// Assign value to answer string
answer = "Yes";
while ( answer[0] == 'Y' || answer[0] == 'y' ) { // continue processing
// Statement and input the coefficients:
cout << "Determine the roots (x1 and x2) of the equation using the quadratic formulas: " << endl;
cout << "Enter the coefficients for a, b, and c, separated by spaces:";
cin >> a >> b >> c;
cout << Calc(a,b,c);
cout << "How about that!" << endl;
cout << "Do you want to continue (Y/N)? ";
cin >> answer;
}
return(0);
}
```

WHICH IS JUST A SET UP SO YOU UNDERSTAND I HAVE BEEN WORKING ON MY HOMEWORK. My question is about using void functions and the error I get when I try to write one. Here is the problem code :

```
#include <iostream>
#include <cmath>
#include <string>
#include <iomanip>
using namespace std;
// Function
void Calc(double a, double b, double c)
{
// Compute the discriminant:
double discriminant = b*b - 4*a*c;
// Compute and output the roots:
if ( discriminant > 0 || discriminant == 0 ) {
cout << "Two real roots: "
<< setprecision (4) << (0 - b + sqrt(discriminant)) / (2 * a)
<< " and "
<< setprecision (4) << (0 - b - sqrt(discriminant)) / (2 * a)
<< "." << endl;
} else {
cout << "In this case, the roots of the equation are imaginary." << endl
<< "We will not perform any calculations" << endl;
}
}
int main()
{
// Declare local variables
string answer;
double a;
double b;
double c;
// Assign value to answer string
answer = "Yes";
while ( answer[0] == 'Y' || answer[0] == 'y' ) { // continue processing
// Statement and input the coefficients:
cout << "Determine the roots (x1 and x2) of the equation using the quadratic formulas: " << endl;
cout << "Enter the coefficients for a, b, and c, separated by spaces:";
cin >> a >> b >> c;
cout << Calc(a,b,c);
cout << "How about that!" << endl;
cout << "Do you want to continue (Y/N)? ";
cin >> answer;
}
return(0);
}
```

Here is the error on compile :

```
C:\Program Files\Utilities\Microsoft Visual Studio\MyProjects\Project3\proj3.cpp(45) : error C2679: binary '<<' : no operator defined which takes a right-hand operand of type 'void' (or there is no acceptable conversion)
Error executing cl.exe.
```

Any insight into using a function that returns void would be appreciated. Otherwise I go back to writing the code without a function.

*Edited 3 Years Ago by pyTony*: fixed formating