Написать функцию, определяющую вид треугольника по трем сторонам - C (СИ)
Формулировка задачи:
Подскажите пожалуйста как используя побитовые операции можно решить такое задание:
Написать функцию, определяющую вид треугольника по трем сторонам. Функция должна возвращать следующие значения:
1. Значение 1, если треугольник прямоугольный
2. Значение 2, если треугольник равнобедренный
3. Значение 6, если треугольник равносторонний
4. Значение 3, если треугольник прямоугольный и равнобедренный
5. Значение 0 во всех остальных случаях
Примечание. Задание на использование побитовых операций.
Решение задачи: «Написать функцию, определяющую вид треугольника по трем сторонам»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define PRECISSION (10e-3)
typedef struct TRIANGLE {
double A;
double B;
double C;
} triangle_t;
typedef enum TSTATE { TE_UNKNOWN = 0, TE_RIGHT = 1, TE_EQUILATERAL = 2, TE_ISOSCELES = 4 } tstate_t;
tstate_t test_triangle(const triangle_t * t){
tstate_t ret = TE_UNKNOWN;
if ( ( fabs(t->A - sqrt(t->B * t->B + t->C * t->C)) < PRECISSION ) ||
( fabs(t->B - sqrt(t->A * t->A + t->C * t->C)) < PRECISSION ) ||
( fabs(t->C - sqrt(t->A * t->A + t->B * t->B)) < PRECISSION ) )
ret |= TE_RIGHT;
if ( ( t->A == t->B ) || ( t->B == t->C ) || ( t->C == t->A ) )
ret |= TE_EQUILATERAL;
if ( ( t->A == t->B ) && ( t->B == t->C ) && ( t->C == t->A ) )
ret |= TE_ISOSCELES;
return ret;
}
int main(void){
triangle_t t;
tstate_t s;
printf("Side A: ");
scanf("%lf", &t.A);
printf("Side B: ");
scanf("%lf", &t.B);
printf("Side C: ");
scanf("%lf", &t.C);
s = test_triangle(&t);
if ( s == TE_UNKNOWN ){
printf("Unknown type of triangle.\n");
}
else {
printf("Triangle is ");
if ( s & TE_RIGHT )
printf("right");
if ( s & TE_ISOSCELES )
printf("%sisosceles.\n", ( s & TE_RIGHT ) ? ", " : "");
else if ( s & TE_EQUILATERAL )
printf("%sequilateral.\n", ( s & TE_RIGHT ) ? ", " : "");
else
printf(".\n");
}
/* раскомментировать, если нужно, чтобы "окошко сразу не закрывалось. */
/* system("pause"); */
exit(0);
}
Объяснение кода листинга программы
- Программа определяет тип треугольника по его сторонам.
- Используются функции для работы с числами с плавающей точкой из библиотеки math.h.
- Определены макросы для работы с типами треугольников и состоянием из библиотеки stdlib.h.
- В функции test_triangle() проверяются условия для каждого типа треугольника.
- Если все стороны равны, то треугольник является равносторонним.
- Если две стороны равны, то треугольник является равнобедренным.
- Если все стороны различны, то треугольник является разносторонним.
- В функции main() пользователь вводит значения сторон треугольника с клавиатуры.
- Затем вызывается функция test_triangle() для определения типа треугольника.
- Результат выводится на экран.