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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
zewer
1105 / 796 / 80
Регистрация: 07.01.2011
Сообщений: 5,863
#1

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

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

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

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

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

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

Разработать программу библиотечного абонемента с использованием класса queue - C++
Задание. Разработать модель работы библиотечного абонемента. Создать необходимые классы. Информационная запись о книге в библиотеке...

Составьте программу, выводящую на экран сообщения об отличниках класса, о средней успеваемости учащихся класса - C++
Опишите, используя структуру записи, школьный журнал. Предусмотрите в записи поля для хранения информации о фамилии учащегося, предмете,...

создать программу с использованием класса - C++
Написать программу, в которой используется класс myclass для задания значений "а" для объектов "ob1" и "ob2" и вывода на экран этих...

Двойное объявление класса - C++
Для чего два раза писать class Animal? class Animal; void setValue (Animal&, int); class Animal { public: Animal(); ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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++
1286 / 1220 / 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
1105 / 796 / 80
Регистрация: 07.01.2011
Сообщений: 5,863
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
Эксперт С++
4958 / 3034 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
24.03.2011, 02:13     Создать объявление класса и разработать программу-драйвер, которая продемонстрирует работу класса. #11
slice, в том, что если координаты дублируются, т.е. отрезки, концами которых являются точки с данными координатами, стыкуются и, соответственно, образуют треугольник, то эти отрезки будут удовлетворять неравенству треугольника. Уж извините, что так вышло, закон природы, ничего не попишешь.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 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 параметрами класса Piramida, мне нужно создать объект класса M_Ygolnik с...

Объявление класса Patient - C++
Доброго времени суток! Есть программа, в ней несколько файлов. Есть класс Patient, на который создается указатель в файле...

Объявление объектов класса - C++
Как инициализировать объекты класса вне функции main, но и не в глобальной области? Объявленные объекты занимают много пространства в...

Предварительное объявление класса - C++
Имеется код такого вида: class IBase { public: virtual foo() = NULL; .. .. .. };

Объявление класса с шаблоном - C++
Пишу в Qt. Создал класс с шаблоном matrix.h #ifndef MATRIX_H #define MATRIX_H template &lt;class T&gt; class Matrix {


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

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

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