943,794 Members | Top Members by Rank

Ad:
  • C++ Discussion Thread
  • Unsolved
  • Views: 10799
  • C++ RSS
May 5th, 2004
0

Function that returns void

Expand Post »
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.

Reputation Points: 11
Solved Threads: 0
Newbie Poster
ElectroBoy is offline Offline
6 posts
since Mar 2004
May 6th, 2004
0

Re: SUPER simple question

if it returns void, then you can't use the return value b/c there isn't one! you are trying to "cout << Calc()" , that means print out the return value of function Calc(), but it has no return value since the return type is void.
Reputation Points: 47
Solved Threads: 2
Junior Poster in Training
infamous is offline Offline
77 posts
since Mar 2004
May 6th, 2004
0

Re: Function that returns void

Hi,

I think what infamous is saying is that you need to just call Calc(a,b,c); and be done with it... do not try to cout << Calc(a,b,c).

[CODE]

//cout << Calc(a,b,c);
Calc(a,b,c);
cout << "How about that!" << endl;
cout << "Do you want to continue (Y/N)? ";

[\CODE]

The 0 that you are seeing is because if your function returns cleanly, it will send a 0 back to the calling function (main called Calc.... Calc ran fine, and it sends you a 0 to let you know it ran fine).

Good Luck.

Christian
Last edited by kc0arf; May 6th, 2004 at 9:17 pm. Reason: code did not format properly.
Team Colleague
Reputation Points: 121
Solved Threads: 57
Posting Virtuoso
kc0arf is offline Offline
1,629 posts
since Mar 2004
May 6th, 2004
0

Re: Function that returns void

I understand the error I am making and it makes sense. Its funny how once something clicks in your head it seems so simple. My understanding was incomplete. Thank you for helping me get this point Infamous and kc0arf.
Reputation Points: 11
Solved Threads: 0
Newbie Poster
ElectroBoy is offline Offline
6 posts
since Mar 2004

This thread is more than three months old

No one has posted to this discussion for at least three months. Please let old threads die and do not reply to them unless you feel you have something new and valuable to contribute that absolutely must be added to make the discussion complete. Otherwise, please start a new thread in this forum instead.
Message:
Previous Thread in C++ Forum Timeline: Mode 13 graphics,Problem with io streams and new operator
Next Thread in C++ Forum Timeline: Question regarding reading from registry (Win32) VC6





About Us | Contact Us | Advertise | Acceptable Use Policy
Forum Index | Build Custom RSS Feed


Follow us on Twitter


© 2011 DaniWeb® LLC