-
Basic C++ Program help
I have completed my first C++ program I am just unsure what I have done incorrectly for the 'average' portion of the program. I am not getting the correct answers. I would appreciate any help and/or suggestions.
Code:
// Math Program - provides quick calculations to basic math problems
#include <cstdio>
#include <cstdlib>
#include <iostream>
using namespace std;
// Function for factorial
long factorial (long a)
{
if (a > 0)
return (a * factorial (a-1));
else
return (1);
}
int main()
{
for (int i=1; ; i++)
{
// Header to program
cout << "********************************************************************************" << endl;
cout << "********************************* Math Program *********************************" << endl;
cout << "********************************************************************************" << endl << endl;
cout << "Please choose from the following options" << endl;
cout << endl << "1-Factorial" << endl;
cout << "2-Slope of a line" << endl;
cout << "3-Average of unlimited numbers" << endl;
cout << "4-Area of different geometries";
cout << endl << endl << "Selection: ";
int choice;
cin >> choice;
cout << endl;
// Decide which choice to run
long number;
if (choice == 1)
{
// Enter a number and call factorial() to provide answer
cout << endl << "Please type a number: ";
cin >> number;
if(number < 0)
{
cout << "Enter a positive integer!..." << endl <<endl;
}
else
{
cout << number << "! = " << factorial (number) << endl << endl;
}
}
else if (choice == 2)
// Enter coordinates and calculuates slope to provide answer
{
double x1,x2,y1,y2;
double slope;
cout << endl << "Please enter the first set of coordinates: ";
cin >> x1;
cin >> y1;
cout << endl << "Now enter the second set of coordinates: ";
cin >> x2;
cin >> y2;
slope = ((y2-y1)/(x2-x1));
cout << "The slope of the line is:" << slope << endl <<endl;
}
else if( choice == 3)
{
// "Loops forever"
for(int count = 1;;count ++)
{
double value;
double average;
double accumulator=0;
// Determine whether count is 1 or greater
if(count == 1)
{
cout << "Enter first value: ";
}
else
{
cout << "Enter next value or enter 0 to exit: ";
}
cin >> value;
// If value is 0... exit
if (value == 0)
{
// ...then average and then exit
cout << "The average is: " << average << endl;
break;
}
else
{
accumulator = accumulator + value;
average = accumulator/count;
}
}
}
// Finds the area of various geometries
else if (choice == 4)
{
// Choose a geometry
int selectGeo;
cout << "Select a geometry: " << endl << endl;
cout << "1-Square" << endl;
cout << "2-Rectangle" << endl;
cout << "3-Triangle" << endl;
cout << "4-Circle" << endl << endl;
cout << "Selection: ";
cin >> selectGeo;
cout << endl << endl;
// Determines area of square
if (selectGeo==1)
{
cout << "What is the length of one side: " << endl;
double areaSquare;
double lengthSquare;
cin >> lengthSquare;
areaSquare = lengthSquare*lengthSquare;
cout << "The area of the square is " << areaSquare << " units squared." << endl << endl;
}
// Determines area of rectangle
else if (selectGeo==2)
{
cout << "What is the length: ";
double areaRectangle;
double lengthRectangle;
double widthRectangle;
cin >> lengthRectangle;
cout << endl << "What is the width: " << endl;
areaRectangle = lengthRectangle * widthRectangle;
cin >> widthRectangle;
cout << "The area of the rectangle is " << areaRectangle << " units squared." << endl << endl;
}
// Determines area of triangle
else if (selectGeo==3)
{
cout << "What is the base length: ";
double baseTriangle;
double heightTriangle;
double areaTriangle;
cin >> baseTriangle;
cout << endl << "What is the height length: ";
cin >> heightTriangle;
areaTriangle = (0.5*baseTriangle)*(heightTriangle);
cout << "The area of the triangle is " << areaTriangle << " units squared." << endl << endl;
}
// Determines area of circle
else if (selectGeo==4)
{
cout << "What is the radius of the circle: ";
double radiusCircle;
double areaCircle;
cin >> radiusCircle;
areaCircle = 3.14*(radiusCircle*radiusCircle);
cout << "The area of the circle is " << areaCircle << " units squared." << endl << endl;
}
// Informs user selection is invalid
else
{
cout << "INVALID SELECTION!!!" << endl << endl;
}
}
else
// Informs user that input is not recognized by program
{
cout << "INVALID SELECTION!!!" << endl << endl;
}
}
// Wait for user to respond to quit program
system ("pause");
return 0;
}
Thanks
-
Check the value of count, after entering one non-zero number and then zero. You'll find that it is dividing by two. You shouldn't increment count until you know the value entered was non-zero.
-
I am not sure that the solution you have provided fixes the problem. It would seem that if it was a problem with the count variable, then on the first iteration of the loop, the program would output "enter the next number...." instead of "enter the first number". However, I think that the problem is with the accumulator. I noticed that when inputting one number, that same number is returned. When inputting two numbers it returns half of the second number entered. When you input three numbers, it returns a third of the third number. In other words, the accumulator is not actually summing the numbers. It is only giving the last input as the accumulator value. How can this be corrected?
Thanks
-
accumulator is redefined and reinitialized to 0 everytime the loop starts over.
Put it outside the loop.