segunda-feira, 27 de setembro de 2021

Linguagem C: Classificando triangulos pelos pontos dados

A alguns anos fiz um exercicio em que pedia para classificar triangulos de acordo com os pontos dados como isosceles, equilatero, escaleno, retângulo, obtuso ou acutângulo.
Ver exercicio 6:
https://tivideotutoriais.blogspot.com/2020/03/exercicios-antigos-em-linguagem-c.html

Esse modelo mostra o tanto que era novato. Mas agora esse é atualizado, mas para linux:


#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>

typedef struct
{
    double x;
    double y;
} Ponto;

double semiPitagoras(Ponto p1, Ponto p2)
{
    return (pow(p2.x-p1.x,2) + pow(p2.y-p1.y,2));
}

void triangulo(Ponto p1, Ponto p2, Ponto p3)
{
    double A, B, C, ladoA, ladoB, ladoC;
    char *Classe;
    char *angulo;

    A = semiPitagoras(p1, p2);
    B = semiPitagoras(p2, p3);
    C = semiPitagoras(p3, p1);

    ladoA = sqrt(A);
    ladoB = sqrt(B);
    ladoC = sqrt(C);

    printf("\n");
    printf(" lado A = %.16lf\n", ladoA);
    printf(" lado B = %.16lf\n", ladoB);
    printf(" lado C = %.16lf\n", ladoC);

    if((ladoA == ladoB+ladoC)||(ladoB == ladoC+ladoA)||(ladoC ==ladoB+ladoA))
    {
        printf("\nIsso nao e um triangulo\n");
        exit(1);
    }



    if (ladoA == ladoB == ladoC)
    {
        Classe = "Equilatero";
    }
    else if((ladoA != ladoB)&&(ladoB != ladoC)&&(ladoC !=ladoA))
    {
        Classe = "Escaleno";
    }
    else
    {
        Classe = "Isosceles";
    }

    if (((B + C)==A)||((B + A)==C)||((A + C)==B))
    {
        angulo = "retangulo";
    }
    else if((A-B-C + 2*ladoC*ladoB <0)||(B-A-C + 2*ladoA*ladoB <0)||(C-B-A + 2*ladoC*ladoB <0))
    {
        angulo = "Obtusangulo";
    }
    else
    {
        angulo = "Acutangulo";
    }
    printf("\n Triangulo %s e %s.\n\n",Classe,angulo);
}

int main()
{
    // coordenadas de cada
    // ponto do triangulo
    Ponto p1;
    Ponto p2;
    Ponto p3;

    //equilatero acutangulo
    p1.x=0.0;     p1.y=sqrt(3.0)/2.0;
    p2.x=0.5;    p2.y=0.0;
    p3.x=1.0;     p3.y=sqrt(3.0)/2.0;
    triangulo(p1,p2,p3);

    //isosceles retangulo
    p1.x=0.0; p1.y=0.0;
    p2.x=0.0; p2.y=1.0;
    p3.x=1.0; p3.y=0.0;
    triangulo(p1,p2,p3);

    //isosceles obtusangulo
    p1.x=0.0; p1.y=0.0;
    p2.x=1.0; p2.y=0.0;
    p3.x=0.5; p3.y=0.2;
    triangulo(p1,p2,p3);

    //escaleno obtusangulo
    p1.x=0.0; p1.y=0.0;
    p2.x=1.0; p2.y=0.0;
    p3.x=0.6; p3.y=0.2;
    triangulo(p1,p2,p3);

    return 0;
}


Nenhum comentário: