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

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

Восстановить пароль Регистрация
 
Zambal
83 / 3 / 1
Регистрация: 14.11.2011
Сообщений: 68
21.11.2012, 23:15     Создать класс, который определяет можно ли по введенным значениям построить треугольник, и если можно, то какой #1
Создать класс, который определяет можно ли по введенным значениям построить треугольник, и если можно, то какой - прямоугольный или равносторонний).
Значения вводятся с клавиатуры.

Написать программу, демонстрирующую работу с этим классом. Программа должна содержать меню, позволяющее осуществить проверку всех методов класса:
  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";
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.11.2012, 23:15     Создать класс, который определяет можно ли по введенным значениям построить треугольник, и если можно, то какой
Посмотрите здесь:

C++ Определить, можно ли построить треугольник с длинами сторон, равным этим числам
По трем введенным вещественным числам выяснить, можно ли построить треугольник C++
C++ Введены 3 числа. Определить, можно ли с помощью этих чисел построить треугольник?
C++ Даны три положительных числа. Определить, можно ли построить треугольник со сторонами, длины которых равны этим числам. Если возможно, то ответить на
Программа выводит на экран "Да", если треугольник с такими длинами построить можно. C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Wolkodav
 Аватар для Wolkodav
599 / 452 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
21.11.2012, 23:50     Создать класс, который определяет можно ли по введенным значениям построить треугольник, и если можно, то какой #2
Ну геометрия могу сказать так, короче сумма двух сторон должна быть больше третей, тогда это треугольник, а там равносторонний, то проверяешь равенство сторон, а прямоугольный, теорема пифагора.

Добавлено через 1 минуту
Если я правильно понял условие задачи.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4923 / 2666 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
22.11.2012, 00:01     Создать класс, который определяет можно ли по введенным значениям построить треугольник, и если можно, то какой #3
Вот тут есть функция проверки, является ли треуг. Равносторонний обладает равными сторонами (кеп), длина стороны находится по формуле sqrt ( (x2-x1)^2 + (y2-y1)^2 ). Равносторонний имеет скалярное произведение у двух сторон равное 0.
Zambal
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";
    }
}
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4923 / 2666 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
22.11.2012, 22:57     Создать класс, который определяет можно ли по введенным значениям построить треугольник, и если можно, то какой #5
чтобы при вводе 3 4 5 в случайном порядке он выдал, что треугольник прямоугольный.
При вводе отсортировать по возрастанию
Zambal
83 / 3 / 1
Регистрация: 14.11.2011
Сообщений: 68
22.11.2012, 23:02  [ТС]     Создать класс, который определяет можно ли по введенным значениям построить треугольник, и если можно, то какой #6
MrGluck, была такая идея, сделаю тогда ее, сложнее что-то придумать не тот уровень тогда.

но тут проблема другая возникает, не хочет реагировать if на вводимое значение. вводишь вместо 1(последний пример кода) 2, например, а он все равно начинает выполнять первую функцию (по 2 сторонам и углу). я не очень конечно разобрался в этих битовых операциях, но вроде бы все должно логически работать, условию же передается другое значени
Yandex
Объявления
22.11.2012, 23:02     Создать класс, который определяет можно ли по введенным значениям построить треугольник, и если можно, то какой
Ответ Создать тему
Опции темы

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