Portal dos Games
Olá, sejá bem vindo (a) ao Portal dos Games, registre-se e faça parte do maior portal de games do mundo.
Você
Carregando avatar...
Olá Convidado,

Você se cadastrou no dia

A sua ultima visita foi em

A sua idade é: 0

Voce ja postou 1 mensagens

Últimos assuntos
» Golaço do goleiro arabe
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

Top dos mais postadores
vitao009 (739)
 
Kayo Raphael (115)
 
Darkmel (58)
 
deko009 (47)
 
darkmagic (44)
 
KamauX (32)
 
Ryan (26)
 
Matu Game (25)
 
LucasSC (11)
 
Yagami (11)
 

Dados do fórum
Contador
Contador visita
Page Rank PageRank

Scripts em PHP uteis

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Nada Scripts em PHP uteis

Mensagem por vitao009 em Sex 19 Mar 2010, 11:20 am

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;
}
?>

avatar
vitao009
Administrador
Administrador

Mensagens : 739
VicPontos : 93224
Moedas : 1023
Data de inscrição : 22/12/2009
Idade : 19
Localização : Santa Isabel SP
Pet :

Ver perfil do usuário http://vicforumvic.forumeiros.com

Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum