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.051 ]
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
Enviar mensagens Via Net Send no Linux
Instalando o SIESTA no Linux automaticamente
Criação de pasta com senha no Apache
CBQU - Utilitário para controle de banda de forma fácil e interativa
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Cups: Mapear/listar todas as impressoras de outro Servidor CUPS de forma rápida e fácil
Criando uma VPC na AWS via CLI
Problemas ao instalar o PHP (8)
Linux não é para todo mundo (12)