Площадь многоугольника - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Многоугольник на плоскости задан целочисленными координатами своих N вершин в декартовой системе координат. Требуется найти площадь многоугольника. Стороны многоугольника не соприкасаются (за исключением соседних – в вершинах) и не пересекаются. Вот мой код (взято отсюдаНайти площадь многоугольника по координатам):
#include <stdio.h>
int main(){
FILE *in,*out;
in=fopen("input.txt","r");
out=fopen("output.txt","w");
 
float s;
int n,min;
char x[500];
char y[500];
fscanf(in,"%d",&n);
for(int i=0;i<n;i++)
fscanf(in,"%d %d",x[i], y[i]);
x[n+1]=x[0];
y[n+1]=y[0];
min=y[0];
for(int i=1;i<n;i++){
if(min>y[i]) 
min=y[i];
else for(int i=0;i<n+1;i++)
y[i]=y[i]-min;
}
s=0;
for(int i=0;i<n;i++){
s=s+((y[i+1]+y[i])*(x[i+1]-x[i])/2);
}
fprintf(out,"%d",s);
fclose(in);
fclose(out);
}
Программа компилируется, но вылетает при запуске. В чем ошибка?

Решение задачи: «Площадь многоугольника»

textual
Листинг программы
FILE *in,*out;
in=fopen("input.txt","r");
out=fopen("output.txt","w");
 
float s;
int n,min;
char x[50];
char y[50];
fscanf(in,"%d",&n);
for(int i=0;i<n;i++)
{
fscanf(in,"%d",&x[i]);
fscanf(in,"%d",&y[i]);
}
x[n+1]=x[0];
y[n+1]=y[0];
 
min=y[0];
for(int i=1;i<n;i++)
if(min>y[i])min=y[i];
 
for(int i=0;i<n+1;i++)
y[i]=y[i]-min;
 
s=0;
for(int i=0;i<n;i++){
s=s+((y[i+1]+y[i])*(x[i+1]-x[i])/2);
 
//отнять площади
 
}
fprintf(out,"%f",s);
fclose(in);
fclose(out);

Объяснение кода листинга программы

В этом коде считываются координаты вершин многоугольника из файла input.txt и записываются в файл output.txt.

  1. Считывание количества вершин многоугольника (n)
  2. Считывание координат вершин многоугольника (x[i],y[i])
  3. Последняя координата x[n+1] = x[0] и y[n+1] = y[0] для замыкания контура многоугольника в первой вершине
  4. Находится минимальное значение координаты y среди всех вершин многоугольника (min)
  5. Все значения координат y вычитается min, чтобы перевести их в относительные координаты относительно минимального значения
  6. Считается площадь многоугольника по формуле Герона (s)
  7. Значение площади s записывается в файл output.txt
  8. Файлы input.txt и output.txt закрываются В этом коде нет проверки на достаточность памяти для массивов x и y, поэтому он может вызвать ошибку из-за переполнения буфера, если количество вершин многоугольника будет слишком большим.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.867 из 5
Похожие ответы