Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
0 / 0 / 0
Регистрация: 13.02.2019
Сообщений: 22
1

Создать функцию, определяющую расстояние между двумя точками по координатам (по желанию, используйте структуры)

13.02.2019, 22:38. Показов 2325. Ответов 10
Метки нет (Все метки)

Создать функцию, определяющую расстояние между двумя точками по координатам (по желанию, используйте структуры) и функцию, определяющую, что тре-
угольник является прямоугольным. Дано множество точек на плоскости (их ко-
ординаты). Определить, сколько прямоугольных треугольников можно создать из
этого набора точек.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.02.2019, 22:38
Ответы с готовыми решениями:

Подпрограмма: Создать функцию, определяющую расстояние между двумя точками по координатам...
Создать функцию, определяющую расстояние между двумя точками по координатам(пожеланию,используйте...

Написать программу, вычисляющую расстояние между двумя точками по заданным координатам
Написать программу, вычисляющую расстояние между двумя точками по заданным координатам.

Создайте программу которая рассчитывает расстояние между двумя точками по их декартовым координатам в пространстве
Создайте программу которая рассчитывает расстояние между двумя точками по их декартовым координатам...

Написать Функцию, определяющую расстояние между точками
Здравствуйте.Нужна помощь.Задание решил, но пару пунктов не понял. Собственное вот задание:...

10
1473 / 937 / 810
Регистрация: 30.04.2016
Сообщений: 3,255
14.02.2019, 00:00 2
sergeevna666, здравствуйте! Вот решение:

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
#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
#define eps 0.00000001
 
    using namespace std;
 
double distance(int x1, int y1, int x2, int y2) {
    return sqrt(pow(x2 - x1, 2) + pow(y2 - y1, 2));
}
 
bool is_right_triangle(int x1, int y1, int x2, int y2, int x3, int y3) {
    if ( abs( (pow(distance(x1, y1, x2, y2), 2) + pow(distance(x1, y1, x3, y3), 2) ) - pow(distance(x2, y2, x3, y3), 2) < eps) ||
         abs( (pow(distance(x2, y2, x1, y1), 2) + pow(distance(x2, y2, x3, y3), 2) ) - pow(distance(x1, y1, x3, y3), 2) < eps) ||
         abs( (pow(distance(x3, y3, x1, y1), 2) + pow(distance(x3, y3, x2, y2), 2) ) - pow(distance(x1, y1, x2, y2), 2) < eps)) {
        return true;
    }
    return false;
}
 
int main() {
    int n, counter;
    vector<int> v(3);
    struct Point {
        int x;
        int y;
    };
    cout << "Enter a number of points:\n";
    cout << "n = ";
    cin >> n;
    Point* obj = new Point[n];
    cout << "Enter point coords:\n";
    for (int i = 0; i < n; i++) {
        cout << i + 1 << ":\n";
        cout << "x" << i + 1 << " = ";
        cin >> obj[i].x;
        cout << "y" << i + 1 << " = ";
        cin >> obj[i].y;
    }
    cout << "Output of the program:\n";
    cout << "Found points:\n";
    cout.precision(2);
    counter = 0;
    for (int k = 0; k < n; k++) {
        for (int i = 0; i < n; i++) {
             for (int j = 0; j < n; j++) {
                if (k != i && i != j && j != k) {
                    v[0] = k;
                    v[1] = i;
                    v[2] = j;
                    if (is_sorted(v.begin(), v.end())) {
                        if (is_right_triangle(obj[v[0]].x, obj[v[0]].y, obj[v[1]].x, obj[v[1]].y, obj[v[2]].x, obj[v[2]].y)) {
                            counter++;
                            cout << counter << " => ";
                            cout << fixed << "{(" << obj[v[0]].x << "," << obj[v[0]].y << ")" 
                                 << fixed << "(" << obj[v[1]].x << "," << obj[v[1]].y << ")" 
                                 << fixed << "(" << obj[v[2]].x << "," << obj[v[2]].y << ")}" << "\n"; 
                        }
                    }
                }
            }
        }
    }
    cout << "Output if the program: " << counter << "\n";
    delete [] obj;
    return 0;
}
0
0 / 0 / 0
Регистрация: 13.02.2019
Сообщений: 22
14.02.2019, 10:31  [ТС] 3
Можно написать комментарии?
0
1473 / 937 / 810
Регистрация: 30.04.2016
Сообщений: 3,255
14.02.2019, 10:40 4
sergeevna666, да, вот код с комментариями:

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
#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
#define eps 0.00000001 //Задаем точность для проверки, что треугольник является прямоугольным (сравнение вещественных чисел)
 
    using namespace std;
 
double distance(int x1, int y1, int x2, int y2) {  //Функция вычисления расстояния между двумя точками
    return sqrt(pow(x2 - x1, 2) + pow(y2 - y1, 2));
}
 
bool is_right_triangle(int x1, int y1, int x2, int y2, int x3, int y3) { //Функция проверки, что треугольник прямоугольный (по теореме Пифагора)
    if ( abs( (pow(distance(x1, y1, x2, y2), 2) + pow(distance(x1, y1, x3, y3), 2) ) - pow(distance(x2, y2, x3, y3), 2) < eps) ||
         abs( (pow(distance(x2, y2, x1, y1), 2) + pow(distance(x2, y2, x3, y3), 2) ) - pow(distance(x1, y1, x3, y3), 2) < eps) ||
         abs( (pow(distance(x3, y3, x1, y1), 2) + pow(distance(x3, y3, x2, y2), 2) ) - pow(distance(x1, y1, x2, y2), 2) < eps)) {
        return true; //Перебираем прямые углы треугольника и возвращаем true, если он прямоугольный
    }
    return false; //Иначе, возвращаем false
}
 
int main() {
    int n, counter;
    vector<int> v(3); //Объявляем вектор на три переменных
    struct Point { //Объявляем структуру Point(хранит координаты точки)
        int x;
        int y;
    };
    cout << "Enter a number of points:\n";
    cout << "n = ";
    cin >> n; //Вводим количество точек
    Point* obj = new Point[n]; //Создаем объект типа Point на n элементов
    cout << "Enter point coords:\n";
    for (int i = 0; i < n; i++) {
        cout << i + 1 << ":\n";
        cout << "x" << i + 1 << " = ";
        cin >> obj[i].x; //Вводим координату x(целое число)
        cout << "y" << i + 1 << " = ";
        cin >> obj[i].y; //Вводим координату y(целое число)
    }
    cout << "Output of the program:\n";
    cout << "Found points:\n";
    cout.precision(2); //Задаем точность вывода координат найденного треугольника (два знака после запятой)
    counter = 0; //Задаем начальное значение для счетчика подсчета прямоугольных треугольников
    for (int k = 0; k < n; k++) { //Перебираем всевозможные варианты расположения трех точек (без повторов)
        for (int i = 0; i < n; i++) {
             for (int j = 0; j < n; j++) {
                if (k != i && i != j && j != k) {
                    v[0] = k;
                    v[1] = i;
                    v[2] = j;
                    if (is_sorted(v.begin(), v.end())) {
                        if (is_right_triangle(obj[v[0]].x, obj[v[0]].y, obj[v[1]].x, obj[v[1]].y, obj[v[2]].x, obj[v[2]].y)) {
                            counter++; //Если треугольник прямоугольный, увеличиваем счетчик на единицу
                            cout << counter << " => ";
                            cout << fixed << "{(" << obj[v[0]].x << "," << obj[v[0]].y << ")" //Выводим координаты первой найденной точки
                                 << fixed << "(" << obj[v[1]].x << "," << obj[v[1]].y << ")" //Выводим координаты второй найденной точки
                                 << fixed << "(" << obj[v[2]].x << "," << obj[v[2]].y << ")}" << "\n"; //Выводим координаты третьей найденной точки
                        }
                    }
                }
            }
        }
    }
    cout << "Found quantity: " << counter << "\n"; //Выводим найденное число прямоугольных треугольников
    delete [] obj; //Освобождаем память выделенную под объект obj
    return 0;
}
1
0 / 0 / 0
Регистрация: 13.02.2019
Сообщений: 22
14.02.2019, 10:43  [ТС] 5
спасибо!)
0
5953 / 4044 / 2342
Регистрация: 18.12.2017
Сообщений: 12,645
14.02.2019, 14:13 6
Цитата Сообщение от Fixer_84 Посмотреть сообщение
//Вводим координату x(целое число)
//Вводим координату y(целое число)
координаты - не обязательно целые числа
0
1473 / 937 / 810
Регистрация: 30.04.2016
Сообщений: 3,255
14.02.2019, 15:08 7
Yetty, здравствуйте. Спасибо за ваше замечание. Да, я не забыл, просто целые числа удобны для тестирования. Думаю, что поменять на double не такая уж и большая проблема
0
5953 / 4044 / 2342
Регистрация: 18.12.2017
Сообщений: 12,645
14.02.2019, 15:22 8
Fixer_84, ТС ведь сдавать задание нужно, могут быть вопросы. сравнения могут потянуться (кстати проверьте скобки значения abs). для double лучше будет fabs. насчёт тестирования не понятно, что Вы имеете ввиду. если тип double и вводите число без точки, оно не изменится.
0
1473 / 937 / 810
Регистрация: 30.04.2016
Сообщений: 3,255
14.02.2019, 15:29 9
Yetty, я вчера очень уставший был, когда писал программу. Сегодня вечером ее потестирую с вещественными входными данными, но вроде все работало. А разве abs() не подходит для double? Я когда разницу между ними проверял через google находил, что abs() как для целых, так и для вещественных подходит, а fabs() только для вещественных. Разве это не так?
0
5953 / 4044 / 2342
Регистрация: 18.12.2017
Сообщений: 12,645
14.02.2019, 15:37 10
Fixer_84, по вопросу сообщу ЛС. Вы скобки проверили ?
0
1473 / 937 / 810
Регистрация: 30.04.2016
Сообщений: 3,255
14.02.2019, 19:06 11
Yetty, подобная задача прошла все тесты на сайте, но там на входе были целые числа. Сейчас проверить не могу, на работе и пишу с планшета.

Добавлено через 3 часа 22 минуты
sergeevna666, Я жутко извиняюсь. Немного вчера напутал со скобками. Теперь программа работает правильно. Я тестировал. Вот код (координаты - любые числа):

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
/*
Дано множество точек на плоскости (их координаты). Определить, сколько прямоугольных треугольников можно создать из этого набора точек.
*/
 
#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
#define eps 0.00000001
 
    using namespace std;
 
double distance(double x1, double y1, double x2, double y2) {
    return sqrt(pow(x2 - x1, 2) + pow(y2 - y1, 2));
}
 
bool is_right_triangle(double x1, double y1, double x2, double y2, double x3, double y3) {
    if ((fabs(pow(distance(x1, y1, x2, y2), 2) + pow(distance(x1, y1, x3, y3), 2) - pow(distance(x2, y2, x3, y3), 2)) < eps) ||
        (fabs(pow(distance(x2, y2, x1, y1), 2) + pow(distance(x2, y2, x3, y3), 2) - pow(distance(x1, y1, x3, y3), 2)) < eps) ||
        (fabs(pow(distance(x3, y3, x1, y1), 2) + pow(distance(x3, y3, x2, y2), 2) - pow(distance(x1, y1, x2, y2), 2)) < eps)) {
        return true;
    }
    return false;
}
 
int main() {
    int n, counter;
    vector<int> v(3);
    struct Point {
        double x;
        double y;
    };
    cout << "Enter a number of points:\n";
    cout << "n = ";
    cin >> n;
    Point* obj = new Point[n];
    cout << "Enter point coords:\n";
    for (int i = 0; i < n; i++) {
        cout << i + 1 << ":\n";
        cout << "x" << i + 1 << " = ";
        cin >> obj[i].x;
        cout << "y" << i + 1 << " = ";
        cin >> obj[i].y;
    }
    cout << "Output of the program:\n";
    cout << "Found points:\n";
    cout.precision(2);
    counter = 0;
    for (int k = 0; k < n; k++) {
        for (int i = 0; i < n; i++) {
             for (int j = 0; j < n; j++) {
                if (k != i && i != j && j != k) {
                    v[0] = k;
                    v[1] = i;
                    v[2] = j;
                    if (is_sorted(v.begin(), v.end())) {
                        if (is_right_triangle(obj[v[0]].x, obj[v[0]].y, obj[v[1]].x, obj[v[1]].y, obj[v[2]].x, obj[v[2]].y)) {
                            counter++;
                            cout << counter << " => ";
                            cout << fixed << "{(" << obj[v[0]].x << "," << obj[v[0]].y << ")" 
                                 << fixed << "(" << obj[v[1]].x << "," << obj[v[1]].y << ")" 
                                 << fixed << "(" << obj[v[2]].x << "," << obj[v[2]].y << ")}" << "\n"; 
                        }
                    }
                }
            }
        }
    }
    cout << "Found quantity: " << counter << "\n";
    delete [] obj;
    return 0;
}
Yetty, вам большое спасибо, что вовремя указали на ошибку

Пример входных данных:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Enter a number of points:
n = 6
Enter point coords:
1:
x1 = -3
y1 = -2
2:
x2 = -1
y2 = -2
3:
x3 = -1
y3 = -4
4:
x4 = 2
y4 = 4
5:
x5 = 2
y5 = 2
6:
x6 = 3
y6 = 4
Выходные данные:

C++
1
2
3
4
5
6
Output of the program:
Found points:
1 => {(-3.00,-2.00)(-1.00,-2.00)(-1.00,-4.00)}
2 => {(-3.00,-2.00)(-1.00,-4.00)(3.00,4.00)}
3 => {(2.00,4.00)(2.00,2.00)(3.00,4.00)}
Found quantity: 3
Добавлено через 2 минуты
Цитата Сообщение от Yetty Посмотреть сообщение
Вы скобки проверили?
Теперь проверил и выскочила ошибка. Я ее исправил.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.02.2019, 19:06

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Определить функцию, которая возвращает расстояние между двумя точками на плоскости
Вариант 5. Определите функцию, которая возвращает расстояние между двумя точками на плоско-сти где...

Определить функцию, которая возвращает расстояние между двумя точками на плоскости
Определить функцию, которая возвращает расстояние между двумя точками на плоскости.Вычислить...

Определить площадь треугольника, используя функцию, вычисляющую расстояние между двумя заданными точками.
1. Даны действительные числа a, b, c. Найти z = g(a + b, c) + 4 ∗ g(a − b, 1.8), где g(x, y) =...

Описать функцию R(N) вещественного типа, вычисляющую расстояние между двумя точками заданными в декартовых координатах
Помогите пожалуйста с полным решением задачи в C# Описать функцию R(N) вещественного типа,...


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

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

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