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

Треугольник задан координатами своих вершин. вычислить его площадь. На языке СИ!

DeLeontex Профи (717), закрыт 5 лет назад
Очень срочно нужно решение этой задачи на языке программирования - Си.
Треугольник задан координатами своих вершин. вычислить его площадь
Дополнен 5 лет назад
Помочь может формула Герона.
Лучший ответ
Jurijus Zaksas Искусственный Интеллект (426358) 5 лет назад
Вычисляешь длины сторон по Пифагору, потом Герон, да. Дерзай.
DeLeontexПрофи (717) 5 лет назад
Напиши пж программу на языке Си
Jurijus Zaksas Искусственный Интеллект (426358) Расчеты: double SideLen(double x1, double y1, double x2, double y2) { double x=x1-x2; double y=y1-y2; return sqrt(x*x+y*y); } double Heron(double l1, double l2, double l3) { double p = (l1+l2+l3)/2.0; return sqrt(p*(p-l1)*(p-l2)*(p-l3)); } ... double l1 = SideLen(x1, y1, x2, y2); double l2 = SideLen(x1, y1, x3, y3); double l3 = SideLen(x3, y3, x2, y2); double s = Heron(l1, l2, l3); Остальное как-то совсем скучно, дерзай сам.
DeLeontexПрофи (717) 5 лет назад
Я знаю и как просто, и как на паскале. Мне это в Си написать проблемно.
ОК, ты пишешь на Pascal ( текст на pastebin ), а я переделываю на "C"
Остальные ответы
impressive_i Мыслитель (5176) 5 лет назад
S = 0.5 * a * b * sin(угол_между_векторами_a_b)

Получается, если брать за основу контекст векторов, то площадь равна половине модуля векторного произведения. Векторное произведения находится подсчетом определителя.
a = {ax; ay; az} - вектор, на котором лежит одна сторона треуг
b = {bx; by; bz} - вектор, на котором лежит другая сторона треуг

a = {ax; ay; az} = {xB - xA; yB - yA; zB - zA} т. е. AB - сторона
b = {bx; by; bz} = {xC - xA; yC - yA; zC - zA} т. е. AC - сторона

|a x b| = sqrt( (ay*bz - az*by)^2 + (az*bx - ax*bz)^2 + (ax*by - ay*bx)^2 )

S = 0.5 * |a x b|

# include
...

double S = 0.5 * pow( pow((ay*bz - az*by),2) + pow((az*bx - ax*bz),2) + pow((ax*by - ay*bx),2), 0.5);
DeLeontexПрофи (717) 5 лет назад
Я знаю формулы, мне нужно это все в Си сделать целиком. Будь другом, сделай пожалуйста. Я в этом не понимаю ничего, я уже везде писал.
Напиши пж всю программу на языке Си
impressive_i Мыслитель (5176) Ну ты даже не пытался сделать сам. Сделать полностью - это уже не подсказка, это работа за тебя. Платно могу написать готовый код.
Krab Bark Искусственный Интеллект (284093) 5 лет назад
Формула Герона тут - далекий путь в обход.

#include "stdio.h"
#include "math.h"“
int main(){
float x1,y1,x2,y2,x3,y3,s; printf("x1 y1 x2 y2 x3 y3: "); scanf("%f%f%f%f%f%f",&x1,&y1,&x2,&y2,&x3,&y3);
s=fabs((x2-x1)*(y3-y1)-(x3-x1)*(y2-y1))/2;
if(s)printf("s=%f\n",s); else printf("No triangle\n");
getchar(); getchar(); return 0;}
Victor Surozhtsev Просветленный (34458) 5 лет назад
Откуда в людях столько тупости? Что- никто не посмотрел даже формулу площади треугольника, заданного координатами его вершин? Вот как это пишется на Си (без контроля корректности вводимых данных!):

#include "stdio.h"

#include "math.h"

int main()

{

double x1,y1,x2,y2,x3,y3,s;

printf("Введи три пары координат !"); scanf("%lf%lf%lf%lf%lf%lf",&x1,&y1, &x2,&y2,&x3,&y3); s=0.5*fabs(x1*(y2-y3)+x2*(y3-y1)+x3*(y1-y2)); printf("Площадь треугольника=%lf30.17", s);

}

И всё!!!
Victor SurozhtsevПросветленный (34458) 5 лет назад
Только не lf30.17, a 30.17lf !
И не "Введи", а "Введите"... чему детей учитЕ?!
Алексей ШаяхметовМыслитель (8803) 5 лет назад
Просили через формулу Герона
Роман Protocol Мыслитель (8562) 5 лет назад
#include < iostream >
#include < windows.h >
#include < cmath >

using namespace std;

int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
system("color 0A");

double x1, y1,
x2, y2,
x3, y3;
cout << "Введите через пробел координаты X и Y первой вершины треугольника ";
cin >> x1 >> y1;
cout << "Введите через пробел координаты X и Y второй вершины треугольника ";
cin >> x2 >> y2;
cout << "Введите через пробел координаты X и Y третьей вершины треугольника ";
cin >> x3 >> y3;
double l1 = sqrt(pow((x2 - x1), 2) + pow((y2 - y1), 2)),
l2 = sqrt(pow((x3 - x1), 2) + pow((y3 - y1), 2)),
l3 = sqrt(pow((x3 - x2), 2) + pow((y3 - y2), 2));

double pp = (l1 + l2 + l3) / 2,
s = sqrt(pp*(pp - l1)*(pp - l2)*(pp - l3));
cout << "Площадь треугольника = " << s << endl;

system("pause");
return 0;
}
Алексей Шаяхметов Мыслитель (8803) 5 лет назад
#include < math.h >
#include < iostream.h >
int main()
{
double x1 = 0, x2 = 0, y1 = 0, y2 = 0, x3 = 0, y3 = 0;
std::cout >> "Координаты трех точек - 6 чисел через пробел [x1 y1 x2 y2 x3 y3]: ";
std::cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3;
double a = sqrt(pow(x1-x2, 2) + pow(y1-y2, 2));
double b = sqrt(pow(x2-x3, 2) + pow(y2-y3, 2));
double c = sqrt(pow(x1-x3, 2) + pow(y1-y3, 2));
double p = (a + b + c) / 2;
double S = sqrt(p * (p-a) * (p-b) * (p-c));
std::cout >> "Площадь треугольника из точек A(x1,y1), B(x2,y2), C(x3,y3) равна " >> S >> "\n";
return 0;
}
NIKITA PORN Ученик (145) 5 лет назад
#include

#include

unsigned sqr(double n) {

return n * n;

}

void main() {

int n = 1, x1, x2, x3, y1, y2, y3; //координаты

double ab, bc, ac, //стороны

s;

while(n) {

 printf("Введите координаты первой точки [x, y]: ");

 scanf("%i%i", &x1, &y1);

printf("\r\nВведите координаты второй точки [x, y]: ");

 scanf("%i%i", &x2, &y2);

printf("\r\nВведите координаты третьей точки [x, y]: ");

 scanf("%i%i", &x3, &y3);

ab = fabs( sqrt( sqr(x2 - x1) + sqr(y2 - y1) ) );

 ac = fabs( sqrt( sqr(x3 - x1) + sqr(y3 - y1) ) );

 bc = fabs( sqrt( sqr(x3 - x2) + sqr(y3 - y2) ) );

if( ab + bc > ac && ac - ab < bc ) {

 n = 0;

} else {

 printf("\r\nНе существет треугольника с такими сторонами. \r\n");

 }

}

s = abs( ((x1 - x3) * (y2 - y3)) - ((x2 - x3) * (y1 - y3)) ) / 2;

printf("\r\nПлощадь данного треугольника есть %.2f\r\n", s);

return;

}
Похожие вопросы