无法正确计算公式

时间:2016-12-02 08:32:42

标签: c++

我试图使用几个用户定义的函数来计算各种形状的总面积(选择1-4)。

我也希望在计划结束时总计费用(选择5)。

我可以得到第一个(圆形)和最后一个(三角形)形状来计算,但不能得到中间两个。

当我尝试计算矩形和圆圈时,代码只是移过它,好像它正在跳过它。

谁能告诉我我做错了什么?

#include <iostream>
#include <iomanip>
#include <fstream>
#include <string>
#include <cmath>

using namespace std;

//predefined functions
double square(double sqrSide, double sqrArea, double& sqrTot);
double rectangle(double rectLength, double rectWidth, double& rectArea, double& rectTot);
double circle(double radius, double& cirTot, double circleArea);
double triangle(double triBase, double triHeight, double& triTot, double triArea);

//constants
const double MATERIAL_COST = 2.59;
const double LABOR_COST = 32.5;
const double PIE = 3.14;
const double TAX = .0825;


int main()
{
    // declare and initialize the variables for the shape
    int selection;
    double sqrSide = 0;
    double sqrArea = 0;
    double rectLength = 0;
    double rectWidth = 0;
    double rectArea = 0;
    double radius = 0;
    double circleArea = 0;
    double triBase = 0;
    double triHeight = 0;
    double triArea = 0;


    double sqrTot = 0;
    double rectTot = 0;
    double cirTot = 0;
    double triTot = 0;


    do
    {

        // get input from user as to what they want to do
        cout << "Carpet Area Shape" << endl;
        cout << "1. Square" << endl;
        cout << "2. Rectangle" << endl;
        cout << "3. Circle" << endl;
        cout << "4. Triangle" << endl;
        cout << "5. Done" << endl;
        cout << "Type a number to continue: ";
        cin >> selection;
        cout << endl;


        // loop through the solutions based on the user's selection
        switch (selection)
        {
        case 1: // square
            // get the length of the side from the user
            cout << "What is the length of the square: ";
            cin >> sqrSide;

            //get the totals of all the shapes
            square(sqrSide, sqrArea, sqrTot);
            rectangle(rectLength, rectWidth, rectArea, rectTot);
            circle(radius, cirTot, circleArea);
            triangle(triBase, triHeight, triTot, triArea);

            break;

        case 2:// rectangle
            // get the length of the side from the user

            cout << "What is the length of the rectangle: ";
            cin >> rectLength;

            cout << "What is the width of the rectangle: ";
            cin >> rectWidth;

            //get the totals of all the shapes 
            square(sqrSide, sqrArea, sqrTot);
            rectangle(rectLength, rectWidth, rectArea, rectTot);
            circle(radius, cirTot, circleArea);
            triangle(triBase, triHeight, triTot, triArea);

            break;

        case 3:// circle
            // get the radius of the circle from the user
            cout << "What is the radius of the circle: ";
            cin >> radius;

            //get the totals of all the shapes 
            square(sqrSide, sqrArea, sqrTot);
            rectangle(rectLength, rectWidth, rectArea, rectTot);
            circle(radius, cirTot, circleArea);
            triangle(triBase, triHeight, triTot, triArea);


            break;

        case 4:// triangle
            // get the length of the base from the user
            cout << "What is the base of the triangle: ";
            cin >> triBase;

            // get the height of the triangle from the user
            cout << "What is the height of the triangle: ";
            cin >> triHeight;

            //get the totals of all the shapes
            square(sqrSide, sqrArea, sqrTot);
            rectangle(rectLength, rectWidth, rectArea, rectTot);
            circle(radius, cirTot, circleArea);
            triangle(triBase, triHeight, triTot, triArea);


            break;

        case 5:// exit

               system("cls");

               //get the totals of all the sheets before the totals page
               square(sqrSide, sqrArea, sqrTot);
              // rectangle(rectLength, rectWidth, rectArea, rectTot);
               circle(radius, cirTot, circleArea);
               triangle(triBase, triHeight, triTot, triArea);

               //declare the variable that will be used for the total section
               double totalArea;
               double carpetCost;
               double laborCost;
               double subTotal;
               double tax;
               double totalCost;

               //initialize the variable that will be used for the total section
               totalArea = sqrTot + rectTot + circleArea + triArea;
               carpetCost = totalArea * MATERIAL_COST;
               laborCost = (totalArea/100) * LABOR_COST;
               subTotal = carpetCost + laborCost;
               tax = subTotal * TAX;
               totalCost = subTotal + tax;

               //the total section
               cout << "Total of the area: " << totalArea << endl;
               cout << "      Carpet Cost: $" << carpetCost << endl;
               cout << "       Labor Cost: $" << laborCost << endl;
               cout << "        Sub Total: $" << subTotal << endl;
               cout << "              Tax: $" << tax << endl; 
               cout << "  Total of charge: $" << totalCost << endl;

            break;

        default: "You have made an invalid selection. Please choose a number from the list.";
            cout << endl;
        }

        // loop through if the user is still making a valid selection
    } while (selection > 0 && selection < 5);

     system("pause");
    return 0;

}

//user defined function to get the area of the square
double square(double sqrSide, double sqrArea, double& sqrTot)
{
    sqrArea = sqrSide * sqrSide;

    //get the total area and store it as a variable
    sqrTot += sqrArea;

    if (sqrTot > 0) {
        cout << endl;
        cout << "     Shape: SQUARE " << endl;
        cout << "      Side: " << sqrSide << " feet" << endl;
        cout << "      Area: " << sqrArea << " square feet" << endl;
        cout << "Total Area: " << sqrTot << " square feet" << endl;
        cout << endl;
    }
    else
    {
        cout << endl;
    }

    return sqrTot;
}

//user defined function to get the area of the rectangle
double rectangle(double rectLength, double rectWidth, double& rectArea, double& rectTot)
{

    rectArea = rectLength * rectWidth;

    if (rectTot > 0) {
    //get the total area and store it as a variable
    rectTot += rectArea;
    cout << "     Shape: RECTANGLE " << endl;
    cout << "    Length: " << rectLength << " feet" << endl;
    cout << "     Width: " << rectWidth << " feet" << endl;
    cout << "      Area: " << rectArea << " square feet" << endl;
    cout << "Total Area: " << rectTot << " square feet" << endl;
    cout << endl;

    }
    else
    {
        cout << endl;
    }

    return rectTot;
}

//user defined function to get the area of the circle
double circle(double radius, double& cirTot, double circleArea)
{
    //get the total area and store it as a variable
    circleArea = PIE * radius * radius;

    if (cirTot > 0) {
        //get the total area and store it as a variable
        cirTot += circleArea;
        cout << "     Shape: CIRCLE " << endl;
        cout << "    Radius: " << radius << " feet" << endl;
        cout << "      Area: " << circleArea << " square feet" << endl;
        cout << "Total Area: " << cirTot << " square feet" << endl;
        cout << endl;

    }
    else
    {
        cout << endl;
    }

    return cirTot;
}

//user defined function to get the area of the triangle
double triangle(double triBase, double triHeight, double& triTot, double triArea)
{
    triArea = (triBase*triHeight) / 2;

    // get the total area and store it as a variable
    triTot += triArea;

    if (triTot > 0) {
        //get the total area and store it as a variable
        triTot += triArea;
        cout << "     Shape: TRIANGLE " << endl;
        cout << "      Base: " << triBase << " feet" << endl;
        cout << "    Height: " << triHeight << " feet" << endl;
        cout << "      Area: " << triArea << " square feet" << endl;
        cout << "Total Area: " << triTot << " square feet" << endl;
        cout << endl;

    }
    else
    {
        cout << endl;
    }

    return triTot;
}

1 个答案:

答案 0 :(得分:1)

在您的代码中:

{
sqrArea = sqrSide * sqrSide;

//get the total area and store it as a variable
sqrTot += sqrArea;

if (sqrTot > 0) {
    cout << endl;
    cout << "     Shape: SQUARE " << endl;
    cout << "      Side: " << sqrSide << " feet" << endl;
    cout << "      Area: " << sqrArea << " square feet" << endl;
    cout << "Total Area: " << sqrTot << " square feet" << endl;
    cout << endl;
}
else
{
    cout << endl;
}

return sqrTot;
}

你这样做&#34; sqrTot + = sqrArea&#34;在if语句之前。

在矩形中你这样做:

{

rectArea = rectLength * rectWidth;

if (rectTot > 0) {
//get the total area and store it as a variable
rectTot += rectArea;
cout << "     Shape: RECTANGLE " << endl;
cout << "    Length: " << rectLength << " feet" << endl;
cout << "     Width: " << rectWidth << " feet" << endl;
cout << "      Area: " << rectArea << " square feet" << endl;
cout << "Total Area: " << rectTot << " square feet" << endl;
cout << endl;

}
else
{
    cout << endl;
}

return rectTot;
}

rectTot + = rectArea;在if语句中。

我相信错误就在这里。如果不是,你能提供样品输出吗?

希望这有帮助!