Dúvida com algoritmo

oi
antes, vou me apresentar :smiley: meu nome é Sérgio e comecei a estudar Java recentemente… recebi um trabalho que é bem simples (pelo menos pra quem entende :D)[quote]1. Dados os três lados de um suposto triângulo, fazer um algoritmo que:

  • Verifique se os lados formam um triângulo. Caso não formarem, imprimir “Lados não formam um triângulo”
  • Caso a condição de criação de um triângulo for satisfeita, verificar e imprimir o tipo do triângulo: “Equilátero” (3 lados iguais), “Isósceles” (2 lados iguais) ou “Escaleno” (3 lados são diferentes)[/quote]
    fiz um código e queria ver se está certo, se tem que adicionar/corrigir alguma coisa, enfim… Início Ler A,B,C,resultado Se ( ( A<B+C e B<A+C e C<A+B ) então resultado = "Lados não formam um triângulo" SeNão Se ( A = B = C ) então resultado "É um triângulo equilátero" SeNão Se ( ( A=B e B≠C ) ou ( A=C e C≠B ) ou ( B=C e C≠A ) ) então resultado = "É um triângulo isósceles" SeNão Se ( ( A ≠ B ) e ( B ≠ C ) e ( A ≠ C ) ) então resultado = "É um triângulo escaleno" FimSe FimSe FimSe FimSe Imprimi resultado FimOBS: o ? que aparece ali é pq eu coloquei um sinal do diferente (o = com uma barra) ^^

o que acham? (:
eu fiquei com dúvida na parte do “Lados não formam um triângulo”, queria ver se está certo isso ou se tem que mudar…
agradeço desde já :slight_smile:

Acho que é algo como
“A > B + C
ou B > A + C
ou C > A + B”.
Não sei de onde você tirou o “e” nesse caso, ou o sinal de menor.

Outra coisinha - em algoritmos, você realmente pode usar “A = B = C”, como você fez. Só que em programação, você normalmente usaria algo como “A = B e B = C”. Só para você não se confundir na hora de você passar isso para um programa.

Se ( ( A<B+C e B<A+C e C<A+B ) então resultado = "Lados não formam um triângulo"
Eu acho que o que configura um trianbulo é o fato de “existir” tres lados. Portanto, esta verificação que esta fazendo nunca vai apresentar um erro. Considere estes valores:

A=7 B=6 C=5
Vamos ao teste:

code ==> (7<11): Sim
(B<A+C) ==> (6<12): Sim
(C<A+B) ==> (6<13): Sim[/code]
Isso não seria um triangulo?!! Como eu disse um triângulo é formado por 03 lados, a verificação tem que ser feita em cima da existencia desses 03 lados.

Se ( A=0 ou B=0 ou C=0 ) então resultado = "Lados não formam um triângulo"
Entendeu?

Mudando de problema, não vou entrar muito no mérito agora, mas prefira comparações assim…

Se ( (A = B) e (A = C) e (B = C)  ) então

…ao inves desta linha abaixo:

Se ( A = B = C ) então

Jà ouviu falar em teste de mesa? Sempre faça ele. Facilita muito!

P.S:

Ola!

Na verdade para melhor verificação se é um triangulo você poderia usar a formula | b - c | < a < b + c que diz que um lado deve ser maior que o modulo da diferença dos outros lados, e menor que a soma deles, como você ja havia feito.

Para facilitar a manuntenção e clareza do código te sugeria a cortar um if, fazendo o seguinte ramo de decisão:

[code]if (a==b && b==c)
triangulo equilatero

else if (a==b&& b != c )||( a==c&&c!=b )||(b==c&&a!=c)
triangulo isosceles
else
trinagulo escaleno[/code]

Neste if vc só precisa de 2 testes, já que se é um triangulo, e ele não é nem equilatero, nem isosceles, logicamente ele é escaleno! :slight_smile:

Espero ter ajudado!

Condição de existência de um triângulo

É necessário que a medida de qualquer um dos lados seja menor que a soma das medidas dos outros dois e maior que o valor absoluto da diferença entre essas medidas.

| b - c | < a < b + c
| a - c | < b < a + c
| a - b | < c < a + b

Ops.

Retiro o que eu disse aqui:

[quote=pvrsouza]
Isso não seria um triangulo?!! Como eu disse um triângulo é formado por 03 lados, a verificação tem que ser feita em cima da existencia desses 03 lados.
view plaincopy to clipboardprint?

  1. Se ( A=0 ou B=0 ou C=0 ) então
  2. resultado = "Lados não formam um triângulo"   [/quote]
    

Mas a intenção maior foi informar que a verificação feita sapuk não iria funcionar!!

Abraços!

[quote=wellington.nogueira]
Acho que o else if poderia ser mais simples:

if (a==b && b==c)
  triangulo equilatero
else if  (a!=b && b != c )
  triangulo escaleno
else
  triangulo isoceles

Se é triângulo, não é escaleno nem equilátero, logo é isóceles tornando o teste mais simples :)[/quote]
No segundo if tens de verificar também se a é diferente de c senão pode ser isósceles.

else if  (a!=b && b != c && a != c)

E a ter de fazer 3 comparações sempre é preferível (e mais legível) usar igualdades do que desigualdades.

if (a==b && b==c)
  triangulo equilatero
else if  (a==b || b == c || a==c)
  triangulo isosceles
else
  triangulo escaleno

Bem vindo ao fórum Sérgio!

Eu acho que já vi exatamente esse exercício em algum lugar mas não lembro onde… você poderia dizer de onde o tirou?

então… revi meu algoritmo agora, e vi que daria erro. mesmo com o | b - c | < a < b + c… pq? pq se a condição fosse verdadeira, ou seja um triângulo existente, iria imprimir que o triângulo não existe, justamente quando ele existe… então refiz com as dicas do pessoal aqui, e vamos ver ^^

Início Ler A,B,C,resultado Se (( | B - C | < A < B + C ) e ( | A - C | < B < A + C ) e ( | A - B | < C < A + B)) então Se ( A = B e B = C ) então resultado "É um triângulo equilátero" SeNão Se (( A=B e B≠C ) ou ( A=C e C≠B ) ou ( B=C e C≠A )) então resultado = "É um triângulo isósceles" SeNão Se (( A ≠ B ) e ( B ≠ C ) e ( A ≠ C )) então resultado = "É um triângulo escaleno" FimSe FimSe FimSe SeNão resultado = "Lados não formam um triângulo" FimSe Imprime resultado Fim
agora acho que funciona :smiley:

[quote=marcobiscaro2112]Bem vindo ao fórum Sérgio!

Eu acho que já vi exatamente esse exercício em algum lugar mas não lembro onde… você poderia dizer de onde o tirou?[/quote]Na verdade, é um pequeno trabalho pra faculdade, meu professor (Rodrigo da Rosa Righi) passou ele, mas não sei a fonte do professor :stuck_out_tongue:
Comecei agora em março, por isso a gente tá bem devagar, aí tem que mostrar tudo bem explicadinho e tal, por isso um código mais longo (:

Tens aí coisas a mais.

Início Ler A,B,C,resultado Se (( | B - C | < A < B + C ) e ( | A - C | < B < A + C ) e ( | A - B | < C < A + B)) então Se ( A = B e B = C ) então resultado "É um triângulo equilátero" SeNão Se (( A=B e B≠C ) ou ( A=C e C≠B ) ou ( B=C e C≠A )) então // Aqui não precisas dos ≠ pois se não é a condição de cima (triangulo equilátero) então se dois lados são iguais o terceiro vai ser obrigatoriamente diferente resultado = "É um triângulo isósceles" SeNão Se (( A ≠ B ) e ( B ≠ C ) e ( A ≠ C )) então //Não precisas deste se. Se não era nenhuma das condições atrás, é escaleno obrigatoriamente. resultado = "É um triângulo escaleno" FimSe FimSe FimSe SeNão resultado = "Lados não formam um triângulo" FimSe Imprime resultado Fim

Corrigido

Início Ler A,B,C,resultado Se (( | B - C | < A < B + C ) e ( | A - C | < B < A + C ) e ( | A - B | < C < A + B)) então Se ( A = B e B = C ) então resultado "É um triângulo equilátero" SeNão Se ( A=B ou A=C ou B=C ) então resultado = "É um triângulo isósceles" SeNão resultado = "É um triângulo escaleno" FimSe FimSe SeNão resultado = "Lados não formam um triângulo" FimSe Imprime resultado Fim

pmlm, quanto ao escaleno eu concordo, mas a condição Se ( A=B ou A=C ou B=C ) eu vou colocar do diferente, pq a gente tá bem no começo, daí tem que explicar bem ^^
acho que a minha dúvida seria se eu podia colocar como eu coloquei assimSe ... então Se ... então .... SeNão ... e lá no fim colocar outro SeNão se referindo ao primeiro Semas pelo visto isso é possível ^^
então acho que tudo foi resolvido…
obrigado à todos, o fórum é bem atencioso - pretendo frequentar mais o fórum, e quando estiver em um nível de conhecimento maior, estar repassando ele também (:

A mais complicada de fazer é essa:

if((a==b && b!=c && c!=a) || (a!=b && b==c && c!=a) || (a==c && b!=a && c!=b)){

Acho que o else if poderia ser mais simples:

if (a==b && b==c)
  triangulo equilatero
else if  (a!=b && b != c )
  triangulo escaleno
else
  triangulo isoceles

Se é triângulo, não é escaleno nem equilátero, logo é isóceles tornando o teste mais simples :slight_smile:

[quote=pmlm]No segundo if tens de verificar também se a é diferente de c senão pode ser isósceles.

else if  (a!=b && b != c && a != c)

[/quote]Opa, tem razão :slight_smile: [quote=pmlm]
E a ter de fazer 3 comparações sempre é preferível (e mais legível) usar igualdades do que desigualdades.

if (a==b && b==c)
  triangulo equilatero
else if  (a==b || b == c || a==c)
  triangulo isosceles
else
  triangulo escaleno

[/quote]
Concordo :slight_smile: