2347 / 1768 / 209
Регистрация: 07.01.2011
Сообщений: 10,342
1

Создать объявление класса и разработать программу-драйвер, которая продемонстрирует работу класса.

23.03.2011, 01:03. Показов 2001. Ответов 13
Метки нет (Все метки)

Класс Triangle (треугольник). Класс хранит Декартовы координаты трех углов треугольника. Конструктор принимает три группы координат. Должны быть предусмотренные функции-элементы, которые вычисляют периметр и площадь, а также функция, которая проверяет или треугольник является прямоугольным.
написать нужно на С++
спасибо наперед
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.03.2011, 01:03
Ответы с готовыми решениями:

Разработать программу-драйвер, которая продемонстрирует работу производного класса
Создать объявление классов согласно варианту. Разработать программу-драйвер, которая...

Разработать программу, которая создает окно (экземпляр класса формы)
Разработать программу, которая создает окно. Закрытие окна должно выполняться щелчком кнопки по...

Объявление объекта класса fstream в качестве статической компоненты другого класса
Доброго времени суток. Есть задание, в котором говорится "...Перепишите программы из упражнений 4 и...

Объявление класса, создание экземпляров класса. Наследование классов
Вообщем начал делать программу:"Создать класс Матрицы, обеспечивающего размещение матрицы...

13
126 / 126 / 42
Регистрация: 12.03.2011
Сообщений: 227
23.03.2011, 11:16 2
Ну вот примерный класс
C++
1
2
3
4
5
6
7
8
9
10
class Triangle
{
public:
    double x1,y1,x2,y2,x3,y3;
    Triangle(double x1,double y1,double x2,double y2,double x3,double y3):
    x1(x1),y1(y1),x2(x2),y2(y2),x3(x3),y3(y3){}
    double per(); //Периметр
    bool Ifpryam(); //Является ли прямоугольным
    double S(); //Площадь
};
А вот тут как раз формулы
0
Делаю внезапно и красиво
Эксперт С++
1311 / 1226 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
23.03.2011, 13:13 3
А что, прям обязательно драйвер? В кернел-мод???
0
Заблокирован
24.03.2011, 00:35 4
Может, пригодится:
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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
#include <iostream>
#include <math.h>
using namespace std;
 
class Vector
{
private: 
    double _xA,_yA,_xB,_yB;
    double _dX,_dY;
    
public:
    Vector(double xA, double yA, double xB, double yB):
      _xA(xA),_yA(yA),_xB(xB),_yB(yB),_dX(xB-xA),_dY(yB-yA){} 
    Vector():_xA(0),_yA(0),_xB(0),_yB(0),_dX(0),_dY(0) {}
    ~Vector(){}
 
    void SetVector(double xA, double yA, double xB, double yB)
    {   _xA=xA;_yA=yA;_xB=xB;_yB=yB;
        _dX = xB-xA; _dY = yB-yA;
    }
 
    double GetVectorDX(){return _dX;}
    double GetVectorDY(){return _dY;}
        
    Vector &operator =(Vector& MN)
    {   if(&MN!=this)
        {   _xA=MN._xA;
            _yA=MN._yA;
            _xB=MN._xB;
            _yB=MN._yB;
            _dX=MN._dX;
            _dY=MN._dY;
        }
        return *this;
    }
 
    double Length()
    {   return sqrt(_dX*_dX + _dY*_dY);
    }
 
    friend double ScalarProduct(Vector &a, Vector &b)
    {   return a._dX*b._dX+a._dY*b._dY;
    }
 
    friend double Angle(Vector &a, Vector &b)
    {   return acos(ScalarProduct(a,b)/(a.Length()*b.Length()));
    }
 
};
 
 
class Triangle
{
private:
    Vector _AB,_AC,_BC;
 
public:
        Triangle(double xA, double yA, double xB, double yB, double xC, double yC):
            _AB(xA,yA,xB,yB), _AC(xA,yA,xC,yC), _BC(xB,yB,xC,yC){}
        Triangle():_AB(0,0,0,0),_AC(0,0,0,0), _BC(0,0,0,0) {}
        ~Triangle(){}
 
    void SetTriangle(double xA, double yA, double xB, double yB, double xC, double yC)
    {   Vector AB(xA,yA,xB,yB);
        Vector AC(xA,yA,xC,yC);
        Vector BC(xB,yB,xC,yC);
        _AB = AB;
        _AC = AC;
        _BC = BC;
        bool find = this->FoundErr();
    }
 
    bool FoundErr()
    {   double a =_BC.Length(),b = _AC.Length(),c = _AB.Length();
        if(a*b*c==0)
        {   cout<<"ERROR: zero side\n";
            return true;
        }
        else if(a+b<=c || a+c<=b || b+c<=a)
        {   cout<<"ERROR: one side too long\n";
            return true;
        }
        return false;
    }
 
    double Square()
    {   bool find = this->FoundErr();
        if(!find)
            return 0.5*fabs(_AB.GetVectorDX()*_AC.GetVectorDY()-_AC.GetVectorDX()*_AB.GetVectorDY());
        return 0;
    }
 
    bool isRectangular()
    {   bool find = this->FoundErr();
        if(!find)
            if(ScalarProduct(_AB,_AC)==0 || ScalarProduct(_AB,_BC)==0 
                || ScalarProduct(_BC,_AC)==0) return true;
        return false;
    }
 
    bool isEquilateral()
    {   bool find = this->FoundErr();
        if(!find)
        {
            if(_AB.Length()==_AC.Length() && _AC.Length()==_BC.Length()) return true;
        }
        return false;
    }
 
    bool isIsosceles()
    {   bool find = this->FoundErr();
        if(!find)
            if(_BC.Length()==_AC.Length() || _BC.Length()==_AB.Length() 
                || _AC.Length()==_AB.Length()) return true;
        return false;
    }
};
 
int main()
{   Vector L0;
    cout<<"Length of 0 vector: "<<L0.Length()<<endl;
    L0.SetVector(1,1,5,5);
    cout<<"Length of set vector: "<<L0.Length()<<endl;
 
    Vector L1(1,1,-5,-5);
    cout<<"Scalar Product: "<<ScalarProduct(L0,L1)<<endl;
    cout<<"Angle (Pi): "<< Angle(L0,L1)<<endl;
 
    Triangle T0;
    cout<<"Square of 0 triangle: "<<T0.Square()<<endl;
    T0.SetTriangle(5,0,0,5,0,0);
    cout<<"Square of set triangle T0: "<<T0.Square()<<endl;
    cout<<"Is rectangular: "<<T0.isRectangular()<<endl;
    cout<<"Is isosceles: "<<T0.isIsosceles()<<endl;
    cout<<"Is Equilateral: "<<T0.isEquilateral()<<endl;
 
    Triangle T1(1,1,5,5,9,1);
    cout<<"\nSquare of another triangle T1: "<<T1.Square()<<endl;
    cout<<"Is rectangular: "<<T1.isRectangular()<<endl;
    cout<<"Is isosceles: "<<T1.isIsosceles()<<endl;
    cout<<"Is Equilateral: "<<T1.isEquilateral()<<endl;
    
    cin.get();
    return 0;
}
Осталось только периметр дописать.
1
2347 / 1768 / 209
Регистрация: 07.01.2011
Сообщений: 10,342
24.03.2011, 00:39  [ТС] 5
ууууууууу
спасибо большое, ток дело в том, что ми ету тему ище не учили, и вобше твоя моя не понимать что ето такое, но все равно спс)
0
63 / 78 / 6
Регистрация: 04.11.2010
Сообщений: 249
24.03.2011, 00:40 6
IrineK, какой ужас! Координаты вершин треугольника дублируются (в прилежащих ребрах).
Класс, который по сути является отрезком, почему то назван вектором.
0
Заблокирован
24.03.2011, 00:46 7
Координаты вершин треугольника дублируются (в прилежащих ребрах).
private: Vector _AB,_AC,_BC;
Дает возможность легко обсчитывать треугольник.

почему то назван вектором
double _dX,_dY;
Это - координаты вектора, то бишь направленного отрезка.

какой ужас!
Нервишки-то пошаливают. Отдыхать пора.
0
63 / 78 / 6
Регистрация: 04.11.2010
Сообщений: 249
24.03.2011, 01:08 8
Цитата Сообщение от IrineK Посмотреть сообщение
Дает возможность легко обсчитывать треугольник.
В чем удобство? Такой способ хранения позволяет создать треугольник, у которого одна сторона длинне суммы других. А для отлова таких ситуаций, был написан костыль: FoundErr()
А что ты будешь делать, если ребра вообще не состыкованы друг с другом?
0
Заблокирован
24.03.2011, 01:13 9
Вообще-то FoundErr() был написан для отлова ситуации: все три точки - на одной прямой.
Но, поскольку сравниваются double, предпочтение было отдано знаку <=

ВЫ - автор двух утверждений. Первое:
координаты вершин треугольника дублируются
Второе:
создать треугольник, у которого одна сторона длинне суммы других.
Явное противоречие.
0
63 / 78 / 6
Регистрация: 04.11.2010
Сообщений: 249
24.03.2011, 01:15 10
Цитата Сообщение от IrineK Посмотреть сообщение
Явное противоречие.
В чем оно заключается?
0
Эксперт С++
5046 / 3107 / 271
Регистрация: 11.11.2009
Сообщений: 7,047
24.03.2011, 02:13 11
slice, в том, что если координаты дублируются, т.е. отрезки, концами которых являются точки с данными координатами, стыкуются и, соответственно, образуют треугольник, то эти отрезки будут удовлетворять неравенству треугольника. Уж извините, что так вышло, закон природы, ничего не попишешь.
1
Делаю внезапно и красиво
Эксперт С++
1311 / 1226 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
24.03.2011, 06:03 12
Цитата Сообщение от IrineK Посмотреть сообщение
автор двух утверждений. Первое:
координаты вершин треугольника дублируются
Имеется в виду, что координаты задаются для каждого ребра, а следовало сделать индексы в массив координат. Да и треугольник лучше задавать не тремя векторами, а тремя индексами точек. Это и безопаснее и эффективнее и ваапще.
0
Заблокирован
24.03.2011, 11:11 13
Благодарю за плодотворную дискуссию. В результате строка 80 была заменена на:
C++
1
cout<<"ERROR: three points in one line\n";
что более соответствует действительности.
В класс Vector добавлены операции сложения/вычитания, поворота, что дает возможность эффективно манипулировать объектами (добавлены графические модули)

Создан класс Quadrangle. С помощью векторов легко проводится классификация, что упрощает анализ.

В целом, приложение создается для решения физических и геометрических задач, так что Vector является его естественной основой. Как метко подмечено silent_1991:
Уж извините, что так вышло, закон природы, ничего не попишешь.
0
2347 / 1768 / 209
Регистрация: 07.01.2011
Сообщений: 10,342
05.04.2011, 22:45  [ТС] 14
нужна помошь, не могу решит ошибку, ссилка на прогу:
http://upload.com.ua/get/90249... tory_4.rar
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.04.2011, 22:45

Объявление объекта одного класса в описании другого класса
Здравствуйте. Почему при объявлении Student s в классе Teacher не возникает ошибки? Ведь такой...

Объявление дружественного класса внутри класса
class A{ friend class B{ B(A &amp;a); } } Подскажите пожалуйста, такое...

Разработать шаблон класса реализующего работу с матрицами переменной размерности.
Разработать шаблон класса реализующего работу с матрицами переменной размерности. Тип эле- мента...

Разработать программу с использованием класса Triganometriya
Разработайте программу с использованием класса Triganometriya, в котором реализованы вычисления...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.