Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.85
Feya
2 / 2 / 0
Регистрация: 14.03.2012
Сообщений: 12
#1

Класс треугольников Triangle - C++

14.03.2012, 18:50. Просмотров 1968. Ответов 12
Метки нет (Все метки)

Ребят, надеюсь у Вас будет минутка свободного времени для меня. Дело в том, что я вроде бы и понимаю, что и как писать в первых двух частях, но в последней, третей части, не могу сообразить как писать тестирующую функцию и куда пихать нахождение периметра =\
Если сможете, помогите, пожалуйста, буду очень благодарна.


Задача:

Опишите класс треугольников Triangle. Задайте функцию сравнения треугольников. Задайте функцию вычисления периметра треугольника.

Мой Код:

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
// Lab_1.cpp: определяет точку входа для консольного приложения.
//
 
#include"stdafx.h"
#include <iostream>
#include "Math.h"
#include "stdio.h"
using std::cout;
using std::cin;
 
 
class Triangle {
private:
    double x1, y1;
    double x2, y2;
    double x3, y3;
    double angle_k, angle_l, angle_m;
public:
    Triangle();
    Triangle(double, double, double, double, double, double);
    void setx1(double);
    void setx2(double);
    void setx3(double);
    void sety1(double);
    void sety2(double);
    void sety3(double);
    double getx1();
    double getx2();
    double getx3();
    double gety1();
    double gety2();
    double gety3();
    void input();
    void print();
    bool sravnenie (Triangle);
    double perimetr (Triangle);
};
Triangle::Triangle(){
    x1=1;
    x2=1;
    x3=1;
    y1=1;
    y2=1;
    y3=1;
}
Triangle::Triangle(double x1 , double x2, double x3, double y1, double y2, double y3){
    if (x1>0)
    (*this).x1=x1;
    else(*this).x1=1;
    if (x2>0)
    (*this).x2=x2;
    else(*this).x2=1;
    if (x3>0)
    (*this).x3=x3;
    else(*this).x3=1;
    if (y1>0)
    (*this).y1=y1;
    else(*this).y1=1;
    if (y2>0)
    (*this).y2=y2;
    else(*this).y2=1;
    if (y3>0)
    (*this).y3=y3;
    else(*this).y3=1;
}
void Triangle::setx1(double a){
    x1=a;
}
void Triangle::setx2(double b){
    x2=b;
}
void Triangle::setx3(double c){
    x3=c;
}
void Triangle::sety1(double o){
    y1=o;
}
void Triangle::sety2(double f){
    y2=f;
}
void Triangle::sety3(double n){
    y3=n;
}
double Triangle::getx1(){
    return x1;
}
double Triangle::getx2(){
    return x2;
}
double Triangle::getx3(){
    return x3;
}
double Triangle::gety1(){
    return y1;
}
double Triangle::gety2(){
    return y2;
}
double Triangle::gety3(){
    return y3;
}
void Triangle::input(){
    cout<<"Vvedite x1, x2, x3, y1, y2, y3"<<"\n";
        cin>>x1;
    if (x1>0);
    else l:cout<<"Error x1"<<"\n";
    goto l;
    cin>>x2;
    if (x2>0);
    else cout<<"Error x2"<<"\n";
    cin>>x3;
    if (x3>0);
    else cout<<"Error x3"<<"\n";
    cin>>y1;
    if (y1>0);
    else cout<<"Error y1"<<"\n";
    cin>>y2;
    if (y2>0);
    else cout<<"Error y2"<<"\n";
    cin>>y3;
    if (y3>0);
    else cout<<"Error y3"<<"\n";
}
void Triangle::print(){
    cout<<x1<<","<<x2<<","<<x3<<","<<y1<<","<<y2<<","<<y3<<"\n";
}
bool Triangle::sravnenie (Triangle){
 
    if(x1==y1 || x2==y2 || x3==y3){
        return true;}
    else{
        return false;
}
}
int main ()
{
    double a,b,c,perimetr;
    cout<<"Vvedite a, b, c"<<"\n";
    cin>>a;
    if (a>0);
    else cout<<"Error a"<<"\n";
    cin>>b;
    if (b>0);
    else cout<<"Error b"<<"\n";
    cin>>c;
    if (b>0);
    else cout<<"Error c"<<"\n";{
        perimetr=a+b+c;
    }
    cin.get();
        return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.03.2012, 18:50
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Класс треугольников Triangle (C++):

Реализовать класс Triangle (задание 25), опираясь на класс Angle из задания 26 для представления углов - C++
Реализовать класс Triangle (задание 25), опираясь на класс Angle из задания 26 для представления углов. Собственно вот такая проблема. Не...

Класс Triangle - C++
Помогите подправить код. Вот задание: создать класс Triangle для представления треугольника. Поля данных должны включать углы и стороны....

Класс Triangle - C++
#include &lt;iostream&gt; #include &lt;math.h&gt; using namespace std; class Triangle { public:

Класс Triangle - C++
Помогите пожалуйста реализовать перегрузку операции ++ и -- которая одновременно увеличивает (уменьшает) значение полей a,b,c на 1 ...

Класс Triangle - C++
Помогите с заданием очень прошу! Не могу разобраться. Много ошибок помогите. Очень надеюсь на Вашу помощь :help::( #include&lt;iostream&gt; ...

Создать класс triangle - C++
всем доброго времени суток помогите бедному студенту просто физически не успеваю решить 2 задачи 1 Создать класс triangle, члены...

12
zss
Модератор
Эксперт С++
6535 / 6097 / 2007
Регистрация: 18.12.2011
Сообщений: 15,860
Завершенные тесты: 1
14.03.2012, 19:18 #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
bool Triangle::sravnenie (Triangle tr2)
{ 
    if(x1==tr2.x1 && x2==tr2.x2 && x3==tr2.x3 && y1==tr2.y1 && y2==tr2.y2 && y3==tr2.y3 )
       return true
    return false;
}
double Triangle::perimetr() //!!!! без параметра. Считаем периметр этого(this) треугольника
{
    return sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1))+
             sqrt((x3-x2)*(x3-x2)+(y3-y2)*(y3-y2))+
             sqrt((x1-x3)*(x1-x3)+(y1-y3)*(y1-y3));
}
Добавлено через 4 минуты
C++
1
2
3
4
5
6
7
8
9
10
int main()
{
    Triangle t1(0,0,100,100,0,100),t2(100,100,0,200,200,200);
    if(t1.sravnenie(t2))
        cout<<"Равны";
    else
        cout<<"Не равны";
    double PP=t1.perimetr();
    cout<<PP;
}
1
Feya
2 / 2 / 0
Регистрация: 14.03.2012
Сообщений: 12
14.03.2012, 19:33  [ТС] #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
138
139
140
141
142
143
144
145
146
147
148
149
// Lab_1.cpp: определяет точку входа для консольного приложения.
//
 
#include"stdafx.h"
#include <iostream>
#include "Math.h"
#include "stdio.h"
using std::cout;
using std::cin;
 
 
class Triangle {
private:
    double x1, y1;
    double x2, y2;
    double x3, y3;
    double angle_k, angle_l, angle_m;
public:
    Triangle();
    Triangle(double, double, double, double, double, double);
    void setx1(double);
    void setx2(double);
    void setx3(double);
    void sety1(double);
    void sety2(double);
    void sety3(double);
    double getx1();
    double getx2();
    double getx3();
    double gety1();
    double gety2();
    double gety3();
    void input();
    void print();
    bool sravnenie (Triangle);
    double perimetr (Triangle);
};
Triangle::Triangle(){
    x1=1;
    x2=1;
    x3=1;
    y1=1;
    y2=1;
    y3=1;
}
Triangle::Triangle(double x1 , double x2, double x3, double y1, double y2, double y3){
    if (x1>0)
    (*this).x1=x1;
    else(*this).x1=1;
    if (x2>0)
    (*this).x2=x2;
    else(*this).x2=1;
    if (x3>0)
    (*this).x3=x3;
    else(*this).x3=1;
    if (y1>0)
    (*this).y1=y1;
    else(*this).y1=1;
    if (y2>0)
    (*this).y2=y2;
    else(*this).y2=1;
    if (y3>0)
    (*this).y3=y3;
    else(*this).y3=1;
}
void Triangle::setx1(double a){
    x1=a;
}
void Triangle::setx2(double b){
    x2=b;
}
void Triangle::setx3(double c){
    x3=c;
}
void Triangle::sety1(double o){
    y1=o;
}
void Triangle::sety2(double f){
    y2=f;
}
void Triangle::sety3(double n){
    y3=n;
}
double Triangle::getx1(){
    return x1;
}
double Triangle::getx2(){
    return x2;
}
double Triangle::getx3(){
    return x3;
}
double Triangle::gety1(){
    return y1;
}
double Triangle::gety2(){
    return y2;
}
double Triangle::gety3(){
    return y3;
}
void Triangle::input(){
    cout<<"Vvedite x1, x2, x3, y1, y2, y3"<<"\n";
        cin>>x1;
    if (x1>0);
    else l:cout<<"Error x1"<<"\n";
    goto l;
    cin>>x2;
    if (x2>0);
    else cout<<"Error x2"<<"\n";
    cin>>x3;
    if (x3>0);
    else cout<<"Error x3"<<"\n";
    cin>>y1;
    if (y1>0);
    else cout<<"Error y1"<<"\n";
    cin>>y2;
    if (y2>0);
    else cout<<"Error y2"<<"\n";
    cin>>y3;
    if (y3>0);
    else cout<<"Error y3"<<"\n";
}
void Triangle::print(){
    cout<<x1<<","<<x2<<","<<x3<<","<<y1<<","<<y2<<","<<y3<<"\n";
}
bool Triangle::sravnenie (Triangle tr2){ 
    if(x1==tr2.x1 && x2==tr2.x2 && x3==tr2.x3 && y1==tr2.y1 && y2==tr2.y2 && y3==tr2.y3 )
       return true;
    return false;
}
double Triangle::perimetr(){
    return sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1))+
             sqrt((x3-x2)*(x3-x2)+(y3-y2)*(y3-y2))+
             sqrt((x1-x3)*(x1-x3)+(y1-y3)*(y1-y3));
} 
 
int main()
{
    Triangle t1(0,0,100,100,0,100),t2(100,100,0,200,200,200);
    if(t1.sravnenie(t2))
        cout<<"Равны";
    else
        cout<<"Не равны";
    double PP=t1.perimetr();
    cout<<PP;
    cin.get();
    return 0;
}
Visual Studio выбивает вот такие ошибки:
Ошибка 1 error C2511: double Triangle:erimetr(void): перегруженная функция-член не найдена в "Triangle" c:\users\feya\desktop\ооп\triangle_lab_1\triangle_lab_1\triangle_lab_1.cpp 133
Ошибка 2 error C2660: Triangle:erimetr: функция не принимает 0 аргументов c:\users\feya\desktop\ооп\triangle_lab_1\triangle_lab_1\triangle_lab_1.cpp 146
3 IntelliSense: объявление несовместимо с "double Triangle:erimetr(Triangle)" (объявлено в строке 36) c:\users\feya\desktop\ооп\triangle_lab_1\triangle_lab_1\triangle_lab_1.cpp 132
4 IntelliSense: слишком мало аргументов в вызове функции c:\users\feya\desktop\ооп\triangle_lab_1\triangle_lab_1\triangle_lab_1.cpp 145

и еще вопрос он только в начале открывает компилятор, а после ввода трех переменных закрывает и не показывает результат...
Что с этим можно сделать?
0
zss
Модератор
Эксперт С++
6535 / 6097 / 2007
Регистрация: 18.12.2011
Сообщений: 15,860
Завершенные тесты: 1
14.03.2012, 19:48 #4
Так я же Вас в тексте (7 строка) предупредил, что в объявлении класса perimetr объявлен неправильно.
Параметр надо убрать!!!!!
1
Feya
2 / 2 / 0
Регистрация: 14.03.2012
Сообщений: 12
14.03.2012, 19:56  [ТС] #5
Цитата Сообщение от zss2 Посмотреть сообщение
Так я же Вас в тексте (7 строка) предупредил, что в объявлении класса perimetr объявлен неправильно.
Параметр надо убрать!!!!!
Спасибо большое, исправила, но теперь он сам, что-то считает и выдает ответ просто, то есть не дает ввести пользователю данные.
И мне не совсем ясна формула периметра, могли бы вы дать её название или какуюто информацию, чтобы я могла ознакомится с данной формулой.
0
zss
Модератор
Эксперт С++
6535 / 6097 / 2007
Регистрация: 18.12.2011
Сообщений: 15,860
Завершенные тесты: 1
14.03.2012, 21:06 #6
Формула периметра - вычисляем дину каждой стороны
по формуле "Корень квадратный из суммы квадратов катетов"
и суммируем все стороны.
А для ввода вставьте вызов метода input после 140 строки:
C++
1
t1.input();t2.input();
0
Feya
2 / 2 / 0
Регистрация: 14.03.2012
Сообщений: 12
14.03.2012, 22:41  [ТС] #7
Так это ж только для прямоугольного треугольника периметр, или нет. Я просто не могу разобраться с формулой.
плюс, после ввоода 6 сторон нажав энтер, программа выдает Error error error error и так пока не остановите программу.

Добавлено через 39 минут
Плюс все равно кампилятор на экран не выводит результатов.
0
Infinity3000
1058 / 577 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
15.03.2012, 01:28 #8
Цитата Сообщение от Feya Посмотреть сообщение
Опишите класс треугольников Triangle. Задайте функцию сравнения треугольников. Задайте функцию вычисления периметра треугольника.
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
#include "iostream"
#include "cmath"
 
using namespace std;
 
class Triangle
{
    double x1, y1;
    double x2, y2;
    double x3, y3;
    double AB, BC, CA;
public:
    Triangle(double a, double b, double c, double d, double e, double f);
    ~Triangle();
    double Perimeter();
    void Comparison(Triangle tr);
};
 
Triangle::Triangle(double a, double b, double c, double d, double e, double f)
{
    x1 = a;
    y1 = b;
    x2 = c;
    y2 = d;
    x3 = e;
    y3 = f;
 
    AB = sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
    BC = sqrt((x3-x2)*(x3-x2)+(y3-y2)*(y3-y2));
    CA = sqrt((x1-x3)*(x1-x3)+(y1-y3)*(y1-y3));
}
 
Triangle::~Triangle()
{}
 
double Triangle::Perimeter()
{
    return AB + BC + CA;
}
 
void Triangle::Comparison(Triangle tr)
{
    if (AB == tr.AB && BC == tr.BC && CA == tr.CA)
    {
        cout << "\n\nТреугольники равны\n";
    }
    else 
    {
        cout << "\n\nТреугольники не равны\n";
    }
}
 
int main()
{
    setlocale(0,"");
    double p1, p2;
    
    Triangle t(5, 5, 30, 20, 40, 5);
    Triangle t2(5, 5, 30, 20, 30, 5);
 
    p1 = t.Perimeter();
    p2 = t2.Perimeter();
    
    cout << "Периметр 1 треугольника = " << p1
        << "\nПериметр 2 треугольника = " << p2;
 
    t.Comparison(t2);
 
    system("pause >> null");
    return 0;
}
1
Миниатюры
Класс треугольников Triangle   Класс треугольников Triangle  
Infinity3000
1058 / 577 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
15.03.2012, 01:32 #9
Равенство треугольников -> Третий признак равенства треугольников. Если три стороны одного треугольника равны соответственно трем сторонам другого треугольника, то такие треугольники равны.
0
Feya
2 / 2 / 0
Регистрация: 14.03.2012
Сообщений: 12
15.03.2012, 14:00  [ТС] #10
Спасибо, но это получается, что вводить другие данные можно только в коде?
0
Infinity3000
1058 / 577 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
15.03.2012, 14:07 #11
Цитата Сообщение от Feya Посмотреть сообщение
Спасибо, но это получается, что вводить другие данные можно только в коде?
Ну а что состовляет труда переделать?
0
Infinity3000
1058 / 577 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
15.03.2012, 14:15 #12
конечно можно сделать и более удобный и человеческий ввод! Но думаю и так нормально! Нужно будет переделаете!

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
#include "iostream"
#include "cmath"
 
using namespace std;
 
class Triangle
{
        double x1, y1;
        double x2, y2;
        double x3, y3;
        double AB, BC, CA;
public:
        Triangle(double a, double b, double c, double d, double e, double f);
        ~Triangle();
        double Perimeter();
        void Comparison(Triangle tr);
};
 
Triangle::Triangle(double a, double b, double c, double d, double e, double f)
{
        x1 = a;
        y1 = b;
        x2 = c;
        y2 = d;
        x3 = e;
        y3 = f;
 
        AB = sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
        BC = sqrt((x3-x2)*(x3-x2)+(y3-y2)*(y3-y2));
        CA = sqrt((x1-x3)*(x1-x3)+(y1-y3)*(y1-y3));
}
 
Triangle::~Triangle()
{}
 
double Triangle::Perimeter()
{
        return AB + BC + CA;
}
 
void Triangle::Comparison(Triangle tr)
{
        if (AB == tr.AB && BC == tr.BC && CA == tr.CA)
        {
                cout << "\n\nТреугольники равны\n";
        }
        else 
        {
                cout << "\n\nТреугольники не равны\n";
        }
}
 
int main()
{
        setlocale(0,"");
        double x1, y1;
        double x2, y2;
        double x3, y3;
        double p1, p2;
 
        cout << "Введите координаты первого треугольника(x1 y1 x2 y2 x3 y3) - ";
        cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3;
        Triangle t(x1, y1, x2, y2, x3, y3);
        
        cout << "Введите координаты второго треугольника(x1 y1 x2 y2 x3 y3) - ";
        cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3;
        Triangle t2(x1, y1, x2, y2, x3, y3);
 
   
        p1 = t.Perimeter();
        p2 = t2.Perimeter();
        
        cout << "Периметр 1 треугольника = " << p1
                << "\nПериметр 2 треугольника = " << p2;
 
        t.Comparison(t2);
 
        system("pause >> null");
        return 0;
}
1
Миниатюры
Класс треугольников Triangle  
Feya
2 / 2 / 0
Регистрация: 14.03.2012
Сообщений: 12
15.03.2012, 14:24  [ТС] #13
Спасибо большое за помощь, и простите, что нервы поматала
0
15.03.2012, 14:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.03.2012, 14:24
Привет! Вот еще темы с ответами:

Класс Triangle ошибка - C++
Помогите пожалуйста исправить ошибку #include &lt;iostream&gt; #include &lt;cmath&gt; using namespace std; class Triangle { ...

Класс Triangle ошибка - C++
Помогите исправить ошибку класса: #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;cmath&gt; using namespace std; class...

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

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


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

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

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