Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.10.2015, 13:49   #1
Tim1444
Пользователь
 
Регистрация: 27.10.2015
Сообщений: 12
По умолчанию Подсчитать периметр многоуольника, заданного координатами вершин С++

Завтра лабораторную сдавать, не могу сделать это задание
Помогите пожалуйста, код для новичка нужен.
1)Координаты вершин многоугольника заданы массивами {Xi,Yi}, i=1,2,…,n Считается, что вершины упорядочены в порядке обхода по часовой стрелке или против нее. Найти периметр многоугольника.

Сейчас только прочитал что пишет модератор раздела извиняюсь, вот код но очень сложен для меня, помогите пожалуйста
Код:
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
const int n = 6; 
double p = 0;
double x[] = { 2.0, 3.0, 6.0, 6.0, 4.0,5.0 };
double y[] = { 3.0, 6.0, 5.0, 2.0, 1.0,7.0};
for (int i = 0; i < n; ++i) {
int j = (i+1)%n;
p=p+sqrt((x[i] - x[j])*(x[i] - x[j]) + (y[i] - y[j])*(y[i] - y[j]));
}
cout << "Perimeter: "<<p<<endl;
return 0;
}

Последний раз редактировалось Stilet; 27.10.2015 в 15:22.
Tim1444 вне форума Ответить с цитированием
Старый 27.10.2015, 15:24   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Этот код сложный? Да тут только один вызов функции квадратного корня....
p51x вне форума Ответить с цитированием
Старый 27.10.2015, 15:35   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А я чет не понял чем код не устроил?
Вроде же метод определения периметра верный.
Или нет?
Кста я бы писал так:
Код:
p=p+sqrt(pow(x[i] - x[j],2) + pow(y[i] - y[j],2));
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.10.2015, 15:51   #4
Tim1444
Пользователь
 
Регистрация: 27.10.2015
Сообщений: 12
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А я чет не понял чем код не устроил?
Вроде же метод определения периметра верный.
Или нет?
Кста я бы писал так:
Код:
p=p+sqrt(pow(x[i] - x[j],2) + pow(y[i] - y[j],2));
int j = (i+ 1 )%n;
p=p+sqrt((x[i] - x[j])*(x[i] - x[j]) + (y[i] - y[j])*(y[i] - y[j])) ; вот эти строки объясните пожалуйста
Tim1444 вне форума Ответить с цитированием
Старый 27.10.2015, 17:17   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
вот эти строки объясните пожалуйста
Легко: https://ru.wikipedia.org/wiki/Теорема_Пифагора
Короче ты им находишь длину отрезка, зная координаты его концов.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.10.2015, 17:25   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

а если вопрос касается строчки
Цитата:
Код:
int j = (i+ 1 )%n;
то это способ получить номер следующей вершины.
для всех вершин, кроме последней, он просто равен номер текущей плюс единица (i+1), кроме последней. для последней вершины следующая - это исходная (с нулевым индексом).

ваша формула это просто эффективная запись, которая может быть записана, например, так:
Код:
int j = i+1;
if (j==n) j=0;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 28.10.2015, 19:54   #7
Tim1444
Пользователь
 
Регистрация: 27.10.2015
Сообщений: 12
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
а если вопрос касается строчки
то это способ получить номер следующей вершины.
для всех вершин, кроме последней, он просто равен номер текущей плюс единица (i+1), кроме последней. для последней вершины следующая - это исходная (с нулевым индексом).

ваша формула это просто эффективная запись, которая может быть записана, например, так:
Код:
int j = i+1;
if (j==n) j=0;
По формуле Пифагора находят гипотенузу, а периметр равен сумме квадратов, вы написали я не совсем понял, можете пожалуйста более детально объяснить пожалуйста :/
Tim1444 вне форума Ответить с цитированием
Старый 28.10.2015, 20:30   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
По формуле Пифагора находят гипотенузу
А гипотенуза, это сторона многоугольника, который всегда можно разбить на
треугольники, потому ее и можно применять для вычисления периметра.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.10.2015, 20:42   #9
Tim1444
Пользователь
 
Регистрация: 27.10.2015
Сообщений: 12
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А гипотенуза, это сторона многоугольника, который всегда можно разбить на
треугольники, потому ее и можно применять для вычисления периметра.
p=p+sqrt(pow(x[i] - x[j],2) + pow(y[i] - y[j],2));
вот здесь что от чего отнимаем? объясните пожалуйста
double x[] = { 2.0, 3.0, 6.0, 6.0, 4.0,5.0 };
double y[] = { 3.0, 6.0, 5.0, 2.0, 1.0,7.0};
Tim1444 вне форума Ответить с цитированием
Старый 28.10.2015, 20:50   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

У тебя есть две вершины: (2.0,3.0) и (3.0,6.0). Эти две вершины - гипотенуза.
Ее нужно как-то вычислить. А как? Пифагорчиком. Им считается длина отрезка.
Тебе бы наверное геометрию подучить из курса школы не мешало? http://www.studyguide.ru/note.php?id=14
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
На языке Си++ Определить, лежит ли данная точка на одной из сторон треугольника, заданного координатами его вершин. Марисабель Помощь студентам 1 02.12.2011 19:11
Определите, лежит ли данная точка на одной из сторон треугольника, заданного координатами его вершин. Марисабель Помощь студентам 0 02.12.2011 18:20
вычислить периметр треугольника если даны координаты 3-х вершин(алгоритм функции) (Паскаль) анжелка Помощь студентам 2 03.04.2011 13:33
Необходимо определить периметр многоугольника, заданного координатами вершин Андрю)(@ Паскаль, Turbo Pascal, PascalABC.NET 6 23.12.2008 12:30