Ajuda na Resolução de um programa

1. Ajuda na Resolução de um programa

Lendel dos Santos Rodrigues
lendel

(usa Linux Mint)

Enviado em 14/06/2017 - 23:09h

Elaborar um programa para:
-Receber as coordenadas cartesianas dos três vertices de um triângulo (Xa,Ya), (Xb,Yb) e (Xc,Yc);
-Programa para verificar se o triângulo existe
-Programa para calcular a área do triângulo Usando a formula de Heron
-Programa para determinar o maior lado do triângulo
-Programa para verificar se o triângulo é acutângulo, retângulo ou obtusângulo
-Programa para verificar se o triângulo é equilátero, isósceles, ou escaleno
-Programa para colocar em ordem crescente os três lados do triângulo
-Programa para calcular e exibir os três ângulos internos do triângulo usando a formula dos cossenos

eu fiz o programa dessa forma só não sei como organiza-lo para ele funcionar como o Exercício do livro pede:

#include <iostream>
#include <cmath>
#include <iomanip>

using namespace std;

int main(int argc, char *argv[]){

double a, b, c, Xa, Xb, Xc, Ya, Yb, Yc, A, B, C, area, sp;

cout << "\n";
cout << "Programa para verificar se o triângulo existe\n";
cout << "Programa para calcular a área do triângulo Usando a formula de Heron\n";
cout << "Programa para determinar o maior lado do triângulo\n";
cout << "Programa para verificar se o triângulo é acutângulo, retângulo ou obtusângulo\n";
cout << "Programa para verificar se o triângulo é equilátero, isósceles, ou escaleno\n";
cout << "Programa para colocar em ordem crescente os três lados do triângulo\n";
cout << "Programa para calcular e exibir os três ângulos internos do triângulo\n";

cout << "Insira o lado Xa "; cin >> Xa;
cout << "Insira o lado Ya "; cin >> Ya;
cout << "Insira o lado Xb "; cin >> Xb;
cout << "Insira o lado Yb "; cin >> Yb;
cout << "Insira o lado Xc "; cin >> Xc;
cout << "Insira o lado Yc "; cin >> Yc;


//primeiro precisamos saber o valor de a, b e c

a = sqrt(pow(Xb - Xc, 2.0) + pow(Yb - Yc, 2.0));

b = sqrt(pow(Xa - Xc, 2.0) + pow(Ya - Yc, 2.0));

c = sqrt(pow(Xa - Xb, 2.0) + pow(Ya - Yb, 2.0));

// verifica se é um triangulo

if(a < (b + c) & b < (a + c) & c < (a + b))
cout << "O Triângulo existe" << endl;

//calcular área do triângulo usado a formula de Heron
sp = (a + b + c) / 2.0;
area = sqrt (sp * (sp-a) * (sp-b) * (sp-c));

cout << "Área do triângulo é = " << setprecision (2) << fixed << area << endl;

//determinar o maior lado de um triângulo

if( a == b && a > c)

cout << "lado a é igual à b e maior que c\n";

if( a == c && a > b)

cout << "lado a é igual à c e maior que b\n";

if( b == c && b > a)

cout << "lado a é igual à c e maior que a\n";

if( a == b && a < c)

cout << "lado a é igual à b e menor que c\n";

if( a == c && a < b)

cout << "lado a é igual à c e menor que b\n";

if( b == c && b < a)

cout << "lado b é igual à c e menor que a\n";

//maior lado a
if( a > b && a > c)
cout << "maior lado do triângulo é a\n";

//maior lado b
if( b > a && b > c)
cout << "maior lado do triângulo é b\n";

//maior lado c
if( c > a && c > b)
cout << "maior lado do triângulo é c\n";

//verificar se o triângulo é acutângulo, retângulo ou obtusângulo

//acutângulo

if (a * a < (b * b + c * c))
cout << "O Triângulo é Acutângulo" << endl;

//retângulo
if (a * a = (b * b + c * c))
cout << "O Triângulo é Retângulo" << endl;

//obtusângulo
if (a * a > (b * b + c * c))
cout << "O Triângulo é Obtusângulo" << endl;

else
cout << "O Triângulo não é acutângulo, retângulo ou obtusângulo! tente outro valor\n";

//verificar se o triângulo é equilátero, isósceles ou escaleno

if(a==b & b==c)
cout << "O triangulo é Equilatero.\n";
else if(a==b || a==c || b==c)
cout << "O triangulo é Isoceles.\n";
else
cout << "Triângulo é Escaleno.\n";

//colocar em ordem crescente os três lados do triângulo

if (a > b)
if (b > c)
cout << "A ordem crescente: a, b e c\n";
else if (b < c)
cout << "A ordem crescente: a, c e b\n";
if (b > c)
if (c > a)
cout << "A ordem crescente: b, c e a";
else if (c < a)
cout << "A ordem crescente: b, a, e c";
if (c > b)
if (b > a)
cout << "A ordem crescente: c, b e a";
else if (b < a)
cout << "A ordem crescente: c, a e b";

//calcular os ângulos internos do triângulo usando a fórmula dos cossenos

A = acos((pow(b , 2.0) + pow(c , 2.0) - pow(a , 2.0)) / (2 * b * c)) * (180.0 / M_PI);

B = acos((pow(a , 2.0) + pow(c , 2.0) - pow(b , 2.0)) / (2 * a * c)) * (180.0 / M_PI);

C = acos((pow(b , 2.0) + pow(b , 2.0) - pow(c , 2.0)) / (2 * a * b)) * (180.0 / M_PI);

cout << "O resultado de A: " << setprecision (2) << fixed << A << " de B: "
<< setprecision (2) << fixed << B << " de C: " << setprecision (2) << fixed << C << endl;

else
cout << "O Triângulo não existe! tente outro valor\n";



return 0;
}


  


2. Re: Ajuda na Resolução de um programa

Perfil removido
removido

(usa Nenhuma)

Enviado em 14/06/2017 - 23:29h

Interessante. Você precisa pensar em algumas coisas simples e por partes.

Por exemplo, se a verificação "é triângulo" for falsa, então você diz "não existe triângulo" e sai do programa. Fim.

Para saber e é acutângulo, retângulo ou obtusângulo, você precisa saber quais os tamanhos em ordem crescente.
Por exemplo, se você tem 3 - 4 - 5, não dá para fazer 5²+4² e querer que dê 3².

Tente ordenar os lados ou ordenar os tamanhos para verificar a soma.
É simples, desde que lado_a seja o maior:

a² < b² + c² acut.
a² = b² + c² ret.
a² > b² + c² obt.


Eu até tenho essa coisa feita de classificar por ângulos, ainda não publiquei o código, mas quanto a verificar os lados para saber equilátero - isósceles - escaleno, é mais simples. Passe para C:

se (a=b e b=c)
escreva "equilatero"
senão se (a=b ou b=c ou c=a)
escreva "isosceles"
senão
"escreva escaleno"


EDIT:

É muita coisa. Até repeti algo que você já fez.

Para mostrar qual lado é maior que o outro, você pode usar algum tipo de vetor de três elementos. Ordenar na mão mesmo, sem algoritmo. Mostrando ao mesmo tempo qual lado é qual.

----------------------------------------------------------------------------------------------------------------
Nem direita, nem esquerda. Quando se trata de corrupção o Brasil é ambidestro.
(anônimo)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



3. Re: Ajuda na Resolução de um programa

Paulo
paulo1205

(usa Ubuntu)

Enviado em 15/06/2017 - 04:32h

listeiro_037 escreveu:

se (a=b e b=c)
escreva "equilatero"
senão se (a=b ou b=c ou c=a)
escreva "isosceles"
senão
"escreva escaleno"


Em C dá para ser mais curto.

static const char *tipo_lados[]={"escaleno", "isósceles", NULL, "equilátero"};
/* ... */
printf("O triângulo é %s.\n", tipo_lados[(a==b)+(a==c)+(b==c)]);


Usando uma extensão do GCC, fica ainda mais curto, pois dispensa a declaração da variável.

printf("O triângulo é %s.\n", (const char *[4]){"escaleno", "isósceles", NULL, "equilátero"}[(a==b)+(a==c)+(b==c)]); 



Algo parecido se pode fazer para os ângulos.

#include <math.h>

int signalof(double d){
return d? (int)copysign(1, d): 0;
}

/* ... */
static const char *tipo_angulos={"acutângulo", "retângulo", "obtusângulo"};
/* ... */
double a2=a*a, b2=b*b, c2=c*c;
printf("O triângulo é %s.\n", tipo_angulos[3+signalof(a2-b2-c2)+signalof(b2-a2-c2)+signalof(c2-a2-b2)]);







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts