• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

eyeonyou

Trabalho sobre triangulos - dicas please :)

40 mensagens neste tópico

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]

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tópico repetido!! ve isto!!!!

nos aqui nao fazemos o trabalho de casa de ninguem!!simplesmente podemos ajudar a resolver problemas.... :roll:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

SOHCAHTOA

com esta palavra sabes toda a trigonometria

Sin=Oposto/Hipotenusa

Coseno=Adjacente/Hipotenusa

Tangente=Oposto/Adjacente.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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" ....

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

desculpa nao vejo qual a tua dificuldade...pois tens as formulas todas!e esta td defenido...é so escreveres o codigo..agora tens k ter cuidado com os parentesis...mostra la o teu codigo sff ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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;
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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;
} 

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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;
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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".

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
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 ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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;
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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); 

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

é pah! thx era mm isso :P

outra coisa,o utilizador tem de introduzir os angulos em graus mas estes tem de ser convertidos pra radianos pra ser feito o calculo e dps o resultado a imprimir tem de ser outra vex em graus.O q aconselhas a fazer?fazer a conversao ainda no CASE ou faço isso na funçao?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

You say potato i say potato....

Isso não tem uma resposta certa... Na realidade é como te der mais geito.

Talvez o melhor seja dentro da função, para não baralhar o codigo dentro do case, mas tirando isso, é indiferente (no meu ponto de vista).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

De cor não sei, mas experimenta:

double d = 3.14;

e compila, se der erro é porque é com "," senão é mesmo com "."

Mas deves ter uma constante na lib Math.h com o valor de PI e de E e mais uns quantos.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

aki ta a funçao

penso que ta correcta mas da um valor que nao tem nada a haver

recebo os 3 dados em graus,converto pra radianos,faço o calculo em radianos e dp converto o resultado de radianos pra graus.onde ta o erro?

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora