Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
zewer
 Аватар для zewer
1043 / 734 / 72
Регистрация: 07.01.2011
Сообщений: 5,523
23.03.2011, 01:03     Создать объявление класса и разработать программу-драйвер, которая продемонстрирует работу класса. #1
Класс Triangle (треугольник). Класс хранит Декартовы координаты трех углов треугольника. Конструктор принимает три группы координат. Должны быть предусмотренные функции-элементы, которые вычисляют периметр и площадь, а также функция, которая проверяет или треугольник является прямоугольным.
написать нужно на С++
спасибо наперед
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.03.2011, 01:03     Создать объявление класса и разработать программу-драйвер, которая продемонстрирует работу класса.
Посмотрите здесь:

C++ Разработать программу-драйвер, которая продемонстрирует работу производного класса
C++ Создать конструктор копий и оператор присваивания для класса компьютер и члена класса марка
Объявление объекта одного класса в описании другого класса C++
Объявление дружественного класса внутри класса C++
C++ Разработать шаблон класса реализующего работу с матрицами переменной размерности.
C++ Создать массив указателей базового класса и присвоить ему адреса каждого из екземпляров класса
Создание статической функции класса, которая принимает экземпляр этого же класса как объект C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
LaГushan
124 / 124 / 14
Регистрация: 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(); //Площадь
};
А вот тут как раз формулы
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1285 / 1219 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
23.03.2011, 13:13     Создать объявление класса и разработать программу-драйвер, которая продемонстрирует работу класса. #3
А что, прям обязательно драйвер? В кернел-мод???
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;
}
Осталось только периметр дописать.
zewer
 Аватар для zewer
1043 / 734 / 72
Регистрация: 07.01.2011
Сообщений: 5,523
24.03.2011, 00:39  [ТС]     Создать объявление класса и разработать программу-драйвер, которая продемонстрирует работу класса. #5
ууууууууу
спасибо большое, ток дело в том, что ми ету тему ище не учили, и вобше твоя моя не понимать что ето такое, но все равно спс)
slice
32 / 75 / 4
Регистрация: 04.11.2010
Сообщений: 249
24.03.2011, 00:40     Создать объявление класса и разработать программу-драйвер, которая продемонстрирует работу класса. #6
IrineK, какой ужас! Координаты вершин треугольника дублируются (в прилежащих ребрах).
Класс, который по сути является отрезком, почему то назван вектором.
IrineK
Заблокирован
24.03.2011, 00:46     Создать объявление класса и разработать программу-драйвер, которая продемонстрирует работу класса. #7
Координаты вершин треугольника дублируются (в прилежащих ребрах).
private: Vector _AB,_AC,_BC;
Дает возможность легко обсчитывать треугольник.

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

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

ВЫ - автор двух утверждений. Первое:
координаты вершин треугольника дублируются
Второе:
создать треугольник, у которого одна сторона длинне суммы других.
Явное противоречие.
slice
32 / 75 / 4
Регистрация: 04.11.2010
Сообщений: 249
24.03.2011, 01:15     Создать объявление класса и разработать программу-драйвер, которая продемонстрирует работу класса. #10
Цитата Сообщение от IrineK Посмотреть сообщение
Явное противоречие.
В чем оно заключается?
silent_1991
Эксперт C++
4947 / 3023 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
24.03.2011, 02:13     Создать объявление класса и разработать программу-драйвер, которая продемонстрирует работу класса. #11
slice, в том, что если координаты дублируются, т.е. отрезки, концами которых являются точки с данными координатами, стыкуются и, соответственно, образуют треугольник, то эти отрезки будут удовлетворять неравенству треугольника. Уж извините, что так вышло, закон природы, ничего не попишешь.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1285 / 1219 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
24.03.2011, 06:03     Создать объявление класса и разработать программу-драйвер, которая продемонстрирует работу класса. #12
Цитата Сообщение от IrineK Посмотреть сообщение
автор двух утверждений. Первое:
координаты вершин треугольника дублируются
Имеется в виду, что координаты задаются для каждого ребра, а следовало сделать индексы в массив координат. Да и треугольник лучше задавать не тремя векторами, а тремя индексами точек. Это и безопаснее и эффективнее и ваапще.
IrineK
Заблокирован
24.03.2011, 11:11     Создать объявление класса и разработать программу-драйвер, которая продемонстрирует работу класса. #13
Благодарю за плодотворную дискуссию. В результате строка 80 была заменена на:
C++
1
cout<<"ERROR: three points in one line\n";
что более соответствует действительности.
В класс Vector добавлены операции сложения/вычитания, поворота, что дает возможность эффективно манипулировать объектами (добавлены графические модули)

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

В целом, приложение создается для решения физических и геометрических задач, так что Vector является его естественной основой. Как метко подмечено silent_1991:
Уж извините, что так вышло, закон природы, ничего не попишешь.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.04.2011, 22:45     Создать объявление класса и разработать программу-драйвер, которая продемонстрирует работу класса.
Еще ссылки по теме:

C++ Создать экземпляр класса без явного указания членов класса
C++ Создать класс Money и разработать указанные элементы класса
Создать для класса виртуальный метод, возвращающий уникальный идентификатор класса C++
C++ Создать класс CheckerBoard (особенности строения класса - инициализация константных членов класса)
C++ Создать экземпляр класса по ссылке экземпляра класса

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

Или воспользуйтесь поиском по форуму:
zewer
 Аватар для zewer
1043 / 734 / 72
Регистрация: 07.01.2011
Сообщений: 5,523
05.04.2011, 22:45  [ТС]     Создать объявление класса и разработать программу-драйвер, которая продемонстрирует работу класса. #14
нужна помошь, не могу решит ошибку, ссилка на прогу:
http://upload.com.ua/get/902494983/laboratory_4.rar
Yandex
Объявления
05.04.2011, 22:45     Создать объявление класса и разработать программу-драйвер, которая продемонстрирует работу класса.
Ответ Создать тему
Опции темы

Текущее время: 03:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru