IPB

Здравствуйте, гость ( Вход | Регистрация )

> Массивы на c++ в среде CodeBlock, Помогите !
MonaMi
сообщение 3.12.2012, 18:35
Сообщение #1


Новичок
*

Группа: Продвинутые
Сообщений: 5
Регистрация: 3.12.2012
Город: Ростов-на-Дону
Учебное заведение: ЮФУ



Нужно написать программу на С++
Задание звучит так:
Даны натуральное число n и два вещественных массива из n элементов каждый. Массивы содержат значения координат точек на плоскости. Из заданного множества точек на плоскости выбрать такие три точки, которые составляют треугольник наибольшего периметра (использовать функцию).

Для решения этой задачи я решила использовать следующий алгоритм:
1. Просматриваем два массива со значениями координат.
2. Находим длину одной стороны, потом второй и третьей.
3. Значения нашедших сторон складываем и получаем периметр.

Вот теперь вопрос: как сделать так, чтобы находя периметр определить, что он максимально возможный при данных точках?
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
 
Ответить в эту темуОткрыть новую тему
Ответов
MonaMi
сообщение 3.12.2012, 18:49
Сообщение #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.12.2012, 20:46
Сообщение #3


Студент
**

Группа: Продвинутые
Сообщений: 86
Регистрация: 16.11.2010
Город: Saratov



Цитата(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;
                            }
                        }
                    }
                }
            }
        }

+ Необходимо ли проверять условие расположения точек на одной прямой?
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Сообщений в этой теме


Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия Сейчас: 27.5.2025, 17:57

Книжки в помощь: "Сборник заданий по высшей математике" Кузнецов Л.А., "Сборник заданий по высшей математике" Чудесенко В.Ф., "Индивидуальные задания по высшей математике" Рябушко А.П., и другие.




Зеркало сайта Решебник.Ру - reshebnik.org.ru