Площадь многоугольника - 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, поэтому он может вызвать ошибку из-за переполнения буфера, если количество вершин многоугольника будет слишком большим.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д