Написать функцию, определяющую вид треугольника по трем сторонам - 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() для определения типа треугольника.
- Результат выводится на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д