Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
zewer
1986 / 1577 / 194
Регистрация: 07.01.2011
Сообщений: 9,208
Завершенные тесты: 1
1

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

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

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

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

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

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

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

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

13
LaГushan
124 / 124 / 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
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1308 / 1223 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
23.03.2011, 13:13 3
А что, прям обязательно драйвер? В кернел-мод???
0
IrineK
Заблокирован
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
24.03.2011, 00:35
zewer
1986 / 1577 / 194
Регистрация: 07.01.2011
Сообщений: 9,208
Завершенные тесты: 1
24.03.2011, 00:39  [ТС] 5
ууууууууу
спасибо большое, ток дело в том, что ми ету тему ище не учили, и вобше твоя моя не понимать что ето такое, но все равно спс)
0
slice
63 / 78 / 6
Регистрация: 04.11.2010
Сообщений: 249
24.03.2011, 00:40 6
IrineK, какой ужас! Координаты вершин треугольника дублируются (в прилежащих ребрах).
Класс, который по сути является отрезком, почему то назван вектором.
0
IrineK
Заблокирован
24.03.2011, 00:46 7
Координаты вершин треугольника дублируются (в прилежащих ребрах).
private: Vector _AB,_AC,_BC;
Дает возможность легко обсчитывать треугольник.

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

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

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

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

В целом, приложение создается для решения физических и геометрических задач, так что Vector является его естественной основой. Как метко подмечено silent_1991:
Уж извините, что так вышло, закон природы, ничего не попишешь.
0
zewer
1986 / 1577 / 194
Регистрация: 07.01.2011
Сообщений: 9,208
Завершенные тесты: 1
05.04.2011, 22:45  [ТС] 14
нужна помошь, не могу решит ошибку, ссилка на прогу:
http://upload.com.ua/get/902494983/laboratory_4.rar
0
05.04.2011, 22:45
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.04.2011, 22:45

Создание статической функции класса, которая принимает экземпляр этого же класса как объект
Привет. Есть такой код class Model { public: Model(); Model(int verticesSize, int facesSize);...

Создать класс Money и разработать указанные элементы класса
Нужно написать программу за таким типом.

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


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

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

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