Raízes da equação de segundo grau (Bhaskara) através do prompt em shell
Publicado por Perfil removido (última atualização em 31/05/2017)
[ Hits: 3.450 ]
Da série "scripts inúteis" ou "inutilitários".
Este script recebe três números inteiros ou decimais via linha de comando, correspondentes a "a", "b" e "c", na equação de segundo grau ax²+bx+c=0 e retorna os dois valores para os quais x valida a equação, transformando a expressão em zero. Ele também fornece as raízes complexas conjugadas.
Os valores são impressos na tela por uma linha cada totalizando duas linhas impressas.
O script foi testado até onde pude contra possíveis bugs. Nada impede de haver algum.
Exemplo de funcionamento
$ ./bhaskara-0001.sh 1 2 1
-1.000000000000000
-1.000000000000000
Outro exemplo:
$ ./bhaskara-0001.sh 1 2 3
-1.000000000000000 - 1.414213562373095i
-1.000000000000000 + 1.414213562373095i
Vejam a letra "i" ao final de cada linha, indicando a raiz complexa.
Se tiver coragem, ainda pretendo fazê-lo funcionar para parâmetros complexos.
#!/bin/bash
export escala=15
export errorlevel=0
# verifica ponto e virgula
vpv="s/\,/\./"
# verifica ponto, virgula e sinal
vps="s/^\-?[0-9]*\.?[0-9]*$//"
# verifica zero
vz="s/^0*\.?0*$//g"
# corta zero
cz="s/0//g"
# corta ponto
cp="s/\.//g"
# corta digito
cd="s/[0-9]//g"
# corta zero final
czf="s/^([0-9]*\.[0-9])0*$/\1/g"
calc () {
echo "$@" | bc -l
}
if [ $# -ne 3 ]
then
echo -e "Use $0 a b c.\nValores reais."
exit 16
fi
a=`echo -n $1 | sed -r "$vp"`
b=`echo -n $2 | sed -r "$vp"`
c=`echo -n $3 | sed -r "$vp"`
ver_a=`echo -n $a | sed -r "$vps"`
ver_b=`echo -n $b | sed -r "$vps"`
ver_c=`echo -n $c | sed -r "$vps"`
zero_a=`echo -n $a | sed -r "$vz"`
if [ -z "$zero_a" ]
then
echo "Valor de a nao pode ser zero."
let errorlevel+=8
fi
if [ -n "$ver_a" ]
then
echo "Valor de a fora de formato."
let errorlevel+=1
fi
if [ -n "$ver_b" ]
then
echo "Valor de b fora de formato."
let errorlevel+=2
fi
if [ -n "$ver_c" ]
then
echo "Valor de c fora de formato."
let errorlevel+=4
fi
if [ $errorlevel -ne 0 ]
then
exit $errorlevel
fi
delta=`calc "scale=$escala; $b*$b-4*$a*$c"`
delta=`echo $delta | sed -e "$cz" -e "$cp"`
sinal=`echo $delta | sed -r -e "$cd" -e "$cp"`
if [ "$sinal" = "-" ]
then
sgn=-1
r_delta=`calc "scale=$escala; sqrt(-1*$delta)"`
elif [ -z "$sinal" -a -z "$delta" ]
then
sgn=0
delta=0
r_delta=0
else
sgn=1
r_delta=`calc "scale=$escala; sqrt($delta)"`
fi
r_delta=`echo -n $r_delta | sed -r "$czf"`
re=`calc "scale=$escala; -1*$b/2*$a"`
re=`echo -n $re | sed -r "$czf"`
im=`calc "scale=$escala; $r_delta/2*$a"`
im=`echo -n $im | sed -r "$czf"`
if [ "$sgn" -eq "-1" ]
then
im=`echo $im | sed -r "s/^\-//g"`
echo -e "$re - $im"i"\n$re + $im"i
elif [ "$sgn" -eq 0 ]
then
echo -e "$re\n$re"
else
r1=`calc "scale=$escala; $re-$im"`
r2=`calc "scale=$escala; $re+$im"`
echo -e "$r1\n$r2"
fi
exit 0
Instalador de Código Fonte - Linha de Comando
Gerenciamento de espaço em disco
Baixe arquivos em pedaços com o DCDownloader
Dê utilidade aquelas teclas que não servem pra nada do seu teclado
Compara igualdade entre arquivos
Faça suas próprias atualizações de pacotes/programas no Void Linux e torne-se um Contribuidor
Como rodar o Folding@home no Linux
Criando um painel de controle (Dashboard) para seu servidor com o Homepage
O Abismo entre o Código e o Chão: Saltos Tecnológicos e a Exclusão Estrutural no Brasil
Instalar e Configurar a santíssima trindade (PAP) no Void Linux
Pisando no acelerador do Linux Mint: Kernel XanMod, zRAM e Ajustes de Swap
Como compilar kernel no Linux Mint
Lançamento do Brutal DOOM test 6
Consertando o erro no Brave de webgl
Solução para ter de volta as bordas e barra de títulos das janelas em zenity no Debian 13.x
Seno, Coseno, Tangente em CLIPPER (0)
Inserir uma URL num arquvo pelo Ubuntu (CLIPPER) (0)
VMWare Player não conecta na rede nem consigo intercambiar arquivos (1)









