Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
0 / 0 / 0
Регистрация: 17.12.2015
Сообщений: 1
1

Класс треугольник с произвольным классом - равнобедренный треугольник

17.12.2015, 00:22. Просмотров 2501. Ответов 2
Метки нет (Все метки)

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

Ребят помогите код нужен на это! Пока вот что есть

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
// laboratorka 4.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <cmath>
#include <iostream>
 
 
using namespace std;
 
class triangle    // базовый класс
{
protected:          // спецификатор доступа к элементу value
    int x1,x2,x3,y1,y2,y3;
public:
    triangle()
    {
        cin >> x1;
        cin >> x2;
        cin >> x3;
        cin >> y1;
        cin >> y2;
        cin >> y3;
    }
 
    
 
    void dlina_storon()
    {
        cout << pow((x1 - x2), 2) + pow((y1 - y2), 2);
        cout << pow((x2 - x3), 2) + pow((y2 - y3), 2);
        cout << pow((x3 - x1), 2) + pow((y3 - y1), 2);
    }
    
    void ugol()
    {
        double a,b,c;
        a=pow((x1 - x2), 2) + pow((y1 - y2), 2);
            b=pow((x2 - x3), 2) + pow((y2 - y3), 2);
            c=pow((x3 - x1), 2) + pow((y3 - y1), 2);
 
            cout << acos((a*a+b*b-c*c)/(2*a*b));
            cout << acos((a*a+c*c-b*b)/(2*a*c));
            cout << acos((b*b+c*c-a*a)/(2*b*c));
    }
 
    void perimetr()
    {
        cout << pow((x1 - x2), 2) + pow((y1 - y2), 2) +
            pow((x2 - x3), 2) + pow((y2 - y3), 2) +
            pow((x3 - x1), 2) + pow((y3 - y1), 2);
    }
 
    void ploshad()
    {
        double t,a,b,c;
        t = pow((x1 - x2), 2) + pow((y1 - y2), 2) +
            pow((x2 - x3), 2) + pow((y2 - y3), 2) +
            pow((x3 - x1), 2) + pow((y3 - y1), 2);
        t = t / 2;
        cout << sqrt(t*((t - a)*(t - b)*(t - c)));
    }
};
 
class triangle: public 
{
public:triangle1 () : triangle1() 
        {triangle()
    {
        cin >> x1;
        cin >> x2;
        cin >> x3;
        cin >> y1;
        cin >> y2;
        cin >> y3;
    }
 
    {
    double a = sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
    double b = sqrt((x1-x3)*(x1-x3)+(y1-y3)*(y1-y3));
    double c = sqrt((x3-x2)*(x3-x2)+(y3-y2)*(y3-y2));
    if (!(a<b+c && b<a+c && c<a+b))
    {
        cout << "\ntriangle ne sushestvuet\n\n";
    } 
    else if (a==b || b==c || a==c)
    {
        cout << "\ntriangle ravnobedrenniy\n\n";
    } 
    else
    {
        cout <<"\ntriangle ne ravnobedrenniy\n\n";
    }
    system ("pause")
        ;}}};
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.12.2015, 00:22
Ответы с готовыми решениями:

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

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

Равнобедренный треугольник C++
Помогите пожалуйста написать программу в консоли, которая выводит на экран равнобедренный...

Пустой равнобедренный треугольник
Народ помогите написать программу которая будет выводить пустой равнобедренный...

2
227 / 75 / 31
Регистрация: 17.07.2015
Сообщений: 774
17.12.2015, 02:00 2
chaker, Вот здесь только наследование добавьте.

Добавлено через 31 минуту
chaker,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#pragma once
#include<iostream>
#include<cmath>
using namespace std;
class Point
{
public:
    Point() :x(0), y(0) { cout << "\nPoint created by default with zero values\n"; }
    Point(int a, int b) :x(a), y(b) { cout << "\nPoint created x = " << a << " y = " << b << "\n"; }
    void Set(int a, int b) { x = a, y = b; }
    void Set_x(int a) { x = a; }
    void Set_y(int a) { y = a; }
    Point(const Point&ob) { x = ob.x, y = ob.y; cout << "\nPoint copied\n"; }
    Point&operator=(const Point&ob) { x = ob.x, y = ob.y; }
    Point Get()const { return *this; }
    int Get_x()const { return x; }
    int Get_y()const { return y; }
    void Print()const { cout << "\nx = " << x << " y = " << y << "\n"; }
    ~Point() { "\nPoint deleted\n"; };
private:
    int x, y;
};

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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
#pragma once
class Triangle
{
public:
    Triangle() { A=nullptr, B=nullptr, C=nullptr; cout << "\nTriangle created by default with nullptr NO memory reserved\n"; }
    Triangle(Point a, Point b, Point c) :A(new Point(a)), B(new Point(b)), C(new Point(c)) { cout << "\nTriangle created NEW memory used\n"; }
    Triangle(int x1,int y1,int x2,int y2,int x3,int y3):A(new Point(x1,y1)), B(new Point(x2, y2)), C(new Point(x3, y3)) { cout << "\nTriangle created NEW memory used\n"; }
    Triangle(const Triangle&ob) :A(new Point(ob.Get_A())), B(new Point(ob.Get_B())), C(new Point(ob.Get_C())) {cout << "\nTriangle COPIED\n";}
    Triangle(Triangle&&ob) :A(ob.get_A()), B(ob.get_B()), C(ob.get_C()) { ob.A = nullptr; ob.B = nullptr; ob.C = nullptr; cout << "\nTriangle MOVED\n"; }
    Triangle&Copy(Triangle&ob)
    {
        if (this == &ob)
            return *this;
        if (A == nullptr || B == nullptr || C == nullptr)
        {
            A = new Point(ob.Get_A());
            B = new Point(ob.Get_B());
            C = new Point(ob.Get_C());
            return *this;
        }
        A->Set(ob.Get_A().Get_x(), ob.Get_A().Get_y());
        A->Set(ob.Get_B().Get_x(), ob.Get_B().Get_y());
        A->Set(ob.Get_C().Get_x(), ob.Get_C().Get_y());
        return *this;
    }
    Point&Get_A()const { return *A; }
    Point&Get_B()const { return *B; }
    Point&Get_C()const { return *C; }
    Point*get_A()const { return A; }
    Point*get_B()const { return B; }
    Point*get_C()const { return C; }
    const Triangle&gett()const { return *this; }
    void Set_A(Point a) { A->Set(a.Get_x(), a.Get_y()); }
    void Set_B(Point a) { B->Set(a.Get_x(), a.Get_y()); }
    void Set_C(Point a) { C->Set(a.Get_x(), a.Get_y()); }
    double side_A()const { return sqrt(pow(B->Get_x() - A->Get_x(), 2) + pow(B->Get_y() - A->Get_y(), 2)); }
    double side_B()const { return sqrt(pow(C->Get_x() - B->Get_x(), 2) + pow(C->Get_y() - B->Get_y(), 2)); }
    double side_C()const { return sqrt(pow(C->Get_x() - A->Get_x(), 2) + pow(C->Get_y() - A->Get_y(), 2)); }
    double Square()const 
    {
        double p = (side_A() + side_B() + side_C()) / 2;
        double Sq = sqrt(p*(p - side_A())*(p - side_B())*(p - side_C()));
        return Sq;
    }
    double Perimeter()const
    {
        return side_A() + side_B() + side_C();
    }
    bool Presents(const Point&p)const
    {
        int f = (A->Get_x() - p.Get_x()) * (B->Get_y() - A->Get_y()) - (B->Get_x() - A->Get_x()) * (A->Get_y() - p.Get_y());
        int f1 = (B->Get_x() - p.Get_x()) * (C->Get_y() - B->Get_y()) - (C->Get_x() - C->Get_x()) * (B->Get_y() - p.Get_y());
        int f2 = (C->Get_x() - p.Get_x()) * (A->Get_y() - C->Get_y()) - (A->Get_x() - C->Get_x()) * (C->Get_y() - p.Get_y());
        if ((f >= 0 && f1 >= 0 && f2 >= 0) || (f <= 0 && f1 <= 0 && f2 <= 0))
            return true;
        else
            return false;
 
    }
    bool Cross(const Triangle&ob)const
    {
        bool f1 = Presents(ob.Get_A());
        bool f2 = Presents(ob.Get_B());
        bool f3 = Presents(ob.Get_C());
        if (f1 || f2 || f3)
        {
            cout << "\n\n Cross \n\n";
            return true;
        }
        else
        {
            cout << "\n\n  Dont't cross  \n\n";
            return false;
        }
 
    }
    bool ChrisCross(const Triangle&ob, const Triangle&ob1)
    {
        bool f = ob1.Cross(ob);
        bool f1 = ob.Cross(ob1);
        if (f || f1)
        {
            cout << "\n\n They are crossed\n\n ";
            return true;
        }
        else
        {
            cout << "\n\n They DON'T cross\n\n";
            return false;
        }
    }
    bool Own(const Triangle&ob)const
    {
        if ((Presents(ob.Get_A())) && (Presents(ob.Get_B())) && (Presents(ob.Get_C())))
        {
 
            cout << "\n\n This triangle owns given triangle\n\n";
            return true;
        }
        else
        {
            cout << "\n\n This triangle DOESN'T OWN given triangle\n\n";
            return false;
        }
    }
    bool Oblong()const
    {
        double gip= ((side_A() > side_B()) ? side_A() : side_B()) > side_C() ? ((side_A() > side_B()) ? side_A() : side_B()) : side_C();
        if (pow(gip, 2) == pow(side_A(), 2) + pow(side_B(), 2))
        {
            cout << "\nIs obloing\n";
            return true;
        }
        else
        {
            cout << "\nIs not oblong\n";
            return false;
        }
    }
    bool Equilateral()const
    {
        if (side_A() == side_B() == side_C())
        {
            cout << "\n Is equilateral\n";
            return true;
        }
        else
        {
            cout << "\n Is  notequilateral\n";
            return false;
        }           
    }
    bool Isosceles()const
    {
        if (side_A() == side_B() || side_A() == side_C() || side_B() == side_C())
        {
            cout << "\n Is isosceles \n";
            return true;
        }
        else
        {
            cout << "\n Is  not isosceles \n";
            return false;
        }
    }
 
    friend bool operator==(const Triangle&ob,const Triangle&ob1)
    {
        if (ob.Square() == ob1.Square())
            return true;
        return false;
    }
    friend bool operator>=(const Triangle&ob,const Triangle&ob1)
    {
        if (ob.Square() >= ob1.Square())
            return true;
        return false;
    }
    friend bool operator<=(const Triangle&ob,const Triangle&ob1)
    {
        if (ob.Square() <= ob1.Square())
            return true;
        return false;
    }
    friend bool operator!=(const Triangle&ob,const Triangle&ob1)
    {
        if (ob.Square() != ob1.Square())
            return true;
        return false;
    }
    friend bool operator<(const Triangle&ob,const Triangle&ob1)
    {
        if (ob.Square() < ob1.Square())
            return true;
        return false;
    }
    friend bool operator>(const Triangle&ob,const Triangle&ob1)
    {
        if (ob.Square() > ob1.Square())
            return true;
        return false;
    }
    Triangle&operator=(const Triangle&ob)
    {
        if (this == &ob)
            return *this;
 
        if (A == nullptr || B == nullptr || C == nullptr)
        {
            A = new Point(ob.Get_A());
            B = new Point(ob.Get_B());
            C = new Point(ob.Get_C());
            return *this;
        }
        A->Set(ob.Get_A().Get_x(), ob.Get_A().Get_y());
        A->Set(ob.Get_B().Get_x(), ob.Get_B().Get_y());
        A->Set(ob.Get_C().Get_x(), ob.Get_C().Get_y());
        return *this;           
 
    }
    
    friend ostream &operator<<(ostream &out, const Triangle&ob)     //output
    {
        out << "A point: " << ob.Get_A().Get_x() << " " << ob.Get_A().Get_y() << "\n";
        out << "B point: " << ob.Get_B().Get_x() << " " << ob.Get_B().Get_y() << "\n";
        out << "C point: " << ob.Get_C().Get_x() << " " << ob.Get_C().Get_y() << "\n";
        return out;
    }
    friend istream &operator>>(istream &in, Triangle&ob)     //input
    {
        int a=0;
        cout << "\nInput A->x";
        in >> a;
        ob.A->Set_x(a);
        cout << "\nInput A->y";
        in >> a;
        ob.A->Set_y(a);
        cout << "\nInput B->x";
        in >> a;
        ob.B->Set_x(a);
        cout << "\nInput B->y";
        in >> a;
        ob.B->Set_y(a);
        cout << "\nInput C->x";
        in >> a;
        ob.C->Set_x(a);
        cout << "\nInput C->y";
        in >> a;
        ob.C->Set_y(a);
    
        return in;
    }
 
 
 
 
    void Print()const { A->Print(); B->Print(), C->Print(); }
 
    ~Triangle() { delete A; delete B, delete C; cout << "\nTriangle deleted\n"; };
private:
    Point*A,*B,*C;
};
Добавлено через 1 минуту
chaker,
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
#pragma once
#include"Triangle.h"
#include <stdarg.h>
 
class RomanticCollection
{
public:
    RomanticCollection() :_cnt(0), _triangles(nullptr) { cout << "\n Empty Collection created \n"; }    
    RomanticCollection(int siz, ...):_cnt(siz),_triangles(new Triangle*[siz]())
    {
        va_list vl;
        ++siz;
        va_start(vl, siz);
        for (int i(1),j(0); i<siz; ++i,++j)
        {
            this->_triangles[j] = new Triangle(va_arg(vl, Triangle));
            
        }
        va_end(vl);
        cout << "\nRomanticCollection is created\n";
    }
    const Triangle*Get(int i)const { return _triangles[i]; }
    int get_cnt() { return this->_cnt; }
    Triangle&get(int i)const  { return *_triangles[i]; }
    Triangle&operator[](int i)const{ return this->get(i); } 
    RomanticCollection&operator+=(Triangle&ob)
    {
        Triangle**temp = new Triangle*[_cnt + 1]();
        for (int i(0); i < _cnt; ++i)
            temp[i] = new Triangle(move(this->get(i)));
        temp[_cnt] = new Triangle(ob);  
        delete _triangles;
        _triangles = new Triangle*[_cnt+1]();
        for (int i(0); i < _cnt + 1; ++i)
            Set(temp[i]->gett(), i);            
        ++_cnt;
        return *this;
 
    }
    
    void Set(const Triangle&ob, int i) { delete _triangles[i]; _triangles[i] = new Triangle(ob); }  
 
    void Init(int i, Triangle&ob)
    {
        this->_triangles[i] = new Triangle(ob);
    }
    void Print(int i)const
    {
        _triangles[i]->Print();
    }
    void Print()const { for (int i(0); i < _cnt; ++i)cout<<_triangles[i]->gett(); }
    /*Triangle& find_max()
    {
        Triangle max(0, 0, 0, 0, 0, 0);
        for (int i(0); i < _cnt; ++i)
        {
            if (this->get(i) > max)
                max = this->get(i);
        }
 
 
    }*/
    ~RomanticCollection() { for (int i(0); i < _cnt; ++i)delete _triangles[i]; delete _triangles; cout << "\nRomanticCollection is deleted\n"; }
 
private:
    int _cnt;
    Triangle** _triangles;
};
0
582 / 385 / 216
Регистрация: 20.01.2013
Сообщений: 1,169
17.12.2015, 11:07 3
Наверное можно как то так
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
#include <iostream>
#include <string>
#include <vector>
#include <cmath>
 
namespace cf{
    
    class Point{
        private:
            float m_x;
            float m_y;
        public:
            Point(float x = .0f, float y = .0f) : m_x(x), m_y(y){}
            Point(const Point & p) : m_x(p.m_x), m_y(p.m_y){}
            const Point & operator=(const Point & p){
                m_x = p.m_x;
                m_y = p.m_y;
                return *this;
            }
            void setPoint(const Point & p){
                m_x = p.m_x;
                m_y = p.m_y;
            }
            float getX() const{
                return m_x;
            }
            float getY() const{
                return m_y;
            }
    };
    
    class Line{
        private:
            Point p1;
            Point p2;
        public:
            Line(float x1, float y1, float x2, float y2) : 
                    p1(x1, y1), p2(x2, y2){}
            Line(const Line & l){
                p1 = l.p1;
                p2 = l.p2;
            }
            const Line & operator=(const Line & l){
                p1 = l.p1;
                p2 = l.p2;
            }
            float getLenght() const{
                return sqrt(pow(abs(p2.getY() - p1.getY()), 2) + 
                                                pow(abs(p2.getX() - p1.getX()), 2));
            }
            void setFirstPoint(const Point & p){
                p1 = p;
            }
            void setSecPoint(const Point & p){
                p2 = p;
            }
            const Point & getFirstPoint() const{
                return p1;
            }
            const Point & getSecPoint() const{
                return p2;
            }
    };
    
    class Shape{
        public:
            virtual float getPerimetr() const = 0;
            virtual float getArea() const = 0;
            virtual bool isExist() const = 0;
            virtual ~Shape(){}
    };
    
    class Triangle : Shape{
        protected:
            Line m_l1;
            Line m_l2;
            Line m_l3;
        public:
            Triangle(const Line & l1, const Line & l2, const Line & l3) : 
                            m_l1(l1), m_l2(l2), m_l3(l3){}
            virtual float getPerimetr() const{
                return m_l1.getLenght() + m_l2.getLenght() + m_l3.getLenght();
            }
            virtual float getArea() const{
                return sqrt(getPerimetr() / 2 * (getPerimetr() / 2 - m_l1.getLenght()) * 
                                        (getPerimetr() / 2 - m_l2.getLenght()) *
                                         (getPerimetr() / 2 - m_l3.getLenght()));
            }
            virtual bool isExist() const{
                return m_l1.getLenght() + m_l2.getLenght() > m_l3.getLenght() && 
                                m_l1.getLenght() + m_l3.getLenght() > m_l2.getLenght() && 
                                 m_l2.getLenght() + m_l3.getLenght() > m_l1.getLenght();
            }
            virtual ~Triangle(){}
    };
    
    class IsoscelesTriangle : Triangle{
        public:
            IsoscelesTriangle(const Line & l1, const Line & l2, const Line & l3) : 
                                                Triangle(l1, l2, l3){}
            virtual bool isExist() const{
                return m_l1.getLenght() == m_l2.getLenght() || m_l1.getLenght() == m_l3.getLenght() ||
                                m_l3.getLenght() == m_l2.getLenght();
            }
            virtual float getPerimetr() const{
                return Triangle::getPerimetr();
            }
            virtual float getArea() const{
                return Triangle::getArea();
            }
    };
    
}
 
 
int main(){
    
    cf::Triangle triangle(cf::Line(0, 0, 5, 5), 
                                     cf::Line(5, 5, 10, 0), 
                                     cf::Line(10, 0, 0, 0));
    
    if(triangle.isExist())
        std::cout << " This is a triangle " << std::endl;
    
    cf::IsoscelesTriangle isosTriangle(cf::Line(0, 0, 5, 5), 
                                                         cf::Line(5, 5, 10, 0), 
                                                         cf::Line(10, 0, 0, 0));
    
    if(isosTriangle.isExist())
        std::cout << " This is a isosceles ariangle " << std::endl;
        
    std::cout << " The perimeter of an isosceles triangle " << isosTriangle.getPerimetr() << std::endl;
 
    std::cin.get();
    
    return 0;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.12.2015, 11:07

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Вывести равнобедренный треугольник
В программировании полный ноль. Препод дал написать прогу, которая вывод на экран треугольник...

Нарисовать равнобедренный треугольник из символов
Нужно разобрать код Нарисовать равнобедренный треугольник из символов . Высоту выбирает...

Вывести равнобедренный треугольник внутри пустой!
Вот мой код если можно подтолкните, что-то я застряла. высоту вводит пользователь int n, s...

Изобразить на экране прямоугольный равнобедренный треугольник
Ребята, помогите. Задано целое число. Используя средства стандартного ввода-вывода, изобразить на...


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

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

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