// Примерна програма за работа със структури и функции
// Дадени са N точки в равнината, зададени с техните координати, като те образуват изпъкнал N-ъгълник.
// Да се изчислят и изведат лицето и периметъра на N-ъгълника.
#include
#include
const Nmax=100;
// структура за точка
struct point_str {
double x,y;
};
// деклариране на масив от структурни данни за точки
point_str P[Nmax];
double L,S;
//Функция за изчисляване разстояние между две точки
double dist(double x1, double y1, double x2, double y2) {
double d;
d=sqrt(pow(x2-x1,2)+pow(y2-y1,2));
return d;
}
//Функция за изчисляване лице на триъгълник по координати на 3те му точки
//по Херонова формула
double area(double x1, double y1, double x2, double y2, double x3, double y3) {
double s,a,b,c,p;
a=dist(x1,y1,x2,y2);
b=dist(x2,y2,x3,y3);
c=dist(x1,y1,x3,y3);
p=(a+b+c)/2;
s=sqrt(p*(p-a)*(p-b)*(p-c));
return s;
}
// Функция за въвеждане на цяла променлива в зададен интервал [min, max]
int Input_M(char text[20], int min, int max) {
int m;
do {
cout << text; cin >> m;
}
while (mmax);
return m;
}
// функция за въвеждане на координати на N точки
void Input_Points(int N, point_str Points[Nmax]) {
for (int i=0; i
cout<<"точка "<
cout<<"x="; cin >> Points[i].x;
cout<<"y="; cin >> Points[i].y;
}
}
// функция за изчисляване на лице на изпъкнал N-ъгълник, който се разделя на N-2 триъгълника
double Area_NPoints(int N, point_str Points[Nmax]) {
double s=0;
for (int i=0; i
s+=area(Points[0].x,Points[0].y,Points[i+1].x,Points[i+1].y,Points[i+2].x,Points[i+2].y);
return s;
}
// функция за изчисляване на обиколка на изпъкнал N-ъгълник
double Perimeter_NPoints(int N, point_str Points[Nmax]) {
double p=0;
for (int i=0; i
p+=dist(Points[i].x,Points[i].y,Points[i+1].x,Points[i+1].y);
p+=dist(Points[N-1].x,Points[N-1].y,Points[0].x,Points[0].y);
return p;
}
void main () {
int N=Input_M("Въведете брой точки N=",2,Nmax);
Input_Points(N,P);
S=Area_NPoints(N,P);
cout<<"Лицето на многоъгълника е S="<
L=Perimeter_NPoints(N,P);
cout<<"Обиколката на многоъгълника е L="<
}
Сподели с приятели: |