Тема: Не записуються введені дані
Завдання полягає в тому, що у нас є клас трикутник і нам потрібно знайти його площу, периметр і значення кутів. Проте сторони повинні бути в масиві і це має бути з використанням динамічної пам'ятті. З конструктором без параметрів все гаразд, він справно працює, проте коли користувач вводить значення - програма вилітає. У чому помилка?
#define _USE_MATH_DEFINES
#include <iostream>
#include <cmath>
using namespace std;
#define MAX 3
class Triangle {
private:
double *abc; //cторони
public:
Triangle(); // конструтор без параметрів
Triangle(double abc[]); // конструтор з параметром
~Triangle();
double Area();
double Per();
bool Check();
double printAngle();
};
Triangle::Triangle() { // конструктор без параметрів
abc = new double[MAX];
abc[0] = 4.0;
abc[1] = 3.0;
abc[2] = 5.0;
}
Triangle::Triangle(double abc[]) { // конструктор з параметром
this->abc[0] = abc[0];
this->abc[1] = abc[1];
this->abc[2] = abc[2];
if (Check()) {
printf("\nCorrect input in constructor");
}
else {
printf("\nIncorrect input in constructor");
}
}
Triangle::~Triangle() {
delete[] abc;
abc = nullptr;
}
bool Triangle::Check() {
if (abc[0] < (abc[1] + abc[2]) && abc[1] < (abc[0] + abc[2]) && abc[2] < (abc[1] + abc[0])) {
return true;
}
else {
return false;
}
}
double Triangle::Area() {//площа
double ar, p;
p = (abc[1] + abc[2] + abc[0]) / 2; //півпериметр
ar = sqrt(p * (p - abc[0]) * (p - abc[1]) * (p - abc[2]));
return ar;
}
double Triangle::Per() { //периметр
return (abc[0] + abc[2] + abc[1]);
}
double Triangle::printAngle() { // квадрати сторін будуть a2, b2, c2
double a2 = pow(abc[0], 2);
double b2 = pow(abc[1], 2);
double c2 = pow(abc[2], 2);
// довжини сторін a, b, c
double a = sqrt(a2);
double b = sqrt(b2);
double c = sqrt(c2);
// теорема косинусів
double alpha = acos((b2 + c2 - a2) / (2 * b * c));
double betta = acos((a2 + c2 - b2) / (2 * a * c));
double gamma = acos((a2 + b2 - c2) / (2 * a * b));
// перевід з радіан в градуси
alpha = alpha * 180 / M_PI;
betta = betta * 180 / M_PI;
gamma = gamma * 180 / M_PI;
//виведення
cout << "\nalpha : " << alpha << endl;
cout << "betta : " << betta << endl;
cout << "gamma : " << gamma << endl;
return 0;
}
int main() {
double val[MAX];
cout << "Input values" << endl;
cin >> val[0], val[1], val[2];
Triangle trian1(val);
cout << " with param" << endl;
cout << "Area " << trian1.Area() << endl;
cout << "Perimetr " << trian1.Per() << endl;
Triangle trian2;
cout << " without param" << endl;
cout << "Area " << trian2.Area() << endl;
cout << "Perimetr " << trian2.Per() << endl;
trian2.printAngle();
system("PAUSE");
return 0;
}