0

This is what i have so far guys,

//LAB 6

#include <iostream>
#include <cmath>

using namespace std;



double getSides ()
{
    double sideA, sideB, sideC;
    cout << "Enter three sides: " << endl;
    cin >> sideA >> sideB >> sideC;

}

bool formTriTest (double sideA, double sideB, double sideC)
{
    if (sideA + sideB > sideC
        || sideB+ sideC > sideA
        || sideA + sideC > sideB)
    {
        return false;
    }
}

double perimeter (double sideA, double sideB, double sideC)
{
    double pAns;

    pAns = sideA + sideB + sideC;

    return pAns;
}

double triArea (double sideA, double sideB, double sideC, double S)
{
    S = (sideA + sideB + sideC) / 2.0;

    double area;

    area = sqrt (S* (S - sideA )*(S - sideB) *(S - sideC));

    return area;
}


int main()
{
    cout << getSides();
}

The program in its final goal state, must consist of at least three functions:

(a) One function to test if a, b, c can actually form a triangle, and the function’s return type is “bool”
(b) One function to find the perimeter of a triangle.
(c) One function to find the area of a triangle.

Limitations :
I read in a few sets of triangles until the program comes across a set that consists a zero in any of the values, then the program stops.

I wont ask anyone to write my program I realize that.

What I require for now is help on passing the values of the sideA sideB and sideC inputs into the other functions for calculation. How do I accomplish this?

Edited by acerious: remove duplicate line.

2
Contributors
5
Replies
8
Views
5 Years
Discussion Span
Last Post by NathanOliver
0
//LAB 6

#include <iostream>
#include <cmath>

using namespace std;



bool formTriTest (double a, double b, double c)
{
    if (a + b > c
        || b+ c > a
        || a + c > b)

        return true;
    else
        return false;
}

double perimeter (double A, double B, double C)
{
    double pAns;

    pAns = A + B + C;

    return pAns;
}

double triArea (double sideA, double sideB, double sideC, double S)
{

    double area;

    area = sqrt (S* (S - sideA )*(S - sideB) *(S - sideC));

    return area;
}

double semiP (double a, double b, double c)
{
    double s;

    s = (a + b + c) / 2.0;

    return s;
}

int main()
{
    double sideA, sideB, sideC, peri, semiPerimeter, triangleArea, testTri;


    do
    {
    cout << "Enter three sides: " << endl;
    cin >> sideA >> sideB >> sideC;

    testTri = formTriTest(sideA, sideB, sideC);


        semiPerimeter = semiP(sideA, sideB, sideC);

    triangleArea = triArea(sideA, sideB, sideC, semiPerimeter);
    cout << "Triangle (" << sideA << ", " << sideB << ", " << sideC << ")"
    << " ==> ";
    cout << "Area " << "(" << triangleArea << "), ";

    peri = perimeter(sideA, sideB, sideC);

    cout << "Perimeter " << "(" << peri << ");" << endl;
    } while ((testTri = true));



}

OUTPUT EXAMPLE:
Enter three sides:
3 4 5
Triangle (3, 4, 5) ==> Area (6), Perimeter (12);
Enter three sides:
1 2 3
Triangle (1, 2, 3) ==> Area (0), Perimeter (6);
Enter three sides:

The issue here is it shouldnt pass the triangle test when I enter 1, 2, 3 as my values.
What am I doing wrong here?

0

Welcome to the world of dealing with floating point numbers. My suspiscion is that 1 + 2 as a double is giving you something like 3.0000000000001 which will be greater than 3. If you have a debugger where you can step through your code I would do that to see what the values are.

0

Nathan, I'm using xCode to compile here, Im not sure where to look for debugger output.

bool formTriTest (double a, double b, double c)
{
    if ((a + b) > (c+1)
        || (b+ c) > (a+1)
        || (a + c) > (b+1))

        return 1;
    else
        return 0;
}

I tried this since you said the floating no.s' decimal may be the issue but its still not returning false. Is there another way I could re-write this function?

0

Sorry my mistake. You should be using && not || in your if statement. The three numbers will form a triangle only if all three inequalities are true. If any of them are false then they will not make a triangle.

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.