С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 01.10.2020
Сообщений: 12

Найти все тройки точек, которые образуют равносторонние треугольники

14.04.2021, 17:18. Показов 2317. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Разработать программу, которая из данных n точек на плоскости находит все тройки точек, которые образуют равносторонние треугольники. Значения координат точек генерируются случайным образом в диапазоне [a, b], значения n, a, b вводятся пользователем.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.04.2021, 17:18
Ответы с готовыми решениями:

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

Выявить все тройки точек, на которых можно построить равнобедренные треугольники
Необходимо написать программу на C++ : На плоскости имеется набор точек. Выявить все тройки точек на которых можно построить равнобедренные...

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

9
0 / 0 / 0
Регистрация: 01.10.2020
Сообщений: 12
23.04.2021, 08:46  [ТС]
???
0
 Аватар для matviiv
429 / 313 / 129
Регистрация: 09.02.2021
Сообщений: 1,096
Записей в блоге: 1
23.04.2021, 08:55
MIPPO, Код где ваш?Как я должен понять что вам именно не понятно,здесь лабки вместо вас делать не будут
0
0 / 0 / 0
Регистрация: 01.10.2020
Сообщений: 12
27.04.2021, 13:18  [ТС]
points[i].x = rand() % (b - a + 1) + a;
points[i].y = rand() % (b - a + 1) + a;

На этих двух строках появляется вот такая ошибка: "выражение должно относиться к целочисленному типу или типу перечисления без области видимости." Как убрать эту ошибку, если мне надо, чтобы переменные a и b ,были типа с плавающей точкой.
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
#include <iostream>
#include <conio.h>
#include <ctime>
 
using namespace std;
 
struct point {    
    double x, y;
};
 
int main() {
    setlocale(0, ""); 
    srand(time(0));    
    point vectors[2], * points;
    double area;
    int i, j, k, n, cnt;
    long double a, b;
    cnt = 0; 
 
    cout << "Введите целое неотрицательное число количества точек" << endl;
    while (true) {
        cin >> n; 
        if (!cin.fail() && n > 2) {
            break;
        }
        else {
            cout << "Некорректный ввод, попробуйте ещё раз" << endl;
            cin.clear();
            cin.ignore();
        }
    }
 
    cout << "Введите начало диапазона значений координат точек" << endl;
    while (true) {
        cin >> a; 
        if (!cin.fail()) {
            break;
        }
        else {
            cout << "Некорректный ввод, попробуйте ещё раз" << endl;
            cin.clear();
            cin.ignore();
        }
    }
 
    cout << "Введите конец диапазона значений координат точек" << endl;
    while (true) {
        cin >> b; 
        if (!cin.fail()) {
            break;
        }
        else {
            cout << "Некорректный ввод, попробуйте ещё раз" << endl;
            cin.clear();
            cin.ignore();
        }
    }
 
 
 
    points = new point[n];
    cout << "Точки:" << endl;
    for (int i = 0; i < n; i++) {
        points[i].x = rand() % (b - a + 1) + a; 
        points[i].y = rand() % (b - a + 1) + a;
        cout << "(" << points[i].x << "; " << points[i].y << ") ";
    }
    cout << endl;
    for (int i = 0; i < n; i++) {
        for (j = i + 1; j < n; j++) {
            for (int k = j + 1; k < n; k++) {
                if ((sqrt((points[i].x - points[j].x) * (points[i].x - points[j].x) + (points[i].y - points[j].y) * (points[i].y - points[j].y))) ==
                    (sqrt((points[i].x - points[k].x) * (points[i].x - points[k].x) + (points[i].y - points[k].y) * (points[i].y - points[k].y))) &&
                    (sqrt((points[i].x - points[k].x) * (points[i].x - points[k].x) + (points[i].y - points[k].y) * (points[i].y - points[k].y))) ==
                    (sqrt((points[j].x - points[k].x) * (points[j].x - points[k].x) + (points[j].y - points[k].y) * (points[j].y - points[k].y)))) {
                    cout << "равносторонний треугольник: (" << points[i].x << "; " << points[i].y << ") " << " (" << points[j].x << "; " << points[j].y << ") " << " (" << points[k].x << "; " << points[k].y << ") " << endl;
                    cnt++;
                }
            }
        }
    }
    if (cnt == 0) {
        cout << "треугольники не найдены" << endl;
    }
}
Вложения
Тип файла: txt programma.txt (2.5 Кб, 15 просмотров)
0
 Аватар для LedZepMrjn
8 / 4 / 5
Регистрация: 26.04.2021
Сообщений: 31
27.04.2021, 15:17
Что будет, если записать
C++
1
2
pointsX[i] = rand() % (b - a + 1) + a;
pointsY[i] = rand() % (b - a + 1) + a;
Для чего нужны эти точки?
0
0 / 0 / 0
Регистрация: 01.10.2020
Сообщений: 12
27.04.2021, 15:44  [ТС]
так не работает
0
0 / 0 / 0
Регистрация: 10.12.2022
Сообщений: 1
10.12.2022, 16:15
возможно уже поздно, но решал похожую задачу и доделал ваш код как надо. в первой версии неправильно искались треугольники и с типами ошибка легко исправляется подстановкой (int) к выражениям в скобках, иначе rand отторгает. Не гениально, но может кому будет полезно
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
#include <iostream>
#include <ctime>
#include<vector>
 
 
using namespace std;
 
struct point {
    double x, y;
};
int distancePoints(int x1, int y1, int x2, int y2)
{
    int dis = sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
    return dis;
}
int main() {
    setlocale(LC_ALL, "Russian");
    srand(time(0));
    point vectors[2], * points;
    double area;
    int i, j, k, n, cnt;
    long double a, b;
    cnt = 0;
 
    cout << "Введите целое неотрицательное число количества точек" << endl;
    while (true) {
        cin >> n;
        if (!cin.fail() && n > 2) {
            break;
        }
        else {
            cout << "Некорректный ввод, попробуйте ещё раз" << endl;
            cin.clear();
            cin.ignore();
        }
    }
 
    cout << "Введите начало диапазона значений координат точек" << endl;
    while (true) {
        cin >> a;
        if (!cin.fail()) {
            break;
        }
        else {
            cout << "Некорректный ввод, попробуйте ещё раз" << endl;
            cin.clear();
            cin.ignore();
        }
    }
 
    cout << "Введите конец диапазона значений координат точек" << endl;
    while (true) {
        cin >> b;
        if (!cin.fail()) {
            break;
        }
        else {
            cout << "Некорректный ввод, попробуйте ещё раз" << endl;
            cin.clear();
            cin.ignore();
        }
    }
 
 
 
    points = new point[n];
    cout << "Точки:" << endl;
    for (int i = 0; i < n; i++) {
        points[i].x = rand() % (int)(b - a + 1) + a;
        points[i].y = rand() % (int)(b - a + 1) + a;
        cout << "(" << points[i].x << "; " << points[i].y << ") ";
    }
    cout << endl;
    for (int i = 0; i < n; i++) {
        for (int j = i + 1; j < n; j++) {
            for (int k = j + 1; k < n; k++) {
                if (distancePoints(points[i].x, points[i].y, points[j].x, points[j].y) == distancePoints(points[i].x, points[i].y, points[k].x, points[k].y) && distancePoints(points[i].x, points[i].y, points[k].x, points[k].y) == distancePoints(points[j].x, points[j].y, points[k].x, points[k].y))
                {
                    cout << "равносторонний треугольник: (" << points[i].x << "; " << points[i].y << ") " << " (" << points[j].x << "; " << points[j].y << ") " << " (" << points[k].x << "; " << points[k].y << ") " << endl;
                    cnt++;
                }
            }
        }
    }
                if (cnt == 0) {
        cout << "треугольники не найдены" << endl;
    }
}
0
Модератор
Эксперт С++
 Аватар для zss
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,241
10.12.2022, 16:29
C++
1
2
       points[i].x = rand() % int(b - a + 1) + a; 
        points[i].y = rand() % int(b - a + 1) + a;
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
10.12.2022, 20:48
zss, раз уж координаты дробные, то лучше приводить их к диапазону не через остаток от деления, а через пропорции в дробях
C++
1
2
  points[i].x = rand()*1./RAND_MAX*(b - a)   +a; 
  points[i].y = rand()*1./RAND_MAX*(b - a)   +a;
0
Модератор
Эксперт С++
 Аватар для zss
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,241
11.12.2022, 18:52
JKingsley, вряд ли используя интовые координаты можно случайно получить равносторонний треугольник.
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 <stdio.h>
#include <time.h>
#include <math.h>
#include <stdlib.h>
#include <locale.h>
struct point {
    double x, y;
};
double Distance(point p1, point p2)
{
    return sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y));
}
void Print(point p)
{
        printf("(%.2lf;%.2lf) ",p.x,p.y );
}
int main() 
{
    const double eps=0.003; // Точность сравнения расстояний
    setlocale(LC_ALL, "Russian");
    srand((unsigned)time(0));
 
    printf("Введите количество точек: ");
    int n;
    scanf("%u",&n);
    printf("Введите начало диапазона значений координат точек: ");
    double a;
    scanf("%lf",&a);
    printf("Введите конец диапазона значений координат точек: ");
    double b;
    scanf("%lf",&b);
    getchar();
    point* points = (point*)malloc(sizeof(point)*n);
    
    for (int i = 0; i < n; i++)
    {
        points[i].x = (b - a)/RAND_MAX*rand()+a;
        points[i].y = (b - a)/RAND_MAX*rand()+a;
        //Print(points[i]);
    }
    puts("");
    
    int count=0;
    printf("    Длины сторон   Координаты\n");
    for (int i = 0; i < n; i++) 
    {
        for (int j = i + 1; j < n; j++) 
        {
            for (int k = j + 1; k < n; k++) 
            {
                double d1=Distance(points[i],points[j]);
                double d2=Distance(points[i],points[k]);
                double d3=Distance(points[j],points[k]);
                if (fabs(d1-d2)<eps && fabs(d1-d3)<eps)
                {
                    printf("%.3lf %.3lf %.3lf ",d1,d2,d3);
                    Print(points[i]);Print(points[j]);Print(points[k]);
                    puts("");
                    count++;
                }
            }
        }
    }
    free(points);
    if (count == 0) {
        puts("треугольники не найдены");
    }else
        printf("Найдено %d Треугольников\n",count);
    getchar();
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.12.2022, 18:52
Помогаю со студенческими работами здесь

Равносторонние треугольники
По координатам трех точек определить, составляют ли они равносторонний треугольник, длина каждой из сторон которого - простое число. ...

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

Задача про равносторонние треугольники
Привет, напишите, пожалуйста, код программы. В программе есть 2 переменные, они вводятся с клавиатуры. 1 переменная: задаёт сторону...

Найти координаты трёх точек, которые образуют треугольник с наименьшей площадью
На плоскости заданы своими координатами N точек, заданные своими координатами. Найти координаты трёх точек, которые образуют треугольник с...

Найти и начертить все треугольники, образованные сочетанием любых трех точек из К
Люди,если не сложно, помогите пожалуйста написать прогу, мне ее через 2 дня сдавать надо,а я полный ноль в делфи. :help: Заданное...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru