Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

José Enésio

[Resolvido] Propriedades Base 2

Recommended Posts

Propriedades Numéricas de Base 2

 

Pois é gente, não sei a melhor maneira de descrever isso, mas bem, é tipo sabe aquelas propriedades que às vezes tu ve em códigos, que a primeira vale 1, a segunda vale 2, a terceira vale 4, a quarta vale 8, e assim vai indo, e você vai adicionando elas para obter propriedades compostas? Pois é, hoje vou ensinar a fazer exatamente isso: montar um sisteminha que é capaz de interpretar um número em propriedades. O que você fará com isso, é com você, mas lá vai. Antes de querer passar algum código, terei que ensinar a vocês a lógica por trás disso tudo! Essa lógica, descobri um dia desses. Peguei um caderno, um lápis, uma borracha, e fui observando as regras quanto às propriedades. É interessante que vocês tentem fazer algo assim quando não sabem o que fazer! Dá certo! Bom vamos lá!

 

As Regras

 

Para entender um sistema matemático complexo, é necessário conhecer as regras. Mas depois que você ver isso aqui, verá que não é tão complexo. É bem simples. Bom, vamos entender as regras primeiro!

Veja só as propriedades:

Prop1 = 1

Prop2 = 2

Prop3 = 4

Prop4 = 8

Prop5 = 16

Prop6 = 32

Como pode-se perceber, essas propriedades são potências de 2. Elas deixam um espaço entre si que permite adicionar as propriedades anteriores em qualquer combinação. Exemplo: Prop1 + Prop2 = 3, portanto 3 é a combinação das duas primeiras propriedades, já 6 é Prop3 + Prop2, ou seja, 4+2, o que quer dizer que é as duas propriedades ao mesmo tempo.

Sabendo disso, podemos descobrir qual é a última propriedade: o número dado dividido pela propriedade maior resulta em um número entre 1 e 2. Teste você mesmo: Divida 18 por 16, 14 por 8, 3 por 2.

Então aí temos uma maneira de descobrir a propriedade maior de um número: O número dividido pela propriedade maior deve dar entre 1 e 2.

Mas podemos simplificar isso um pouco mais: dividindo o número pela próxima propriedade, o número será inferior a 1.

Então temos uma regra que pode ser utilizada direto no código: multiplicar um número iniciando em 1 por 2 enquanto o número dado dividido por esse número resulta em um número superior ou igual à 1.

Vamos a um estudo prático, tomando como exemplo o número 21.

21 / 1 = 21, portanto continua

21 / 2 = 10.5, portanto continua

21 / 4 = 5.25, portanto continua

21 / 8 = 2.625, portanto continua

21 / 16 = 1.3125, portanto continua

21 / 32 = 0.65625, opa, é menor que 1, portanto a propriedade maior de 21 é Prop5 ou 16.

 

Claro, podemos decidir não pegar a propriedade maior de um número, começar a próxima parte direto pela propriedade maior do código (no nosso exemplo, 32), mas dessa maneira fica mais flexível.

Sabendo a propriedade maior, podemos descobrir as propriedades menores. Acontece que é um pouco mais complexo essa parte: um número, menos as suas propriedades maiores já comprovadas, menos uma determinada propriedade, resulta em 0 ou mais caso o número possua tal propriedade, ou menos que 0 caso contrário.

Então mais uma regra para usar direto no código: para cada uma das potências de 2, desde a propriedade maior, se o número menos o a propriedade for igual ou superior a zero, o número possui tal propriedade, e deve ser subtraído da propriedade.

Exemplo prático: partindo do 21 do exemplo anterior, cuja propriedade máxima é Prop5 (16), podemos descobrir quais propriedades pertencem à esse número:

21 - 16 = 5, portanto 21 possui a Prop5 e deve continuar como 5

5 - 8 = -3, portanto 21 não possui a Prop4

5 - 4 = 1, portanto 21 possui a Prop3 e deve continuar como 1

1 - 2 = -1, portanto 21 não possui a Prop2

1 - 1 = 0, portanto 21 possui a Prop1

 

Tente adicionar Prop1, Prop3 e Prop5. 1 + 4 + 16 = 20 + 1 = 21. Hehe!

 

Botando isso em código

 

Porque eu acho que já tenho muitos tutoriais em PHP, irei fazer a parte de código desse tutorial em JavaScript. Pensei em fazer em C++, mas optei por JavaScript porque em todos os fóruns que irei postar esse tutorial tem uma seção para JavaScript ao contrário de C++. Vamos lá!

 

<script type="text/javascript">
function avaliar(numero){
	//pegar a propriedade máxima
	while(numero/teste >= 1)
	{
		teste *= 2;
	}
	var props = new Array();
	//montar a array com as propreidades
	for(x = numero; teste >= 1;)
	{
		if(x - teste >= 0)
		{
			props.push(raiz(teste));
			x-= teste;
		}
		teste /= 2;
	}
}

function raiz(numero)
{
	//como nossos números são potências de 2, não precisamos de algo muito complicado, portanto vamos fazer um sistema simples de raiz
	var resultado = 0;
	for(num = numero; num >= 1; num/=2)
	{
		resultado++;
	}
	return resultado;
}
</script>

Espero que tenham gostado pessoal, até a próxima! Façam bom uso desse sisteminha!

Fiquem ligados que vou postar a forma mais "simples" de fazer isso, trabalhando com os códigos binários dos números, logo logo!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.