String Tip(Triangle A, string &d)
{
double a, b, c;
a = A.a;
b = A.b;
c = A.c;
if ((c == b) && (c == a)) d = "Равносторонний";
if ((a == b) || (b == c) || (a == c)) d = "Равнобедренный";
if (c == sqrt(a * a + b * b)) d = "Прямоугольный";
if ((a != b) && (a != c) && (c != b)) d = "Разносторонний";
return d;
}
на выходе всегда равно равнобедренный, даже если стороны одинаковые
C/C++
Тип треугольника ООП
#include <iostream>
#include <string>
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;
}
string type()const {
if (!exist()) return "не существует";
string result;
if (eq_(a_, b_) && eq_(b_, c_)) result = "равносторонний";
else if (eq_(a_, b_) || eq_(b_, c_) || eq_(c_, a_)) result = "равнобедренный";
if (!eq_(a_, b_) && !eq_(b_, c_) && !eq_(c_, a_)) result = "разносторонний";
result += " и ";
auto sm = perimeter();
auto mx = (a_ > b_) ? (a_ > c_) ? a_ : c_ : (b_ > c_) ? b_ : c_;
auto mn = (a_ < b_) ? (a_ < c_) ? a_ : c_ : (b_ < c_) ? b_ : c_;
auto md = sm - mx - mn;
if (eq_(mx * mx, md * md + mn * mn)) result += "прямоугольный";
else if (mx * mx > md * md + mn * mn) result += "тупоугольный";
else result += "остроугольный";
return result;
}
private:
static const double eps;
double a_;
double b_;
double c_;
double arg_()const {
auto p = perimeter() / 2;
return p * (p - a_) * (p - b_) * (p - c_);
}
bool eq_(double a, double b)const { return fabs(a - b) < eps; }
};
const double Triagle::eps = 1e-16;
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';
auto type = triagle.type();
cout << "Тип треугольника: " << type << '\n';
system("pause > nul");
}
#include <string>
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;
}
string type()const {
if (!exist()) return "не существует";
string result;
if (eq_(a_, b_) && eq_(b_, c_)) result = "равносторонний";
else if (eq_(a_, b_) || eq_(b_, c_) || eq_(c_, a_)) result = "равнобедренный";
if (!eq_(a_, b_) && !eq_(b_, c_) && !eq_(c_, a_)) result = "разносторонний";
result += " и ";
auto sm = perimeter();
auto mx = (a_ > b_) ? (a_ > c_) ? a_ : c_ : (b_ > c_) ? b_ : c_;
auto mn = (a_ < b_) ? (a_ < c_) ? a_ : c_ : (b_ < c_) ? b_ : c_;
auto md = sm - mx - mn;
if (eq_(mx * mx, md * md + mn * mn)) result += "прямоугольный";
else if (mx * mx > md * md + mn * mn) result += "тупоугольный";
else result += "остроугольный";
return result;
}
private:
static const double eps;
double a_;
double b_;
double c_;
double arg_()const {
auto p = perimeter() / 2;
return p * (p - a_) * (p - b_) * (p - c_);
}
bool eq_(double a, double b)const { return fabs(a - b) < eps; }
};
const double Triagle::eps = 1e-16;
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';
auto type = triagle.type();
cout << "Тип треугольника: " << type << '\n';
system("pause > nul");
}
добавляй к if else
Еламан Габдуллин
понял, спасибо
Похожие вопросы
- Лютый препод не унимается. Просит без ООП написать функцию обмена значениями переменных любого типа!
- Лабораторка по ООП
- Помогите с ООП на C++
- Вопрос к экзамену по ООП.
- Самые значительные различия С и С++ ( Кроме наличия ООП )
- Вопрос по ООП на С++
- Архитектурные трабблы при использовании ООП
- Помогите с обработкой исключений. Как описать исключение того, что длины сторон треугольника не меньше 0?
- C++ напишите функцию 2 треугольника похожи или нет
- Создать метод который выводит все спектакли и дать их прохождения, которые состоятся в заданный день недели ООП