Ir ao conteúdo
  • Cadastre-se

Qual seria o erro do meu código em c?


zennom
Ir à solução Resolvido por zennom,

Posts recomendados

Bom dia pessoal,

 

segue a pergunta a qual estou tentando fazer o meu código:

 

Leia 3 valores de ponto flutuante A, B e C e ordene-os em ordem decrescente, de modo que o lado A representa o maior dos 3 lados. A seguir, determine o tipo de triângulo que estes três lados formam, com base nos seguintes casos, sempre escrevendo uma mensagem adequada:

se A ≥ B+C, apresente a mensagem: NAO FORMA TRIANGULO

se A2 = B2 + C2, apresente a mensagem: TRIANGULO RETANGULO

se A2 > B2 + C2, apresente a mensagem: TRIANGULO OBTUSANGULO

se A2 < B2 + C2, apresente a mensagem: TRIANGULO ACUTANGULO

se os três lados forem iguais, apresente a mensagem: TRIANGULO EQUILATERO

se apenas dois dos lados forem iguais, apresente a mensagem: TRIANGULO ISOSCELES

 

 

resolvi fazer com vários if's obviamente, entretanto ele está pulando algumas etapas, segue meu código:

 

#include <stdio.h>
 
int main() {
 
double A,B,C,AQUADRADO,BQUADRADO,CQUADRADO;


scanf ("%lf", & A);

scanf ("%lf", & B);

scanf ("%lf", & C);

AQUADRADO = A * A;
BQUADRADO = B * B;
CQUADRADO = C*C;


if (A >= B + C)
{
	
	printf ("NAO FORMA TRIANGULO\n");
	
}
	
	
	 if (AQUADRADO = BQUADRADO + CQUADRADO )
	{
		
		printf ("TRIANGULO RETANGULO\n");
	}
	
	 if (AQUADRADO > BQUADRADO + CQUADRADO )
	{
		
		printf ("TRIANGULO OBTUSANGULO\n");
	}
	
	 if (AQUADRADO < BQUADRADO + CQUADRADO)
	
	{
     	printf ("TRIANGULO ACUTANGULO\n");
	}
	
	 if ((A == B) && (B == C) && (A == C)) 
	 {
         printf ("TRIANGULO EQUILATERO\n");
         
      } 

    if ((A == B) || (B == C) || (A == C)) 
	  {
     printf ("TRIANGULO ISOCELES\n");
      }
	

 
    return ;
}

 

 

 

SEI QUE PODERIA USAR COMANDOS DIFERENCIADOS COMO POW POR EXEMPLO PARA CALCULAR O QUADRADO DE UM NÚMERO E ETC. TAMBÉM NÃO SEI SE PODE SER ISSO, MAS ACREDITO QUE SEJA O MODO COMO ESTOU ACRESCENTANDO MEUS IF'S NO PROGRAMA.

 

 

AGRADEÇO QUEM PUDER ME AJUDAR (:

 

 

Link para o comentário
Compartilhar em outros sites

Ola, para isso você deveria organizar antes a b e c, na realidade o que tem que ser feito é que A deve ser o maior numero, então logo apos receber A, B e C, você deve comparar A com B, se B for maior que A deve ser invertido os valores, logo o mesmo procedimento deve ser feito com A e C.
Para que você entenda vou resolver um dos problemas, tente resolver os outros:
 

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

void organizar(double *maior, double *menor ){ //maior deve receber o maior numero e menor deve receber o menor numero, si nao for assim a funçao intercambia os valores para que assim seja.
    int aux;
    if ( *maior < *menor ){
        aux = *maior;
        *maior = *menor;
        *menor = aux; 
    }else{
        return;
    }
}

int validarTriangulo(double a, double b, double c){
    organizar(&a, &b); // A será o maior, e B o menor
    //printf( "%.2lf %.2lf %.2lf\n", a, b, c );
    organizar(&a, &c); // A será o maior, e C o menor
    //printf( "%.2lf %.2lf %.2lf\n", a, b, c );
    return a<b+c; //retorna verdadeiro si A for menor que a soma de B+C    
}

int main (){
    double a, b, c;
    scanf ( "%lf", & a );
    scanf ( "%lf", & b );
    scanf ( "%lf", & c );
    
    if ( validarTriangulo(a, b, c ) ){
        printf("é um triangulo");
        
    }else{
        printf("não é um triangulo");
    }
    printf("\n");
    
    
    getchar();
    return ;
}

a linha return a<b+c; pode ser modificada para trabalhar com outros exemplos, agora tente adaptar esse código ao seu trabalho, principalmente a parte que intercambia os valores para que A seja sempre o maior valor. Sorte

 

Link para o comentário
Compartilhar em outros sites

  • Solução
9 horas atrás, vangodp disse:

Ola, para isso você deveria organizar antes a b e c, na realidade o que tem que ser feito é que A deve ser o maior numero, então logo apos receber A, B e C, você deve comparar A com B, se B for maior que A deve ser invertido os valores, logo o mesmo procedimento deve ser feito com A e C.
Para que você entenda vou resolver um dos problemas, tente resolver os outros:
 


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

void organizar(double *maior, double *menor ){ //maior deve receber o maior numero e menor deve receber o menor numero, si nao for assim a funçao intercambia os valores para que assim seja.
    int aux;
    if ( *maior < *menor ){
        aux = *maior;
        *maior = *menor;
        *menor = aux; 
    }else{
        return;
    }
}

int validarTriangulo(double a, double b, double c){
    organizar(&a, &b); // A será o maior, e B o menor
    //printf( "%.2lf %.2lf %.2lf\n", a, b, c );
    organizar(&a, &c); // A será o maior, e C o menor
    //printf( "%.2lf %.2lf %.2lf\n", a, b, c );
    return a<b+c; //retorna verdadeiro si A for menor que a soma de B+C    
}

int main (){
    double a, b, c;
    scanf ( "%lf", & a );
    scanf ( "%lf", & b );
    scanf ( "%lf", & c );
    
    if ( validarTriangulo(a, b, c ) ){
        printf("é um triangulo");
        
    }else{
        printf("não é um triangulo");
    }
    printf("\n");
    
    
    getchar();
    return ;
}

a linha return a<b+c; pode ser modificada para trabalhar com outros exemplos, agora tente adaptar esse código ao seu trabalho, principalmente a parte que intercambia os valores para que A seja sempre o maior valor. Sorte

 

 

 

Oi! Tentei usar a formula POW e consegui deixar mais estruturado, o meu código está funcionando normalmente mas existe erro na estrutura desses if's vou tentar arrumar aqui.

 

COM POW meu código ficou dessa forma:

 

#include <stdio.h>
#include <math.h>
 
int main() 
{
 
double A,B,C;


scanf ("%lf", & A);

scanf ("%lf", & B);

scanf ("%lf", & C);



if (A > B + C)
{
	
	printf ("NAO FORMA TRIANGULO\n");
	
}

	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 && B == C && C == A)
	 {
         printf ("TRIANGULO EQUILATERO\n");
         
      } 

     if (A == B || A == C || B == C)
	  {
     printf ("TRIANGULO ISOCELES\n");
      }
      

    return ;
}

 

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!