[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Outras formas de trabalhar com inteiros
From: |
la.horst |
Subject: |
Outras formas de trabalhar com inteiros |
Date: |
Tue, 10 May 2011 13:17:00 -0000 |
User-agent: |
eGroups-EW/0.82 |
Outro dia estava estudando "Outras formas de trabalhar com inteiros" em
http://wiki.softwarelivre.org/TWikiBar/TWikiBarBirinaite
Daí resolvi testar a teoria no problema abaixo:
Associar três valores "a", "b" e "c" às medidas de comprimento aos lados de um
triângulo.
Desenvolver um algoritmo para verificar se é possível construir um triângulo
equilátero, isósceles ou escaleno com as medidas de comprimento "a", "b" e "c".
Cada lado é uma reta contida num plano da Geometria Euclidiana.
Em função das restrições acima (vamos relembrar os idos tempos da tabuada):
Triângulo é uma figura geométrica de três lados onde a medida de comprimento de
cada lado é menor que a soma das medidas dos outros dois lados.
Representação lógica:
(a < b + c) e (b < a + c) e (c < a + b)
Triângulo equilátero é o triângulo que tem todos os lados com medidas de
comprimento iguais;
Representação lógica:
(a = b) e (b = c)
Triângulo isósceles é o triângulo que tem dois lados com medidas de comprimento
iguais;
Representação lógica:
(a = b) ou (b = c) ou (a = c)
Triângulo equilátero é o triângulo que tem todos os lados com medidas de
comprimento diferentes;
Representação lógica:
(a ≠ b) e (b ≠ c)
Agora,que já sei o que é um triângulo na Geometria Euclidiana.
Vamos aos:
Dados de entrada:
O algoritmo de ler três valores associados às medidas dos lados de um
triângulo;
Dados de saída:
O algoritmo deve emitir as mensagens:
O valores informados, quando associados às de medidas de comprimento dos lados
de um triângulo não constroem um triângulo;
O valores informados, quando associados às medidas de comprimento dos lados de
um triângulo constroem um triângulo equilátero;
O valores informados, quando associados às medidas de comprimento dos lados de
um triângulo constroem um triângulo isósceles;
O valores informados, quando associados às medidas de comprimento dos lados de
um triângulo constroem um triângulo escaleno;
Vejam como construí a solução com Shell Script.
#!/bin/bash
echo "Informe a medida do primeiro lado: "
read a
echo "Informe a medida do segundo lado: "
read b
echo "Informe a medida do terceiro lado: "
read c
u=$(echo $(($c < $(echo $(($a + $b))))))
v=$(echo $(($a < $(echo $(($b + $c))))))
w=$(echo $(($b < $(echo $(($a + $c))))))
# Para os valores a, b e c formarem um triângulo, deve-se atribuir 3 à
variável f;
f=$(echo $(($u + $v + $w)))
i=$(echo $(($a == $b)))
j=$(echo $(($a == $c)))
k=$(echo $(($b == $c)))
# Para classificar os triângulos como equilátero, isósceles ou escaleno:
l=$(echo $(($i + $j + $k)))
# Juntando tudo para usar o if elif
if [ "$l" == 3 -a "$f" == 3 ]
then
echo "Você construiu um Triângulo Equilátero"
elif [ "$l" == 1 -a "$f" == 3 ]
then
echo "Você construiu um Triângulo Escaleno"
elif [ "$l" == 1 -a "$f" == 3 ]
then
echo "Você construiu um Triângulo Isósceles"
else
echo "As entradas de dados não formam um triângulo."
fi
Observe: ganhei também a solução com múltipla escolha:
#!/bin/bash
echo "Informe a medida do primeiro lado: "
read a
echo "Informe a medida do segundo lado: "
read b
echo "Informe a medida do terceiro lado: "
read c
u=$(echo $(($c < $(echo $(($a + $b))))))
v=$(echo $(($a < $(echo $(($b + $c))))))
w=$(echo $(($b < $(echo $(($a + $c))))))
# Para os valores a, b e c formarem um triângulo, deve-se atribuir 3 à
variável f;
f=$(echo $(($u + $v + $w)))
i=$(echo $(($a == $b)))
j=$(echo $(($a == $c)))
k=$(echo $(($b == $c)))
# Para classificar os triângulos como equilátero, isósceles ou escaleno:
l=$(echo $(($i + $j + $k)))
# Juntando tudo para usar a múltipla escolha.
x=$(echo $(($f + $l)))
case "$x" in
6)
echo "Você construiu um Triângulo Equilátero."
;;
4)
echo "Você construiu um Triângulo Isósceles."
;;
3)
echo "Você construiu um Triângulo Escaleno."
;;
*)
echo "As entradas de dados não formam um triângulo."
;;
esac
Dúvida:
Como escrever o script sem tanta declaração de variáveis. Alguma coisa parecida
com a "Linguagem C".
Logo abaixo está a solução na "Linguagem C".
#include<stdio.h>
/*
Eu sei, eu sei, o float aqui é um exagero.
Dados três valores: "a", "b" e "c", verificar:
a) se formam um triângulo, apresentar sua classificação;
b) caso contrário emitir a mensagem: "As medidas informadas não formam um
triângulo".
*/
main()
{
float a, b, c;
printf("Informe a medida do lado a: ");
scanf("%f", &a);
printf("Informe a medida do lado b: ");
scanf("%f", &b);
printf("Informe a medida do lado c: ");
scanf("%f", &c);
/* Condição para restringir o domínio a valores positivos. (Na Geometria
Euclidiana não há medida de comprimento negativa).*/
if((a > 0) && (b > 0) && (c > 0))
{
/* A representação lógica ((a < b + c) && (b < a + c) && (c < a + b)) é
avaliada pelo "if"*/
if((a < b + c) && (b < a + c) && (c < a + b))
{
/* Representação lógica ((a == b) && (a == c)) para avaliar se as
medidas de comprimento formam um triângulo equilátero.*/
if((a == b) && (a == c))
{
printf("\n\n\"O valores informados, quando associados às medidas
de comprimento dos lados de um triângulo constroem um triângulo
equilátero.\"\n\n");
}
else
{
/* Representação lógica ((a == b)||(b ==c)||(a ==c) ) para
avaliar se as medidas de comprimento formam um triângulo isósceles.*/
if ((a == b) || (b ==c) || (a ==c) )
{
printf("\n\n\"O valores informados, quando associados às
medidas de comprimento dos lados de um triângulo constroem um triângulo
isósceles.\"\n\n");
}
else
{
/* Representação lógica ((a != b)||(b != c)||(a != c) )
para avaliar se as medidas de comprimento formam um triângulo escaleno.*/
printf("\n\n\"O valores informados, quando associados às
medidas de comprimento dos lados de um triângulo constroem um triângulo
escaleno.\"\n\n");
}
}
}
else
{
/*Representação lógica ((a >= b + c) && (b >= a + c) && (c >= a + b))
para avaliar que as medidas de comprimento não formam um triângulo. */
printf("\n\n\"O valores informados, quando associados às de medidas
de comprimento dos lados de um triângulo não constroem um triângulo.\"\n\n");
}
}
else
{
/*Representação lógica ((a < 0) && (b < 0) && (c < 0)) para avaliar que
as medidas de comprimento não formam um triângulo. */
printf("\n\n\"O valores informados, quando associados às de medidas de
comprimento dos lados de um triângulo não constroem um triângulo.\"\n\n");
}
}
Att.
Luiz Alberto
- Outras formas de trabalhar com inteiros,
la.horst <=