Ir ao conteúdo
  • Cadastre-se
robmaggot

RESOLVIDO Programa em C!

Recommended Posts

Alguém tem alguma ideia para diminuir o tamanho deste programa? Creio que usei 'if' demais!!!

#include <stdio.h>#include <math.h> main (){    // O programa, a partir da medida dos três lados de um triângulo, apresenta qual é o tipo deste.    double A, B, C;    printf ("Apresente os valores de cada lado do triangulo: ");    scanf ("%lf%lf%lf", &A, &B, &C);    if (A>B && A>C)    {        if (A>=B+C)        {            printf ("NAO FORMA TRIANGULO\n");        }            else            {                if (pow(A,2)==pow(B,2)+pow(C,2))                {                    printf ("TRIANGULO RETANGULO\n");                }                if (pow(A,2)>pow(B,2)+pow(C,2))                {                    printf ("TRIANGULO OBTUSANGULO\n");                }                if (pow(A,2)<pow(B,2)+pow(C,2))                {                    printf ("TRIANGULO ACUTANGULO\n");                }            }    }    if (B>A && B>C)    {        if (B>=A+C)        {            printf ("NAO FORMA TRIANGULO\n");        }            else            {                if (pow(B,2)==pow(A,2)+pow(C,2))                {                    printf ("TRIANGULO RETANGULO\n");                }                if (pow(B,2)>pow(A,2)+pow(C,2))                {                    printf ("TRIANGULO OBTUSANGULO\n");                }                if (pow(B,2)<pow(A,2)+pow(C,2))                {                    printf ("TRIANGULO ACUTANGULO\n");                }            }    }    if (C>A && C>    {        if (C>=A+        {            printf ("NAO FORMA TRIANGULO\n");        }            else            {                if (pow(C,2)==pow(A,2)+pow(B,2))                {                    printf ("TRIANGULO RETANGULO\n");                }                if (pow(C,2)>pow(A,2)+pow(B,2))                {                    printf ("TRIANGULO OBTUSANGULO\n");                }                if (pow(C,2)<pow(A,2)+pow(B,2))                {                    printf ("TRIANGULO ACUTANGULO\n");                }            }    }    ////////////////////////////////////////    if (A==C && A>    {        if (A>=B+C)        {            printf ("NAO FORMA TRIANGULO\n");        }            else            {                if (pow(A,2)==pow(B,2)+pow(C,2))                {                    printf ("TRIANGULO RETANGULO\n");                }                if (pow(A,2)>pow(B,2)+pow(C,2))                {                    printf ("TRIANGULO OBTUSANGULO\n");                }                if (pow(A,2)<pow(B,2)+pow(C,2))                {                    printf ("TRIANGULO ACUTANGULO\n");                }            }    }    if (A==B && A>C)    {        if (A>=B+C)        {            printf ("NAO FORMA TRIANGULO\n");        }            else            {                if (pow(A,2)==pow(B,2)+pow(C,2))                {                    printf ("TRIANGULO RETANGULO\n");                }                if (pow(A,2)>pow(B,2)+pow(C,2))                {                    printf ("TRIANGULO OBTUSANGULO\n");                }                if (pow(A,2)<pow(B,2)+pow(C,2))                {                    printf ("TRIANGULO ACUTANGULO\n");                }            }    }    if (B==C && B>A)    {        if (B>=A+C)        {            printf ("NAO FORMA TRIANGULO\n");        }            else            {                if (pow(B,2)==pow(A,2)+pow(C,2))                {                    printf ("TRIANGULO RETANGULO\n");                }                if (pow(B,2)>pow(A,2)+pow(C,2))                {                    printf ("TRIANGULO OBTUSANGULO\n");                }                if (pow(B,2)<pow(A,2)+pow(C,2))                {                    printf ("TRIANGULO ACUTANGULO\n");                }            }    }    ////////////////////////////////////////    if (A==B && A==C && B==C)    {        printf ("TRIANGULO EQUILATERO\n");    }    if (A==B || B==C || A==C)    {        printf ("TRIANGULO ISOSCELES\n");    }    system ("pause");}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ele só pode dar uma resposta? Ou ele pode retornar tipo:

 

TRIANGULO ACUTANGULO

TRIANGULO EQUILATERO

TRIANGULO ISOSCELES

 

Quando A = B = C?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ele só pode dar uma resposta? Ou ele pode retornar tipo:

 

TRIANGULO ACUTANGULO

TRIANGULO EQUILATERO

TRIANGULO ISOSCELES

 

Quando A = B = C?

@isrnick, ele pode retornar tudo... se o triângulo for acutângulo e isósceles, ele informa as duas características.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aqui, eu dei uma reduzida nele:

#include <stdio.h>#include <math.h> main (){    // O programa, a partir da medida dos três lados de um triângulo, apresenta qual é o tipo deste.    double A, B, C;    printf ("Apresente os valores de cada lado do triangulo: ");    scanf ("%lf%lf%lf", &A, &B, &C);    if (A>=B+C || B>=A+C || C>=A+    {        printf ("NAO FORMA TRIANGULO\n");    }    else    {        if (A>=B && A>=C)        {            if (pow(A,2)==pow(B,2)+pow(C,2))            {                printf ("TRIANGULO RETANGULO\n");            }            if (pow(A,2)>pow(B,2)+pow(C,2))            {                printf ("TRIANGULO OBTUSANGULO\n");            }            if (pow(A,2)<pow(B,2)+pow(C,2))            {                printf ("TRIANGULO ACUTANGULO\n");            }        }        else if (B>=A && B>=C)        {            if (pow(B,2)==pow(A,2)+pow(C,2))            {                printf ("TRIANGULO RETANGULO\n");            }            if (pow(B,2)>pow(A,2)+pow(C,2))            {                printf ("TRIANGULO OBTUSANGULO\n");            }            if (pow(B,2)<pow(A,2)+pow(C,2))            {                printf ("TRIANGULO ACUTANGULO\n");            }        }        else if (C>=A && C>=        {            if (pow(C,2)==pow(A,2)+pow(B,2))            {                printf ("TRIANGULO RETANGULO\n");            }            if (pow(C,2)>pow(A,2)+pow(B,2))            {                printf ("TRIANGULO OBTUSANGULO\n");            }            if (pow(C,2)<pow(A,2)+pow(B,2))            {                printf ("TRIANGULO ACUTANGULO\n");            }        }         if (A==B && A==C && B==C)        {            printf ("TRIANGULO EQUILATERO\n");        }         if (A==B || B==C || A==C)        {            printf ("TRIANGULO ISOSCELES\n");        }    }    system ("pause");}
Primeiro modifiquei pra ele verificar se forma um triângulo, assim ele não precisa fazer nenhuma operação se não formar, e aí já elimina todas aquelas linhas repetidas que verificava se forma triângulo dentro dos ifs. E observe que isso corrigiu automaticamente um problema do programa original que retornaria "NAO FORMA TRIANGULO" e "TRIANGULO ISOSCELES" se alguém entrasse com valores como "11 5 5".

Depois retirei a segunda metade das comparações entre A, B e C, onde verificava se A == B && A>C por exemplo, e pra compensar isso, eu apenas substituí na primeira metade os A>B && A>C por A>=B && A>=C, e adicionei "else if" no lugar de apenas "if" na segunda e terceira condição, assim se o programa verificar uma das condições como verdadeira ele executará os comandos, e depois nem checará as próximas condições, já irá pro fim pra a parte que checa se o triângulo é equilátero e se é isósceles.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante
Este tópico está impedido de receber novos posts.





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×