# Thread: CompSci is hard

1. ## CompSci is hard

I am having some trouble with this program, and none of my friends are able to help me. My teacher is out, so we have been stuck with a substitute.

Code:
```/*
Len Bansavich III

Period 6

Triangle Program

This program computes the type of triangle (both by angle and side length) when given the length of three sides.
*/

#include <iostream.h>
#include <windows.h>
#include <iomanip.h>
#include <math.h>

void input(double &side1, double &side2, double &side3);
void sort(double &side1, double &side2, double &side3, double temp);
void angle(double &side1, double &side2, double &side3, char angleclass);
void type(double &side1, double &side2, double &side3, char typeclass);
void output(double &side1, double &side2, double &side3, char angleclass, char typeclass);

int main()
{
double side1; // side 1 variable
double side2; // side 2 variable
double side3; // side 3 variable
double temp; // temporary variable for sort
char angleclass[6]; // type of triangle array
char typeclass[11]; // type of triangle array

input(side1, side2, side3);

sort(side1, side2, side3, temp);

angle(side1, side2, side3, angleclass[6]);

type(side1, side2, side3, typeclass[11]);

output(side1, side2, side3, angleclass[6], typeclass[11]);

return 0;
}

// input function's definition

void input(double &side1, double &side2, double &side3)
{
do
{
cout << "Please enter the lengths of three sides of a triangle" << endl;
cout << "(All need to be positive, sum of shortest must be greater than longest)" << endl;
cout << "Please enter the length of the first side." << endl;
cin >> side1;
cout << "Please enter the length of the second side." << endl;
cin >> side2;
cout << "Please enter the length of the third side." << endl;
cin >> side3;
}
while(side1 > 0 && side2 > 0 && side3 > 0);
}

// sort function's definition

void sort(double &side1, double &side2, double &side3, double &temp)
{
if(side1 > side3 && side3 > side2)
{
temp = side2;
side2 = side3;
side3 = temp;
}
if(side2 > side1 && side1 > side3)
{
temp = side1;
side1 = side2;
side2 = temp;
}
if(side2 > side3 && side3 > side1)
{
temp = side1;
side1 = side2;
side2 = side3;
side3 = temp;
}
if(side3 > side1 && side1 > side2)
{
temp = side1;
side1 = side3;
side3 = side2;
side2 = temp;
}
if(side3 > side2 && side2 > side1)
{
temp = side1;
side1 = side3;
side3 = temp;
}
}

// angle function's definition

void angle(double &side1, double &side2, double &side3, char angleclass[])
{
if((side1 * side1) + (side2 * side2) > (side3 * side3))
{
angleclass[0] = 'A';
angleclass[1] = 'c';
angleclass[2] = 'u';
angleclass[3] = 't';
angleclass[4] = 'e';
angleclass[5] = '\0';
}
if((side3 * side3) = (side1 * side1) + (side2 * side2))
{
angleclass[0] = 'R';
angleclass[1] = 'i';
angleclass[2] = 'g';
angleclass[3] = 'h';
angleclass[4] = 't';
angleclass[5] = '\0';
}
if((side1 * side1) + (side2 * side2) < (side3 * side3))
{
angleclass[0] = 'O';
angleclass[1] = 'b';
angleclass[2] = 't';
angleclass[3] = 'u';
angleclass[4] = 's';
angleclass[5] = 'e';
angleclass[6] = '\0';
}

}

// type function's definition

void type(double &side1, double &side2, double &side3, char typeclass[])
{
if(side1 = side2 = side3)
{
typeclass[0] = 'E';
typeclass[1] = 'q';
typeclass[2] = 'u';
typeclass[3] = 'i';
typeclass[4] = 'l';
typeclass[5] = 'a';
typeclass[6] = 't';
typeclass[7] = 'e';
typeclass[8] = 'r';
typeclass[9] = 'a';
typeclass[10] = 'l';
typeclass[11] = '\0';
}
if(side1 = side2 != side3 || side1 = side3 != side2 || side2 = side3 != side1)
{
typeclass[0] = 'I';
typeclass[1] = 's';
typeclass[2] = 'o';
typeclass[3] = 's';
typeclass[4] = 'c';
typeclass[5] = 'e';
typeclass[6] = 'l';
typeclass[7] = 'e';
typeclass[8] = 's';
typeclass[9] = '\0';
}
if(side1 != side2 != side3 || side2 != side3 != side1 || side3 != side1 != side2)
{
typeclass[0] = 'S';
typeclass[1] = 'c';
typeclass[2] = 'a';
typeclass[3] = 'l';
typeclass[4] = 'e';
typeclass[5] = 'n';
typeclass[6] = 'e';
typeclass[7] = '\0';
}
}

// output function's definition

void output(double &side1, double &side2, double &side3, char angleclass[], char typeclass[])
{
if(side1 > (side2 + side3))
{
cout << "The sides entered are not that of a triangle";
}
else
{
cout << "Triangle Type = " << typeclass << endl;
cout << "Triangle Type 2 = " << angleclass << endl;
}
}```

2. Code:
```#include <iostream.h>
#include <windows.h>
#include <iomanip.h>
#include <math.h>```
Code:
```#include <iostream>
#include <windows.h>
#include <iomanip>
#include <cmath>

using namespace std;```
Code:
```void sort(double &side1, double &side2, double &side3, double temp);

int main()
{
...

double temp;

...

sort(side1 ,side2 ,side3 ,temp );```
Since temp is passed by value here there is no chance the called function (sort) will be able to modify the value in the main function. This, combined with the fact you aren't initializing temp to anything prior to calling sort, makes me wonder why you are even bothering to pass this value into the function at all. Make temp a local variable to the sort function.

Code:
```void angle(double &side1, double &side2, double &side3, char angleclass);
void type(double &side1, double &side2, double &side3, char typeclass);
void output(double &side1, double &side2, double &side3, char angleclass, char typeclass);

int main()
{
...

char angleclass[6]; // type of triangle array
char typeclass[11]; // type of triangle array

...

angle(side1, side2, side3, angleclass[6]);

type(side1, side2, side3, typeclass[11]);

output(side1, side2, side3, angleclass[6], typeclass[11]);

...

void angle(double &side1, double &side2, double &side3, char angleclass[])
{
...

void type(double &side1, double &side2, double &side3, char typeclass[])
{
...

void output(double &side1, double &side2, double &side3, char angleclass[], char typeclass[])
{
...```
First your function definitions don't match your prototypes. Your prototypes should be expecting a char* and not just a simple char. When passing the values into the function, you would just use the plain unadorned variable name without anything like [6] or [11]. As you have it, you are attempting to pass characters at invalid indicies, i.e. typeclass[11] is one beyond the end of the array which stops at typeclass[10].

Code:
```angleclass[0] = 'A';
angleclass[1] = 'c';
angleclass[2] = 'u';
angleclass[3] = 't';
angleclass[4] = 'e';
angleclass[5] = '\0';```
Just use strcpy (you'd also want to include <cstring> for that) instead for all of those similar blocks of code:
Code:
`strcpy(angleclass,"Acute");`

3. Okay, here is my program so far, but it still doesn't work.
Code:
```/*
Len Bansavich III

Period 6

Triangle Program

This program computes the type of triangle (both by angle and side length) when given the length of three sides.
*/

#include <iostream.h>
#include <windows.h>
#include <iomanip.h>
#include <math.h>

void input(double &side1, double &side2, double &side3);
void sort(double &side1, double &side2, double &side3);
void angle(double &side1, double &side2, double &side3, char* angleclass);
void type(double &side1, double &side2, double &side3, char* typeclass);
void output(double &side1, double &side2, double &side3, char* angleclass, char* typeclass);

int main()
{
double side1; // side 1 variable
double side2; // side 2 variable
double side3; // side 3 variable
char* angleclass; // type of triangle array
char* typeclass; // type of triangle array

input(side1, side2, side3);

sort(side1, side2, side3);

angle(side1, side2, side3, angleclass);

type(side1, side2, side3, typeclass);

output(side1, side2, side3, angleclass, typeclass);

return 0;
}

// input function's definition

void input(double &side1, double &side2, double &side3)
{
do
{
cout << "Please enter the lengths of three sides of a triangle" << endl;
cout << "(All need to be positive, sum of shortest must be greater than longest)" << endl;
cout << "Please enter the length of the first side." << endl;
cin >> side1;
cout << "Please enter the length of the second side." << endl;
cin >> side2;
cout << "Please enter the length of the third side." << endl;
cin >> side3;
}
while(side1 <= 0 && side2 <= 0 && side3 <= 0);
}

// sort function's definition

void sort(double &side1, double &side2, double &side3)
{
double temp; // temporary sort variable

if(side1 > side3 && side3 > side2)
{
temp = side2;
side2 = side3;
side3 = temp;
}
if(side2 > side1 && side1 > side3)
{
temp = side1;
side1 = side2;
side2 = temp;
}
if(side2 > side3 && side3 > side1)
{
temp = side1;
side1 = side2;
side2 = side3;
side3 = temp;
}
if(side3 > side1 && side1 > side2)
{
temp = side1;
side1 = side3;
side3 = side2;
side2 = temp;
}
if(side3 > side2 && side2 > side1)
{
temp = side1;
side1 = side3;
side3 = temp;
}
}

// angle function's definition

void angle(double &side1, double &side2, double &side3, char* angleclass)
{
double dside1 = side1 * side1;
double dside2 = side2 * side2;
double dside3 = side3 * side3;

if(dside1 + dside2 > dside3)
{
strcpy(angleclass,"Acute");
}
if(dside3 = dside1 + dside2)
{
strcpy(angleclass,"Right");
}
if(dside1 + dside2 < dside3)
{
strcpy(angleclass,"Obtuse");
}

}

// type function's definition

void type(double &side1, double &side2, double &side3, char* typeclass)
{

if(side1 == side2 && side2 == side3)
{
strcpy(typeclass,"Equilateral");
}
if(side1 == side2 != side3 || side1 == side3 != side2 || side2 == side3 != side1)
{
strcpy(typeclass,"Isosceles");
}
if(side1 != side2 != side3 || side2 != side3 != side1 || side3 != side1 != side2)
{
strcpy(typeclass,"Scalene");
}
}

// output function's definition

void output(double &side1, double &side2, double &side3, char* angleclass, char* typeclass)
{
if(side1 > (side2 + side3))
{
cout << "The sides entered are not that of a triangle";
}
else
{
cout << "Triangle Type = " << typeclass << endl;
cout << "Triangle Type 2 = " << angleclass << endl;
}
}```
I have no errors, but 8 warnings.

4. Code:
`if(side1 == side2 != side3 || side1 == side3 != side2 || side2 == side3 != side1)`
You comparison chaining is not doing what you think it is.

side1 == side2 is going to be true or false and then you'll have:
true != side3 or false != side3

so I will give you this one and you can change the other. so using your check for equilateral, I'll just check for not equilateral

Code:
`if(!(side1 == side2 && side2 == side3)&& ((side1 == side2)||(side1 == side3)||(side2 == side3)))`
You also have some issues where you are strcpy'ing strings to char* that have to memory allocated to them.

When you create you char* you need to allocate some memory like
Code:
`char* angleclass = new char[20];// or whatever size you need`
and make sure you delete[] angleclass; at the end

5. Thank you both so very much.

Popular pages Recent additions