Постоянно выдает значение 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;
}
C/C++
Лабораторка по ООП
#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");
}
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");
}
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 = 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
https://ravesli.com/urok-88-ssylki/#toc-4
Похожие вопросы
- Помогите с ООП на C++
- Вопрос к экзамену по ООП.
- Самые значительные различия С и С++ ( Кроме наличия ООП )
- Вопрос по ООП на С++
- Лютый препод не унимается. Просит без ООП написать функцию обмена значениями переменных любого типа!
- Архитектурные трабблы при использовании ООП
- Тип треугольника ООП
- Создать метод который выводит все спектакли и дать их прохождения, которые состоятся в заданный день недели ООП
- Правда ли, что язык Си - это язык мертвый и никому не нужный, а Си++ - это кривое костыльное ООП, которое скоро умрет?
- Найдите сумму, разность и скалярное произведение двух векторов в N-мерном пространстве. Язык С++ ООП