Jump to content
Sign in to follow this  
eyeonyou

Trabalho sobre triangulos - dicas please :)

Recommended Posts

eyeonyou

Boas ppl!

este é o meu 1º post e ja venho pedir ajuda.Tenho este work pra fazer e precisava de umas dicas.Ate ag fiz dentro de um ciclo do-while um switch com cases e dentro de cada case peço ao utilizador pra introduzir os valores.Ag axo q a seguir,ainda dentro do 1º case tenho de por uma funçao que faça os calculos.Estou a ir bem?umas dicas sff,é q sou mm rookie :P

Em baixo vai o enunciado do work:

Trabalho 1 − Triângulos

Considere um triângulo de lados a, b e c e de ângulos ab, ac e bc.

Faça um programa que execute as vezes que o utilizador desejar qualquer das seguintes

tarefas:

─ Ler um lado de um triângulo e os dois ângulos adjacentes a esse lado e

calcular os outros dois lados e o restante ângulo interno. Para isso, atender a:

Dados: Lado a e ângulos ab e ac.

Cálculos:

(sao formulas dadas)

─ Ler dois lados de um triângulo e o ângulo por eles formado e calcular o

outro lado e os outros dois ângulos internos. Para isso, atender a:

Dados: Lados a e b e ângulo ab.

Cálculos:

(sao formulas dadas)

─ Ler os três lados de um triângulo e calcular os ângulos internos. Para isso,

atender a:

Dados: Lados a, b e c.

Cálculos:

(sao formulas dadas)

Nota 1: A entrada dos ângulos deve ser dada em graus e a saída deve ser visualizada

também em graus.

Nota 2: Verifique a coerência dos dados introduzidos, ou seja, estes têm de permitir a

formação de um triângulo.

[/code]

Share this post


Link to post
Share on other sites
vbmaster

os valores do lados do triangulo já vêm dados? Ou seja tu não tens de desenhar o triangulo pois não? ele já vem dado right?

se sim, é só usar trigonometria my friend...:P

Share this post


Link to post
Share on other sites
eyeonyou

vbmaster - o utilizador é que decide os valores,dps disso consoante a opçao escolhida o programa calcula o resto.Nao é preciso desenhar o triangulo,so saber as medidas de lados e angulos consoante o que é pedido.

tofas - eu nao kero que me façam o work,simplesmente umas dicas.Ja fiz o menu com o ciclo do-while e pus as opçoes.Ag dentro de cada opçao tenho de por funçoes pra calcular o pretendido.Aki é que esta o problema!!!n percebo mt de funçoes e ta-me sp a dar erros

Share this post


Link to post
Share on other sites
vbmaster

SOHCAHTOA

com esta palavra sabes toda a trigonometria

Sin=Oposto/Hipotenusa

Coseno=Adjacente/Hipotenusa

Tangente=Oposto/Adjacente.

Share this post


Link to post
Share on other sites
saramgsilva

tofas - eu nao kero que me façam o work,simplesmente umas dicas.Ja fiz o menu com o ciclo do-while e pus as opçoes.Ag dentro de cada opçao tenho de por funçoes pra calcular o pretendido.Aki é que esta o problema!!!n percebo mt de funçoes e ta-me sp a dar erros

entao e pq nao apresentas o codigo..tv se encontre o erro ... no codigo do outro moço encontrei 1 erro na "regra de 3 simples" ....

Share this post


Link to post
Share on other sites
eyeonyou

vbmaster - n tem nada a haver com essas formulas de trigonometria pois o prof deu outras formulas pra serem usadas.O problm esta em fazer as funçoes e a sua ligaçao ao programa.Disso é sei pouco e dai as minhas dificuldades.Inda vou dar mais umas voltas nakilo e dp ponho aki o codigo

ja ag fika aki o enunciado direito pra me perceberem melhor :

http://img145.imageshack.us/img145/7995/enunciadopag16rz.jpg

http://img145.imageshack.us/img145/3263/enunciadopag26vo.jpg

thx

Share this post


Link to post
Share on other sites
eyeonyou

boas!

aki ta o codigo que ja fiz.Ta so pra case 1 pq fazendo bem um,tb devo fazer sem dificuldade os outros.Este ta a dar um erro na linha do main(),n sei pq :shock:

#include<stdio.h>
#include<conio.h>
#include<math.h>
#define FIM '0'

float funcao1(float lado_a,float angulo_ab,float angulo_ca)

main()
{
int op;
float lado_a,lado_b,lado_c,angulo_ab,angulo_bc,angulo_ca;

do
 {
  printf("\t\t\t\tMENU PRINCIPAL\n");
  printf("\n1-Calcular 2 lados de um triangulo e 1 angulo interno restante.\n");
  printf("\n2-Calcular 1 lado de um triangulo e 2 angulos internos restantes.\n");
  printf("\n3-Calcular os 3 angulos internos do triangulo\n");
  printf("\n0-sair\n");
  op= getchar();
  fflush(stdin);
  switch(op)
   {
    case '1': printf("Introduza o valor de 1 lado do triangulo\n");
    scanf("%ld",&lado_a);
    printf("Introduza o valor de 1 angulo adjacente a este lado\n");
    scanf("%ld",&angulo_ab);
    printf("Introduza o valor de 1 outro angulo adjacente a esse lado\n");
    scanf("%ld",&angulo_ca);
    lado_b=funcao1(lado_a,angulo_ab,angulo_ca);
    printf("O lado b do triangulo ‚ (((sin(%ld)/sin(%ld+%ld))*%ld))",angulo_ca,angulo_ab,angulo_ca,lado_a,lado_b);
    break;
    case '2': printf("segundo\n");
    break;
    case '3': printf("terceiro\n");
    break;
    case FIM: printf("Pediu pra terminar\n");
    break;
    default:printf("opcao invalida\n");
    break;
   }
 }
  while (op!=FIM);
}

float funcao1(float lado_a,float angulo_ab,float angulo_ca)
{
funcao1=(((sin(angulo_ca)/sin(angulo_ab+angulo_ca))*lado_a);
return funcao1;
}

Share this post


Link to post
Share on other sites
ouvi_dizer

falta ";" na assinatura da função "funcao1"

onde está :

float funcao1(float lado_a,float angulo_ab,float angulo_ca)

devia estar:

float funcao1(float lado_a,float angulo_ab,float angulo_ca);

PS: em C o compilador não sabe contar, normalmente o erro está acima da linha que o compilador indica.

Share this post


Link to post
Share on other sites
ouvi_dizer

float funcao1(float lado_a,float angulo_ab,float angulo_ca)
{
funcao1=(((sin(angulo_ca)/sin(angulo_ab+angulo_ca))*lado_a);
return funcao1;
} 

isto não parece bem... tenta

float funcao1(float lado_a,float angulo_ab,float angulo_ca)
{
return ((sin(angulo_ca)/sin(angulo_ab+angulo_ca))*lado_a;
} 

Share this post


Link to post
Share on other sites
ouvi_dizer

case FIM: printf("Pediu pra terminar\n");
      break;
      default:printf("opcao invalida\n");
      break;
     }
 }
  while (op!=FIM); 

pode passar a

case '0': printf("Pediu pra terminar\n");
      break;
      default:printf("opcao invalida\n");
      break;
     }
 }
  while (op!='0'); 

"FIM" não é um caracter

Share this post


Link to post
Share on other sites
eyeonyou

boas,desde ja obrigado pela ajuda,mas n deu em nada :P fiz as alteraçoes que indicaste mas continua a dar um erro aki :

while (op!='0');
}

aki ta o codigo actualizado:

#include<stdio.h>
#include<conio.h>
#include<math.h>



float funcao1(float lado_a,float angulo_ab,float angulo_ca);


main()
{
int op;
float lado_a,lado_b,lado_c,angulo_ab,angulo_bc,angulo_ca;

do
 {
  printf("\t\t\t\tMENU PRINCIPAL\n");
  printf("\n1-Calcular 2 lados de um triangulo e 1 angulo interno restante.\n");
  printf("\n2-Calcular 1 lado de um triangulo e 2 angulos internos restantes.\n");
  printf("\n3-Calcular os 3 angulos internos do triangulo\n");
  printf("\n0-sair\n");
  op= getchar();
  fflush(stdin);
  switch(op)
   {
    case '1': printf("Introduza o valor de 1 lado do triangulo\n");
    scanf("%ld",&lado_a);
    printf("Introduza o valor de 1 angulo adjacente a este lado\n");
    scanf("%ld",&angulo_ab);
    printf("Introduza o valor de 1 outro angulo adjacente a esse lado\n");
    scanf("%ld",&angulo_ca);
    lado_b=funcao1(lado_a,angulo_ab,angulo_ca);
    scanf("%ld",&lado_b);
    printf("O lado b do triangulo e %ld",lado_b);
    break;
    case '2': printf("segundo\n");
    break;
    case '3': printf("terceiro\n");
    break;
    case '0': printf("Pediu pra terminar\n");
    break;
    default:printf("opcao invalida\n");
    break;
   }
 }
  while (op!='0');
}


float funcao1(float lado_a,float angulo_ab,float angulo_ca)
{
return ((sin(angulo_ca)/sin(angulo_ab+angulo_ca))*lado_a;
}

Share this post


Link to post
Share on other sites
ouvi_dizer

Ok....

Este código foi testado em Fedora c3, não sei como se comportará em windows.

Compila bem, embora o resultado das tuas contas esteja errado.

Alterei isso tambem


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

float funcao1 (float lado_a,float angulo_ab,float angulo_ca);


int main()
{
int op;
float lado_a,lado_b,lado_c,angulo_ab,angulo_bc,angulo_ca;

do {
  printf("\t\t\t\tMENU PRINCIPAL\n");
  printf("\n1-Calcular 2 lados de um triangulo e 1 angulo interno restante.\n");
  printf("\n0-sair\n");
  op= getchar();
  fflush(stdin); 
  switch(op)
     {
      case '1': printf("Introduza o valor de 1 lado do triangulo\n");
       scanf("%f",&lado_a);
       printf("Introduza o valor de 1 angulo adjacente a este lado\n");
       scanf("%f",&angulo_ab);
       printf("Introduza o valor de 1 outro angulo adjacente a esse lado\n");
       scanf("%f",&angulo_ca);
       lado_b=funcao1(lado_a,angulo_ab,angulo_ca);
       //scanf("%f",&lado_b);
       printf("O lado b do triangulo e %f",lado_b);
      break;

case '0': printf("Pediu pra terminar\n");
      break;

      default:printf("opcao invalida\n");
      break;
     }
 } while (op!='0');
return 0;
}


float funcao1 (float lado_a,float angulo_ab,float angulo_ca)
{
float sub_total =  sin(angulo_ca)/sin(angulo_ab+angulo_ca);
float total =  sub_total*lado_a;
return total; 
} 

Não sei se ajuda, mas a compilação em Fc3 não leva o include da lib math.h

isto compila e executa. espero que ajude

edit:

Para ler e escrever floats podes usar a directiva "f" mas não a "ld".

Share this post


Link to post
Share on other sites
saramgsilva

olha tive a ver o codigo e pos a minha maneira.... :roll: pra ver se conseguia resolver o problema...


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


float funcao1 (float a,float n,float m)
{
  return (sin(m)/sin(n+m))*a;
} 


int main()
{
int op;
float lado_a,lado_b,lado_c,angulo_ab,angulo_bc,angulo_ca;

do 
{
  printf("\t\t\t\tMENU PRINCIPAL\n");
  printf("\n1-Calcular 2 lados de um triangulo e 1 angulo interno restante.\n");
  printf("\n0-sair\n");
  scanf("%d",&op);
  fflush(stdin);
  switch(op)
     {
      case 1: 
       {
         printf("Introduza o valor do lado a do triangulo\n");
         scanf("%f",&lado_a);
         printf("Introduza o valor de um angulo adjacente a este lado\n");
         scanf("%f",&angulo_ab);
         printf("Introduza o valor de um outro angulo adjacente a esse lado\n");
         scanf("%f",&angulo_ca);
         lado_b=funcao1(lado_a,angulo_ab,angulo_ca);
         lado_c=funcao1(lado_a,angulo_ca,angulo_ab);
         //angulo_bc=acos(((lado_b*lado_b)+(lado_c*lado_c)-(lado_a*lado_a))/2*lado_b*lado_c);
         // estamos em grau, portanto nao usamos o pi ( isso era em radianos...)
         angulo_bc=180-(angulo_ab+angulo_ca);
         printf("O lado b do triangulo e %f",lado_b);
         printf("O lado c do triangulo e %f",lado_c);
         printf("O angulo bc tem a amplitude de %f graus",angulo_bc);
         break;
       }       
  case 0: 
    { 
      printf("Pediu pra terminar\n");
      break;
     }
  default:
      {
         printf("opcao invalida\n");
         break;
      }
 } 
}
 while (op!=0);

return 0;
}
// fim do main 

"resolvi a 1 parte"...mas... humm ...nao verifikei se o valores estao bem!! verifica... eu axo que nao...ha qq coisa que nao esta bem, eu tava agora para passar todo pra double, pelo facto de sen(double i)...mas n tou c tempo...muda isso!pode ser o erro, ha e nao te eskeca que o tipo a ler double nao é %f nem %d...(mas tb nao me recordo)

.... ja no outro programa de triangulo, dava me erro nos resultados finais...deve ser mm dos double's... :evil:

Share this post


Link to post
Share on other sites
will09
tofas disse:"nao te eskeca que o tipo a ler double nao é %f nem %d...(mas tb nao me recordo) "

decimal --» m/M

double --» d/D

float --» f/F

long --» l/L

PEnso k seja axiM! axo que %d é para double...

PEACE ;)

Share this post


Link to post
Share on other sites
eyeonyou

boas ppl! actualizei o codigo e ja tem pekenos progressos,Ja compila :D mas a funçao n ta a funcionar :P

aki fica o codigo actual:

#include<stdio.h>
#include<conio.h>
#include<math.h>



float funcao1(float lado_a,float angulo_ab,float angulo_ca);


main()
{
int op;
float lado_a,lado_b,lado_c,angulo_ab,angulo_bc,angulo_ca;
clrscr();

do
 {
  printf("\t\t\t\tMENU PRINCIPAL\n");
  printf("\n1-Calcular 2 lados de um triangulo e 1 angulo interno restante.\n");
  printf("\n2-Calcular 1 lado de um triangulo e 2 angulos internos restantes.\n");
  printf("\n3-Calcular os 3 angulos internos do triangulo.\n");
  printf("\n0-sair\n");
  op= getchar();
  fflush(stdin);
  switch(op)
   {
    case '1': printf("Introduza o valor de 1 lado do triangulo.\n");
    scanf("%f",&lado_a);
    printf("Introduza o valor de 1 angulo adjacente a este lado.\n");
    scanf("%f",&angulo_ab);
    printf("Introduza o valor de 1 outro angulo adjacente a esse lado.\n");
    scanf("%f",&angulo_ca);
    lado_b=funcao1(lado_a,angulo_ab,angulo_ca);
    scanf("%f",&lado_b);
    printf("O lado b do triangulo ‚ %f",lado_b);
    break;
    case '2': printf("segundo\n");
    break;
    case '3': printf("terceiro\n");
    break;
    case '0': printf("Pediu pra terminar\n");
    break;
    default:printf("opcao invalida\n");
    break;
   }
 }
  while (op!='0');
  return 0;
}


float funcao1(float lado_a,float angulo_ab,float angulo_ca)
{
float sub_total=sin(angulo_ca)/sin(angulo_ab+angulo_ca);
float total=sub_total*lado_a;
return total;
}

Share this post


Link to post
Share on other sites
ouvi_dizer

O código que coloquei a função devolvia um valor, se era correcto ou não não sei.

Quando dizes que a função n funciona é o q exactamente?

Share this post


Link to post
Share on other sites
eyeonyou

o codigo actual faz o seguinte:

escolho a opçao 1(que é a q tem alguma coisa)

pede-me os 3 dados pra inserir(ate aki td bem)

dp dos dados introduzidos a funçao deveria fazer o calculo e imprimir o valor do lado_b mas nepia,n aparece nada.Curioso é q dps de introduzir os 3 dados introduzo um nº qq e dp aparece imprimido "o lado b é "nº qq""

:shock:

Share this post


Link to post
Share on other sites
ouvi_dizer

Fizeste mal as alterações...

Tinhas um scanf a mais, e no que eu coloquei ja o tinha tirado, mas n deves ter reparado:

Onde tens:

      lado_b=funcao1(lado_a,angulo_ab,angulo_ca);
      scanf("%f",&lado_b);
      printf("O lado b do triangulo ‚ %f",lado_b); 

devias ter:

      lado_b=funcao1(lado_a,angulo_ab,angulo_ca);
      printf("O lado b do triangulo ‚ %f",lado_b); 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.