Определить, где находится начало координат, если известны координаты вершин треугольника (Pascal -> Си) - C (СИ)
Формулировка задачи:
Вопрос: Определить, где находится начало координат, если известны координаты вершин треугольника
type TXY = record x, y: Real end;
function sqt(a, b, c: TXY): Real;
begin
sqt:=abs((a.x-b.x)*(c.y-b.y)-(a.y-b.y)*(c.x-b.x))/2;
end;
const
eps=1e-4;
o: TXY = (x:0; y:0);
var
a, b, c: TXY;
s1, s2, s3: Real;
begin
Write('Введите координаты вершин треугольника: ');
ReadLn(a.x,a.y,b.x,b.y,c.x,c.y);
s1:=sqt(o,a,b); s2:=sqt(o,b,c); s3:=sqt(o,a,c);
Write('Центр координат лежит ');
if abs(s1)<eps then WriteLn('на стороне AB')
else if abs(s2)<eps then WriteLn('на стороне BC')
else if abs(s3)<eps then WriteLn('на стороне AC')
else if abs(s1+s2+s3-sqt(a,b,c))<eps then WriteLn('внутри треугольника')
else WriteLn('вне треугольника');
end.Решение задачи: «Определить, где находится начало координат, если известны координаты вершин треугольника (Pascal -> Си)»
textual
Листинг программы
//gcc 4.9.3
#include <stdio.h>
#include <math.h>
struct TXY
{
double x;
double y;
};
double sqt(const struct TXY a, const struct TXY b, const struct TXY c)
{
return fabs((a.x - b.x) * (c.y - b.y) - (a.y - b.y) * (c.x - b.x)) / 2.0;
}
int main(void)
{
const double eps = 1e-4;
const struct TXY o = {.x = 0.0, .y = 0.0};
struct TXY a, b, c;
double s1, s2, s3;
printf("Введите координаты вершин треугольника: ");
scanf("%lf%lf%lf%lf%lf%lf", &a.x, &a.y, &b.x, &b.y, &c.x, &c.y);
s1 = sqt(o, a, b);
s2 = sqt(o, b, c);
s3 = sqt(o, a, c);
printf("Центр координат лежит ");
if (fabs(s1) < eps) printf("на стороне AB\n");
else if (fabs(s2) < eps) printf("на стороне BC\n");
else if (fabs(s3) < eps) printf("на стороне AC\n");
else if (fabs(s1 + s2 + s3 - sqt(a, b, c)) < eps) printf("внутри треугольника\n");
else printf("вне треугольника\n");
return 0;
}
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы
- Объявляем структуру для хранения координат
- Определяем функцию для вычисления площади треугольника по координатам вершин
- Объявляем переменные для хранения координат вершин треугольника и длины сторон
- Задаем константу для контроля (1e-4) и инициализируем начальную точку (o)
- Считываем координаты вершин треугольника с помощью функции scanf
- Вычисляем площади треугольников, используя функцию sqt и передавая ей координаты вершин
- Выводим сообщение о том, где находится центр координат, используя условные операторы if
- Возвращаем 0, чтобы указать, что программа успешно завершилась