Цитата(MonaMi @ 3.12.2012, 23:49) *

Функция нахождение периметра треугольника. Не работает так, как надо..но не знаю как ее поменять((

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;
                            }
                        }
                    }
                }
            }
        }

+ Необходимо ли проверять условие расположения точек на одной прямой?