83 / 3 / 1
Регистрация: 14.11.2011
Сообщений: 68
1

Создать класс, который определяет можно ли по введенным значениям построить треугольник, и если можно, то какой

21.11.2012, 23:15. Показов 2266. Ответов 5
Метки нет (Все метки)

Создать класс, который определяет можно ли по введенным значениям построить треугольник, и если можно, то какой - прямоугольный или равносторонний).
Значения вводятся с клавиатуры.

Написать программу, демонстрирующую работу с этим классом. Программа должна содержать меню, позволяющее осуществить проверку всех методов класса:
  1. Предусмотреть методы осуществляющие проверку корректности ввода данных
  2. Рассмотреть различные способы доступа к открытым элементам класса(через объект, ссылку, указатель)
  3. Рассмотреть доступ к закрытым элементам класса через "друзей" класса

То что смогу набросать скину потом. Алгоритм, как я понимаю такой: нужно взять в закрытые элементы 2 стороны и угол, в открытые написать функцию, которая проверит прямоугольный ли треугольник(т.Пифагора) и еще одну для равностороннего(если такая есть, то напомните пожалуйста). Еще надо как-то написать проверку на угол, чтобы при вводе 90 сразу определялся прямоугольный, а при вводе 60 проверялись стороны, или как можно еще?

Добавлено через 5 часов 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
#include "stdafx.h"
 
#include <iostream>
#include <iomanip>
using namespace std;
 
class MyTriangle
{
    int s1, s2, a;
public:
    MyTriangle();
    void equil_tr(int s1, int s2, int a);
    void right_tr(int s1, int s2, int a);
};
MyTriangle::MyTriangle()
{
    s1 = s2 = a = 0;
}
 
int main()
{
    MyTriangle ob;
    int side1, side2, angle;    
    std::ios_base::io_state i;
    do
    {   
        std::cout << "First side (only integer) = ";
        std::cin.clear();
        std::cin.sync();
        std::cin >> side1;
 
        std::cout << "Second side (only integer) = ";
        std::cin.clear();
        std::cin.sync();
        std::cin >> side2;
 
        std::cout << "Angle (in degrees) = ";
        std::cin.clear();
        std::cin.sync();
        std::cin >> angle;
        i = std::cin.rdstate();
    }
        while (i & std::ios::failbit);
        
        ob.equil_tr(side1, side2, angle);
        ob.right_tr(side1, side2, angle);
 
system("pause");
return 0;
}
 
void MyTriangle::equil_tr(int s1, int s2, int a)
{
    if (s1 = s2 && a == 60) cout << "Equilateral triangle\n";
}
void MyTriangle::right_tr(int s1, int s2, int a)
{
    if (a == 90) cout << "Right triangle\n";
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.11.2012, 23:15
Ответы с готовыми решениями:

Проверьте, можно ли построить треугольник из отрезков с длинами x, y, z и, если можно, то какой – остроугольный, прямоугольный или тупоугольный.
Есть 2 задачи, в которых нужна ваша помощь, многоуважаемые друзья. Вот первая: Проверьте, можно ли...

По трем введенным вещественным числам выяснить, можно ли построить треугольник
По трем введенным вещественным числам выяснить, можно ли построить треугольник с такими длинами...

Проверьте, можно ли построить треугольник из отрезков с длинами x,y,z, и, если можно, то будет ли он равнобедренным
Помогите пожалуйста) Проверьте, можно ли построить треугольник из отрезков с длинами x,y,z, и,...

Написать программу, которая сможет выяснить по трем введенным переменным, можно ли построить треугольник
По трем введенным вещественным числам выяснить, можно ли построить треугольник с такими длинами...

5
840 / 478 / 58
Регистрация: 18.09.2012
Сообщений: 1,688
21.11.2012, 23:50 2
Ну геометрия могу сказать так, короче сумма двух сторон должна быть больше третей, тогда это треугольник, а там равносторонний, то проверяешь равенство сторон, а прямоугольный, теорема пифагора.

Добавлено через 1 минуту
Если я правильно понял условие задачи.
1
Форумчанин
Эксперт CЭксперт С++
8194 / 5044 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
22.11.2012, 00:01 3
Вот тут есть функция проверки, является ли треуг. Равносторонний обладает равными сторонами (кеп), длина стороны находится по формуле sqrt ( (x2-x1)^2 + (y2-y1)^2 ). Равносторонний имеет скалярное произведение у двух сторон равное 0.
1
83 / 3 / 1
Регистрация: 14.11.2011
Сообщений: 68
22.11.2012, 22:56  [ТС] 4
MrGluck, попробую что-нибудь из этого реализовать

Добавлено через 5 часов 54 минуты
как реализовать условие для проверки объекта на египетский треугольник(прямоугольный треугольник со сторонами 3 4 5)?
ввод сторон идет в произвольном порядке

Добавлено через 42 минуты
помогите пожалуйста запустить это условие, на ввод данных. Не хочет при вводе "N" переходить к вводу 3 сторон.

и как-то надо дописать последнюю функцию, чтобы при вводе 3 4 5 в случайном порядке он выдал, что треугольник прямоугольный.

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
#include "stdafx.h"
 
#include <iostream>
#include <iomanip>
using namespace std;
 
class MyTriangle
{
    int s1, s2, s3, a;
public:
    MyTriangle();
    void ssa_tr(int s1, int s2, int a);
    void sss_tr(int s1, int s2, int s3);
};
MyTriangle::MyTriangle()
{
    s1 = s2 = s3 = a = 0;
}
 
int main()
{
    MyTriangle ob;
    int side1, side2, side3, angle; 
    char l;
    
    cout << "Do you want to type two sides and an angle? Y/N\n";
    cin >> l;
 
    if (l = 'Y')
    {
        std::ios_base::io_state i;
        do
        {   
        std::cout << "First side (only integer) = ";
        std::cin.clear();
        std::cin.sync();
        std::cin >> side1;
 
        std::cout << "Second side (only integer) = ";
        std::cin.clear();
        std::cin.sync();
        std::cin >> side2;
 
        std::cout << "Angle (in degrees) = ";
        std::cin.clear();
        std::cin.sync();
        std::cin >> angle;
        i = std::cin.rdstate();
        }
        while (i & std::ios::failbit);
        
        ob.ssa_tr(side1, side2, angle);
    }
    else
    {
        std::ios_base::io_state j;
        do
        {   
        std::cout << "First side (only integer) = ";
        std::cin.clear();
        std::cin.sync();
        std::cin >> side1;
 
        std::cout << "Second side (only integer) = ";
        std::cin.clear();
        std::cin.sync();
        std::cin >> side2;
 
        std::cout << "Third side  = ";
        std::cin.clear();
        std::cin.sync();
        std::cin >> angle;
        j = std::cin.rdstate();
        }
        while (j & std::ios::failbit);
        
        ob.sss_tr(side1, side2, side3);
    }
        
system("pause");
return 0;
}
        
void MyTriangle::ssa_tr(int s1, int s2, int a)
{
    if (s1 = s2 && a == 60)
    {
        cout << "Equilateral triangle\n" ;
    }
    else
    {
    if (a == 90 || (s1 = s2 && a == 45))
        cout << "Right triangle\n";
    else
        cout << "Simple triangle\n";
    }
}
 
void MyTriangle::sss_tr(int s1, int s2, int s3)
{
    if (s1 = s2 = s3)
    {
        cout << "Equilateral triangle\n" ;
    }
    else
    {
        cout << "Simple triangle\n";
    }
}
Добавлено через 26 минут
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
#include "stdafx.h"
 
#include <iostream>
#include <iomanip>
using namespace std;
 
class MyTriangle
{
    int s1, s2, s3, a;
public:
    MyTriangle();
    void ssa_tr(int s1, int s2, int a);
    void sss_tr(int s1, int s2, int s3);
};
MyTriangle::MyTriangle()
{
    s1 = s2 = s3 = a = 0;
}
 
int main()
{
    MyTriangle ob;
    int side1=0, side2=0, side3=0, angle=0; 
    int l;
    
    cout << "Do you want to type two sides and an angle? Y/N\n";
    cin >> l;
 
    if (l = 1)
    {
        ob.ssa_tr(side1, side2, angle);
    }
    else
    {
        cout << "Type three sides\n";
        ob.sss_tr(side1, side2, side3);
    }
        
system("pause");
return 0;
}
        
void MyTriangle::ssa_tr(int s1, int s2, int a)
{
            std::ios_base::io_state i;
        do
        {   
            std::cout << "First side (only integer) = ";
            std::cin.clear();
            std::cin.sync();
            std::cin >> s1;
 
            std::cout << "Second side (only integer) = ";
            std::cin.clear();
            std::cin.sync();
            std::cin >> s2;
 
            std::cout << "Angle (in degrees) = ";
            std::cin.clear();
            std::cin.sync();
            std::cin >> a;
            i = std::cin.rdstate();
        }
        while (i & std::ios::failbit);
        
 
    if (s1 = s2 && a == 60)
    {
        cout << "Equilateral triangle\n" ;
    }
    else
    {
    if (a == 90 || (s1 = s2 && a == 45))
        cout << "Right triangle\n";
    else
        cout << "Simple triangle\n";
    }
}
 
void MyTriangle::sss_tr(int s1, int s2, int s3)
{
        std::ios_base::io_state j;
        do
        {   
            std::cout << "First side (only integer) = ";
            std::cin.clear();
            std::cin.sync();
            std::cin >> s1;
 
            std::cout << "Second side (only integer) = ";
            std::cin.clear();
            std::cin.sync();
            std::cin >> s2;
 
            std::cout << "Third side (only integer)  = ";
            std::cin.clear();
            std::cin.sync();
            std::cin >> s3;
            j = std::cin.rdstate();
        }
        while (j & std::ios::failbit);
        
 
    if (s1 = s2 = s3)
    {
        cout << "Equilateral triangle\n" ;
    }
    else
    {
        cout << "Simple triangle\n";
    }
}
0
Форумчанин
Эксперт CЭксперт С++
8194 / 5044 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
22.11.2012, 22:57 5
чтобы при вводе 3 4 5 в случайном порядке он выдал, что треугольник прямоугольный.
При вводе отсортировать по возрастанию
0
83 / 3 / 1
Регистрация: 14.11.2011
Сообщений: 68
22.11.2012, 23:02  [ТС] 6
MrGluck, была такая идея, сделаю тогда ее, сложнее что-то придумать не тот уровень тогда.

но тут проблема другая возникает, не хочет реагировать if на вводимое значение. вводишь вместо 1(последний пример кода) 2, например, а он все равно начинает выполнять первую функцию (по 2 сторонам и углу). я не очень конечно разобрался в этих битовых операциях, но вроде бы все должно логически работать, условию же передается другое значени
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.11.2012, 23:02
Помогаю со студенческими работами здесь

Составить программу которая определяет можно ли построить треугольник с заданными сторонами
Помогите решить простую задачку. Составить программу которая определяет можно ли построить...

Процедуры и функции: написать подпрограмму, определяющую какой треугольник можно построить.
Для заданных вещественных положительных чисел A, B, C написать подпрограмму, определяющую какой...

По трем сторонам, если по ним можно построить треугольник, то определить его тип
Ввести 3 числа. Можно ли построить треугольник с такими сторонами? Если построить треугольник...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru