Você
Olá Convidado,
Você se cadastrou no dia
A sua ultima visita foi em
A sua idade é: 0
Voce ja postou 1 mensagens
Últimos assuntos
Scripts em PHP uteis
Página 1 de 1
Scripts em PHP uteis
- Código:
<?
/* FUNÇÕES:
-> strtodec($str);
-> dectostr($valor);
-> mdc ($num1, $num);
-> mmc ($string);
-> simp_fr ($n, $d);
-> soma_fr ($n1, $d1, $n2, $d2);
-> dif_fr ($n1, $d1, $n2, $d2);
-> mult_fr ($n1, $d1, $n2, $d2);
-> div_fr ($n1, $d1, $n2, $d2);
-> fatora($num);
-> num_div($num);
-> divisores($num);
-> par_div($num);
-> is_quad($num);
-> dectorom($dec);
-> romtodec($rom);
*/
/* Conjunto de funções que trabalham com o cálculo com letras (a=0, b=1, c=2, etc...)*/
function strtodec ($str="a") {
// Sepeara os caracteres da string
for ($i=0; $i<strlen($str); $i++) {
$char[] = strtolower(substr($str, $i, 1));
}
// Transforma letra em número
$letras = array("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z");
foreach($char as $elemento) {
for ($i=0; $i<count($letras); $i++) {
if ($elemento == $letras[$i])
break;
}
$num[] = $i;
}
// Calcula e retorna o valor
for ($i=0; $i<count($num); $i++) {
$expoente = count($num)-1-$i;
$mult = pow(26, $expoente);
$valor += $num[$i]*$mult;
}
return $valor;
}
function dectostr($valor=0) {
// Cria uma array com os valores de cada casa
if ($valor<26) $num[0]=$valor;
while($valor>25) {
$quociente = floor($valor/26);
$resto = $valor%26;
$num[] = $resto;
if ($quociente<26) {
$num[] = $quociente;
break;
}
$valor = $quociente;
}
// Transforma os números em letras, junta-os e retorna
$num = array_reverse($num);
$letras = array("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z");
$str = "";
foreach($num as $elemento) {
$str .= $letras[$elemento];
}
return $str;
}
/* As duas funções acima servem para trabalhar com base 26, ex:
a+a = 0+0 = 0 = a
g+u+i = 6+19+8 = 33 = bh
gui = gaa+ua+i = 4056+520+8 = 4584
b*c = 1*2 = 2 = c
f/b = 5/1 = 5 = f
z-a = 25-0 = 25 = z
z+b = 25+1 = 26 = ba
bh-ba = 33-26 = 7 = h
*/
// Calcula o mdc de dois números
function mdc ($num1, $num2) {
$D = max($num1, $num2);
$r = min($num1, $num2);
while ($r != 0) {
$d = $D;
$D = $r;
$r = $d%$D;
}
return $D;
}
// Calcula o mmc das números organizados em string:
// "n1-n2-n3-n4-...-nn"
function mmc ($string) {
$num = explode("-", $string);
$i = 1;
$r = 1;
while (array_sum($num) != count($num)) {
$i++;
$multiplo = false;
for ($j=0; $j<count($num); $j++) {
if ($num[$j]%$i == 0) {
$multiplo = true;
$num[$j] /= $i;
}
}
if ($multiplo) {
$r *= $i;
$i--;
}
}
return $r;
}
/* Simplifica uma fração, a função deve ser chamada assim:
simp_fr($numerado, $denominador) e retorna
"$numerador/$denominador"*/
function simp_fr ($n, $d) {
// Transforma o denominador em inteiro
$temp = strlen($d)-strlen(floor($d));
$multi = pow(10, $temp);
$d *= $multi;
$n *= $multi;
// Transforma o numerador em inteiro
$temp = strlen($n)-strlen(floor($n));
$multi = pow(10, $temp);
$d *= $multi;
$n *= $multi;
// Calcula o mdc através da função mdc
$mdc = mdc(abs($n), abs($d));
// Aplica o mdc
$n /= $mdc;
$d /= $mdc;
// Transforma o sinal
if ($d != abs($d)) {
$d = -$d;
$n = -$n;
}
// Retorna o resultado
return $n . "/" . $d;
}
/* Soma duas frções, chame a função assim:
soma_fr ($numerador1, $denominador1, $numerador2, $denominador2);
retorna "$numerador/$denominador"*/
function soma_fr ($n1, $d1=1, $n2, $d2=1) {
// Simplifica as duas frações
$fr1 = simp_fr($n1, $d1);
$fr2 = simp_fr($n2, $d2);
$temp = explode("/", $fr1);
$n1 = $temp[0];
$d1 = $temp[1];
$temp = explode("/", $fr2);
$n2 = $temp[0];
$d2 = $temp[1];
// Calcula o mmc e reduz ao mesmo denominador
$mmc = mmc("$d1-$d2");
$n1 *= $mmc/$d1;
$n2 *= $mmc/$d2;
$d = $mmc;
$n = $n1+$n2;
// Simplifica o resultado e retorna
return simp_fr($n, $d);
}
/* Subtrai duas frções, chame a função assim:
dif_fr ($numerador1, $denominador1, $numerador2, $denominador2);
retorna "$numerador/$denominador"*/
function dif_fr ($n1, $d1=1, $n2, $d2=1) {
// Simplifica as duas frações
$fr1 = simp_fr($n1, $d1);
$fr2 = simp_fr($n2, $d2);
$temp = explode("/", $fr1);
$n1 = $temp[0];
$d1 = $temp[1];
$temp = explode("/", $fr2);
$n2 = $temp[0];
$d2 = $temp[1];
// Calcula o mmc e reduz ao mesmo denominador
$mmc = mmc("$d1-$d2");
$n1 *= $mmc/$d1;
$n2 *= $mmc/$d2;
$d = $mmc;
$n = $n1-$n2;
// Simplifica o resultado e retorna
return simp_fr($n, $d);
}
/* Função que multiplica duas frações, chame-a assim:
mult_fr ($numerador1, $denominador1, $numerador2, $denominador2);
retona "$numerador/$denominador"*/
function mult_fr ($n1, $d1=1, $n2, $d2=1) {
// Simplifica as duas frações
$fr1 = simp_fr($n1, $d1);
$fr2 = simp_fr($n2, $d2);
$temp = explode("/", $fr1);
$n1 = $temp[0];
$d1 = $temp[1];
$temp = explode("/", $fr2);
$n2 = $temp[0];
$d2 = $temp[1];
// Multiplica os numeradores e denominadores
$n = $n1*$n2;
$d = $d1*$d2;
// Simplifica e retorna o resultado
return simp_fr($n, $d);
}
/* Função que divide duas frações, chame-a assim:
div_fr ($numerador1, $denominador1, $numerador2, $denominador2);
retona "$numerador/$denominador"*/
function div_fr ($n1, $d1=1, $n2, $d2=1) {
// Inverte, multiplica e retorna o resultado
return mult_fr($n1, $d1, $d2, $n2);
}
// Fatora um número natural e retorna "base1-expoente1-base2-expoente2...-basen-expoenten"
// Ex.: fatora(12) retorna "2-2-3-1" que significa que 12 = 2²*3¹ (dois ao quadrado vezes 3)
function fatora($num) {
$i = 1;
$ant = 1;
if ($num == 1) {
return "1-1";
} else if ($num == 0) {
return "0-1";
}
while($num != 1) {
$i++;
if ($num%$i == 0) {
if ($i == $ant) {
$exp[count($exp)-1]++;
} else {
$exp[] = 1;
$bases[] = $i;
}
$num /= $i;
$ant = $i;
$i--;
}
}
// Transforma as arrays em strings
for ($i=0; $i<count($exp); $i++) {
$result .= $bases[$i] . "-" . $exp[$i] . "-";
}
$result = substr($result, 0, strlen($result)-1);
return $result;
}
// Calcula o número de divisores positivos de um número natural
function num_div ($num) {
$fatores = fatora($num);
$fatores = explode("-", $fatores);
$result = 1;
for ($i=1; $i<count($fatores); $i+=2) {
$result *= $fatores[$i]+1;
}
return $result;
}
// Determina todos os divisores positivos de um natural e retorna "div1-div2-div3...-divn"
// Ex.: divisores(12) -> "1-2-3-4-6-12"
function divisores($num) {
$fatora = fatora($num);
$fatora = explode("-", $fatora);
for ($i=1; $i<count($fatora); $i+=2) {
for ($j=0; $j<$fatora[$i]; $j++) {
$fatores[] = $fatora[$i-1];
}
}
$divisores = array(1, $fatores[0]);
$ant = $fatores[0];
$nant = 1;
for ($i=1; $i<count($fatores); $i++) {
$atu = $fatores[$i];
if ($ant == $atu) {
$inicio = count($divisores)-$nant;
} else {
$inicio = 0;
}
$fim = count($divisores);
$nant = $fim-$inicio;
for ($j=$inicio; $j<$fim; $j++) {
$divisores[] = $divisores[$j]*$atu;
}
$ant = $atu;
}
sort($divisores);
$result = join("-", $divisores);
return $result;
}
// Retorna uma array com os pares de divisores que multiplicados deêm o número
// Ex.: par_div(12) -> array("1-12", "2-6", "3-4")
// Ex2.: par_div(16) -> array("1-16", "2-8", "4-4")
function par_div ($num) {
$divisores = divisores($num);
$divisores = explode("-", $divisores);
$max = count($divisores)%2==0 ? count($divisores)/2 : (count($divisores)+1)/2;
for ($i=0; $i<$max; $i++) {
$result[] = $divisores[$i] . "-" . $divisores[count($divisores)-$i-1];
}
return $result;
}
// Determina se um natural é quadrado perfeito
function is_quad ($num) {
if (num_div($num)%2 == 0) {
return "false";
} else {
return "true";
}
}
// Transforma um número natural em número romano
function dectorom ($dec) {
if ($dec<0) {
return '';
}
$dec = (int) $dec;
$digit = (int) ($dec / 1000);
$dec -= $digit * 1000;
while ($digit > 0) {
$rom .= 'M';
$digit--;
}
$a = array("I", "X", "C", "M");
$b = array("V", "L", "D");
$c = array("", "a", "aa", "aaa", "ab", "b", "ba", "baa", "baaa", "ac");
for ($i=0; $i<strlen($dec); $i++) {
$j = strlen($dec)-$i-1;
$va = $a[$j];
$vb = $b[$j];
$você = $a[$j+1];
$trans = array("a" => $va, "b" => $vb, "c" => $você);
$str = $c[substr($dec, $i, 1)];
$rom .= strtr($str, $trans);
}
return $rom;
}
// Transforma um número romano em natural
function romtodec ($rom) {
$rom = strtoupper($rom);
$trans = array("M" => 1000, "D" => 500, "C" => 100, "L" => 50, "X" => 10, "V" => 5, "I" => 1);
$anterior = 1001;
for ($i=0; $i<strlen($rom); $i++) {
$atual = strtr(substr($rom, $i, 1), $trans);
if ($atual>$anterior) {
$dec -= 2*$anterior;
}
$dec += $atual;
$anterior = $atual;
}
return $dec;
}
?>
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos
|
|
Dom 17 Fev 2013, 8:16 am por Darkmel
» Novas Vagas
Dom 17 Fev 2013, 8:02 am por Darkmel
» jogos mortais IV
Ter 04 Dez 2012, 4:51 pm por manete
» Planet - RO - Full PvP
Qui 12 Jan 2012, 10:12 am por Nagato_Uchiha
» TUXqweqe
Qui 05 Jan 2012, 10:29 am por vitao009