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

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

Войти
Регистрация
Восстановить пароль
 
Zambal
83 / 3 / 1
Регистрация: 14.11.2011
Сообщений: 68
#1

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

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

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

Если на трёх точках можно построить разносторонний остроугольный треугольник, найти его площадь - C++
Даны координаты трех точек на плоскости. Если они могут быть вершинами разностороннего остроугольного треугольника, вычислите его площадь.

Программа выводит на экран "Да", если треугольник с такими длинами построить можно. - C++
1. С клавиатуры вводится три числа, которые образуют длины сторон треугольника. Программа выводит на экран &quot;Да&quot;, если треугольник с такими...

Даны три положительных числа. Определить, можно ли построить треугольник со сторонами, длины которых равны этим числам. Если возможно, то ответить на - C++
var a,b,c:real; begin write(a,b,c); readln; writeln('ââåäèòå ðàäèóñ òðèóãîëüíèêà') à+â&gt;c â+ñ&gt;a à+ñ&gt;â end. помогите...

Можно ли создать класс, который при вызове деструктора учитывает количество ссылок на него - C++
Короче можно ли сделать класс как в C# или java, чтобы объект удолялся только когда на него никто не ссылается. Желательно варианты без...

Можно ли построить треугольник - C++
1.4. Задача 1. Три отрезка заданы координатами своих концов. Определить, можно ли построить из них треугольник, если - да, то вычислить...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Wolkodav
603 / 456 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
21.11.2012, 23:50 #2
Ну геометрия могу сказать так, короче сумма двух сторон должна быть больше третей, тогда это треугольник, а там равносторонний, то проверяешь равенство сторон, а прямоугольный, теорема пифагора.

Добавлено через 1 минуту
Если я правильно понял условие задачи.
MrGluck
Модератор
Эксперт CЭксперт С++
7210 / 4376 / 638
Регистрация: 29.11.2010
Сообщений: 11,887
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
Модератор
Эксперт CЭксперт С++
7210 / 4376 / 638
Регистрация: 29.11.2010
Сообщений: 11,887
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 сторонам и углу). я не очень конечно разобрался в этих битовых операциях, но вроде бы все должно логически работать, условию же передается другое значени
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.11.2012, 23:02
Привет! Вот еще темы с ответами:

Проверить, можно ли построить треугольник с заданными длинами сторон - C++
Ребят помогите с решением задачи. Задание надо сделать на языке C++ Даны произвольные числа a,b,c. Если нельзя построить треугольник с...

Определить, можно ли построить треугольник с длинами сторон, равным этим числам - C++
1)Даны три положительных числа. Определить, можно ли построить треугольник с длинами сторон, равным этим числам. Если можно, то ответить на...

Введены 3 числа. Определить, можно ли с помощью этих чисел построить треугольник? - C++
очень нужна ваша помощь.помогите решить,пожалуйста!Введены 3 числа. Определить, можно ли с помощью этих чисел построить ...

По длинам сторон определить, можно ли построить треугольник. Нужна блок схема и желательно код - C++
Задача 1. Три отрезка заданы длинами. Определить, можно ли построить из них треугольник, если - да, то вычислить радиус круга, ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
22.11.2012, 23:02
Ответ Создать тему
Опции темы

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