|
0 / 0 / 0
Регистрация: 21.07.2012
Сообщений: 13
|
|
Площадь многоугольника09.08.2012, 13:24. Показов 2051. Ответов 7
Метки нет (Все метки)
Необходимо вычислить площади двух многоугольников(ну а в дальнейшем проверить, лежит ли один из них в другом, пока мне это не надо) по известным вершинам. У меня получилось вот это."Это" не работает.Где ошибки? Заранее спасибо
![]() #include<iostream> #include<cstdlib> #include<cmath> using namespace std; float Ploshad(float x[],float y[], const int n); int main(){ int i,n1,n2; cout<<"Vvedite kolichectvo uglov 1 mnogouglnika="<<n1; cout<<"Vvedite kolichectvo uglov 2 mnogouglnika="<<n2; float x1[n1+1],y1[n1+1],x2[n2+1],y2[n2+1]; cout<<"Vvedite koordinaty vershin 1 mnogouglnika="; cout<<"Vvedite koordinaty vershin 2 mnogouglnika="; // вводим координаты вершин 1 многоугольника for(i=1;i<=n1;i++){ cout<<"x1["<<i<<"]="; cin>>x1[i]; cout<<" "; cout<<"y1["<<i<<"]="; cin>>y1[i]; cout<<endl;}; x1[n1+1]=x1[1]; y1[n1+1]=y1[1]; // вводим координаты вершин 1 многоугольника for(i=1;i<=n2;i++){ cout<<"x2["<<i<<"]="; cin>>x2[i]; cout<<" "; cout<<"y2["<<i<<"]="; cin>>y2[i]; cout<<endl;}; x2[n2+1]=x2[1]; y2[n2+1]=y2[1]; float s1,s2; s1=Ploshad(x1,y1,n1+1); cout<<"S1="<<s1; s2=Ploshad(x2,y2,n2+1); cout<<"S2="<<s2; return(0);}; float Ploshad(float x[],float y[], const int n){ int min=1,max=1,i; // находим крайние вершины по оси 0х for(int i=0;i<=n;i++){ if (x[min]<x[i]) min=i; if (x[max]>x[1]) max=i;}; float s1=0, s2=0,s=0; // площадь многоугольника, разбивая на трапеции ( 2 случая) if (max>min) { i=min; while(i<max){s1=s1+(y[i+1]+y[i])*(x[i+1]-x[i])/2;i++;}; i=max; while(i<n+1){s2=s2+(y[i+1]+y[i])*(x[i+1]-x[i])/2;i++;}; i=1; while(i<min){s2=s2+(y[i+1]+y[i])*(x[i+1]-x[i])/2;i++;}; } else { i=max; while(i<min) {s1=s1+(y[i+1]+y[i])*(x[i+1]-x[i])/2;i++;}; i=min; while(i<n+1) {s2=s2+(y[i+1]+y[i])*(x[i+1]-x[i])/2;i++;}; i=1; while(i<max) {s2=s2+(y[i+1]+y[i])*(x[i+1]-x[i])/2;i++;};}; s=abs(s1-s2); return(s);};
0
|
|
| 09.08.2012, 13:24 | |
|
Ответы с готовыми решениями:
7
Вычислить площадь многоугольника с использованием функции,которая определяет площадь по координатам его вершин Площадь многоугольника Площадь многоугольника |
|
2395 / 1925 / 763
Регистрация: 27.07.2012
Сообщений: 5,569
|
|
| 09.08.2012, 13:35 | |
|
Выделите кусок кода под тэги CPP и отформатируйте с оступами. А так разбираться ну уж очень тяжко.
0
|
|
|
0 / 0 / 0
Регистрация: 21.07.2012
Сообщений: 13
|
|
| 09.08.2012, 13:42 [ТС] | |
|
#include<iostream>
#include<cstdlib> #include<cmath> using namespace std; float Ploshad(float x[],float y[], const int n); int main(){ int i,n1,n2; cout<<"Vvedite kolichectvo uglov 1 mnogouglnika="<<n1; cout<<"Vvedite kolichectvo uglov 2 mnogouglnika="<<n2; float x1[n1+1],y1[n1+1],x2[n2+1],y2[n2+1]; cout<<"Vvedite koordinaty vershin 1 mnogouglnika="; cout<<"Vvedite koordinaty vershin 2 mnogouglnika="; // вводим координаты вершин 1 многоугольника for(i=1;i<=n1;i++){ cout<<"x1["<<i<<"]="; cin>>x1[i]; cout<<" "; cout<<"y1["<<i<<"]="; cin>>y1[i]; cout<<endl;}; x1[n1+1]=x1[1]; y1[n1+1]=y1[1]; // вводим координаты вершин 1 многоугольника for(i=1;i<=n2;i++){ cout<<"x2["<<i<<"]="; cin>>x2[i]; cout<<" "; cout<<"y2["<<i<<"]="; cin>>y2[i]; cout<<endl;}; x2[n2+1]=x2[1]; y2[n2+1]=y2[1]; float s1,s2; s1=Ploshad(x1,y1,n1+1); cout<<"S1="<<s1; s2=Ploshad(x2,y2,n2+1); cout<<"S2="<<s2; return(0);}; float Ploshad(float x[],float y[], const int n){ int min=1,max=1,i; // находим крайние вершины по оси 0х for(int i=0;i<=n;i++){ if (x[min]<x[i]) min=i; if (x[max]>x[1]) max=i;}; float s1=0, s2=0,s=0; // площадь многоугольника, разбивая на трапеции ( 2 случая) if (max>min) { i=min; while(i<max){s1=s1+(y[i+1]+y[i])*(x[i+1]-x[i])/2;i++;}; i=max; while(i<n+1){s2=s2+(y[i+1]+y[i])*(x[i+1]-x[i])/2;i++;}; i=1; while(i<min){s2=s2+(y[i+1]+y[i])*(x[i+1]-x[i])/2;i++;}; } else { i=max; while(i<min) {s1=s1+(y[i+1]+y[i])*(x[i+1]-x[i])/2;i++;}; i=min; while(i<n+1) {s2=s2+(y[i+1]+y[i])*(x[i+1]-x[i])/2;i++;}; i=1; while(i<max) {s2=s2+(y[i+1]+y[i])*(x[i+1]-x[i])/2;i++;};}; s=abs(s1-s2); return(s);};
0
|
|
|
320 / 280 / 109
Регистрация: 27.09.2010
Сообщений: 1,058
|
||||||
| 09.08.2012, 13:46 | ||||||
|
Первое что могу сказать, строка
Или делайте так (например) float x1[2+1] Или выделяйте динамическую память, решите этот вопрос, посмотрим дальше.
0
|
||||||
|
0 / 0 / 0
Регистрация: 21.07.2012
Сообщений: 13
|
||||||
| 09.08.2012, 13:48 [ТС] | ||||||
обязательно выделять динамический массив?
0
|
||||||
|
320 / 280 / 109
Регистрация: 27.09.2010
Сообщений: 1,058
|
||||||
| 09.08.2012, 14:10 | ||||||
|
На ваше усмотрение. Если вы делаете статический массив, то размер массива должна определять константа. Исходя из этого решайте. что вам лучше.
Это раз, а во вторых, что означает строка ?:
0
|
||||||
|
0 / 0 / 0
Регистрация: 21.07.2012
Сообщений: 13
|
||||||
| 09.08.2012, 14:28 [ТС] | ||||||
0
|
||||||
|
320 / 280 / 109
Регистрация: 27.09.2010
Сообщений: 1,058
|
||||||
| 09.08.2012, 14:32 | ||||||
|
Указатели надо было разыменовывать. Привожу пример для первой ошибки, дальше уже сами исправите:
1
|
||||||
| 09.08.2012, 14:32 | |
|
Помогаю со студенческими работами здесь
8
Площадь многоугольника Найти площадь многоугольника Вычислить площадь многоугольника
Площадь выпуклого многоугольника Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут
Суть:
- Группа наркоманов из 10 человек.
- Только один инфицирован ВИЧ.
- Колются одной иглой.
- Колются раз в день.
- Колются последовательно через. . .
|
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
|
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
|
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . .
а удачный момент так и не приходит.
|
|
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица.
Задача: зафиксировать три левых колонки в отчете.
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
/ / . . .
|
Настройки VS Code
Loafer 13.04.2026
{
"cmake. configureOnOpen": false,
"diffEditor. ignoreTrimWhitespace": true,
"editor. guides. bracketPairs": "active",
"extensions. ignoreRecommendations": true,
. . .
|
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2.
Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива.
Было так:. . .
|
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: реализовать контроль корректности заполнения дат назначения. . .
|