Написать функцию, определяющую вид треугольника по трем сторонам - 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);
}

Объяснение кода листинга программы

  1. Программа определяет тип треугольника по его сторонам.
  2. Используются функции для работы с числами с плавающей точкой из библиотеки math.h.
  3. Определены макросы для работы с типами треугольников и состоянием из библиотеки stdlib.h.
  4. В функции test_triangle() проверяются условия для каждого типа треугольника.
  5. Если все стороны равны, то треугольник является равносторонним.
  6. Если две стороны равны, то треугольник является равнобедренным.
  7. Если все стороны различны, то треугольник является разносторонним.
  8. В функции main() пользователь вводит значения сторон треугольника с клавиатуры.
  9. Затем вызывается функция test_triangle() для определения типа треугольника.
  10. Результат выводится на экран.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.154 из 5
Похожие ответы