3 / 3 / 0
Регистрация: 23.10.2018
Сообщений: 201
|
|
1
|
Ошибка //найти 3 точки, составляющие минимальную площадь
13.06.2019, 22:17. Показов 446. Ответов 0
Где ошибка? При вводе всех данных - просто ничего не выводится
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
|