oi
antes, vou me apresentar 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á
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!
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!
É 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
[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?
Se ( A=0 ou B=0 ou C=0 ) então
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!!
[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
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
[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
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 (:
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 (: