C/C++

Переведите код с Pascal на С++

Uses crt;
const t=0.01;//точность сравнения вычисленных величин
var a,b,c,u,mx,mn,sr:real;
begin
writeln('Введите 2 стороны треугольника:');
read(a,b);
repeat
write('Введите угол между ними в градусах 0<u<180 u=');
read(u);
until(u>0)and(u<180);
c:=sqrt(a*a+b*b-2*a*b*cos(u*pi/180));//3 сторона
writeln('c=',c:0:2);
//определим наибольшую сторону для определения прямого угла
if a>b then mx:=a else mx:=b;
if c>mx then mx:=c;//большая
if a<b then mn:=a else mn:=b;
if c<mn then mn:=c;//меньшая
sr:=a+b+c-mn-mx;//средняя
if (a=b)and(abs(a-c)<=t) then write('Это равносторонний треугольник')
else if ((a=b)and(abs(a-c)>t))
or ((a<>b)and(abs(a-c)<=t))
or ((abs(b-c)<=t)and(abs(a-c)<=t))then
begin
write('Это равнобедренный ');
if abs(mx*mx-mn*mn-sr*sr)<=t then writeln('прямоугольный треугольник')
else writeln('не прямоугольный треугольник');
end
else
begin
write('Это разностороннний ');
if abs(mx*mx-mn*mn-sr*sr)<=t then writeln('прямоугольный треугольник')
else writeln('не прямоугольный треугольник');
end;
readln
end.
#include <iostream>
#include <cmath>
using namespace std;
struct Triangle {
static bool exist(const double a, const double b, const double c) {
return argument(a, b, c) > 0;
}
static double side(const double a, const double b, const double alpha) {
return sqrt(pow(a, 2) + pow(b, 2) - 2.0 * a * b * cos(deg_to_rad(alpha)));
}
static bool rectangular(const double a, const double b, const double c) {
auto h = (a > b) ? (a > c) ? a : c : (b > c) ? b : c;
auto mn = (a < b) ? (a < c) ? a : c : (b < c) ? b : c;
auto md = perimeter(a, b, c) - h - mn;
return fabs(h * h - mn * mn - md * md) < 1e-15;
}
static bool versatile(const double a, const double b, const double c) {
return a != b && b != c && c != a;
}
static bool equilateral(const double a, const double b, const double c) {
return a == b && b == c;
}
static bool isosceles(const double a, const double b, const double c) {
return a == b && b != c || a == c && b != c || b == c && c != a;
}
private:
static double perimeter(const double a, const double b, const double c) {
return a + b + c;
}
static double argument(const double a, const double b, const double c) {
auto p = perimeter(a, b, c) / 2;
return p * (p - a) * (p - b) * (p - c);
}
static double deg_to_rad(double x) {
static constexpr auto n = 3.1415926535897932 / 180.0;
return x * n;
}
};
double distance(const char* msg) {
cout << msg;
double value;
cin >> value;
cin.ignore(cin.rdbuf()->in_avail());
return value;
}
int main() {
system("chcp 1251 > nul");
auto a = distance("a: ");
auto b = distance("b: ");
auto alpha = distance("alpha: ");
auto c = Triangle::side(a, b, alpha);
if (Triangle::exist(a, b, c)) {
if (Triangle::rectangular(a, b, c)) puts("Треугольник прямоугольный");
if (Triangle::versatile(a, b, c)) puts("Треугольник разносторонний");
if (Triangle::equilateral(a, b, c)) puts("Треугольник равносторонний");
if (Triangle::isosceles(a, b, c)) puts("Треугольник равнобедренный");
} else {
puts("Треугольник не существует!");
}
system("pause > nul");
}
Роман Марусев
Роман Марусев
74 326
Лучший ответ