Pular para o conteúdo

Raiz Quadrada (Square Root) para Bash

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.
Sergio Spoladore yetlinux
Hits: 9.426 Categoria: Shell Script Subcategoria: Avançado
  • Download
  • Nova versão
  • Indicar
  • Denunciar
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Descrição

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.
Download sqrt.sh Enviar nova versão
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

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;

O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Scritp de Firewall com Iptables

SlackelsPKG 1.0 - uma réplica de gerenciador de pacotes para o Slackware Current

Mega Sena

SCRIPT PARA AUTOMAÇÃO DE ATUALIZAÇÃO EM AMBIENTE DEBIAN OU DERIVADOS.

Load Balance

#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

Entre na sua conta para comentar.