2016-12-02 3 views
0

いくつかのユーザー定義関数を使用して、さまざまな図形(選択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; 
} 
+0

なぜ「double」精度タイプ(15桁の精度を与えますか)を使用していますが、「PIE」[sic]の近似値はわずか3桁ですか? – Bathsheba

+1

それはたくさんのコードです。あなたは[**最小**、完全で、検証可能な例](http://stackoverflow.com/help/mcve)を作成して私たちを見せてください。また、予期した出力と実際の出力とともに、問題の原因となる入力例をいくつか提供してください。 –

+1

また、デバッガの使い方を学ぶ必要があります。次に、変数とその値を監視しながら、コードを1行ずつ進めることができます。デバッガを使用すると、問題の内容をすばやく知ることができます。 –

答えて

0

:あなたはif文の前に、この "sqrTot + = sqrArea" を行っている

{ 
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; 
} 

。あなたは、このやっている長方形で

{ 

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文の中にあります。

ここにエラーがあると思います。そうでない場合は、サンプル出力できますか?

希望すると便利です。

関連する問題