C/C++

Лабораторка по ООП

Постоянно выдает значение 0, что площадь, что периметр, что сам класс, не могу понять в чем причина ( не судите строго, за ООП сел только сегодня)

#include
#include
#include
using namespace std;

class Triangle
{
public:
double a = 0, b = 0, c = 0;
int init(double a, double b, double c)
{
if (a >= b + c || b >= a + c || c >= b + a)
{
cout << ("Введены некорректные данные! \n\n");
return 1;
}
return 0;
}
};

Triangle read(Triangle A)
{
do
{
cout << "Введите сторону A: ";
cin >> A.a;
cout << "Введите сторону B: ";
cin >> A.b;
cout << "Введите сторону C: ";
cin >> A.c;

} while (A.init(A.a, A.b, A.c) == 1);

return A;
}

double PerimPlosh(Triangle A, double a, double b)
{
a = (A.a + A.b + A.c) / 2;
b = sqrt(a * (a - A.a) * (a - A.b) * (a - A.c));
return a, b;
}

void display(double a, double b)
{

cout << "Периметр треугольника равен = " << a << "\n";
cout << "Площадь треугольника равна = " << b << "\n";
}

int main()
{
setlocale(LC_ALL, "ru");
double perimetr = 0, ploshad = 0, c;
Triangle ABC;
read(ABC);
PerimPlosh(ABC, perimetr, ploshad);
display(perimetr, ploshad);
return 0;
}
#include <iostream>
using namespace std;
class Triagle {
public:
Triagle()
: a_(0), b_(0), c_(0) {}
Triagle(double a, double b, double c)
: a_(fabs(a)), b_(fabs(b)), c_(fabs(c)) {}
bool exist()const { return arg_() > 0; }
double perimeter()const { return a_ + b_ + c_; }
double area()const { return exist() ? sqrt(arg_()) : 0; }
void set(double a, double b, double c) {
a_ = a;
b_ = b;
c_ = c;
}
private:
double a_;
double b_;
double c_;
double arg_()const {
auto p = perimeter() / 2;
return p * (p - a_) * (p - b_) * (p - c_);
}
};
double real(const char* msg) {
cout << msg;
double value;
cin >> value;
return value;
}
Triagle input() {
while (true) {
auto a = real("Введите a: ");
auto b = real("Введите b: ");
auto c = real("Введите c: ");
Triagle triagle(a, b, c);
if (triagle.exist()) return triagle;
}
}
int main() {
system("chcp 1251 > nul");
auto triagle = input();
auto perimeter = triagle.perimeter();
cout << "Периметр треугольника: " << perimeter << '\n';
auto area = triagle.area();
cout << "Площадь треугольника: " << area << '\n';
system("pause > nul");
}
АМ
Армен Меграбян
91 198
Лучший ответ
void PerimPlosh(Triangle A, double &a, double &b)
{
a = A.a + A.b + A.c;
double p = a / 2;
b = sqrt(p * (p - A.a) * (p - A.b) * (p - A.c));
}
Неправильно передаешь переменные a и b в функцию PerimPlosh. Надо писать &a и &b. Если так не писать, изменения внутри функции не затронут саму переменную, так как в функции создается копия переменной

https://ravesli.com/urok-88-ssylki/#toc-4