Функция нахождение периметра треугольника. Не работает так, как надо..но не знаю как ее поменять((
int perimetr(const int *a, const int *b, int n)
{
int i=0;
int a, b, c, p;
for (i=0; i<n; i++)
{
a=sqrt((abs(a[i]-a[i+1]))^2 + (abs(b[i]-b[i+1]))^2);
b=sqrt((abs(a[i+1]-a[i+2]))^2 + (abs(b[i+1]-b[i+2]))^2);
c=sqrt((abs(a[i+2]-a[i+3]))^2 + (abs(b[i+2]-b[i+3]))^2);
p=a+b+c;
}
1. "два вещественных массива". у Вас const int.
2. в цикле очевиден выход за границы массива.
3. ^2 - это возведение в квадрат? а как же pow, а как же простое перемножение?
Если ограничений по времени нет, то предлагаю банальный перебор:
1. Найти расстояния между всеми точками (по Пифагору), записать в отдельный двумерный массив, который будет симметричным относительно главной диагонали.
2.
Код
double maxPerimeter = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (i != j) {
for (int k = 0; k < n; k++) {
if (j != k && k != i) {
double currentPerimeter = lens[i][j] + lens[j][i] + lens[j][k];
if (currentPerimeter > maxPerimeter) {
maxPerimeter = currentPerimeter;
}
}
}
}
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (i != j) {
for (int k = 0; k < n; k++) {
if (j != k && k != i) {
double currentPerimeter = lens[i][j] + lens[j][i] + lens[j][k];
if (currentPerimeter > maxPerimeter) {
maxPerimeter = currentPerimeter;
}
}
}
}
}
}
+ Необходимо ли проверять условие расположения точек на одной прямой?