Форум программистов, компьютерный форум CyberForum.ru

Программа должна находить площадь произвольного многоугольника - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.86
-Arabella-
0 / 0 / 0
Регистрация: 20.10.2013
Сообщений: 231
08.01.2014, 02:19     Программа должна находить площадь произвольного многоугольника #1
Здравствуйте. Моя программа должна находит площадь произвольного многоугольника, с предварительной проверкой, можно ли построить его вообще. Если вводит количество сторон = 4, то пишет, что построить нельзя и соответственно ничего не считает, хотя координаты правильные. А для 5,6,7,8 и т.д. сторон вообще ничего не выдает, на вводе координат ее работа заканчивается. Если не сложно, помогите, пожалуйста, найти ошибку. Я думаю она в основной функции Void main(), там я вызываю подфункцию Proverka и проверяю ее значение, т.е. все ее вызову должны быть равны 1 для подсчитки площади, и которая с xy[k]... вызывается несколько раз, может я со скобками напутала? Все подпрограммы я составляла по формулам, должно быть все правильно.
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#include<stdio.h>
#include<math.h>
float** create_xy(int n)
{
float** xy=new float*[n];
for(int i=0;i<n;i++)
xy[i]=new float[2];
return xy;
}
 
 
void Line(float x1,float y1,float x2,float y2,float x3,float y3,float x4,float y4,float *x,float *y)
{
float A1,A2,B1,B2,C1,C2;
A1=y3-y1;A2=y4-y2;
B1=x1-x3;B2=x2-x4;
C1=x3*y1-x1*y3;
C2=x4*y2-x2*y4;
*x=(B1*C2-B2*C1)/(A1*B2-A2*B1);
*y=(C1*A2-C2*A1)/(A1*B2-A2*B1);
}
 
 
 
int Proverka(float x,float y,float x1,float y1,float x2,float y2,float x3,float y3,float x4,float y4)
{
float maxx,maxy,minx,miny;
maxx=x1;
maxy=y1;
minx=x1;
miny=y1;
 
if(x2>x1 && x2>x3 && x2>x4)
maxx=x2;
if(x2<x1 && x2<x3 && x2<x4)
minx=x2;
if(x3>x1 && x3>x2 && x3>x4)
maxx=x3;
if(x3<x1 && x3<x2 && x3<x4)
minx=x3;
if(x4>x1 && x4>x3 && x4>x2)
maxx=x4;
if(x4<x1 && x4<x3 && x4<x2)
minx=x4;
if(y2>y1 && y2>y3 && y2>y4)
maxy=y2;
if(y2<y1 && y2<y3 && y2<y4)
miny=y2;
if(y4>y1 && y4>y3 && y4>y2)
maxy=y4;
if(y4<y1 && y4<y3 && y4<y2)
miny=y4;
if(y3>y1 && y3>y2 && y3>y4)
maxy=y3;
if(y3<y1 && y3<y2 && y3<y4)
miny=y3;
 
 
if(x>minx && x<maxx && y>miny && y<maxy)
return 1;
else return 0;
}
 
void massive(float** xy,int n)
{
printf("Vvedite koordinaty vershin:\n");
 
for(int k=0; k<n; k++)
{
   scanf("%f",&xy[k][0]);
   scanf("%f",&xy[k][1]);
 
printf("Koordinats: x[%d] = %5.2f;  y[%d] = %5.2f \n",k+1, xy[k][0], k+1, xy[k][1]);
}
}
void main()
{
float **xy;
int n,k,i;
float S,x,y,S2;
float S1=0;
 
printf("Vvedi kollichestvo vershin = ");
scanf("%d",&n);
 
float** points;
points=create_xy(n);
massive(points,n);
 
for(k=0;k+3<n;k++)
if(Proverka(xy[k][0],xy[k][1],xy[k+1][0],xy[k+1][1],xy[k+2][0],xy[k+2][1],xy[k+3][0],xy[k+3][1],x,y)==1)
{
if(Proverka(xy[n-3][0],xy[n-3][1],xy[n-2][0],xy[n-2][1],xy[n-1][0],xy[n-1][1],xy[0][0],xy[0][1],x,y)==1)
for(i=0;i+1<n;i++)
{
S1=S1+((xy[i][0]-xy[i+1][0])*(xy[i][1]+xy[i+1][1]));
}
S2=S1+(xy[n-1][0]-xy[0][0])*(xy[n-1][1]+xy[0][1]);
S=0.5*abs(S2);
printf("S mnogougolnika = %5.2f",S);
}
else printf("Oshibka v vode koordinats");
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.01.2014, 02:19     Программа должна находить площадь произвольного многоугольника
Посмотрите здесь:

C++ Найти площадь вогнутого многоугольника
Площадь многоугольника C++
Площадь многоугольника C++
C++ Кол - во точек с целочисленными координатами внутри (не включая границ) произвольного многоугольника
C++ Пользователь вводит 10 чисел программа должна выдать 2 максимальных(берём от 1 до 10,если выпадает 2 10,то программа должна выдать 2 10,а не 10,9)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.01.2014, 20:28     Программа должна находить площадь произвольного многоугольника #21
Цитата Сообщение от -Arabella- Посмотреть сообщение
А ее вызов должен так выглядеть?
Цитата Сообщение от -Arabella- Посмотреть сообщение
Line(x,y); // Вызов Line
На это похоже?
C++
1
void Line(float x1,float y1,float x2,float y2,float x3,float y3,float x4,float y4,float *x,float *y)
Если последние аргумены связаны с x, y, которые объявлены в main(), то, при вызове функции, нужно передавать их адреса:
C++
1
]Line(/* другие параметры*/, &x, &y);
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-Arabella-
0 / 0 / 0
Регистрация: 20.10.2013
Сообщений: 231
24.01.2014, 20:55  [ТС]     Программа должна находить площадь произвольного многоугольника #22
alsav22,
Цитата Сообщение от alsav22 Посмотреть сообщение
На это похоже?
Здесь я ее описываю. А в функции Proverka Line вызывать не нужно, да?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.01.2014, 21:03     Программа должна находить площадь произвольного многоугольника #23
Цитата Сообщение от -Arabella- Посмотреть сообщение
Здесь я ее описываю.
И что? Функция принимает 10 параметров, а вы вызываете её с двумя, и всё нормально?
-Arabella-
0 / 0 / 0
Регистрация: 20.10.2013
Сообщений: 231
24.01.2014, 22:22  [ТС]     Программа должна находить площадь произвольного многоугольника #24
alsav22, Нет) Я поправила, теперь нормально вызывает Line и даже считает площадь, только неправильно и пишет 2 раза "Ошибка в воде координат"
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
void main()
{
 
int n,k,i;
float S,S2,x,y,j;
float S1=0;
 
printf("Vvedi kollichestvo vershin = ");
scanf("%d",&n);
 
float** xy;
xy=create_xy(n);
massive(xy,n);
 
for(j=0;j<n;j++)
Line(xy[j][0],xy[j][1],xy[j+1][0],xy[j+1][1],xy[j+2][0],xy[j+2][1],xy[j+3][0],xy[j+3][1],&x,&y);
 
 
for(k=0;k+3<n;k++)
 
if(Proverka(xy[k][0],xy[k][1],xy[k+1][0],xy[k+1][1],xy[k+2][0],xy[k+2][1],xy[k+3][0],xy[k+3][1],x,y)==1)
{
if(Proverka(xy[n-3][0],xy[n-3][1],xy[n-2][0],xy[n-2][1],xy[n-1][0],xy[n-1][1],xy[0][0],xy[0][1],x,y)==1)
 
for(i=0;i+1<n;i++)
{
S1=S1+((xy[i][0]-xy[i+1][0])*(xy[i][1]+xy[i+1][1]));
}
S2=S1+(xy[n-1][0]-xy[0][0])*(xy[n-1][1]+xy[0][1]);
S=0.5*abs(S2);
printf("S mnogougolnika = %5.2f ",S);
}
else printf("Oshibka v vode koordinats");
}
Миниатюры
Программа должна находить площадь произвольного многоугольника  
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.01.2014, 23:25     Программа должна находить площадь произвольного многоугольника #25
-Arabella-, весь код выложите, который пробуете.
-Arabella-
0 / 0 / 0
Регистрация: 20.10.2013
Сообщений: 231
24.01.2014, 23:58  [ТС]     Программа должна находить площадь произвольного многоугольника #26
alsav22,
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#include<stdio.h>
#include<math.h>
float** create_xy(int n)
{
float** xy=new float*[n];
for(int i=0;i<n;i++)
xy[i]=new float[2];
return xy;
}
 
 
void Line(float x1,float y1,float x2,float y2, float x3, float y3, float x4, float y4,float *x, float *y)
{
float A1,A2,B1,B2,C1,C2;
A1=y3-y1;A2=y4-y2;
B1=x1-x3;B2=x2-x4;
C1=x3*y1-x1*y3;
C2=x4*y2-x2*y4;
*x=(B1*C2-B2*C1)/(A1*B2-A2*B1);
*y=(C1*A2-C2*A1)/(A1*B2-A2*B1);
}
 
 
 
int Proverka(float x1,float y1,float x2,float y2, float x3, float y3, float x4, float y4, float x, float y)
{
float maxx,maxy,minx,miny;
maxx=x1;
maxy=y1;
minx=x1;
miny=y1;
 
if(x2>x1 && x2>x3 && x2>x4)
maxx=x2;
else minx=x2;
if(x3>x1 && x3>x2 && x3>x4)
maxx=x3;
else minx=x3;
if(x4>x1 && x4>x3 && x4>x2)
maxx=x4;
else minx=x4;
if(y2>y1 && y2>y3 && y2>y4)
maxy=y2;
else miny=y2;
if(y4>y1 && y4>y3 && y4>y2)
maxy=y4;
else miny=y4;
if(y3>y1 && y3>y2 && y3>y4)
maxy=y3;
else miny=y3;
 
 
 
if(x>minx && x<maxx && y>miny && y<maxy)
return 1;
else return 0;
}
 
 
 
 
 
 
 
void massive(float** xy,int n)
{
 
printf("Vvedite koordinaty vershin:\n");
 
for(int k=0; k<n; k++)
{
   scanf("%f",&xy[k][0]);
   scanf("%f",&xy[k][1]);
 
printf("Koordinats: x[%d] = %5.2f;  y[%d] = %5.2f \n",k+1, xy[k][0], k+1, xy[k][1]);
}
}
 
void main()
{
 
int n,k,i;
float S,S2,x,y,j;
float S1=0;
 
printf("Vvedi kollichestvo vershin = ");
scanf("%d",&n);
 
float** xy;
xy=create_xy(n);
massive(xy,n);
 
for(j=0;j<n;j++)
Line(xy[j][0],xy[j][1],xy[j+1][0],xy[j+1][1],xy[j+2][0],xy[j+2][1],xy[j+3][0],xy[j+3][1],&x,&y);
 
 
for(k=0;k+3<n;k++)
 
if(Proverka(xy[k][0],xy[k][1],xy[k+1][0],xy[k+1][1],xy[k+2][0],xy[k+2][1],xy[k+3][0],xy[k+3][1],x,y)==1)
{
if(Proverka(xy[n-3][0],xy[n-3][1],xy[n-2][0],xy[n-2][1],xy[n-1][0],xy[n-1][1],xy[0][0],xy[0][1],x,y)==1)
 
for(i=0;i+1<n;i++)
{
S1=S1+((xy[i][0]-xy[i+1][0])*(xy[i][1]+xy[i+1][1]));
}
S2=S1+(xy[n-1][0]-xy[0][0])*(xy[n-1][1]+xy[0][1]);
S=0.5*abs(S2);
printf("S mnogougolnika = %5.2f ",S);
}
else printf("Oshibka v vode koordinats");
}
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.01.2014, 01:16     Программа должна находить площадь произвольного многоугольника #27
В какой среде делаете?
-Arabella-
0 / 0 / 0
Регистрация: 20.10.2013
Сообщений: 231
25.01.2014, 11:25  [ТС]     Программа должна находить площадь произвольного многоугольника #28
alsav22, Borlanc C++ 3.1
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.01.2014, 17:09     Программа должна находить площадь произвольного многоугольника #29
Цитата Сообщение от -Arabella- Посмотреть сообщение
Borlanc C++ 3.1
Это ваш выбор?
Этот код не должен компилироваться. Индексы массива не могут быть типа float (j).
-Arabella-
0 / 0 / 0
Регистрация: 20.10.2013
Сообщений: 231
26.01.2014, 01:11  [ТС]     Программа должна находить площадь произвольного многоугольника #30
alsav22,
Цитата Сообщение от alsav22 Посмотреть сообщение
Это ваш выбор?
Мне эта программа не очень нравится, но учимся на ней
Цитата Сообщение от alsav22 Посмотреть сообщение
Этот код не должен компилироваться. Индексы массива не могут быть типа float (j).
Я поменяла j на int, все так же работает и выдает 2 раза Ошибка в воде координат
C++ (Qt)
1
2
3
4
5
6
7
8
....
void main()
{
 
int n,k,i,j;
float S,S2,x,y;
float S1=0;
....
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
26.01.2014, 06:50     Программа должна находить площадь произвольного многоугольника #31
Цитата Сообщение от -Arabella- Посмотреть сообщение
Я поменяла j на int, все так же работает
А до того, как поменяли, всё компилировалось и работало (но криво)?
Цитата Сообщение от -Arabella- Посмотреть сообщение
и выдает 2 раза Ошибка в воде координат
Что вводите? Пример ввода, при котором два раза выдаёт.
Alex5
881 / 616 / 81
Регистрация: 12.04.2010
Сообщений: 1,552
26.01.2014, 14:51     Программа должна находить площадь произвольного многоугольника #32
Найти площадь треугольника ABC можно, вычислив векторное произведение векторов AB и AC. Оно равно +2*S или -2*S.
Разобьём многоугольник на треугольники - см. рис.
Вычислим векторные произведения A0A1 на A0A2, A0A2 на A0A3, и т.д.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include <stdio.h>
 
struct point
{
    float x, y;
};
 
// n - число сторон, A[] - координаты вершин 
float square_of_polygon( const int n, const point A[] )
{
    if( n <= 0  || A == 0 )
        return 0.0;
 
    typedef point vect;
    vect * diag = 0;
    diag = new vect[n];
    if( ! diag ) 
        return 0.0;
 
    // diag[i] это векторы A0A0, A0A1, A0A2, A0A3, ...
    for( int i=0; i<n; ++i ) 
    {
        diag[i].x = A[i].x - A[0].x;
        diag[i].y = A[i].y - A[0].y;
    }
 
    // вычисление площади 
    float S = 0.0;
    for( int i=2; i<n; ++i ) 
    {
        // площадь параллелограмма, стороны 
        // которого - векторы diag[i], diag[i-1]
        //
        // вычисляем векторное произведение diag[i] и diag[i-1]
        //
        S += diag[i].x * diag[i-1].y  -  diag[i].y * diag[i-1].x ;
    }
    S /= 2.0;
    if( S < 0 ) S = -S;
 
    // освобождаем память 
    delete[] diag;
 
    return S;
}
int main()
{
    point P[] = { { 4, 2 }, { 6, 3 }, { 5, 5 }, { 3, 4 } };
    int n = sizeof( P ) / sizeof( P[0] );
 
    float sq = square_of_polygon( n, P );
    printf( "\n square of polygon :  %10.3f \n", sq );
 
    getchar();
    return 0;
}
Миниатюры
Программа должна находить площадь произвольного многоугольника  
salam
157 / 138 / 11
Регистрация: 10.07.2012
Сообщений: 709
26.01.2014, 15:54     Программа должна находить площадь произвольного многоугольника #33
Цитата Сообщение от Alex5 Посмотреть сообщение
Разобьём многоугольник на треугольники - см. рис.
прямоугольник по условию произвольный. по моим представлениям (не выпуклый) http://www.cyberforum.ru/cgi-bin/latex.cgi?\in (произвольные).
а вообще говоря, дорогой ТС, эта задача решается очень лаконично.
пусть vertex[1,...,n,1] - список вершин многоугольника (первую вершину запишем дважды для удобства). тогда общую площадь найдем так:
C++
1
2
3
4
5
6
7
8
9
double area(vertex v1, vertex v2) {
   return (v2.x - v1.x) * (v1.y + v2.y);
}
 
Area = 0;
for(int i=0; i < n; ++i)
   Area += area(vertex[i], vertex[i+1]);
Area /= 2;
Area = abs(Area); (тут лежит ответ)
суть состоит в том, что мы складываем ориентированные площади трапеций. за счет учета знака метод работает для произвольных многоугольников. порисуйте на бумажке - вам станет понятно.
-Arabella-
0 / 0 / 0
Регистрация: 20.10.2013
Сообщений: 231
26.01.2014, 22:44  [ТС]     Программа должна находить площадь произвольного многоугольника #34
alsav22,
Цитата Сообщение от alsav22 Посмотреть сообщение
А до того, как поменяли, всё компилировалось и работало (но криво)?
Да, как и после изменения, так и до, ничего не поменялось при смене j с float на int
Alex5, Спасибо за пример, но я очень плохо разбираюсь в програмировании и мне сложно будет перестроиться с одного на другое, я площадь нахожу по формуле площади многоугольника для любого произвольного многоугольника, выпуклого и невупуклого
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
26.01.2014, 22:52     Программа должна находить площадь произвольного многоугольника #35
Цитата Сообщение от -Arabella- Посмотреть сообщение
Да,
???
Цитата Сообщение от alsav22 Посмотреть сообщение
Что вводите? Пример ввода, при котором два раза выдаёт.
-Arabella-
0 / 0 / 0
Регистрация: 20.10.2013
Сообщений: 231
27.01.2014, 00:20  [ТС]     Программа должна находить площадь произвольного многоугольника #36
alsav22, Вот, я пробую на примере шестиугольника http://www.cyberforum.ru/attachments/358225d1390587749
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.01.2014, 00:42     Программа должна находить площадь произвольного многоугольника #37
У меня, при таком вводе (1-й скрин), такой результат.
Миниатюры
Программа должна находить площадь произвольного многоугольника   Программа должна находить площадь произвольного многоугольника  
Alex5
881 / 616 / 81
Регистрация: 12.04.2010
Сообщений: 1,552
27.01.2014, 13:04     Программа должна находить площадь произвольного многоугольника #38
Цитата Сообщение от -Arabella- Посмотреть сообщение
Вот, я пробую на примере шестиугольника http://www.cyberforum.ru/attachments/358225d1390587749
-Arabella-, площадь многоугольника у Вас здесь вычислена правильно.

Что касается сообщения "Oshibka v vode ... ", ошибка на самом деле не в вводе, а в
фунции Proverka, раз правильные данные она расценивает как ошибочные.

Цитата Сообщение от -Arabella- Посмотреть сообщение
Моя программа должна находит площадь произвольного многоугольника, с предварительной проверкой, можно ли построить его вообще
Что значит "можно ли построить его"? Любой многоугольник можно построить

Добавлено через 39 минут
Цитата Сообщение от Alex5 Посмотреть сообщение
ошибка на самом деле не в вводе, а в
фунции Proverka, раз правильные данные она расценивает как ошибочные
Я неверно выразился. Ошибка в структуре функции main()

Добавлено через 6 минут
Вот как выглядит main, если отформатировать код
Цитата Сообщение от -Arabella- Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/* фрагмент функции main() */
/* этот код скопирован из #26, добавлено форматирование */
 
    for(j=0;j<n;j++)
        Line(xy[j][0],xy[j][1],xy[j+1][0],xy[j+1][1],xy[j+2][0],xy[j+2][1],xy[j+3][0],xy[j+3][1],&x,&y);
    /* цикл for( j... ) завершается до входа в цикл for( k ... ) Поэтому дальше используются
      значения x, y, вычисленные при j == n-1 */
 
    for(k=0;k+3<n;k++)
 
        if(Proverka(xy[k][0],xy[k][1],xy[k+1][0],xy[k+1][1],xy[k+2][0],xy[k+2][1],xy[k+3][0],xy[k+3][1],x,y)==1)
        {
            if(Proverka(xy[n-3][0],xy[n-3][1],xy[n-2][0],xy[n-2][1],xy[n-1][0],xy[n-1][1],xy[0][0],xy[0][1],x,y)==1)
 
                for(i=0;i+1<n;i++)
                {
                    S1=S1+((xy[i][0]-xy[i+1][0])*(xy[i][1]+xy[i+1][1]));
                }
                S2=S1+(xy[n-1][0]-xy[0][0])*(xy[n-1][1]+xy[0][1]);
                S=0.5*abs(S2);
                printf("S mnogougolnika = %5.2f ",S);
        }
        else printf("Oshibka v vode koordinats");
-Arabella-
0 / 0 / 0
Регистрация: 20.10.2013
Сообщений: 231
28.01.2014, 00:40  [ТС]     Программа должна находить площадь произвольного многоугольника #39
alsav22,
Может это изза того, что у меня старая программа и она не замечает какие-то ошибки?
Alex5,
Цитата Сообщение от Alex5 Посмотреть сообщение
Что значит "можно ли построить его"? Любой многоугольник можно построить
Я как всегда не совсем правильно выразилась Программа проверяет можно ли построить по данным координатам
Цитата Сообщение от Alex5 Посмотреть сообщение
/* цикл for( j... ) завершается до входа в цикл for( k ... ) Поэтому дальше используются
* * * значения x, y, вычисленные при j == n-1 */
Вы имеете в виду, что мне нужно цикл по k засунуть в цикл по j? При такой постановке скобок, у меня вылезает ошибка missplaced else, значит я не так поставила, я думаю, что цикл по k должен заканчиваться после посылке Proverka([k].....), но опять при закрытии скобки после первой Proverka ошибка о else
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
  for(j=0;j<n;j++)
      [COLOR="Red"]{[/COLOR]  Line(xy[j][0],xy[j][1],xy[j+1][0],xy[j+1][1],xy[j+2][0],xy[j+2][1],xy[j+3][0],xy[j+3][1],&x,&y);
    
 
 for(k=0;k+3<n;k++)
 
        if(Proverka(xy[k][0],xy[k][1],xy[k+1][0],xy[k+1][1],xy[k+2][0],xy[k+2][1],xy[k+3][0],xy[k+3][1],x,y)==1)
        {
            if(Proverka(xy[n-3][0],xy[n-3][1],xy[n-2][0],xy[n-2][1],xy[n-1][0],xy[n-1][1],xy[0][0],xy[0][1],x,y)==1)
                  
                for(i=0;i+1<n;i++)
                {
                    S1=S1+((xy[i][0]-xy[i+1][0])*(xy[i][1]+xy[i+1][1]));
                }
                S2=S1+(xy[n-1][0]-xy[0][0])*(xy[n-1][1]+xy[0][1]);
                S=0.5*abs(S2);
                printf("S mnogougolnika = %5.2f ",S);
        } [COLOR="Red"]}[/COLOR]
        else printf("Oshibka v vode koordinats");
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.01.2014, 11:49     Программа должна находить площадь произвольного многоугольника
Еще ссылки по теме:

найти площадь многоугольника C++
C++ Вычислить площадь простого многоугольника
Площадь выпуклого многоугольника методом триангуляции C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Alex5
881 / 616 / 81
Регистрация: 12.04.2010
Сообщений: 1,552
28.01.2014, 11:49     Программа должна находить площадь произвольного многоугольника #40
-Arabella-, во всяком случае, площадь Ваша программа вычисляет правильно. Ну а проверка данных должна выполняться перед вычислением площади.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int main()
{
    // ввод данных 
    // ... 
    int n;
    float** xy;
 
    bool b = PolnayaProverka( xy, n ); /* можно все циклы с проверкой поместить в отдельной функции */
 
    if( b )
    {
        // вычисляем площадь 
    }
 
    // вывод результатов 
    // ... 
}
Yandex
Объявления
28.01.2014, 11:49     Программа должна находить площадь произвольного многоугольника
Ответ Создать тему
Опции темы

Текущее время: 11:59. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru