Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите с програмой ) Не знаю как дальше решать )

~ЯнОчК@~ Знаток (377), закрыт 12 лет назад
Вот условие задачи: Площадь выпуклого многоугольника. Даны натуральное число n, действительные числа x1, y1, x2, y2, ..xn, yn. Найти площадь выпуклого n-угольника, вершины которого при некотором последовательном обходе имеют координаты (x1, y1), (x2, y2), ..(xn, yn). Определите подпрограмму вычисления площади треугольника по координатам его вершин.

Моя программа:

#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <stdlib.h>
float ploshad (int x1, int y1, int x2, int y2, int x3, int y3)
{ float S=0;
int i;
float d1, d2, d3, p;

d1=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
d2=sqrt((x3-x2)*(x3-x2)+(y3-y2)*(y3-y2));
d3=sqrt((x3-x1)*(x3-x1)+(y3-y1)*(y3-y1));

p=(d1+d2+d3)/2;

S=sqrt(p*(p-d1)*(p-d2)*(p-d3));
return S;
}
int main()
{ //Ввод исходных данных
int n, i, x1, x2, x3, y1, y2, y3;
int x[20], y[20];
float p, d1, d2, d3, S;
printf("Введите количество углов многоугольника n= ");
scanf("%d", &n);
printf("Введите координаты точек\n");
for (i=0; i<n;>);
printf("y[%d]= ", i);
scanf("%d", &y);
}

printf("S= %d\n", S);

getch();
return 0; //Возвращает ноль при правильном завершении программы
}

Нужно разделить многоугольник на треугольники и посчитать площадь, складывая площади треугольников. Подсчет площади треугольника организован в подпрограмме.
Лучший ответ
dohtor Мудрец (12454) 12 лет назад
for (i=0; i<n;i++)>>x;

cin>>y;

}
x1=x[0];
y1=y[0];
for (i=1; i<n-1;i++)>;
y2=y;
x3=x[i+1];

y3=y[i+1];
i++;

S +=ploshad(x1,y1,x2,y2,x3,y3);
} майл глумится В се вводиш в массивы естественно а не так ка лтображенно Нулевые элементы привязываешь до цикла в цикле разберешься Меня только один вопрос мучает с твоего предыдущего поста Ты вводиш данные с рисунка или произвольно? просто если произвольно нужно кучу проверок (на неравенство двух точек чтобы три соседние в ряд не стояли)
Остальные ответы
Krab Вark Оракул (56958) 12 лет назад
Посмотри мой ответ в более старом вопросе.
Николай Веселуха Высший разум (360748) 12 лет назад
// ~ЯнОчК@~_Polygon
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <locale>
#define M 2

float triangleArea(float, float, float, float, float, float);

int main()
{
setlocale(LC_CTYPE, "Russian_Russia.1251");

float polygonArea = 0.0;
int N;

printf("\n Введите количество улов многоугольника, n = ");
scanf("%d", &N);
float ** Array = (float **) malloc(N * sizeof(float *));

printf("\n Введите координаты точек: \n");
for (int n = 0; n < N; n++)
{
Array[n] = (float *) malloc(M * sizeof(float));

for (int m = 0; m < M; m++)
{
if (m == 0)
{
printf("\n x%d = ", m + 1);
scanf("%f", &Array[n][m]);
}
else
{
printf(" y%d = ", m + 1);
scanf("%f", &Array[n][m]);
}
}
printf("\n");
}

for (int n = 1; n < N - 1; n++) polygonArea += triangleArea(Array[0][0], Array[0][1], Array[n][0], Array[n][1], Array[n + 1][0], Array[n + 1][1]);

printf("\n\n Площадь выпуклого многоугольника = %f", polygonArea);
getch();

for (int n = 0; n < N; n++) free (Array[n]);
free (Array);
}

float triangleArea(float x1, float y1, float x2, float y2, float x3, float y3)
{
if (x1 * (y2 - y3) + x2 * (y3 - y1) + x3 * (y1 - y2) == 0) return 0.0;
else
{
float a, b, c, p;

a = sqrt(pow(x2 - x1, 2) + pow(y2 - y1, 2));
b = sqrt(pow(x3 - x2, 2) + pow(y3 - y2, 2));
c = sqrt(pow(x1 - x3, 2) + pow(y1 - y3, 2));
p = (a + b + c) / 2;

return sqrt(p * (p - a) * (p - b) * (p - c));
}
}
Похожие вопросы