Raiz Quadrada (Square Root) para Bash

Publicado por Sergio Spoladore 06/11/2006

[ Hits: 8.981 ]

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

Backup com TAR em LOG usando FITA LTO/DLT com filtro de arquivos

Instalar o Java diretamente do site oficial

Criando um Backup .ISO do seu CD.

Backup Automatizado

confProxyFirefox.sh


  

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

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts