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