Mostrando postagens com marcador Matemática. Mostrar todas as postagens
Mostrando postagens com marcador Matemática. Mostrar todas as postagens

(Tutorial) Operador AND (&)


Bem. Primeiramente olá a todos.

Hoje irei ensinar um tutorial que já me pediram algumas vezes, mas nunca tive vontade de fazer. Finalmente vou explicar como funciona os famosos operadores bit a bit, ou operadores estruturados em portas lógicas.

Primeiramente você deve saber que estes operadores usam instruções baseadas nas instruções booleanas. Mentirosas e Verdadeiras. Falses e Trues. 0 e 1


Vamos aos operadores:

Operador AND


Primeiramente você precisa gravar as seguintes regras:

A B (A & B)
0 0 0
0 1 0
1 0 0
1 1 1

Essas regras mudam de operador para operador. Mas basicamente operadores binários tem a mesma função o que muda é a regra acima.

A regra acima chama-se tabela verdade
http://pt.wikipedia.org/wiki/Tabela_verdade

Aqui outras regras:
http://pt.wikipedia.org/wiki/Porta_l%C3%B3gica

Em c++:
printf("%d", 0 & 0); // 0
printf("%d", 0 & 1); // 0
printf("%d", 1 & 0); // 0
printf("%d", 1 & 1); // 1

Resumindo a regra: Valores diferentes retorna falso. Valores que contenham zero em um dos parametros, retorna false. (Isto é, só 1 & 1 pode retornar verdadeiro)

Pois bem, já sabemos uma parte do operador &. Mas vem outra questão.

Quando os números usados como parâmetros são diferentes de 1 e 0? Como 10 & 15 ??

Como:
printf("%d", 10 & 15); // ??

Simples. O operador pega os valores de entrada e os transforma em binários:

Conversão para Binários:
10 -> 1010
15 -> 1111

Então usamos os próprio números binários para checagem BIT a BIT dos valores (algarismo por algarismo | digito por digito do número binário)

(10) (15)
1 1
0 1
1 1
0 1

Agora só aplicar as regra da tabela

1 & 1? 1
0 & 1? 0
1 & 1? 1
0 & 1? 0

Resultado:
1010

Agora por último a função transforma o número binário 1010 em decimal. Ficando 10

Logo 10 & 15 = 10

-----------------------------------------------------------------------

Pra que serve?

Para manipular os valores usando lógicas complexas. Exemplo

Saber se um número é Impar:

Para saber se um número é impar usando este operador basta usar (n & 1) sendo "n" o número a saber:

Ex:
9 & 1


Transformar em binário:
9 -> 1001
1 -> 0001

Comparar bit a bit:
1 & 0 =  0
0 & 0 =  0
0 & 0 =  0
1 & 1 =  1

Retornou 0001! Sim, 9 é impar.

-
-
-

Outro exemplo:
(12 & 1)



Transformar em binário:
12 -> 1100
1 -> 0001

Comparar bit a bit:
1 & 0 =  0
1 & 0 =  0
0 & 0 =  0
0 & 1 =  0

Retornou 0000 !! Não, 12 não é impar.

-
-

Entenderam?
_

** Importante - Dica
Para saber o valor binário de um número basta fazer:

printf("%b", VALOR);

Ex:
printf("%b", 15); // 1111


Simples não é? Não é muito difícil, precisa ler bem e entender. Dúvidas? Poste um comentário aqui!

Tutorial Criado por Bruno da Silva

(Javascript) Pegar digito de número sem strngs

Consegui criar outra função em javascript relacionada a números sem manipulação de strings. Já pensou como pegar um digito de um número sem precisar transformar o número em strings? Fácil, utilizando uma lógica que percebi podemos facilmente fazer isto


Espero que tenham gostado da dica. Abraço

(Javascript) Concatenar números sem strings

Fazendo cálculos de conhecendo melhor as funções de logaritmas, criei um concantenador de números utilizando  apenas cálculos matemáticos!

Segue aqui um exemplo

f(20,13) = 2013
f(14,50) = 1450
f(35448348, 483834846) = 35448348483834846

Aqui o código para função


Estudem o código. Me ajudou bastante a compreender a lógica de algumas outras coisas. O código veio a partir da função length que eu realmente usei logaritmos. :)


(Javascript) Detectar colisão em Canvas

Fiz um código com explicação de como fazer elementos simples no canvas, criar "vida" aos mesmos e até detectar se há colisão entre um e outro.

Segue o código abaixo com as explicações incorporadas.



Abraços

(Javascript) Gerar número triangular

Como muitos sabem, os números triangulares são números que podem ser representados por triangulos, por exemplo

            O
3 =     OO

Os números triangulares são de ordem crescente, da seguinte maneira

01 (1)
03 (1 + 2)
06  (1 + 2 + 3)
10  (1+2+3+4)

Logo a formula para obter números triangulares é

T = n(n+1)/2

Sendo
1(2)/2 = 01
2(3)/2 = 03
3(4)/2 = 06
4(5)/2 = 10

Levando em conta que os números triangulares de forma mais generalizada formam uma progressão aritméticas (ou sequencias aritméticas)

Logo, para pegar um número triangular basta fazer a seguinte função em javascript



Espero que tenham gostado, abraços

(Javascript) Verificar se o número é triangular

Ando meio sem tempo de postar, mesmo assim segue aqui uma função que fiz para checar se o número é triangular ou não

Utilizei uma formula criada por mim mesmo. Foi baseada na prova real de n(n+1)/2



Abraços

(Javascript) Algorítimo para pegar número primo sem divisão

Segue aqui uma maneira de como pegar um número primo sem divisão. Bastante simples, basta ir usando a multiplicação como operação inversa de maneira bruta, isto é, operação inversa. Prova real.

Segue o código:



Espero que tenham gostado!
Abraço

(Matematica) Explicação de XOR

XOR é um operador que utiliza como base números binários e a verificação Numero a Numero deles usando a lógica booleana disjunção exclusiva que é baseada na seguinte regra


Números iguais = 0
1 + 1 = 0
0 + 0 = 0

Números diferentes = 1
1 + 0 = 1
0 + 1 = 0

É parecido com aquele sistema que aprendendo na escola

++ = +
-- =  +

-+ = -
+- = -


Vou explicar com base no algorítimo XOR SWAP.. XOR Swap que é um algorítimo de troca de valores na memória. Basicamente quando tenho o valor 10 e o valor 5 (exemplo) o operador xor irá interpreta-los utilizando a lógica OU EXCLUSIVO (dai vem o termo XOR "exclusive or" receio)


Em XOR Swap fizemos
5 ^ 10 -> passo 1 
(5 ^ 10) ^ 5 -> passo 2
((5 ^ 10) ^ 5) ^ 10 -> passo 3
(explicarei como XOR fez isto)

Que resultando dará:
10,5 (antes era 5,10 lembra?) -> INVERTEMOS OS NÚMEROS NA MEMÓRIA 

Mas como ocorre está "mágica"? .. Agora vou explicar

A operação tem como base números binários e a comparação número a número
10 = 1010 em binário
5 = 101 e, binário
_______________________

Sendo assim vamos aos passos

PASSO 1:
Comparando número-número (eles estão na vertical em binário, preste atenção)
  1 = 1 (quando não há valores o valor é 0 logo 0 com 1 é 1)
10 = 1 
01 = 1
10 = 1
(a coluna a esquerda é o número cinco em binário a coluna da direita é o dez em binário, são 2 números binários na verical) 1111 foi o resultado

Importante: 1111 em binário é 15 por este motivo (5 ^ 10) é 15

Resultado:
5 ^ 10 logo é: 1111 sendo assim vamos para o passo 2

PASSO 2
Então fizemos (5 ^ 10) ^ 5 (sendo que 5 é 101 em bin e (5 ^ 10)  é 1111)

1   = 1  (true + false é true)
11 = 0 (true + true é false)
10 = 1  (true + false é true)
11 = 0 (true  + true é false)

(primeira coluna é o resultado do passo 1 a segunda coluna é o 5 em binário)

Resultado:
Logo ((5 ^ 10) ^ 5) é: 1010 
Importante: 1010 em bínario é 10 logo por isto  ((5 ^ 10) ^ 5) dá como resultado 10

PASSO 3
Agora vamos fazer
((5 ^ 10) ^ 5) ^ 10 

Levando em conta que (5 ^ 10) ^ 5) é 1010 em binário (10 em decimal) . Nesta etapa tem um detalhe. 

Se for ao pé da letra
(5 ^ 10) ^ 5) ^10 dará zero
Pois:
11 = 0
00 = 0
11 = 0
00 = 0

Fail? Quase.
O que acontece é que na verdade não é (5 ^ 10) ^ 5) ^10 mas sim (5 ^ 10) ^ 5) ^ VALOR DO PRIMEIRO PASSO
Porque? Porque quando fizemos o xor swap a variável X irá assumir outro valor no passo 1. LEMBRE-SE

x = 5
y = 10

x ^= y RESULTADO 15 (1 passo)
y ^= x RESULTADO 10 (2 passo)
x ^= y -> A VARIAVEL X TEM VALOR 15 NÃO 10. Logo é 15 ^ 10 

É um pega ratão e tanto, mas mesmo assim

15 = 1111 em binário
10 = 1010 em binário

11 = 0
10 = 1
11 = 0
10 = 1

0101 = 5 PERCEBERAM? X assumiu valor 5 (3 passo) e Y ficou com valor 10 (2 passo)

Assim efetuando o troque de dar swap nos valores.
XOR é usado em computador, como principal ferramenta para portas lógicas, verdadeiro e falso. Muito tempo andei procurando sobre XOR, raramente você encontra alguém explicar como realmente é feito este cálculo, isto porque 90% das pessoas apenas sabem como teoricamente funciona, mas dando para fazer um calculo, ela não faz.

Abraços

(PHP) Números primos em PHP

Já pensou em como checar se um número é primo ou não? Bem, dependendo do número, pode haver padrões que definem se ele é realmente primo ou não através de simples cálculos, porém caso o número não se encaixar em tal regra necessitamos dividir várias vezes até checar se ele é primo ou não.

Assim, fiz uma função de uso bem simples, que checa com precisão se o número é primo ou não

function isPrime($iValor)
{
$iCount = 4;
if( ($iValor == 2) || ($iValor == 3) ) return true;
if( !($iValor % 2) || !($iValor % 3) || !($iValor % 4) || ($iValor == 1)) return false;
while(++$iCount <= sqrt($iValor))
if( !($iValor % $iCount) && ($iValor != $iCount) ) return false;
return true;
}


isPrime(10) caso 10 for primo retorna verdadeiro, caso não falso. Bem simples o uso não é?

(PHP) Diferença de segundos entre datas/horas

Saudações!


Uma função muito boa quando se trata para pegar informações de datas em php é o mktime. Neste blog já fiz algumas funções relacionadas a tempo.  Essas funções são úteis para calcular dias de aniversários, tempo de vida, até mesmo saber o dia da semana de uma determinada data. Veja alguns projetos relacionados a data já publicados abaixo



Mas nada mais interessante do que repetir a dose mais uma vez., afinal, é sempre bom ter uma função adicional que pode nos ajudar na hora do aperto. hehe. 

Mas chega de torturar você leitor, vamos ao código




<?php


function diferencaSegundos($tempo1, $tempo2, $data1, $data2)
{
$separar1 = explode(':', $tempo1);
$separar2 = explode(':', $tempo2);
$separar3 = explode('/', $data1);
$separar4 = explode('/', $data2);
return mktime($separar2[0], $separar2[1], $separar2[2], $separar4[0], $separar4[1], $separar4[2]) - mktime($separar1[0], $separar1[1], $separar1[2], $separar3[0], $separar3[1], $separar3[2] );
}

// 
// Almoçei as 12:00:12 do dia 01/01/2011.

// Agora é 12:53:44 do dia 01/01/2011

// Quanto segundos se passaram desde que almoçei ???

//



$segundosPassados = diferencaSegundos("12:00:12", "12:53:44", "01/01/2011", "01/01/2011");
echo "Você almoçou a exatamente " . $segundosPassados . " segundos. Senhor";


?>

Bom estudo. Está função é é útil em muitos sistemas. Não deixem de aproveitar.

Abraço!

(Assembly) Swap para Pascal

Saudações!

Estudando Assembly descobri uma forma legal de se fazer swap (troca de valores nas variáveis) usando apenas asm em pascal

Segue o trecho do código:

procedure TForm1.Button1Click(Sender: TObject);

var X, Y: DWORD;
begin
// Valores antes do swap
X := 10;
Y := 05;

asm // Parte em Assembly

mov edx, [x]
mov ebx, [y]


mov dword ptr [x], edx
mov dword ptr [y], ebx

end;

// Valores trocados
ShowMessage('VALOR X ->' + IntToStr(X));
ShowMessage('VALOR Y ->' + IntToStr(Y));
end;

É uma forma padrão de swap, porém é usado em assembly que passa os valores para pascal.

O sistema usa endereços temporários, no caso são ebx e edx. Os endereços assumem os valores de Y e X que posteriormente são trocados passando o valor as variáveis em pascal.


(Javascript) Pegar posição do elemento

Esta função é para quem tem dificuldades em pegar a posição do elemento dentro da página (observem o sistema de Proximo Post que fiz ..)


Segue o código:

function getElementCursorPos(obj) {
var curtop = 0;
if (obj.offsetParent) {
curtop = obj.offsetTop
while (obj = obj.offsetParent) {
curtop += obj.offsetTop
}
}
return curtop;
}

Ele pega a posição em altura. Caso quiser lados mude Top pra Heigth


(Javascript) Scroll Automatico 2

Como prometido. Eu iria lançar a versão 2 do sistema de Scroll Automatico (estilo jQuery. Animação)

Como pode ver. Cumpri minha promessa. Segue aqui o código da versão 2

function getScrollSize()
{
this.maxY = 'scrollMaxY' in window ? window.scrollMaxY : document.getElementsByTagName("body")[0].scrollHeight - document.getElementsByTagName("body")[0].clientHeight;
this.maxX = 'scrollMaxX' in window ? window.scrollMaxX : document.getElementsByTagName("body")[0].scrollWidth - document.getElementsByTagName("body")[0].clientWidth;
return true;
}



function autoScroll(tempo, to) {


alert(document.getElementsByTagName("body")[0].style.maxHeight);
if (window.pageYOffset < to) {
scrollInterval(((window.pageYOffset + to) / (tempo / 25)), 1, to);
} else {
scrollInterval(((window.pageYOffset - to) / (tempo / 25)), 0, to);
}
return true;
}

function scrollInterval(y, baixo, max) {

if (baixo && window.pageYOffset < max) {
setTimeout(function () {
scrollInterval(y, baixo, max);
}, 25);

scrollTo(0, window.pageYOffset + y);
}

if (!baixo && window.pageYOffset > max) {
setTimeout(function () {
scrollInterval(y, baixo, max);
}, 25);

scrollTo(0, window.pageYOffset - y);
}

return true;

}

Qual a diferença?
Nesta versão o scroll também move pra baixo. Também foram arrumado bug de limites e precisão no cálculo para "scrollar"

O uso é praticamente o mesmo da versão anterior:
autoScroll(tempo, to)
tempo = Tempo em milésimos de segundos para movimentar o scroll até TO, que será o ponto de chegada

Espero que tenham gostado. Abraços

Função de Auto Scroll por Bruno da Silva

(Javascript) Calcular tempo de download

Fiz uma função aqui para calcular o tempo de download de um arquivo em javascript. Fico bem eficiente. Ela calcula de segundos a dias com precisão e colocando até os zeros na frente para dar um melhor estilo relogio ..


Basicamente basta você dar 2 informações e ela lhe retorna com um alert contendo o tempo de download.

Segue a função:
function getTimer(kBytes, Download)
{
var segundos = Math.round(kBytes / Download);
var minutos = Math.round((segundos - (segundos % 60)) / 60); segundos = Math.round(segundos % 60);
var horas = Math.round((minutos - (minutos % 60)) / 60); minutos = Math.round(minutos % 60);
var dias = Math.round((horas - (horas % 60)) / 24); horas = Math.round(horas % 24);

segundos = segundos < 10 ? "0" + segundos : segundos, minutos = minutos < 10 ? "0" + minutos : minutos, horas = horas < 10 ? "0" + horas : horas;

alert("Download será finalizado em " + (dias > 0 ? dias + " dias, " + horas + " horas, " + minutos + " minutos e "+ segundos + " segundos" : horas > 0? horas + " horas, " + minutos + " minutos e "+ segundos + " segundos" : minutos > 0 ? minutos + " minutos e " + segundos + " segundos" : segundos > 0 ? segundos + " segundos" : "em menos de 1 segundo"));
}

O modo de uso é simples. Basta fazer o seguinte:
getTimer(1000, 128);

Um arquivo de 1000 kb a 128 kbps

Simples não é? É isto galera. Abraços

Função criada por Bruno da Silva


(Javascript) Pegar máximo tamanho scroll bar

Após alguns minutões tentando fazer uma gambiarra para pegar o tamanho máximo para rolagem da scroll. Consegui


Mas como assim gambiarra? No Firefox tem uma função própria para isto, que se chama window.scrollMaxX e window.scrollMaxY porém é apenas no Firefox (¬¬)


Então após alguns minutos consegui uma função que funciona-se ao menos no Chrome, Opera e talvez no Internet Explorer (não testei lá ainda)




Que qualquer forma. Segue trecho do código:


function getScrollSize()

{

this.maxY = 'scrollMaxY' in window ? window.scrollMaxY : document.getElementsByTagName("body")[0].scrollHeight -


document.getElementsByTagName("body")[0].clientHeight;

this.maxX = 'scrollMaxX' in window ? window.scrollMaxX : document.getElementsByTagName("body")[0].scrollWidth -


document.getElementsByTagName("body")[0].clientWidth;

return true;

}


Então o modo de uso da função é o seguinte:


var scroll = new getScrollSize();


alert(scroll.maxX);

alert(scroll.maxY);


Mas também se pode acessar a classe diretamente


alert(new getScrollSize().maxX);

alert(new getScrollSize().maxY);


É isto galera. Espero que tenham gostado o post.


Ah, eu postei isto, porque estou fazendo a segunda versão do sistema de scroll automático. Então por ventura tive este problema para pegar o máximo do scroll-y e max scroll-x


Abraço


Criado por Bruno da Silva

(Javascript) Efeito Scroll Automático (sem jquery)

Aqui um sistema de scroll automático sem utilizar jQuery! (aquele scroll que simula o scroll subindo. Perfeito)


Infelizmente ele não é muito preciso. Porém é fácil de usar.
A precisão pouco falha é devido aos calculos que fiz. Dependendo da maquina o atrasado ao executar código poderá fazer com que a precisão seja um pouco alterada. De 1 a 2 segundos. Mas não importa.

Segue o código:


function autoScroll(tempo, to)
{
return scrollInterval(((window.pageYOffset - to)/ (tempo / 25)) );
}

function scrollInterval(y)
{
if(0 >= window.pageYOffset) return ;

setTimeout(function() {
scrollInterval(y);
}, 25);

scrollTo(0, window.pageYOffset - y);
}

Modo de Uso:
Basta usar a função autoScroll.
autoScroll(TEMPO PARA CHEGAR, LOCAL PARA CHEGAR);

Digamos. Eu coloco 2000 ms para chegar até o ponto 0 de barra (até o topo)
autoScroll(2000, 0);

Dica: Caso queira visualizar o efeito apenas clique na imagem topo logo ao lado aqui no blog. Implementei o código no blog :)

Nota: Infelizmente este ainda não anda para baixo. Mas prometo que na próxima versão da função implementarei.

É isto galera. Espero que tenham gostado.

Função criada por Bruno da Silva


(Javascript) Pegar posição do Mouse

Uma coisa relativamente fácil de fazer em javascript sem ser necessária nenhuma adição de biblioteca é a função para pegar a posição do mouse.


A posição retorna dados X e Y de forma relativamente fácil.

Apenas usando event.x para pegar a posição X do mouse e event.y para pegar a posição Y do mouse.
Por exemplo:

alert("X MOUSE = " + event.x + "\n Y MOUSE = " + event.y);

É isto. espero que tenham gostado.

Abraços

(C++) Máximo divisor comum

Este simples código efetua a operação matemática para obter o máximo divisor comum. É uma função simples, que não foi implementado nenhum algorítimo para maior velocidade na busca. Mas também é eficiente.


Espero que curtem. Segue o código

int bigMod(int a, int b)
{
return (!b) ? a : bigMod(b, a % b);
}
// Não remova os créditos
// Por favor
// Copyright (c) Bruno da Silva [iPs]TeaM

Que também pode ser acessado pelo meu pastebin.

Criado por Bruno da Silva

(C) Dia da semana de uma data

Já se perguntou em como fazer isto ?? Este programa lhe trará a resposta de forma rápida e eficiente, bastando alguns passos de um algorítimo simples e rápido.

Este programa faz um cálculo rápido e certeiro para saber o dia da semana de uma determinada data.


Para programadores, segue o código do programa

#include
main()
{
system("title [iPs TeaM] - Que dia da semana?");
system("color 8f");
int
day = 0,
month = 0,
year = 0;
// ==== [ Dia ] ========
printf("Digite o dia: ");
scanf("%d", &day);
// ==== [ Mês ] ========
printf("Digite o mês: ");
scanf("%d", &month);
// ==== [ Ano ] ========
printf("Digite o ano: ");
scanf("%d", &year);
// ==== [ Processar ] ========
char sStr[24] = ("Dia Invalido");
int
iBissext = (year % 100),
iWeekDay = (year / 100);
if(month < 3) month += 12,year--;
int iWeek = ((day + (month+1)*26/10 + iBissext + iBissext/4 + iWeekDay/4 - 2*iWeekDay) % 7);
if(iWeek == 0) strcpy(sStr , ("Sábado"));
if(iWeek == 1) strcpy(sStr , ("Domingo"));
if(iWeek == 2) strcpy(sStr , ("Segunda"));
if(iWeek == 3) strcpy(sStr , ("Terça"));
if(iWeek == 4) strcpy(sStr , ("Quarta"));
if(iWeek == 5) strcpy(sStr , ("Quinta")) ;
if(iWeek == 6) strcpy(sStr , ("Sexta"));
printf("O dia da semana desta data foi %s \n",sStr);
return system("pause");
}

Que também pode ser acessado por meu pastebin. Quem quiser a versão compilada em formato .exe pode clicar aqui.

Espero que gostem.

Desenvolvido por Bruno da Silva