Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.71/21: Рейтинг темы: голосов - 21, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 02.11.2014
Сообщений: 25
1

По заданным точкам двух треугольников определить подобны ли они

02.11.2014, 22:21. Показов 4318. Ответов 29
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток, господа.Возникла проблема с этой задачей
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.11.2014, 22:21
Ответы с готовыми решениями:

Вводятся длины сторон двух треугольников. Определить, являются ли они подобными
Помогите решить! Вводятся длины сторон двух треугольников. Определить, являются ли они подобными.

Вычислить площади двух треугольников, и определить, какой из треугольников имеет большую площадь
Два треугольника заданные координатами своих вершин a, b, c. Вычислить площади треугольников,...

Написать программу для построения двух кривых по заданным точкам
Доброго времени суток! У меня такая задачка Написать программу, для построения двух кривых по...

По заданным катетам двух прямоугольных треугольников проверить их подобие
написать программу которая по заданным катетам двух прямоугольных треугольников проверяет их...

29
4820 / 2286 / 287
Регистрация: 01.03.2013
Сообщений: 5,970
Записей в блоге: 29
02.11.2014, 22:43 2
И в чем же проблема? В математике, в С++ или вообще "дайте все и сразу"?
0
0 / 0 / 0
Регистрация: 02.11.2014
Сообщений: 25
02.11.2014, 22:50  [ТС] 3
Ну по идее нельзя же измерить углы в с++,так что подобие нужно будет определять по пропорциональностям сторон в этом треугольнике.Длину стороны мы можем измерить,отняв начало от конца,а далее у меня ступор
0
4820 / 2286 / 287
Регистрация: 01.03.2013
Сообщений: 5,970
Записей в блоге: 29
02.11.2014, 22:53 4
Не верьте - в С++ можно все И через углы, и через стороны. Хотите через стороны - начинайте с кода вычисления их длин.
0
0 / 0 / 0
Регистрация: 02.11.2014
Сообщений: 25
02.11.2014, 23:08  [ТС] 5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
using namespace std;
 
int main()
{
    int A1, A2, B1, B2, C1, C2, D1, D2, E1, E2, F1, F2, a, b, c, d, e, f;
    cout << " Vuvedete koordinati A, B, C " ;
    cin << A1 << A2 << B1 << B2 << C1 << C2;
    cout << " Vuvedete koordinati D, E, F " ;
    cin << D1 << D2 << E1 << E2 << F1 << F2;
    a = sqrt(pow(B1 - A1, 2) + pow(B2 - A2, 2));
    b = sqrt(pow(C1 - B1, 2) + pow(C2 - B2, 2));
    c = sqrt(pow(C1 - A1, 2) + pow(C2 - A2, 2));
Длину вычислил,подскажите пожалуйста,что дальше?
0
4820 / 2286 / 287
Регистрация: 01.03.2013
Сообщений: 5,970
Записей в блоге: 29
02.11.2014, 23:12 6
Хорошо. Теперь у вас есть 3 длины сторон одного треугольника и 3 другого. Как предположить, какая сторона первого какой стороне второго соответствует?
1
343 / 343 / 331
Регистрация: 02.10.2014
Сообщений: 666
02.11.2014, 23:12 7
Лучший ответ Сообщение было отмечено Foody как решение

Решение

Важен порядок ввода точек
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
#include <iostream>
#include <cmath>
 
using namespace std;
 
int main(){
    
    double x[2][3];
    double y[2][3];
    
    for (int i = 0; i < 2; ++i)
        for (int j = 0; j < 3; ++j){
            cout << "x[" << i + 1 << "][" << j + 1 << "] = ";
            cin >> x[i][j];
            cout << "y[" << i + 1 << "][" << j + 1 << "] = ";
            cin >> y[i][j];
        }
        
    double a[2][3];
    
    for (int i = 0; i < 2; ++i)
        for (int j = 0; j < 3; ++j){
            double dx = x[i][(j % 3)] - x[i][(j + 1) % 3];
            double dy = y[i][(j % 3)] - y[i][(j + 1) % 3];
            a[i][j] = sqrt (dx * dx + dy * dy);
        }
    
    double k = a[0][0] / a[1][0];
    int b = 0;
    const double eps = 0.000001;
    for (int i = 1; i < 3; ++i)
        if (a[0][i] / a[1][i] - k < eps)
            ++b;
            
    if (b == 2)
        cout << "Òðåóãîëüíèêè ïîäîáíû!" << endl;
}
1
4820 / 2286 / 287
Регистрация: 01.03.2013
Сообщений: 5,970
Записей в блоге: 29
02.11.2014, 23:13 8
Foody, Только для скурта и пова нужен мат, и длины сторон могут быть не целые.
0
0 / 0 / 0
Регистрация: 02.11.2014
Сообщений: 25
02.11.2014, 23:16  [ТС] 9
изменил int на double, добавил cmath.По идее меньшая - наименьшей,большая - наибольшей
0
4820 / 2286 / 287
Регистрация: 01.03.2013
Сообщений: 5,970
Записей в блоге: 29
02.11.2014, 23:18 10
Да вы все знаете, оказывается А что ж тогда ждете от форума - давайте полный код.
0
0 / 0 / 0
Регистрация: 02.11.2014
Сообщений: 25
02.11.2014, 23:22  [ТС] 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
#include <iostream>
#include <cmath>
using namespace std;
 
int main()
{
    double A1, A2, B1, B2, C1, C2, D1, D2, E1, E2, F1, F2, a, b, c, d, e, f;
    cout << " Vuvedete koordinati A, B, C " ;
    cin << A1 << A2 << B1 << B2 << C1 << C2;
    cout << " Vuvedete koordinati D, E, F " ;
    cin << D1 << D2 << E1 << E2 << F1 << F2;
    a = sqrt(pow(B1 - A1, 2) + pow(B2 - A2, 2));
    b = sqrt(pow(C1 - B1, 2) + pow(C2 - B2, 2));
    c = sqrt(pow(C1 - A1, 2) + pow(C2 - A2, 2));
    d = sqrt(pow(E1 - D1, 2) + pow(E2 - D2, 2));
    e = sqrt(pow(F1 - E1, 2) + pow(F2 - C2, 2));
    f = sqrt(pow(F1 - D1, 2) + pow(F2 - D2, 2));
    if (a / d == b / e == c / f)
    {
        cout << " Treugolniki podobni " ;
    }
    return 0;
}
Слишком просто как-то все,уверен что неверно
0
4820 / 2286 / 287
Регистрация: 01.03.2013
Сообщений: 5,970
Записей в блоге: 29
02.11.2014, 23:25 12
Правильно уверены. Я вот не знаю всех этих современных стандартов С и С++ и не могу предположить, как компилятор воспримет
C++
1
if (a / d == b / e == c / f)
, поэтому просто такое не пишу. А еще, слово равно, оно такое строгое..... Вот как вы считаете, например, пи = 3.13926 или нет?
1
0 / 0 / 0
Регистрация: 02.11.2014
Сообщений: 25
02.11.2014, 23:27  [ТС] 13
warning C4805: ==: небезопасное смешение типа 'bool' и типа 'double' в операции
Вот что мне пишет компилятор. Пи - число бесконечное
0
4820 / 2286 / 287
Регистрация: 01.03.2013
Сообщений: 5,970
Записей в блоге: 29
02.11.2014, 23:29 14
Ну и давайте, исправляйте ваш код с учетом этих открытий, не надо тривиальщину сюда писать
0
0 / 0 / 0
Регистрация: 02.11.2014
Сообщений: 25
02.11.2014, 23:36  [ТС] 15
К сожалению мне это совсем ничего не открыло,я все также никак не могу понять что же мне надо исправить

Добавлено через 3 минуты
Не могли бы вы разъяснить на что мне исправить,мои мысли в тупике
0
4820 / 2286 / 287
Регистрация: 01.03.2013
Сообщений: 5,970
Записей в блоге: 29
02.11.2014, 23:42 16
1. синтаксис в условии проверки
2. проверку на точное равенство
3. вы что-то говорили о большей и меньшей сторонах, но эти ваши мысли не нашли отражение в коде.
0
0 / 0 / 0
Регистрация: 02.11.2014
Сообщений: 25
03.11.2014, 00:01  [ТС] 17
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
#include <iostream>
#include <cmath>
using namespace std;
 
int main()
{
    double A1, A2, B1, B2, C1, C2, D1, D2, E1, E2, F1, F2, a, b, c, d, e, f,;
    int min1, min2, max1, max2,
    cout << " Vuvedete koordinati A, B, C " ;
    cin >> A1 >> A2 >> B1 >> B2 >> C1 >> C2;
    cout << " Vuvedete koordinati D, E, F " ;
    cin >> D1 >> D2 >> E1 >> E2 >> F1 >> F2;
    a = sqrt(pow(B1 - A1, 2) + pow(B2 - A2, 2));
    b = sqrt(pow(C1 - B1, 2) + pow(C2 - B2, 2));
    c = sqrt(pow(C1 - A1, 2) + pow(C2 - A2, 2));
    d = sqrt(pow(E1 - D1, 2) + pow(E2 - D2, 2));
    e = sqrt(pow(F1 - E1, 2) + pow(F2 - C2, 2));
    f = sqrt(pow(F1 - D1, 2) + pow(F2 - D2, 2));
    max1 = 0;
    min1 = 0;
    if (a < b && a < c) min1 = a;
    else (b < a && b < c) min1 = b;
    else min1 = c ;
    if (a > b && a > c) max1 = a;
    else (b > a && b > c) max1 = b;
    else max1 = c;
    if  (d < e && d < f) min2 = d;
    else (e < d && e < f) min2 = e;
    else min2 = f;
    if ( d > e && d > f ) max2 = d;
    else ( e > d && e > f) max2 = e;
    else max2 = f;
 
    
    return 0;
}
Синтаксис в условии проверки заменить на меньше или равно?

Добавлено через 2 минуты
Понимаете,у меня час до конца сдачи остался,боюсь не успеть
0
4820 / 2286 / 287
Регистрация: 01.03.2013
Сообщений: 5,970
Записей в блоге: 29
03.11.2014, 00:10 18
Уже ближе к истине, хотя логику максимумов/минимумов не проверял.
У вас как в голливудском экшене - час до сдачи: успеть все! Тогда поторопитесь, у вас мало времени (С) "Достучаться до небес"
0
0 / 0 / 0
Регистрация: 02.11.2014
Сообщений: 25
03.11.2014, 00:22  [ТС] 19
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
#include <iostream>
#include <cmath>
using namespace std;
 
int main()
{
    double A1, A2, B1, B2, C1, C2, D1, D2, E1, E2, F1, F2, a, b, c, d, e, f, min1, min2, max1, max2;
    cout << " Vuvedete koordinati A, B, C " ;
    cin >> A1 >> A2 >> B1 >> B2 >> C1 >> C2;
    cout << " Vuvedete koordinati D, E, F " ;
    cin >> D1 >> D2 >> E1 >> E2 >> F1 >> F2;
    a = sqrt(pow(B1 - A1, 2) + pow(B2 - A2, 2));
    b = sqrt(pow(C1 - B1, 2) + pow(C2 - B2, 2));
    c = sqrt(pow(C1 - A1, 2) + pow(C2 - A2, 2));
    d = sqrt(pow(E1 - D1, 2) + pow(E2 - D2, 2));
    e = sqrt(pow(F1 - E1, 2) + pow(F2 - C2, 2));
    f = sqrt(pow(F1 - D1, 2) + pow(F2 - D2, 2));
    max1 = 0;
    min1 = 0;
    if (a < b && a < c) min1 = a;
    if  (b < a && b < c) min1 = b;
    else min1 = c ;
    if (a > b && a > c) max1 = a;
    if  (b > a && b > c) max1 = b;
    else max1 = c;
    if  (d < e && d < f) min2 = d;
    if  (e < d && e < f) min2 = e;
    else min2 = f;
    if ( d > e && d > f ) max2 = d;
    if  ( e > d && e > f) max2 = e;
    else max2 = f;
    if ( min1 / min2 == max1 / max2)
    cout << " True ";
    else
    cout << " False " ;
 
 
    
    return 0;
}
Все же где-то у меня ошибка.Должно выдавать тру,а выдает фолс...
0
4820 / 2286 / 287
Регистрация: 01.03.2013
Сообщений: 5,970
Записей в блоге: 29
03.11.2014, 00:26 20
Выведите на экран значения min1 / min2 и max1 / max2, посмотрите на них глазами. И да, вы только 2 пары сторон решили сравнивать, вам этого достаточно?
0
03.11.2014, 00:26
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.11.2014, 00:26
Помогаю со студенческими работами здесь

По заданным сторонам двух треугольников проверить их на равновеликость (равенство площадей)
Написать программу, которая по заданным сторонам двух треугольников проверяет их на равновеликость...

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

По заданным числам определить, дружественны ли они
Назовем два числа дружными, если они состоят из одинаковых множеств цифр (вне зависимости от их...

Определить, какой из треугольников, построенных по заданным вершинам, имеет наибольшую площадь
Сегодня в институте дали задание по дисциплине &quot;Информатика и программирование&quot; но к нашему же...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru