Вычислить периметр многоугольника, целые координаты которого хранятся в массиве структур - C (СИ)
Формулировка задачи:
Вычислить периметр многоугольника,целые координаты которого хранятся в массиве структур.Вывести на экран координаты каждой вершины и периметр.Вычисление длины отрезка,заполнение динамического массива координат,вывод координат на экран оформить в виде функций.ПОМОГИТЕ ПОЖАЛУЙСТА
Решение задачи: «Вычислить периметр многоугольника, целые координаты которого хранятся в массиве структур»
textual
Листинг программы
#include <stdio.h>
#include <math.h>
struct point
{
float x;
float y;
};
float sqr(float x);
struct point* read_point (struct point *mass,int n); //чтение точек
void print_point(struct point *mass,int n);
float calc_per(struct point *mass,int n);
int main (void)
{
int n;
struct point *mass;
printf ("Vvedite kolichestvo vershin: ");
scanf ("%d",&n);
mass=(struct point *)malloc(n*sizeof(struct point));
mass=read_point(mass,n);
print_point(mass,n);
printf ("Perimetr=%.1f\n",calc_per(mass,n));
return 0;
}
float sqr(float x)
{
return x*x;
}
float calc_per(struct point *mass,int n)
{
int i;
float tmp=0;
for (i=0;i<n-1;i++)
{
tmp+=sqrt(sqr(mass[i+1].x-mass[i].x)+sqr(mass[i+1].y-mass[i].y));
}
tmp+=sqrt(sqr(mass[i].x-mass[0].x)+sqr(mass[i].y-mass[0].y));
return tmp;
}
void print_point (struct point* mass,int n)
{
int i;
struct point temp;
for (i=0;i<n;i++)
{
printf ("(%.1f;%.1f)\n",mass[i].x,mass[i].y);
}
}
struct point* read_point (struct point *mass,int n)
{
int i;
struct point temp;
for (i=0;i<n;++i)
{
scanf ("%f %f", &temp.x,&temp.y);
mass[i]=temp;
}
return mass;
}
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы: stdio.h и math.h
- Определяется структура point, представляющая точку в двумерном пространстве
- Определяются функции: sqr(x) - вычисляющая квадрат числа x, calc_per(mass,n) - вычисляющая периметр многоугольника по координатам точек в массиве mass, print_point(mass,n) - выводящая координаты точек на экран, read_point(mass,n) - считывающая координаты точек из стандартного ввода и сохраняющая их в массиве mass
- В функции main() создается переменная n для хранения количества вершин многоугольника, затем выделяется память под массив структур point с помощью malloc() и read_point(mass,n) заполняет этот массив координатами вершин многоугольника
- Вызывается функция print_point(mass,n) для вывода координат вершин многоугольника на экран
- Вычисляется периметр многоугольника с помощью функции calc_per(mass,n) и выводится на экран
- В конце программы возвращается 0, что означает успешное выполнение программы