Discussion:
[shell-script] tabuada (on-topic mesmo)
Jorge Barros de Abreu ficmatin10@gmail.com [shell-script]
2017-06-16 10:17:52 UTC
Permalink
Olá.

No link abaixo existe um shell script que cria as
tabuadas básicas de somar, subtrair, multiplicar e dividir.

https://sites.google.com/site/ficmatinf/Home/tabuada.txt?attredirects=0&d=1

Caso os colegas da lista possam fazer uma crítica do código
no sentido de torná-lo mais seguro e mais rápido, melhorá-lo enfim, eu agradeço.

Obrigado antecipadamente.
--
Data Estelar 2457920,868924
http://sites.google.com/site/ficmatinf
Desejo-lhe Paz, Vida Longa e Prosperidade.
São Bem Vindas Mensagens no Formato texto UTF-8 com Acentos.
'Julio C. Neves' julio.neves@gmail.com [shell-script]
2017-06-16 13:49:16 UTC
Permalink
Fala Jorge,
o Shell tem um interpretador matemático, que sempre deve ser usado qdo se
trabalha com inteiros. Usando esse interpretador pode-se inclusive fazer um
for muito rápido. Para vc ter uma ideia, vou medir o tempo para fazer 2+2
usando o bc e o for que vc usou e a forma à qual me refiro. Mandarei as
saídas de ambos para /dev/null, para não onerar o resultado.

Da sua forma:
$ time for i in `seq 200`; do echo 2+2 | bc > /dev/null; done

real 0m0.279s
user 0m0.016s
sys 0m0.060s

Usando o interpretador aritmético do Shell:
$ time for ((i=1; i<201; i++)); { echo $((2+2)) > /dev/null; }

real 0m0.006s
user 0m0.008s
sys 0m0.000s

Para vc entender melhor, veja a explicação da sintaxe do for
<http://wiki.softwarelivre.org/TWikiBar/TWikiBarPapo005#Terceira_sintaxe_do_comando_for>
e o uso do interpretador aritmético do Shell
<http://wiki.softwarelivre.org/TWikiBar/TWikiBarBirinaite#Aritm_tica_em_Shell>

*Pessoal, brevemente darei um curso de Shell, com direito a um mergulho
profundo em Expressões Regulares e uma passada rápida pelo YAD, que é uma
interface gráfica sensacional. O curso será de 40 horas e acontecerá no RJ
e em BSB. Quem tiver interesse mande e-mail para
***@linuxsolutions.com.br <***@linuxsolutions.com.br>, cite
meu nome, diga que é da lista (10% de abatimento).*

Abcs,
Julio

​​
Nosso time de instrutores *in company* é formado somente por
​
​
autores
​ ​
​
de
*Best Sellers​ ​*​laureados ​sobre os temas. P. exemplo:

Shell básico e Programação em Shell Julio Neves
Bacula Heitor Medrado
Zabbix Adail Host
Produção Gráfica e Videografismo Cadunico
Post by Jorge Barros de Abreu ***@gmail.com [shell-script]
Olá.
No link abaixo existe um shell script que cria as
tabuadas básicas de somar, subtrair, multiplicar e dividir.
https://sites.google.com/site/ficmatinf/Home/tabuada.txt?att
redirects=0&d=1
Caso os colegas da lista possam fazer uma crítica do código
no sentido de torná-lo mais seguro e mais rápido, melhorá-lo enfim, eu
agradeço.
Obrigado antecipadamente.
--
Data Estelar 2457920,868924
http://sites.google.com/site/ficmatinf
Desejo-lhe Paz, Vida Longa e Prosperidade.
São Bem Vindas Mensagens no Formato texto UTF-8 com Acentos.
Jorge Barros de Abreu ficmatin10@gmail.com [shell-script]
2017-06-16 17:41:04 UTC
Permalink
Post by 'Julio C. Neves' ***@gmail.com [shell-script]
Fala Jorge,
o Shell tem um interpretador matemático, que sempre deve ser usado qdo
se trabalha com inteiros. Usando esse interpretador pode-se inclusive
fazer um for muito rápido. Para vc ter uma ideia, vou medir o tempo
para fazer 2+2 usando o bc e o for que vc usou e a forma à qual me
refiro.
Grande Júlio.

Implementei sua dica e a diferença foi descaradamente/desavergonhadamente
estupenda.

Eu já vinha escovando esse script a algum tempo e percebi de cara que ele
ficou 'mais rapidíssimo'.

o antigo:
real 0m0.610s
user 0m0.077s
sys 0m0.036s

o novo:

real 0m0.057s
user 0m0.045s
sys 0m0.009s

Atualizei o arquivo no link e ajustei outro bug que não tinha visto.

Obrigado.
--
Data Estelar 2457921,221192
http://sites.google.com/site/ficmatinf
Desejo-lhe Paz, Vida Longa e Prosperidade.
São Bem Vindas Mensagens no Formato texto UTF-8 com Acentos.
Fredi Rolf Bieging fredi.bieging@gmail.com [shell-script]
2017-06-16 17:06:09 UTC
Permalink
Olá Jorge!

Seguem algumas sugestões:

Existem cálculos desnecessários nas funções subtracao e divisao que podem
ser eliminados.
Seguir a dica do Julio e utilizar o interpretador matemático no lugar do bc.
Trocar o "seq 0 9" por "{0..9}".
Botar o ">> $l.txt" só na chamada das funções ao invés de colocar dentro de
todas as funções.
E também não precisa entrar e sair dos diretórios.

Segue uma versão com as sugestões acima: https://pastebin.com/6QqFCGn5
Post by Jorge Barros de Abreu ***@gmail.com [shell-script]
Olá.
No link abaixo existe um shell script que cria as
tabuadas básicas de somar, subtrair, multiplicar e dividir.
https://sites.google.com/site/ficmatinf/Home/tabuada.txt?
attredirects=0&d=1
Caso os colegas da lista possam fazer uma crítica do código
no sentido de torná-lo mais seguro e mais rápido, melhorá-lo enfim, eu
agradeço.
Obrigado antecipadamente.
--
Data Estelar 2457920,868924
http://sites.google.com/site/ficmatinf
Desejo-lhe Paz, Vida Longa e Prosperidade.
São Bem Vindas Mensagens no Formato texto UTF-8 com Acentos.
Jorge Barros de Abreu ficmatin10@gmail.com [shell-script]
2017-06-16 20:49:03 UTC
Permalink
Post by Fredi Rolf Bieging ***@gmail.com [shell-script]
Olá Jorge!
Existem cálculos desnecessários nas funções subtracao e divisao que
podem ser eliminados.
Seguir a dica do Julio e utilizar o interpretador matemático no lugar do bc.
Trocar o "seq 0 9" por "{0..9}".
Botar o ">> $l.txt" só na chamada das funções ao invés de colocar
dentro de todas as funções.
E também não precisa entrar e sair dos diretórios.
Segue uma versão com as sugestões
acima:Â [1]https://pastebin.com/6QqFCGn5
Olá Fredi

Executei seu script:

real 0m0.045s
user 0m0.036s
sys 0m0.008s

Ficou um pouco mais rápido.
Obrigado
--
Data Estelar 2457921,362859
http://sites.google.com/site/ficmatinf
Desejo-lhe Paz, Vida Longa e Prosperidade.
São Bem Vindas Mensagens no Formato texto UTF-8 com Acentos.
itamarnet@yahoo.com.br [shell-script]
2017-06-17 00:50:22 UTC
Permalink
Jorge

Esse seu script me lembrou de um que eu havia feito a um tempo atrás, que não é tão rápido, e nem redireciona a saída para um arquivo.

Mas talvez possa lhe dar alguma nova idéia.
Eis aqui como está:

for linha in $(echo {0..9}{a..d}{0..9}| tr 'abcd' '\+\-x\/');do [[ $linha =~ \/0$ ]] && continue || printf "${linha} = "; [[ $linha =~ \/ ]] && (echo "scale=2;${linha/x/\*}"|bc) || echo "$((${linha/x/\*}))" ; done | sed 's/[-+x\/]/ & /;s/ \./ 0./;s/\.00//'

[]'s
Itamar
Jorge Barros de Abreu ficmatin10@gmail.com [shell-script]
2017-06-17 08:04:25 UTC
Permalink
Oi Itamar.
Post by ***@yahoo.com.br [shell-script]
Jorge
Esse seu script me lembrou de um que eu havia feito a um tempo atrás,
que não é tão rápido, e nem redireciona a saÃda para um arquivo.
Mas talvez possa lhe dar alguma nova idéia.
for linha in $(echo {0..9}{a..d}{0..9}| tr 'abcd' '\+\-x\/');do [[
$linha =~ \/0$ ]] && continue || printf "${linha} = "; [[ $linha =~ \/
]] && (echo "scale=2;${linha/x/\*}"|bc) || echo "$((${linha/x/\*}))" ;
done | sed 's/[-+x\/]/ & /;s/ \./ 0./;s/\.00//'
[]'s
Itamar
__________________________________________________________________
__________________________________________________________________
O que dificulta é que a subtração e a divisão precisam de um tratamento
diferente da adição e da multiplicação. Não dá para colocar as quatro
em um só loop.

Se alguém conseguisse fazer isso em uma só linha de código ia ser o máximo.


[]Žs
--
Data Estelar 2457921,825602
http://sites.google.com/site/ficmatinf
Desejo-lhe Paz, Vida Longa e Prosperidade.
São Bem Vindas Mensagens no Formato texto UTF-8 com Acentos.
Jorge Barros de Abreu ficmatin10@gmail.com [shell-script]
2017-07-14 11:36:08 UTC
Permalink
No link abaixo coloquei um pdf resumindo as idéias aqui expostas na lista:

https://sites.google.com/site/ficmatinf/Home/tabuada.pdf?attredirects=0&d=1

Existe algum outro comando que pudesse ser usado para evidenciar
a diferença entre a versão inicial e a versão final do script???

Tópico muito proveitoso.

A versão final do script de tabuada está em:

https://sites.google.com/site/ficmatinf/Home/tabuada.txt?attredirects=0&d=1

Até.
--
Data Estelar 2457948,976655
http://sites.google.com/site/ficmatinf
Desejo-lhe Paz, Vida Longa e Prosperidade.
São Bem Vindas Mensagens no Formato texto UTF-8 com Acentos.
Continue reading on narkive:
Loading...