Raiz Quadrada (Square Root) para Bash

Publicado por Sergio Spoladore 06/11/2006

[ Hits: 7.935 ]

Homepage: http://yetlinux.blogspot.com

Download sqrt.sh




Este raro script calcula a raiz quadrada de um número natural entre 0 e 2^63 - 1. Caso ultrapasse este valor, haverá erro de cálculo. Creio ter corrigido todos os bugs. Serve como exercício de programação.

Deixo que vocês o compreendam.

  



Esconder código-fonte

#!/bin/bash 

verif (){
   str1="$1"
   [[ -z "$str1" ]] && {
      echo "Use $0 <numero>";
      echo "<numero> entre 0 e 9223372036854775807.";
      echo "Caso ultrapasse, havera erro de calculo.";
      exit 1;
   }

   str2=${str1//[0123456789]/}
   [[ -n "$str2" ]] && {
      echo "Use somente digitos de 0 a 9." 
      exit 1;
   }

}

cortazero(){
   a1=$1;
   while [ "$a1" != "$b1" ]; do
      b1=$a1;
      a1=${a1##0};
   done;
   echo $a1;
}

sqrt(){
   tmp1=$1;
   [[ $((${#tmp1}%2)) -eq 1 ]] && tmp1='0'$tmp1;
   j=0;
   rq='0';
   rt='';

   while [ -n "${tmp1:$j:2}" ]; do
      rt=$rt${tmp1:$j:2};
      rt=`cortazero $rt`;
      [[ -z "$rt" ]] && rt='0';
      rq=`cortazero $rq`;
      [[ -z "$rq" ]] && rq='0';   
      for ((i=1;i<=10;i++));do
         [[ $rt -lt $(( (`cortazero $((2*$rq))`$i) *$i)) ]] && { 
            rt=$((rt-(`cortazero $((2*$rq))`$((i-1)))*$((i-1))));
            rq=$rq$((i-1));
            break;
         }
      done;
      let j+=2;
   done;
   rq=`cortazero $rq`;
   [[ -z "$rq" ]] && rq='0';
   echo $rq;
}

verif $1;
sqrt $1;


Scripts recomendados

Instalador .tar.bz2 com menu gráfico Zenity

pptd - Simples daemon para controle de conexões pptp.

Usando netstat para verificar conexões e portas

estrutura para menu

Altera /etc/fstab colocando o parâmetro acl nas partições ext3.


  

Comentários
[1] Comentário enviado por viniciuspgomes em 20/09/2007 - 10:06h

Como calculo a raíz quadrada sem desprezar os valores decimais..
Tem como alterar isso no seu código?
abraço


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts