![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
MonaMi |
![]() ![]()
Сообщение
#1
|
Новичок ![]() Группа: Продвинутые Сообщений: 5 Регистрация: 3.12.2012 Город: Ростов-на-Дону Учебное заведение: ЮФУ ![]() |
Нужно написать программу на С++
Задание звучит так: Даны натуральное число n и два вещественных массива из n элементов каждый. Массивы содержат значения координат точек на плоскости. Из заданного множества точек на плоскости выбрать такие три точки, которые составляют треугольник наибольшего периметра (использовать функцию). Для решения этой задачи я решила использовать следующий алгоритм: 1. Просматриваем два массива со значениями координат. 2. Находим длину одной стороны, потом второй и третьей. 3. Значения нашедших сторон складываем и получаем периметр. Вот теперь вопрос: как сделать так, чтобы находя периметр определить, что он максимально возможный при данных точках? |
![]() ![]() |
MonaMi |
![]()
Сообщение
#2
|
Новичок ![]() Группа: Продвинутые Сообщений: 5 Регистрация: 3.12.2012 Город: Ростов-на-Дону Учебное заведение: ЮФУ ![]() |
Функция нахождение периметра треугольника. Не работает так, как надо..но не знаю как ее поменять((
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; } |
Sergio Ramos |
![]()
Сообщение
#3
|
Студент ![]() ![]() Группа: Продвинутые Сообщений: 86 Регистрация: 16.11.2010 Город: Saratov ![]() |
Функция нахождение периметра треугольника. Не работает так, как надо..но не знаю как ее поменять(( 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; } } } } } } + Необходимо ли проверять условие расположения точек на одной прямой? |
![]() ![]() |
![]() |
Текстовая версия | Сейчас: 27.5.2025, 17:57 |
Зеркало сайта Решебник.Ру - reshebnik.org.ru