Другие языки программирования и технологии
Помогите с програмой ) Не знаю как дальше решать )
Вот условие задачи: Площадь выпуклого многоугольника. Даны натуральное число 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; //Возвращает ноль при правильном завершении программы } Нужно разделить многоугольник на треугольники и посчитать площадь, складывая площади треугольников. Подсчет площади треугольника организован в подпрограмме.
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);
} майл глумится В се вводиш в массивы естественно а не так ка лтображенно Нулевые элементы привязываешь до цикла в цикле разберешься Меня только один вопрос мучает с твоего предыдущего поста Ты вводиш данные с рисунка или произвольно? просто если произвольно нужно кучу проверок (на неравенство двух точек чтобы три соседние в ряд не стояли)
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);
} майл глумится В се вводиш в массивы естественно а не так ка лтображенно Нулевые элементы привязываешь до цикла в цикле разберешься Меня только один вопрос мучает с твоего предыдущего поста Ты вводиш данные с рисунка или произвольно? просто если произвольно нужно кучу проверок (на неравенство двух точек чтобы три соседние в ряд не стояли)
// ~ЯнОчК@~_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));
}
}
#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));
}
}
Посмотри мой ответ в более старом вопросе.
Похожие вопросы
- Может кто знает? Не нужно решать, прост может кто знает как записать формулу расчета с целым и остатком? Заранее спасибо
- Как думаете, можно ли сознать программу, которая будект знать всё, и решать любые вопросы?
- Знаю хорошо язык программирования на 70% то что необходимо на начальном этапе. Но не могу решать некоторые задачи.
- Как пользоватся програмой Денвер!
- Какой програмой можно создать инсталятор для драйвера (inf и sys файлов)
- Помогите до решать задачу на паскале
- Как вы решаете задачи?
- В какой последовательности учить веб языки, знаю html как дальше ?
- Люди, знающие SQL, помогите сделать запрос.
- Зачем нужно уметь решать сложные неравенства, интегралы и уравнения. Если с этим комп лучше справляется чем человек?