você está aqui: Home  → Arquivo de Mensagens

Script para cálculo de fatorial

Colaboração: Júlio Cezar Neves

Data de Publicação: 20 de outubro de 2017

#!/bin/bash
# Programa para calculo de fatorial.
# chame o programa pasando o numero
# cujo fatorial sera calculado.
[ $# -ne 1 ] && exit 1
echo $(($(seq -s \* $1)))

A primeira linha encerra o programa caso não tenha sido passado o número para calcular o fatorial, a segunda é o pulo do gato. Vamos analisá-la em partes:

 seq -s \* $1 

esse comando produz uma seqüência numérica de 1 até o parâmetro passado ($1), usando como caractere separador entre os números um asterisco. Supondo que o número passado como parâmetro foi 5, após a execução deste comando teríamos: 1*2*3*4*5

Como temos um comando (seq) dentro de outro (echo) usamos $(seq -s \* $1), onde a construção $(...) foi usada para dar prioridade de execução ao comando no seu interior.

Parece mas não ésse :)! A construção $((...)) parece com a anterior, mas é totalmente diferente. Ela chama o interpretador aritmético do shell, que identifica o seu interior como uma operação aritmética inteira e executa esta operação.

OBS: também funcionaria se a segunda linha fosse assim:

 seq -s \* $1 | bc 

É por isso que eu sempre digo: "Nunca pergunte se dá para fazer em Shell. A pergunta correta é: qual é a melhor maneira de se fazer em shell"

Abração, Julio

:wq

Júlio Cézar Neves

O 4º UNIX do mundo nasceu na Cidade Maravilhosa, mais precisamente na Cobra Computadores, onde à época trabalhava o Julio. Foi paixão à 1ª vista! Desde então, (1980) atua nessa área como especialista em Sistemas Operacionais e linguagens de programação. E foi por essa afinidade que quando surgiu o Linux foi um dos primeiros a estudá-lo com profundidade e adotá-lo como Sistema Operacional e filosofia de vida. É autor dos livros Programação Shell Linux, 11ª edição e Bombando o Shell.

Veja a relação completa dos artigos de Júlio Cezar Neves

 

 

Opinião dos Leitores

Arnaldo Mandel
20 Out 2017, 12:01
O post merece uma correção. O script, numa máquina de 64 bits, só funciona para entrada <=25. Ele dá bobagem para entrada>=26 e entra em colapso com 66. Quem quiser, que experimente.

Já a alternativa, que deixa a conta por conta do bc, funciona, basicamente sem limitação.
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script