С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
Foody
0 / 0 / 0
Регистрация: 02.11.2014
Сообщений: 25
1

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

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

Доброго времени суток, господа.Возникла проблема с этой задачей
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.11.2014, 22:21
Ответы с готовыми решениями:

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

По заданным целочисленным координатам на плоскости определить какую геометрическую фигуру они образуют
По заданным целочисленным координатам четырех точек на плоскости определить ,...

Составить треугольники по точкам и найти площади этих треугольников
Дано N количество точек. Задать координаты этих точек, составить треугольники и...

Определить сумму элементов каждого из двух массивов, а также насколько они различаются
Создать два массива: каждый из 5 случайных целых чисел из отрезка . Вывести...

Построение графика по заданным точкам
Доброго времени суток! Очень нужна помощь: вывести на экран график по заданным...

29
_Ivana
3237 / 1870 / 235
Регистрация: 01.03.2013
Сообщений: 5,111
Записей в блоге: 5
02.11.2014, 22:43 2
И в чем же проблема? В математике, в С++ или вообще "дайте все и сразу"?
0
Foody
0 / 0 / 0
Регистрация: 02.11.2014
Сообщений: 25
02.11.2014, 22:50  [ТС] 3
Ну по идее нельзя же измерить углы в с++,так что подобие нужно будет определять по пропорциональностям сторон в этом треугольнике.Длину стороны мы можем измерить,отняв начало от конца,а далее у меня ступор
0
_Ivana
3237 / 1870 / 235
Регистрация: 01.03.2013
Сообщений: 5,111
Записей в блоге: 5
02.11.2014, 22:53 4
Не верьте - в С++ можно все И через углы, и через стороны. Хотите через стороны - начинайте с кода вычисления их длин.
0
Foody
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
_Ivana
3237 / 1870 / 235
Регистрация: 01.03.2013
Сообщений: 5,111
Записей в блоге: 5
02.11.2014, 23:12 6
Хорошо. Теперь у вас есть 3 длины сторон одного треугольника и 3 другого. Как предположить, какая сторона первого какой стороне второго соответствует?
1
D_in_practice
332 / 332 / 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
_Ivana
3237 / 1870 / 235
Регистрация: 01.03.2013
Сообщений: 5,111
Записей в блоге: 5
02.11.2014, 23:13 8
Foody, Только для скурта и пова нужен мат, и длины сторон могут быть не целые.
0
Foody
0 / 0 / 0
Регистрация: 02.11.2014
Сообщений: 25
02.11.2014, 23:16  [ТС] 9
изменил int на double, добавил cmath.По идее меньшая - наименьшей,большая - наибольшей
0
_Ivana
3237 / 1870 / 235
Регистрация: 01.03.2013
Сообщений: 5,111
Записей в блоге: 5
02.11.2014, 23:18 10
Да вы все знаете, оказывается А что ж тогда ждете от форума - давайте полный код.
0
Foody
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
_Ivana
3237 / 1870 / 235
Регистрация: 01.03.2013
Сообщений: 5,111
Записей в блоге: 5
02.11.2014, 23:25 12
Правильно уверены. Я вот не знаю всех этих современных стандартов С и С++ и не могу предположить, как компилятор воспримет
C++
1
if (a / d == b / e == c / f)
, поэтому просто такое не пишу. А еще, слово равно, оно такое строгое..... Вот как вы считаете, например, пи = 3.13926 или нет?
1
Foody
0 / 0 / 0
Регистрация: 02.11.2014
Сообщений: 25
02.11.2014, 23:27  [ТС] 13
warning C4805: ==: небезопасное смешение типа 'bool' и типа 'double' в операции
Вот что мне пишет компилятор. Пи - число бесконечное
0
_Ivana
3237 / 1870 / 235
Регистрация: 01.03.2013
Сообщений: 5,111
Записей в блоге: 5
02.11.2014, 23:29 14
Ну и давайте, исправляйте ваш код с учетом этих открытий, не надо тривиальщину сюда писать
0
Foody
0 / 0 / 0
Регистрация: 02.11.2014
Сообщений: 25
02.11.2014, 23:36  [ТС] 15
К сожалению мне это совсем ничего не открыло,я все также никак не могу понять что же мне надо исправить

Добавлено через 3 минуты
Не могли бы вы разъяснить на что мне исправить,мои мысли в тупике
0
_Ivana
3237 / 1870 / 235
Регистрация: 01.03.2013
Сообщений: 5,111
Записей в блоге: 5
02.11.2014, 23:42 16
1. синтаксис в условии проверки
2. проверку на точное равенство
3. вы что-то говорили о большей и меньшей сторонах, но эти ваши мысли не нашли отражение в коде.
0
Foody
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
_Ivana
3237 / 1870 / 235
Регистрация: 01.03.2013
Сообщений: 5,111
Записей в блоге: 5
03.11.2014, 00:10 18
Уже ближе к истине, хотя логику максимумов/минимумов не проверял.
У вас как в голливудском экшене - час до сдачи: успеть все! Тогда поторопитесь, у вас мало времени (С) "Достучаться до небес"
0
Foody
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
_Ivana
3237 / 1870 / 235
Регистрация: 01.03.2013
Сообщений: 5,111
Записей в блоге: 5
03.11.2014, 00:26 20
Выведите на экран значения min1 / min2 и max1 / max2, посмотрите на них глазами. И да, вы только 2 пары сторон решили сравнивать, вам этого достаточно?
0
03.11.2014, 00:26
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.11.2014, 00:26

Определить площади двух треугольников, заданных длинами сторон (через клавиатуру), по формуле Герона. Полупериметр вычислять с помощью функции
Привет всем, ребят кому не сложно помогите,написать програму на Си++ для...

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

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


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

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

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