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.308 ]
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
instalando o unbound dns no debian via script
Baixar flatpak para um arquivo local
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Novos apps de produtividade, avanços em IA e distros em ebulição agitam o universo Linux
Como instalar o repositório do DBeaver no Ubuntu
Como instalar o Plex Media Server no Ubuntu
Digitando underscore com "shift" + "barra de espaços"
Como ativar a lixeira e recuperar aquivos deletados em um servidor Linux
Como mudar o nome de dispositivos Bluetooth via linha de comando
dpkg: erro: gatilho de arquivo duplicado chamado pelo arquivo de nome (6)
Instalação não está resolvendo as dependencias (2)
Captação de áudio no zorin linux começa a diminuir com o tempo (5)
Alternativas ao Multilogin para gerenciamento de múltiplas contas/prof... (0)









