Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
0 / 0 / 0
Регистрация: 15.10.2012
Сообщений: 3

Класс Треугольник на С++

15.10.2012, 17:03. Показов 3534. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста написать три конструктора для класса "треугольник" : 1)класс задаётся либо длинами 3х сторон, 2)либо стороной и двумя прилежащими к ней углами, 3) либо двумя сторонами и углом между ними. Данные класса - длины 3х сторон и размеры 3х углов . Если нетрудно, объясните пожалуйста как с углами обращаться)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.10.2012, 17:03
Ответы с готовыми решениями:

Создать базовый класс Треугольник с 2 наследниками: Равносторонний треугольник, Прямоугольный треугольник
Задание звучит так: Нужно создать базовый класс Треугольник с двумя наследующими его классами - равносторонний треугольник (·...

Класс треугольник с произвольным классом - равнобедренный треугольник
Создать класс треугольник, члены класса - длины 3-х сторон. Предусмотреть в классе методы проверки существования треугольника, вычисления и...

Создать абстрактный класс "Треугольник" и производный - "Равнобедренный треугольник"
Задание Создать абстрактный класс треугольник. Предусмотреть в классе методы проверки существования треугольника, вычисления и вывода...

4
 Аватар для Venzo
127 / 125 / 16
Регистрация: 03.07.2011
Сообщений: 354
15.10.2012, 17:17
нужно чтобы у переменной сторон и углов были разные типы, тогда можно будет перегрузить конструкторы.
Недостающие дынные заполняешь с помощью синуса, косинуса и тангенса.
1
Хочу в Исландию
 Аватар для skaa
1041 / 840 / 119
Регистрация: 10.11.2010
Сообщений: 1,630
15.10.2012, 21:18
Я бы сделал так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include    <math.h>
 
typedef struct {double s1;double s2;double s3;} trsss;
typedef struct {double a1;double s2;double a3;} trasa;
typedef struct {double s1;double a2;double s3;} trsas;
class   Triangle3
{
private:
  double    s1,s2,s3;
  double    a1,a2,a3;
  double    ad1,ad2,ad3;
public:
  Triangle3(trsss rsss)
  {
    s1=rsss.s1;
    s2=rsss.s2;
    s3=rsss.s3;
 
    a3=acos((s1*s1+s2*s2-s3*s3)/(2*s1*s2));
    a2=acos((s1*s1+s3*s3-s2*s2)/(2*s1*s3));
    a1=M_PI-a2-a3;
 
    ad1=a1/M_PI*180;
    ad2=a2/M_PI*180;
    ad3=a3/M_PI*180;
  }
  Triangle3(trasa rasa)
  {
    a1=rasa.a1;
    s2=rasa.s2;
    a3=rasa.a3;
    a2=M_PI-a1-a3;
 
    s1=s2*sin(a1)/sin(a2);
    s3=s2*sin(a3)/sin(a2);
 
    ad1=a1/M_PI*180;
    ad2=a2/M_PI*180;
    ad3=a3/M_PI*180;
  }
  Triangle3(trsas rsas)
  {
    s1=rsas.s1;
    a2=rsas.a2;
    s3=rsas.s3;
 
    s2=sqrt(s1*s1+s3*s3-2*s1*s3*cos(a2));
    a3=acos((s1*s1+s2*s2-s3*s3)/(2*s1*s2));
    a1=M_PI-a2-a3;
 
    ad1=a1/M_PI*180;
    ad2=a2/M_PI*180;
    ad3=a3/M_PI*180;
  }
};
void    main()
{
  trsss rsss={6.,4.,3.};
  trasa rasa={30./180.*M_PI,4.,50./180.*M_PI};
  trsas rsas={3.,90./180.*M_PI,4.};
 
  Triangle3 *t3sss=new Triangle3(rsss);
  Triangle3 *t3asa=new Triangle3(rasa);
  Triangle3 *t3sas=new Triangle3(rsas);
 
  delete t3sss;
  delete t3asa;
  delete t3sas;
}
, только надо бы добавить всякие проверки, например чтобы не были заданы стороны 1, 2 и 10 - такого треугольника не существует.
1
 Аватар для igorrr37
2895 / 2042 / 992
Регистрация: 21.12.2010
Сообщений: 3,791
Записей в блоге: 9
15.10.2012, 21:43
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#include <iostream>
#include <stdexcept>
#include <cmath>
#include <sstream>
 
class Triangle
{
public:
    class Angle
    {
    public:
        explicit Angle(double const value_) : value(0.0)
        {
            if(value_ < pi && value_ > 0)
                value = value_;
            else
            {
                std::stringstream ss;
                ss << value_;
                throw(Angle_error("Angle ctor argument out of(0, pi): " + ss.str()));
            }
 
        }
        operator double() const
        {
            return value;
        }
        static double const pi;
    private:
        class Angle_error : public std::runtime_error
        {
        public:
            Angle_error(std::string const& message) : std::runtime_error(message){}
        };
        double value;
    };
 
    class Side
    {
    public:
        explicit Side(double const value_) : value(1)
        {
            if(value_ > 0)
                value = value_;
            else
            {
                std::stringstream ss;
                ss << value_;
                throw Side_error("Side ctor argument <= 0: " + ss.str());
            }
        }
        operator double() const
        {
            return value;
        }
    private:
        class Side_error : public std::runtime_error
        {
        public:
            Side_error(std::string const& message) : std::runtime_error(message){}
        };
        double value;
    };
    Triangle(Side const& a_, Side const& b_, Side const& c_) : a(a_), b(b_), c(c_),
        alpha(acos((b_ * b_ + c_ * c_ - a_ * a_) / (2 * b_ * c_))),
        beta(acos((a_ * a_ + c_ * c_ - b_ * b_) / (2 * a_ * c_))),
        gamma(acos((b_ * b_ + a_ * a_ - c_ * c_) / (2 * a_ * b_))){}
    Triangle(Side const& a_, Side const& b_, Angle const& gamma_) : a(a_), b(b_), gamma(gamma_),
        c(sqrt(a_ * a_ + b_ * b_ - 2 * a_ * b_ * cos(gamma_))),
        alpha(acos((b_ * b_ + pow((sqrt(a_ * a_ + b_ * b_ - 2 * a_ * b_ * cos(gamma_))), 2) - a_ * a_) / (2 * b_ * (sqrt(a_ * a_ + b_ * b_ - 2 * a_ * b_ * cos(gamma_)))))),
        beta(acos((a_ * a_ + c * c - b_ * b_) / (2 * a_ * c))){}
    Triangle(Side const& a_, Angle const& beta_, Angle const& gamma_) : a(a_), beta(beta_), gamma(gamma_),
        alpha(Angle::pi - beta_ - gamma_),
        c((a_ / sin(Angle::pi - beta_ - gamma_)) * sin(gamma_)),
        b((a_ / sin(Angle::pi - beta_ - gamma_)) * sin(beta_)){}
    friend std::ostream& operator<< (std::ostream& os, Triangle const& t)
    {
        return os << "sides: " << t.a << ' ' << t.b << ' ' << t.c
            << "\nangles: " << t.alpha << ' ' <<t.beta << ' ' << t.gamma;
    }
private:
    Side a, b, c;
    Angle alpha, beta, gamma;
};
 
double const Triangle::Angle::pi = 3.14159;
 
typedef Triangle::Side tside;
typedef Triangle::Angle tangle;
 
int main()
{
    try
    {
        Triangle tr(tside(6), tside(3), tside(4));
        std::cout << tr << std::endl;
        Triangle tr1(tside(8), tangle(1.5), tangle(1.1)); // угол в радианах
        std::cout << tr1 << std::endl;
    }
    catch(std::exception const& e)
    {
        std::cerr << "Exception: " << e.what() << std::endl;
    }
    return 0;
}
1
0 / 0 / 0
Регистрация: 15.10.2012
Сообщений: 3
15.10.2012, 22:54  [ТС]
Спасибо огромное ребят)) Помогли очень))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.10.2012, 22:54
Помогаю со студенческими работами здесь

Построить класс треугольник и на его основе создать класс параллелограмм, используя механизм наследования
Построить класс треугольник и на его основе создать класс параллелограмм, используя механизм наследования

Класс треугольник
Помогите с заданием, только начал изучать классы. Создать класс треугольник, члены класса - длины 3-х сторон. Предусмотреть в классе...

С++ Класс треугольник
Добрый вечер! Я вновь со своей задачей, извините что снова беспокою. (Разработать класс на языке С++ реализующий методы для работы с...

Класс Треугольник
Язык C# Дан класс треугольник, члены класса – длины трех сторон. (поля закрытые). Предусмотреть в классе методы проверки существования...

Класс треугольник
Ошибка при создании класса треугольник, в конструкторе прежде чем присвоить значения есть проверка(площадь больше 0?), если проходит...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
1С: Программный отбор элементов справочника Номенклатура по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор под наименованию группы (на. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника Сотрудники по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru