Autor Tópico: Controle de fluxo no Shell  (Lida 6356 vezes)

Offline rickynunes

  • Usuário Ubuntu
  • *
  • Mensagens: 12
    • Ver perfil
Controle de fluxo no Shell
« Online: 14 de Setembro de 2013, 20:51 »
Fala galera!
Então dessa vez to com um probleminha um pouco mais complexo pra mim.
Tenho um exercício que tenho que criar um script pra calcular o numero de diagonais de um polígono convexo. A formula aritmética é: nº de lados*(nº de lados-3)/2.
Explicando rapidinho pra quem não sabe (eu tbm não sabia), uma diagonal liga as vertices internas do poligono vou por um link com a imagem pra explicar melhor:
http://www.google.com.br/imgres?safe=off&sa=X&biw=1777&bih=824&tbm=isch&tbnid=-R5BV8Ah_S-ERM:&imgrefurl=http://www.brasilescola.com/matematica/numero-diagonais-um-poligono-convexo.htm&docid=Y53Eio0l_1XUZM&imgurl=http://www.brasilescola.com/upload/e/Untitled-2(119).jpg&w=351&h=150&ei=jfM0UquqEof69QTp7YGADg&zoom=1&ved=1t:3588,r:3,s:0,i:88&iact=rc&page=1&tbnh=120&tbnw=280&start=0&ndsp=34&tx=152&ty=64

Enfim, consegui fazer o básico de boa, porém, queria dar uma enfeitada, queria que quando inserisse o 3 indicando que o poligono tem 3 lados, me enviasse um aviso que não existem diagonais em polígonos de três lados e que quando inserisse o numero 2 ou menos, me avisasse que não existem poligonos de 2 lados ou menos.
Isso tudo seria usando if, then, else né?
Como ficaria o script.

este aqui roda de boa, é o básico, que só calcula não importa o numero:
#!/bin/bash
#Calculo de diagonais
echo "Insira o numero de lados do poligono:"
read nl
nd=$(($nl*($nl-3)/2))
echo "O numero de diagonais e: $nd"

esse aqui que fiz mais ou menos, mas tem coisas erradas (que não sei o que é), peguei o modelo em alguns sites:
#!/bin/bash
#Calculo de diagonais
echo "Insira o numero de lados do poligono:"
read nl
if [$nl=3];then
echo "Não existem diagonais em triangulos."
elif [$nl<3];then
echo "Não existem poligonos com 2 ou menos lados."
nd=$(($nl*($nl-3)/2))
echo "O numero de diagonais e: $nd"
fi
« Última modificação: 14 de Setembro de 2013, 23:27 por rickynunes »

Offline selvaking

  • Equipe Ubuntu
  • Usuário Ubuntu
  • *****
  • Mensagens: 1.171
  • Parque Anchieta - Rio de Janeiro - RJ
    • Ver perfil
Re: Controle de fluxo no Shell
« Resposta #1 Online: 14 de Setembro de 2013, 21:32 »
Código: [Selecionar]
#!/bin/bash
#Calculo de diagonais
echo "Insira o numero de lados do poligono:"
read nl
tri=3
nd=$(($nl*($nl-$tri)/2))
if [ "$nl" -eq "$tri" ]
 then
 echo "Não existem diagonais em triangulos."
 elif [ "$nl" -lt "$tri" ]
 then
 echo "Não existem poligonos com 2 ou menos lados."
 else
 echo "O numero de diagonais e: $nd"
fi
« Última modificação: 14 de Setembro de 2013, 21:37 por selvaking »
Dê-me um computador com o Tux que movo o mundo!

Linux User #323049

Offline irtigor

  • Equipe Ubuntu
  • Usuário Ubuntu
  • *****
  • Mensagens: 4.344
  • Delete, delete, delete!
    • Ver perfil
Re: Controle de fluxo no Shell
« Resposta #2 Online: 14 de Setembro de 2013, 21:37 »
Seria interessante que usa-se a tag de código... de qualquer forma, o espaço no comando de teste não é opcional, você tá fazendo comparação de strings, e esqueceu o else. Leia: http://mywiki.wooledge.org/BashFAQ/031

Offline rickynunes

  • Usuário Ubuntu
  • *
  • Mensagens: 12
    • Ver perfil
Re: Controle de fluxo no Shell
« Resposta #3 Online: 14 de Setembro de 2013, 23:27 »
Código: [Selecionar]
#!/bin/bash
#Calculo de diagonais
echo "Insira o numero de lados do poligono:"
read nl
tri=3
nd=$(($nl*($nl-$tri)/2))
if [ "$nl" -eq "$tri" ]
 then
 echo "Não existem diagonais em triangulos."
 elif [ "$nl" -lt "$tri" ]
 then
 echo "Não existem poligonos com 2 ou menos lados."
 else
 echo "O numero de diagonais e: $nd"
fi
Valeu cara deu certinho! Só que aqui em vez de atribuir o 3 como a variável "tri" tentei usar direto o 3, deu certin.. vlw cara, de verdade!
Então eu crio todo o script e só no final adiciono o controle de fluxo?

VLW CARA!!

Offline irtigor

  • Equipe Ubuntu
  • Usuário Ubuntu
  • *****
  • Mensagens: 4.344
  • Delete, delete, delete!
    • Ver perfil
Re: Controle de fluxo no Shell
« Resposta #4 Online: 15 de Setembro de 2013, 09:48 »
Você pode fazer em qualquer ponto, onde as variáveis necessárias pro calculo existam e alcance o else (que é onde você mostra), então sobra antes do if e dentro do else antes do echo.

Offline selvaking

  • Equipe Ubuntu
  • Usuário Ubuntu
  • *****
  • Mensagens: 1.171
  • Parque Anchieta - Rio de Janeiro - RJ
    • Ver perfil
Re: Controle de fluxo no Shell
« Resposta #5 Online: 15 de Setembro de 2013, 12:52 »
Valeu cara deu certinho! Só que aqui em vez de atribuir o 3 como a variável "tri" tentei usar direto o 3, deu certin.. vlw cara, de verdade!
Então eu crio todo o script e só no final adiciono o controle de fluxo?

VLW CARA!!

Não há de que! Eu gosto desses desafios em script. E estes do BASH são demais.
Dá uma olhada no "Advanced Bash-Scripting Guide" que é uma bíblia para os novatos.

Ele pode ser até instalado no seu micro e acessado localmente.

Código: [Selecionar]
sudo apt-get install abs-guide
http://localhost/doc/abs-guide/html/
Dê-me um computador com o Tux que movo o mundo!

Linux User #323049

Offline rickynunes

  • Usuário Ubuntu
  • *
  • Mensagens: 12
    • Ver perfil
Re: Controle de fluxo no Shell
« Resposta #6 Online: 15 de Setembro de 2013, 21:26 »
Valeu cara deu certinho! Só que aqui em vez de atribuir o 3 como a variável "tri" tentei usar direto o 3, deu certin.. vlw cara, de verdade!
Então eu crio todo o script e só no final adiciono o controle de fluxo?

VLW CARA!!

Não há de que! Eu gosto desses desafios em script. E estes do BASH são demais.
Dá uma olhada no "Advanced Bash-Scripting Guide" que é uma bíblia para os novatos.

Ele pode ser até instalado no seu micro e acessado localmente.

Código: [Selecionar]
sudo apt-get install abs-guide
http://localhost/doc/abs-guide/html/
Mto show cara!! Vai ajudar mto!! Brigadaum!!