Определить вид треугольника: остроугольный, прямоугольный, тупоугольный - C (СИ)
Формулировка задачи:
Сама задача: составьте алгоритм, определяющий Но программа работает правильно "через раз". Что тут не так?
по координатам
вершин треугольника его вид: остроугольный, прямоугольный, тупоугольный. Вот код, который я написал:#include<stdio.h>
#include<math.h>
#include<locale.h>
void main()
{
float a1, a2, b1, b2, c1, c2, x1, x2, x3, S;
setlocale(LC_ALL, "russian");
printf("Введите координаты, по которым будет построен треугольник\nВведите координаты первой точки:\n");
scanf_s("%f%f", &a1, &a2);
printf("Введите координаты второй точки:\n");
scanf_s("%f%f", &b1, &b2);
printf("Введите координаты третьей точки:\n");
scanf_s("%f%f", &c1, &c2);
x1 = sqrt(pow(b1 - a1, 2) + pow(b2 - a2, 2));
x2 = sqrt(pow(c1 - b1, 2) + pow(c2 - b2, 2));
x3 = sqrt(pow(c1 - a1, 2) + pow(c2 - a2, 2));
S = sqrt(((x1 + x2 + x3) / 2)*((x1 + x2 + x3) / 2 - x1)*((x1 + x2 + x3) / 2 - x2)*((x1 + x2 + x3) / 2 - x3));
if (x1*x1 + x2*x2 == x3*x3 && x1 != 0 && x2 != 0 && x3 != 0 && S!=0) printf("Треугольник прямоугольный\n");
else if (x1*x1 + x3*x3 == x2*x2 && x1 != 0 && x2 != 0 && x3 != 0 && S != 0) printf("Треугольник прямоугольный\n");
else if (x3*x3 + x2*x2 == x1*x1 && x1 != 0 && x2 != 0 && x3 != 0 && S != 0) printf("Треугольник прямоугольный\n");
else if (x1*x1 + x2*x2 < x3*x3 && S != 0) printf("Треугольник тупоугольный\n");
else if (x1*x1 + x3*x3 < x2*x2 && S != 0) printf("Треугольник тупоугольный\n");
else if (x3*x3 + x2*x2 < x1*x1 && S != 0) printf("Треугольник тупоугольный\n");
else if (a1 == b1 && a1 == c1 && b1 == c1 && a2 == b2 && a2 == c2 && b2 == c2) printf("Это координаты точки\n");
else if (S == 0) printf("Это координаты прямой\n");
else printf("Треугольник остроугольный\n");
}Решение задачи: «Определить вид треугольника: остроугольный, прямоугольный, тупоугольный»
textual
Листинг программы
x1 = hypot(b1 - a1, b2 - a2);
Объяснение кода листинга программы
- Импортируется библиотека math
- Переменная
a1содержит значение стороны треугольника - Переменная
b1содержит значение стороны треугольника - Переменная
c1содержит значение стороны треугольника - Вычисляется гипотенуза треугольника по формуле sqrt(a12 + b12)
- Переменная
a2содержит значение стороны треугольника - Переменная
b2содержит значение стороны треугольника - Переменная
c2содержит значение стороны треугольника - Вычисляется гипотенуза треугольника по формуле sqrt(a22 + b22)
- Вычисляется площадь треугольника по формуле: sqrt(s (s - a1) (s - b1) * (s - c1)) где s - полупериметр треугольника
- Вычисляется длина высот треугольника по формуле: sqrt(s (s - a1) (s - b1) * (s - c1)) где s - полупериметр треугольника
- Вычисляется длина медианы треугольника по формуле: sqrt(s (s - a1) (s - b1) * (s - c1)) где s - полупериметр треугольника
- Вычисляется длина биссектрисы треугольника по формуле: sqrt(s (s - a1) (s - b1) * (s - c1)) где s - полупериметр треугольника
- Вычисляется длина серединного отрезка треугольника по формуле: sqrt(s (s - a1) (s - b1) * (s - c1)) где s - полупериметр треугольника
- Если гипотенуза треугольника равна нулю, то треугольник считается прямоугольным
- Если гипотенуза треугольника не равна нулю, то треугольник считается остроугольным
- Если гипотенуза треугольника не равна нулю и остроугольным, то треугольник считается тупоугольным
- Выводится сообщение о виде треугольника
- Программа завершается
- Все освобождаемые ресурсы освобождаются