Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 46, средняя оценка - 4.72
Wroker
0 / 0 / 1
Регистрация: 13.11.2012
Сообщений: 34
#1

Определить вид треугольника по координатам вершин - C++

17.12.2012, 10:36. Просмотров 6931. Ответов 11
Метки нет (Все метки)

Задача 2 : Задача на строки. Даны координаты трех точек на плоскости. Если они могут быть вершинами треугольника, определите его вид( разносторонний, равнобедренный, равносторонний). Вычислить длины его высот и напечатайте их в порядке убывания.

Вообщем.. Первую задачу вообще не знаю как делать, но повторой кое что есть..

Не совсем понятно, как нужно высоты вычислить.. и как вывести в порядке убывания!?
2 :
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
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main() {
 
    int a = rand(), b = rand(), c = rand();
    system("echo Вводим стороны");
    cin>>a>>b>>c;
    
 
    if (a < b + c && b < a + c && c < a + b) {
        if (a == b && b == c)
        system("echo Равносторонний");
          
        else 
             if (a == b || b == c || a == c)
             system("echo Равнобедренный");
               
        else
         system("echo Разносторонний");
            
    }
    else
    system("echo не существует"); 
    
 
   
    system("pause");
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.12.2012, 10:36
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Определить вид треугольника по координатам вершин (C++):

Определить процедуру вычисления площади треугольника по координатам его вершин
Даны натуральное число n, действительные числа x1, y1, x2, y2,..., xn, yn....

Определить процедуру вычисления площади треугольника по координатам его вершин
Даны натуральное число n, действительные числа x1, y1, x2, y2,…, xn,yn. Найти...

Вычисление периметра треугольника по заданным координатам вершин
Добрый день, по такому условию &quot; Составить программу, которая вычисляет...

По заданным координатам вершин треугольника найти стороны и площадь
По заданным координатам вершин треугольника найти стороны и площадь.

По введенным координатам вершин треугольника найти длину медианы
Нужно найти длину медианы, вводятся координаты вершин треугольника

Вычислить площадь и периметр треугольника по координатам трех вершин
Вычислить площадь и периметр треугольника по координатам трех вершин. Известны...

11
v.a.l.i.d
416 / 381 / 113
Регистрация: 21.09.2012
Сообщений: 913
17.12.2012, 11:30 #2
А вторая задача кажется тоже не правильно сделана. Надо координаты трех точек вводить [x, y]. А у вас длины сторон.)
Если срочно надо то попробую переделать
0
Wroker
0 / 0 / 1
Регистрация: 13.11.2012
Сообщений: 34
17.12.2012, 11:36  [ТС] #3
Цитата Сообщение от v.a.l.i.d Посмотреть сообщение
А вторая задача кажется тоже не правильно сделана. Надо координаты трех точек вводить [x, y]. А у вас длины сторон.)
Если срочно надо то попробую переделать
Буду очень признателен, если сделаете..А с первой задачей помочь сможете?
0
v.a.l.i.d
416 / 381 / 113
Регистрация: 21.09.2012
Сообщений: 913
17.12.2012, 12:00 #4
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
#include <iostream>
#include <cmath>
using namespace std;
 
// точка
struct Point
{
    int x;
    int y;
};
 
// площадь треугольника
double Square(double a, double b, double c)
{
    double p = (a+b+c) / 2.0;
    return sqrt(p*(p-a)*(p-b)*(p-c));
}
 
 
int main()
{
    setlocale(LC_ALL, "Russian");
 
    Point A, B, C;          // координаты трех точек
    double l1, l2, l3;      // длины сторон треугольника
 
    cout << "Введите координаты первой точки [x, y]:  ";    cin >> A.x >> A.y;
    cout << "Введите координаты второй точки [x, y]:  ";    cin >> B.x >> B.y;
    cout << "Введите координаты третьей точки [x, y]: ";    cin >> C.x >> C.y;
 
    l1 = sqrt(double((B.x-A.x)*(B.x-A.x) + (B.y-A.y)*(B.y-A.y)));
    l2 = sqrt(double((C.x-A.x)*(C.x-A.x) + (C.y-A.y)*(C.y-A.y)));
    l3 = sqrt(double((C.x-B.x)*(C.x-B.x) + (C.y-B.y)*(C.y-B.y)));
 
    if (l1<l2+l3 && l2<l1+l3 && l3<l1+l2)   // если треугольник
    {
        if (l1==l2 && l2==l3) cout << "Равносторонний" << endl;
        else if (l1==l2 || l1==l3 || l2==l3) cout << "Равнобедренный" << endl;
        else cout << "Разносторонний" << endl;
 
        double S = Square(l1, l2, l3);                  // площадь
        double arr_h[3] = {2*S/l1, 2*S/l2, 2*S/l3};     // высоты треугольника
        
        // упорядочить высоты в порядке возрастания
        for (int i=0; i<2; i++)
            for (int j=i+1; j<3; j++)
                if (arr_h[j] < arr_h[i])
                {
                    double tmp = arr_h[j];
                    arr_h[j] = arr_h[i];
                    arr_h[i] = tmp;
                }
 
        // печать высот в порядке возрастания
        for (int i=0; i<3; i++)
            cout << arr_h[i] << " ";
        cout << endl;
 
    }
    else
        cout << "Не треугольник" << endl;
 
 
    system("pause");
    return 0;                   
}
1
Wroker
0 / 0 / 1
Регистрация: 13.11.2012
Сообщений: 34
17.12.2012, 12:15  [ТС] #5
Цитата Сообщение от v.a.l.i.d Посмотреть сообщение
..
Не совсем понятно..
как я понимаю если вводим все точки одинакого то это равносторонний, так?
0
v.a.l.i.d
416 / 381 / 113
Регистрация: 21.09.2012
Сообщений: 913
17.12.2012, 13:35 #6
Если ввести все точки одинаково, то напишет что "Не треугольник". Все правильно
0
Миниатюры
Определить вид треугольника по координатам вершин   Определить вид треугольника по координатам вершин  
Wroker
0 / 0 / 1
Регистрация: 13.11.2012
Сообщений: 34
17.12.2012, 13:58  [ТС] #7
Цитата Сообщение от v.a.l.i.d Посмотреть сообщение
Если ввести все точки одинаково, то напишет что "Не треугольник". Все правильно
Объесни вот это вот if (l1==l2 && l2==l3) cout << "Равносторонний" << endl;

т.е получается l1 = вводим две точки допстим (2 2)
l2 = вводим две точки (3 1)
получается l1== l2 ? и получается тогда вводим третью :
l3 = вводим две точки (1 3)
l2== l3 ? По сути должны быть стороны равны? или нет? Просто пишет, что это не треугольник.
0
v.a.l.i.d
416 / 381 / 113
Регистрация: 21.09.2012
Сообщений: 913
17.12.2012, 14:24 #8
Цитата Сообщение от Wroker Посмотреть сообщение
Объясни вот это вот if (l1==l2 && l2==l3) cout << "Равносторонний" << endl;
l1, l2 и l3 это длины сторон треугольника. Они рассчитываются через точки вершин по теореме Пифагора(квадрат гипотенузы равен сумме квадратов катетов), вот так:
C++
1
2
3
    l1 = sqrt(double((B.x-A.x)*(B.x-A.x) + (B.y-A.y)*(B.y-A.y)));
    l2 = sqrt(double((C.x-A.x)*(C.x-A.x) + (C.y-A.y)*(C.y-A.y)));
    l3 = sqrt(double((C.x-B.x)*(C.x-B.x) + (C.y-B.y)*(C.y-B.y)));
A, B и C - это точки на плоскости:
C++
1
2
3
4
5
6
7
struct Point
{
    int x;
    int y;
};
...
Point A, B, C;
Если все стороны равны l1==l2 && l2==l3 то тогда это равносторонний треугольник

Вообщем если есть две точки на плоскости A и B, то расстояние между ними можно посчитать таким способом
C++
1
 l1 = sqrt(double((B.x-A.x)*(B.x-A.x) + (B.y-A.y)*(B.y-A.y)));
1
Wroker
0 / 0 / 1
Регистрация: 13.11.2012
Сообщений: 34
17.12.2012, 14:32  [ТС] #9
Цитата Сообщение от v.a.l.i.d Посмотреть сообщение
l1, l2 и l3 это длины сторон треугольника. Они рассчитываются через точки вершин по теореме Пифагора(квадрат гипотенузы равен сумме квадратов катетов), вот так:
Спасибо вам, что мне все наглядно объяснили можно сказать.. Но равносторонний треугольник я все равно по точкам построить не получается, пишет что это не треугольник..
0
v.a.l.i.d
416 / 381 / 113
Регистрация: 21.09.2012
Сообщений: 913
17.12.2012, 14:51 #10
Где-то ошибка. Сейчас пробовал вводить координаты для равностороннего треугольника, но печатает "Равнобедренный". Буду искать
0
v.a.l.i.d
416 / 381 / 113
Регистрация: 21.09.2012
Сообщений: 913
17.12.2012, 14:59 #11
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 "stdafx.h"
#include "iostream"
using namespace std;
 
// точка
struct Point
{
    double x;
    double y;
};
 
// площадь треугольника
double Square(double a, double b, double c)
{
    double p = (a+b+c) / 2.0;
    return sqrt(p*(p-a)*(p-b)*(p-c));
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "Russian");
 
    const double epsilon = 0.0000001;
    Point A, B, C;              // координаты трех точек
    double l1, l2, l3;          // длины сторон треугольника
 
    cout << "Введите координаты первой точки [x, y]:  ";    cin >> A.x >> A.y;
    cout << "Введите координаты второй точки [x, y]:  ";    cin >> B.x >> B.y;
    cout << "Введите координаты третьей точки [x, y]: ";    cin >> C.x >> C.y;
 
    l1 = sqrt(abs((B.x-A.x)*(B.x-A.x)) + abs((B.y-A.y)*(B.y-A.y)));
    l2 = sqrt(abs((C.x-A.x)*(C.x-A.x)) + abs((C.y-A.y)*(C.y-A.y)));
    l3 = sqrt(abs((C.x-B.x)*(C.x-B.x)) + abs((C.y-B.y)*(C.y-B.y)));
 
    cout << "l1 = " << l1 << endl;
    cout << "l2 = " << l2 << endl;
    cout << "l3 = " << l3 << endl;
 
    if (l1<l2+l3 && l2<l1+l3 && l3<l1+l2)   // если треугольник
    {
        if (abs(l1-l2)<=epsilon && abs(l2-l3)<=epsilon) cout << "Равносторонний" << endl;
        else if (abs(l1-l2)<=epsilon || abs(l1-l3)<=epsilon || abs(l2-l3)<=epsilon) cout << "Равнобедренный" << endl;
        else cout << "Разносторонний" << endl;
 
        double S = Square(l1, l2, l3);                  // площадь
        double arr_h[3] = {2*S/l1, 2*S/l2, 2*S/l3};     // высоты треугольника
        
        // упорядочить высоты в порядке возрастания
        for (int i=0; i<2; i++)
            for (int j=i+1; j<3; j++)
                if (arr_h[j] < arr_h[i])
                {
                    double tmp = arr_h[j];
                    arr_h[j] = arr_h[i];
                    arr_h[i] = tmp;
                }
 
        // печать высот в порядке возрастания
        for (int i=0; i<3; i++)
            cout << arr_h[i] << " ";
        cout << endl;
 
    }
    else
        cout << "Не треугольник" << endl;
 
    
    cout << endl;
    system("pause");
    return 0;               
}
35, 36 и 37 строчку можно убрать. это просто для проверки длин сторон
1
Миниатюры
Определить вид треугольника по координатам вершин  
vizapromo
18 / 11 / 6
Регистрация: 04.12.2012
Сообщений: 51
17.12.2012, 20:23 #12
Вводятся длины сторон треугольника и вывести его тип, а если такого треугольника не существует, то сообщить об этом. Я правильно понял? Вот моя версия:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <clocale>
using namespace std;
int main ()
{
    setlocale(LC_ALL, "rus");
    int a , b , c ;
    cin >> a >> b >> c ;
    if (a + b <= c || a + c <= b || c + b <= a)
        cout << "такого треугольника не существует" << endl;
    else if ((c > a && c > b && (a * a + b * b) == c * c) || (a > b && a > c && a * a == (b * b + c * c)) || (b * b == (c * c + a * a)))
        cout << "Прямоугольный" << endl;
    else if ((c > max(a , b) && c * c > a * a + b * b) || (a > max(c , b) && a * a > b * b + c * c) || (b * b > c * c + a * a))
        cout << "Тупоугольный" << endl;
    else
        cout << "Остроугольный" << endl;
    return 0;
}
0
17.12.2012, 20:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.12.2012, 20:23
Привет! Вот еще темы с решениями:

Составить функцию вычисления площади треугольника по координатам вершин
Ребят, спасайте, завтра на экзамен нужно принести эту задачку.. Не знаю что...

Вычислить периметр и площадь треугольника по заданным координатам его вершин
Помогите решить задачу! Вычислить периметр и площадь треугольника по заданным...

По координатам трех вершин треугольника найти его периметр и площадь
1) Даны координаты трех вершин треугольника (x1, y1), (x2, y2), (x3, y3)....

Описать функцию находящую периметр треугольника по координатам его вершин
Всем привет, нужно помощь Описать функцию Perim(Ax,Ay,Bx,By,Cx,Cy)...


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

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

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