shell-script-pt
[Top][All Lists]
Advanced

[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 &#8800; b) e (b &#8800; 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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]