Другие языки программирования и технологии

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

Очень срочно нужно решение этой задачи на языке программирования - Си.
Треугольник задан координатами своих вершин. вычислить его площадь
Pargev Hovhannisyan
Pargev Hovhannisyan
695
Вычисляешь длины сторон по Пифагору, потом Герон, да. Дерзай.
ВД
Виталя Дейнега
71 183
Лучший ответ
Pargev Hovhannisyan Напиши пж программу на языке Си
Pargev Hovhannisyan Я знаю и как просто, и как на паскале. Мне это в Си написать проблемно.
Формула Герона тут - далекий путь в обход.

#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;}
Maxim Ирин
82 472
Откуда в людях столько тупости? Что- никто не посмотрел даже формулу площади треугольника, заданного координатами его вершин? Вот как это пишется на Си (без контроля корректности вводимых данных!):

#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);

}

И всё!!!
Миша Редникин
Миша Редникин
28 648
Миша Редникин Только не lf30.17, a 30.17lf !
Владимир Гарифов Просили через формулу Герона
#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;
}
#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;
}
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);
Pargev Hovhannisyan Я знаю формулы, мне нужно это все в Си сделать целиком. Будь другом, сделай пожалуйста. Я в этом не понимаю ничего, я уже везде писал.
Напиши пж всю программу на языке Си
#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;

}

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