DEV Community

Cover image for BC a calculadora do Bash
Francisco Chaves
Francisco Chaves

Posted on • Originally published at franciscochaves.com.br

BC a calculadora do Bash

Olá pessoal, hoje vamos aprender utilizar o BC , que é uma linguagem de programação, que podemos utilizar como calculadora no bash. Por ser uma linguagem de programação temos a opção de utilizar estrutura condicional, laços de repetições e outros recursos da linguagem.

O BC permite várias operações matemática e possui algumas operações definidas por padrão.

  • ^ (potenciação);
  • * (multiplicação) e / (divisão);
  • + (adição), - (subtração), % (resto da divisão);
  • sqrt(x) (raiz quadrada de x); e
  • last (último resultado).

Abra o terminal e execute o comando a seguir, para ter acesso ao modo interativo:

bc
Enter fullscreen mode Exit fullscreen mode

Digite as expressões a seguir, depois de digitar cada expressão pressione a tecla Enter para visualizar o resultado.

2^8
4*2
5/2
10%3
2+2
21-5
sqrt(last)
sqrt(81)
last-2
Enter fullscreen mode Exit fullscreen mode

Expressões matemáticas com o BC

Podemos observar que o resultado da divisão de 5 por 2 não foi exatamente o esperado, para isso temos que utilizar o scale=2 para o resultado ter duas casas decimais após o ponto.

Expressões matemáticas com o BC com o scale=2

Para sair do modo interativo, utilize quit.

Expressões matemáticas com o BC

Outra forma para utilizar no modo interativo é ativar a biblioteca padrão de funções matemáticas, com a opção -l que tem por padrão o scale=20 e assim podemos utilizar as seguintes funções:

  • s(x) o seno de x, onde x é em radianos;
  • c(x) o cosseno de x, onde x é em radianos;
  • a(x) o arcotangente de x, a resposta é dada em radianos;
  • l(x) o logaritmo natural de x;
  • e(x) a função exponencial de e elevado a x; e
  • j(n, x) a função de Bessel da ordem de n de x;

Expressões matemáticas com o BC e opção -l

Agora vamos ver alguma opções de execução do BC diretamente na linha de comando.

Primeira forma de utilização:

bc <<< "scale=3;7/3"
Enter fullscreen mode Exit fullscreen mode

Segunda forma de utilização:

echo "scale=3;7/3" | bc
Enter fullscreen mode Exit fullscreen mode

Vamos utilizar o BC para conversão de base com os comandos ibase (base numérica de entrada) e obase (base numérica de saída), por padrão a base de entrada e saída é 10, e se utilizar apenas um dígito será interpretado em hexadecimal, veja alguns exemplos:

Converter o número hexadecimal 3F para decimal.

bc <<< "ibase=16;obase=A;3F"
Enter fullscreen mode Exit fullscreen mode

Converter o número decimal 63 em hexadecimal.

bc <<< "ibase=A;obase=16;63"
Enter fullscreen mode Exit fullscreen mode

Converter o número decimal 63 em octal.

bc <<< "ibase=A;obase=8;63"
Enter fullscreen mode Exit fullscreen mode

Converter o número octal 77 em decimal.

bc <<< "ibase=8;obase=A;77"
Enter fullscreen mode Exit fullscreen mode

Converter o número decimal 63 em binário.

bc <<< "ibase=A;obase=2;63"
Enter fullscreen mode Exit fullscreen mode

Converter o número binário 111111 em decimal.

bc <<< "ibase=2;obase=A;111111"
Enter fullscreen mode Exit fullscreen mode

Também podemos criar um script para verificar se o número é ímpar ou par, crie o arquivo abaixo e salve o arquivo com o nome par-ou-impar.bc:

#!/usr/bin/bc -l

# autor: Francisco Chaves <https://franciscochaves.com.br>
# descrição: Descubra se o número é ímpar ou par

print "\n"

for (i=0; i < 40; i++) {
  print "*"
}

print "\nInsira um número inteiro\n"

num = read()

if (num % 2 == 0) {
  print "Número é par"
} else {
  print "Número é ímpar"
}

print "\n"

cont=0

while (cont++ < 40) {
  print "*"
}

print "\n"

quit
Enter fullscreen mode Exit fullscreen mode

Atribua permissão de execução ao arquivo:

chmod +x par-ou-impar.bc
Enter fullscreen mode Exit fullscreen mode

Execute o arquivo e insira um valor válido, o BC não tem tratamento de erros:

./par-ou-impar.bc
Enter fullscreen mode Exit fullscreen mode

Script em BC para saber se o número é ímpar ou par

Outra coisa bem interessante é a criação de funções com o BC , para isso utilizamos o comando define. Vamos criar o script com o nome calculadora.bc com funções de uma simples calculadora.

#!/usr/bin/bc -l

# autor: Francisco Chaves <https://franciscochaves.com.br>
# descrição: Operações matemáticas básicas

define soma(a, b) {
  return a + b
}

define subtracao(a, b) {
  return a - b
}

define multiplicacao(a, b) {
  return a * b
}

define divisao(a, b) {
  scale=2
  return a / b
}

print "\n ********CALCULADORA******** \n"

print "\nDigite o primeiro número:\n"
num1 = read()

print "\nDigite o segundo número:\n"
num2 = read()

print "\n **Soma** \n "
soma(num1, num2)
print "\n **Subtração** \n "
subtracao(num1, num2)
print "\n **Multiplicação** \n "
multiplicacao(num1, num2)
print "\n **Divisão** \n "
divisao(num1, num2)

quit
Enter fullscreen mode Exit fullscreen mode

Script em BC para operações matemáticas básicas

Para conhecer mais sobre o BC consulte o manual com o comando abaixo:

man bc
Enter fullscreen mode Exit fullscreen mode

Referências

BC | GUIA LINUX. [s.d.]. UNIRIO / CCET - Ensino e Pesquisa - Produzir e disseminar conhecimento. Disponível em: https://guialinux.uniriotec.br/bc/. Acesso em: 24 dez. 2020.

CONVERSÃO DE BASE NO SHELL. 9 ago. 2017. Mente Binária. Disponível em: https://www.mentebinaria.com.br/forums/topic/54-conversão-de-base-no-shell/. Acesso em: 24 dez. 2020.

ENTENDEU “IBASE” E “OBASE” EM CASO DE CONVERSÕES COM BC?. QA Stack. Disponível em: https://qastack.com.br/unix/199615/understand-ibase-and-obase-in-case-of-conversions-with-bc. Acesso em: 24 dez. 2020.

PAPO BINÁRIO. Cálculo No Shell Com O Bc. 8 mar. 2017. YouTube. Disponível em: https://www.youtube.com/watch?v=vLhABLeb11o. Acesso em: 24 dez. 2020.

PINHEIRO, Renan. BC: A Sua Calculadora Programvel No Linux [Artigo]. 21 maio 2006. VIVA O LINUX. Disponível em: https://www.vivaolinux.com.br/artigo/BC-A-sua-calculadora-programavel-no-Linux. Acesso em: 24 dez. 2020.

SLACKJEFF. BC, CALCULADORA DO BASH. 12 set. 2017. YouTube. Disponível em: https://www.youtube.com/watch?v=5FGmQB-pM2Y. Acesso em: 24 dez. 2020.

Oldest comments (2)

Collapse
 
eduardoklosowski profile image
Eduardo Klosowski

Acho interessante conhecer a linguagem desses utilitários, como sed e awk também, normalmente são bem mais simples quando comparado a outras linguagens de programação de uso geral e é possível fazer muita coisa com elas.

Uma opção para o bc é o dc, que é uma calculadora polonesa-reversa, e pode ser interessante também para alguns casos.

Collapse
 
franciscochaves profile image
Francisco Chaves

Também acho bem legal ter o conhecimento nos utilitários de linha de comando, podemos precisar em algum momento, além de ajudar bastante e principalmente para criar scripts em Shell. Não conhecia o dc, parece interessante, valeu amigo!!