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

Ошибка //найти 3 точки, составляющие минимальную площадь

13.06.2019, 22:17. Показов 446. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Где ошибка? При вводе всех данных - просто ничего не выводится
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
#include <iostream> 
#include <clocale> 
#include <string> 
#include <cmath> 
 
using namespace std;
 
int main()
{
    setlocale(LC_CTYPE, "rus");
    int n, x1, y1, x2, y2, x3, y3;
 
    float minsq = 0;
    cout << "введите количество точек х и у: ";
 
    cin >> n;
    if (n < 3) {
        cout << "Точек недостаточно для построения треугольника."<< endl;
        system("pause");
        return 0;
    }
 
    else
    {
        int(*arr)[2];
        arr = new int[n][2];
        cout << "Введите координаты точек" << endl;
        //ввод 
        for (int i = 0; i < n; i++)
        {
            cout << "Задайте координату x " <<(i + 1) << " точки: ";
            cin >> arr[i][0];
            cout << "Задайте координату y " << (i + 1) << " точки: ";
            cin >> arr[i][1];
        }// перебор точек и нахождение площади
 
        for (int i = 0; i < n; i++) {
            for (int j = i + 1; j < n; j++) {
                for (int l = j + 1; l < n; l++)
                {
                    float side1 = sqrt(pow(arr[i][0] - arr[j][0], 2) + pow(arr[i][1] - arr[j][1], 2));
                    float side2 = sqrt(pow(arr[i][0] - arr[l][0], 2) + pow(arr[i][1] - arr[l][1], 2));
                    float side3 = sqrt(pow(arr[l][0] - arr[j][0], 2) + pow(arr[l][1] - arr[j][1], 2));
                    float p = (side1 + side2 + side3) / 2;
                    float S = sqrt(p*(p - side1)*(p - side2)*(p - side3)); //формула геррона 
                    return 0;
                    // нахождение минимальной площади, не равной нулю 
                    if (S != 0 && S > minsq)
                    {
                        minsq = S;
                        // сохранение координат точек 
                        x1 = arr[i][0];
                        y1 = arr[i][1];
                        x2 = arr[j][0];
                        y2 = arr[j][1];
                        x3 = arr[l][0];
                        y3 = arr[l][1];
                    }
                }
            }
        }
        cout << "минимальная площадь: " << minsq << endl;
        cout << " x1= " << x1 << " y1= " << y1 << " x2= " << x2 << " y2= " << y2 << " x3= " << x3 << " y3= " << y3;
        // освобождение памяти 
        delete[]arr;
        arr = nullptr;
    }
    system("pause");
    return 0;
}
Добавлено через 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
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 <clocale> 
#include <string> 
#include <cmath> 
 
using namespace std;
 
int main()
{
    setlocale(LC_CTYPE, "rus");
    int n, x1 = 0, y1 = 0, x2 = 0, y2 = 0, x3 = 0, y3 = 0;
 
    float minsq = 3.402823466e+38;
    std::cout << "введите количество точек х и у: ";
 
    cin >> n;
    if (n < 3) {
        std::cout << "Точек недостаточно для построения треугольника.";
        system("pause");
        return 0;
    }
    else
    {
        int(*arr)[2];
        arr = new int[n][2];
        std::cout << "Введите координаты точек" << endl;
        //ввод 
        for (int i = 0; i < n; i++)
        {
            std::cout << "Задайте координату x " << (i + 1) << " точки: ";
            cin >> arr[i][0];
            std::cout << "Задайте координату y " << (i + 1) << " точки: ";
            cin >> arr[i][1];
        }// перебор точек и нахождение периметра 
 
        for (int i = 0; i < n; i++) {
            for (int j = i + 1; j < n; j++) {
                for (int l = j + 1; l < n; l++)
                {
                    float side1 = sqrt(pow(arr[i][0] - arr[j][0], 2) + pow(arr[i][1] - arr[j][1], 2));
                    float side2 = sqrt(pow(arr[i][0] - arr[l][0], 2) + pow(arr[i][1] - arr[l][1], 2));
                    float side3 = sqrt(pow(arr[l][0] - arr[j][0], 2) + pow(arr[l][1] - arr[j][1], 2));
                    float p = (side1 + side2 + side3) / 2;
                    float S = sqrt(p*(p - side1)*(p - side2)*(p - side3)); //формула геррона
                    // нахождение минимальной площади, не равной нулю 
                    if (S != 0 && S < minsq)
                    {
                        minsq = S;
                        // сохранение координат точек 
                        x1 = arr[i][0];
                        y1 = arr[i][1];
                        x2 = arr[j][0];
                        y2 = arr[j][1];
                        x3 = arr[l][0];
                        y3 = arr[l][1];
                    }
                }
            }
        }
        std::cout << "минимальная площадь: " << minsq << endl;
        std::cout << " x1= " << x1 << " y1= " << y1 << " x2= " << x2 << " y2= " << y2 << " x3= " << x3 << " y3= " << y3;
        // освобождение памяти 
        delete[]arr;
        arr = nullptr;
    }
    system("pause");
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.06.2019, 22:17
Ответы с готовыми решениями:

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

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

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

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

0
13.06.2019, 22:17
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.06.2019, 22:17
Помогаю со студенческими работами здесь

Найти площадь и периметр треугольника, если точки принадлежат определённой области
Суть: На плоскости заданы: ограниченная линиями область R и точки A(x; y), B(x; y), C(x; y). Нужно...

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

Из множества точек выбрать три точки, не лежащие на одной прямой, составляющие треугольник наименьшей площади
Разработать программу выбора из заданного на плоскости множества точек N (N вводится) трех точек,...

Выбрать три разные точки заданного на плоскости множества точек, составляющие треугольник наибольшего периметра
Задание, как множество точек вывести на экран понял. #include &lt;iostream&gt; #include &lt;time.h&gt;...


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

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