2016-12-02 4 views
0

Ich versuche mehrere benutzerdefinierte Funktionen zu verwenden, um die Gesamtfläche verschiedener Formen zu berechnen (Auswahl 1-4).Die Formeln können nicht korrekt berechnet werden

Ich möchte auch die Kosten am Ende des Programms (Auswahl 5) summiert haben.

Ich kann die ersten (Kreis) und letzten (Dreieck) Formen berechnen, aber nicht die mittleren zwei.

Wenn ich versuche, das Rechteck und den Kreis zu berechnen, bewegt sich der Code einfach über ihn hinaus, als ob er überspringt.

Kann mir jemand sagen, was ich falsch mache?

#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

Warum verwenden Sie einen "doppelten" Präzisionstyp (der Ihnen 15 signifikante Präzisionszahlen gibt), aber Ihre Approximation für "PIE" [sic] ist nur 3 signifikante Zahlen? – Bathsheba

+1

Das ist eine Menge Code. Kannst du nicht bitte versuchen, ein [** minimales **, vollständiges und verifizierbares Beispiel] (http://stackoverflow.com/help/mcve) zu erstellen und uns zu zeigen? Geben Sie außerdem einige Beispieleingaben an, die Ihr Problem zusammen mit der erwarteten und tatsächlichen Ausgabe verursachen. –

+1

Sie sollten auch lernen, einen Debugger zu verwenden. Dann können Sie den Code Zeile für Zeile durchgehen, während Sie Variablen und ihre Werte überwachen. Mit einem Debugger sollte man ziemlich schnell sagen, was das Problem ist. –

Antwort

0

In Ihrem Code:

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

Sie tun dies "sqrTot + = sqrArea" vor der if-Anweisung.

Im Rechteck tun Sie das:

{ 

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; ist in der if-Anweisung.

Ich glaube, der Fehler ist hier. Wenn nicht, könnten Sie eine Beispielausgabe geben?

Hoffe, das hilft!

Verwandte Themen