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.141 ]
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
Inserção de máquinas no banco de dados para controle interno
Identificar,matar e Iniciar novo Processo
Backup de vários servidores, diferenciado a rotina pela aplicação
Como gerar qualquer emoji ou símbolo unicode a partir do seu teclado
Instalar e Configurar o Slackware Linux em 2025
Como configurar os repositórios do apt no Debian 12 em 2025
Passkeys: A Evolução da Autenticação Digital
Instalação de distro Linux em computadores, netbooks, etc, em rede com o Clonezilla
Muitas dificuldades ao instalar distro Linux em Notebook Sony Vaio PCG-6131L (VPCEA24FM)
Slackpkg+ (Slackpkg Plus) está de volta!
Como dividir duas janelas igualmente e lado-a-lado na sua tela
Configurando o Conky para iniciar corretamente no sistema
3 configurações básicas que podem melhorar muito a sua edição pelo editor nano
Comando find na Utilização em Servidor de Backup. (0)
Instalar debian testing (13) "por cima" do debian 12 (4)
Pedagogia no brasil não passa de alfabetização por m4sturbação mental (0)
Minha rede tem um espaço invisível que não dá pra digitar o nome da re... (0)