terça-feira, 15 de dezembro de 2009

Como zerar as senhas dos usuários do Windows

Existe um utilitário denominado "Offline NT Password & Registry Editor" que é capaz de zerar as senhas dos usuários de um sistema Windows NT/2000/XP/Vista etc., inclusive a senha do administrador do sistema. Este utilitário pode ser encontrado neste site: http://pogostick.net/~pnh/ntpasswd/

Este utilitário zera ou redefine a senha de qualquer usuário que possua uma conta local válida no sistema Windows. Não é necessário saber a senha antiga para definir uma nova senha.

Para este utilitário entrar em funcionamento é necessário reiniciar a máquina efetuando o boot pelo CD ou disquete que contém o utilitário e então será mostrada uma opção para destravar ou até desabilitar uma conta de usuário. Este processo pode ser realizado de uma forma automática ou com a interação do usuário, escolhendo a partição que contém o Windows etc.

O sistema que compõe este utilitário é um Linux, preparado para acessar um sistema Windows e realizar as alterações no registro. Sua interface é bastante simples, com uma série de perguntas para guiar o usuário durante o processo.

Ao término basta reiniciar a máquina pelo Windows e logar-se na conta do usuário sem a necessidade de digitar a senha.

quarta-feira, 9 de dezembro de 2009

Análise Combinatória

A Análise Combinatória é um conjunto de métodos que possibilita a contagem de agrupamentos diferentes formados a partir de um número finito de elementos de um conjunto. Os agrupamentos de p elementos são formados a partir de um conjunto com n elementos, com p<=n.

Arranjos, Permutações ou Combinações são os três tipos principais de agrupamentos, sendo que aqui trataremos os simples ou com repetição.

Princípio Fundamental da Contagem

Alguns problemas de análise combinatória normalmente podem ser resolvidos através de duas regras básicas: a regra da soma e a regra do produto.

Se um elemento pode ser escolhido de m formas e um outro elemento pode ser escolhido de n formas, então a escolha de um ou outro elemento se realizará de m + n formas diferentes. É a regra da soma.

Exemplo:

Em uma sacola existem 7 peças brancas e 5 peças pretas. Em um jogo de sorteio, qual o número máximo de pessoas para participar sendo que cada pessoa pegue apenas uma peça da sacola?

Resposta: 7 + 5 = 12 pessoas

Se um primeiro acontecimento pode ocorrer de p1 modos diferentes, um segundo acontecimento de p2 modos diferentes e, sucessivamente, um enésimo acontecimento de pn modos diferentes, sendo p1, p2, ..., pn eventos independentes, então o número de modos diferentes em que os n acontecimentos podem ocorrer é p1 x p2 x ... pn. É a regra do produto.

Exemplo:

Os números de telefones possuem 8 algarismos. Quantos números podem existir sabendo que não podem começar com zero?

Resposta: 9x10x10x10x10x10x10x10 = 90.000.000 números

Arranjo Simples

Denomina-se arranjo simples de n elementos tomados p a p (n>=p) os agrupamentos ordenados de p elementos distintos que se podem formar com os n elementos dados. O arranjo simples não considera a repetição dos elementos.

O arranjo simples nada mais é do que a regra do produto, do princípio fundamental da contagem, no qual em cada evento subsequente é reduzido em menos 1 o número de modos diferentes.



Exemplo:

Utilizando os 10 algarismos para formar uma senha com 4 algarismos distintos, quantas senhas diferentes podem ser formadas?

Resposta:

A(10,4) = 10!/(10-4)! = 5040 senhas

ou

A(10,4) = 10*9*8*(10-4+1) = 10*9*8*7 = 5040 senhas

Arranjo com Repetição

No arranjo com repetição não há a exclusão da possibilidade de um elemento repetir-se na formação de um agrupamento.



Exemplo:

Uma placa de automóvel é formada por 3 letras mais 4 algarismos, quantas placas diferentes podem ser formadas?

Resposta:

AR(26,3) * AR(10,4) = 26^3 * 10^4 = 175.760.000 placas

Como podem observar, para resolver um arranjo com repetição também utiliza-se basicamente da regra do produto do princípio fundamental da contagem.

Permutação Simples

Chama-se de permutação simples de n elementos todo arranjo simples de n elementos tomados n a n. Então permutação simples é o tipo de agrupamento ordenado em que cada grupo recebe todos os elementos.



Exemplo:

Qualquer ordenação das letras de uma palavra é denominada anagrama. Quantos anagramas tem a palavra LIVRO?

P(5) = 5! = 120 anagramas

Permutação com Elementos Repetidos

Se entre os elementos existem elementos repetidos, não adianta realizar a permutação entre eles pois não será alterado o agrupamento.

De um modo geral, se temos n elementos a serem permutados, dentre os quais p elementos são iguais, para cada permutação temos p! repetições, totalizando n!/p! permutações.



Exemplo:

Quantos anagramas tem a palavra PARA?

P(4;2) = 4!/2! = 12 anagramas

Para n elementos com p1 elementos iguais, p2 elementos iguais e assim sucessivamente até pr elementos iguais, temos n!/p1!p2!...pr!.



Exemplo:

Quantos anagramas tem a palavra RESSACA?

P(7;2,2) = 7!/2!2! = 1260 anagramas

Combinação Simples

Combinação é o tipo de agrupamento em que a ordem dos elementos dentro do grupo não altera o agrupamento.

O número de combinações de n elementos em grupos de p elementos é igual ao número de arranjos de n elementos tomados p a p, dividido pela permutação de p.



Exemplo:

Quantos jogos diferentes de 6 números podem ser formados com os 60 números da megasena?

C(60,6) = 60!/6!(60-6)! = 50.063.860 jogos

Combinação com Repetição

Na combinação com repetição todos os elementos podem aparecer repetidos em cada grupo até p vezes. E da mesma forma, a ordem dos elementos não altera o agrupamento.

A combinação com repetição é igual a combinação simples de n+p-1 elementos tomados p a p.



Exemplo:

Seja um conjunto com os elementos {A,B,C,D}, quantas combinações com repetição existem com os elementos tomados 2 a 2?

Resposta:

CR(4,2) = (4+2-1)!/2!((4+2-1)-2)! = 10 combinações

Concluindo, nos arranjos e nas permutações a posição dos elementos diferencia os agrupamentos e nas combinações a posição dos elementos não diferencia. Vemos a diferença disto comparando a formação de um número de telefone, no qual a mudança de posição muda o número, com um jogo da megasena, onde a ordem dos números não altera o resultado.

quinta-feira, 26 de novembro de 2009

Está o nosso cérebro fazendo constantemente cálculos subconscientes?

Este artigo foi publicado na revista Scientific American Mind, edição de Novembro de 2009:

O nosso cérebro é conectado para executar cálculos que nos permitem decidir o quanto distante está um objeto quando nós andamos ou saltamos por cima, ou estendemos a mão por um copo de leite. Ainda que esta tarefa possa parecer fácil, esta tarefa ativa um profundo cálculo surpreendentemente complexo.

Quando nós olhamos um objeto, os nossos olhos projetam a estrutura tridimensional dentro da retina bidimensional. Para ver em três dimensões, o nosso cérebro precisa reconstruir o mundo tridimensional vindo da imagem bidimensional da retina. Nós temos aprendido a distinguir a profundidade usando uma variedade de sinais visuais, umas envolvendo somente um olho (visão monocular) e outras envolvendo ambos os olhos (visão binocular).

A visão binocular proporciona uma percepção mais precisa da profundidade, permitindo-nos distinguir pequenas diferenças entre as imagens de ambas retinas, enquanto que a visão monocular nos proporciona um largo campo de visão. A oclusão, que é um sinal monocular segundo o qual um objeto que está próximo obstrui parcialmente um outro mais distante, permite o cérebro distinguir as distâncias relativas. Quando um objeto obstrui um outro, o observador pode graduar as distâncias relativas destes objetos.

Uma outra sinalização monocular é a paralaxe, a qual ocorre quando o observador move seu corpo (ou somente sua cabeça) para obter informações sobre a distância relativa entre os objetos. Pelo movimento da cabeça para trás e para frente, este movimento permite ver os objetos por ângulos levemente diferentes. Um objeto próximo se moverá mais rapidamente diante da retina (criando uma ampla paralaxe) do que um objeto distante, permitindo determinar qual objeto está mais próximo. Quando está dirigindo um veículo, por alguns instantes, as coisas mais próximas passam mais rapidamente e os objetos mais distantes parecem imóveis.

Embora o nosso circuito cerebral seja geneticamente programado para distinguir profundidades vindas da visão, isto necessita alguma experiência para calibrá-lo. Inicialmente as crianças são ruins em distinguir as distâncias, mas com o tempo elas treinam seus cérebros para realizar tal cálculo. Os adultos se tornam experientes em distinguir profundidades mas somente com os objetos familiares no meio ambiente. Em um território desconhecido, a distinção automática da profundidade falha porque nosso cérebro ainda não possui novos sinais calibrados do ambiente. Diante destes novos cenários, nós temos que treinar novamente nosso cérebro para calcular as distâncias.

segunda-feira, 23 de novembro de 2009

Problema de lógica: A cor do urso

Atenção, resposta logo após o problema.

Uma pessoa montou uma tenda para dormir. Subitamente, apareceu um urso que lhe desfez a dita tenda. A pessoa, pacientemente, reparou a tenda e montou-a novamente. Entretanto, o urso andou um quilômetro para o sul, um quilômetro para o oeste e outro para o norte, voltando a passar pelo acampamento e desfazendo novamente a tenda. De que cor era o urso?





RESPOSTA





O urso era branco por ser um urso polar. O acampamento tinha de estar no pólo norte. Só assim que um urso andando de lá, 1 Km para o sul, 1 Km para o oeste e 1 Km para o norte, é que voltaria a passar pelo mesmo ponto. Caso contrário, passaria ao lado.

domingo, 22 de novembro de 2009

Gerando um pendrive com os arquivos de instalação do Windows XP

Com a popularização do netbook vem a necessidade de adaptar os arquivos de instalação do Windows XP, normalmente disponíveis em mídias de CD, para um pendrive. Pois um netbook não possui uma unidade leitora de CD/DVD e um pendrive é uma solução muito mais prática e barata do que uma unidade externa de CD/DVD.

Como existem alguns netbooks que não possuem uma unidade de disco rígido interna, que permite uma maior capacidade de armazenamento, possuindo em seu lugar uma unidade de armazenamento em memória flash, com uma capacidade bastante reduzida, é interessante fazer uma instalação do Windows XP enxuta o suficiente para poupar ao máximo o pouco espaço disponível. Como o instalador do Windows XP não fornece opções adequadas para isto, torna-se necessário utilizar um software chamado nLite.

O nLite é uma ferramenta para a escolha da configuração e ou remoção de componentes de uma pré-instalação do Windows. Opcionalmente o nLite pode gerar uma imagem para gravação em uma mídia ou para montar virtualmente. O nLite pode ser encontrado na Internet pelo endereço http://www.nliteos.com/.

A interface do nLite é bastante intuitiva, as etapas do processo são simples de executar e no final a pasta que contém os arquivos de instalação do Windows terá uma versão enxuta pronta para gravar em um pendrive. Uma dica é não remover o componente "Instalação manual e atualização" em "Opções do sistema operacional" pois é necessário para o reconhecimento do sistema na próxima ferramenta.

Concluída a preparação dos arquivos, o que falta agora é transferí-los para o pendrive. O WinSetupFromUSB é uma ferramenta capaz de formatar e preparar um pendrive para o boot. Este artigo contém o endereço para o download do WinSetupFromUSB: http://www.msfn.org/board/install-usb-winsetupfromusb-gui-t120444.html

Na tela inicial do WinSetupFromUSB devem ser selecionadas a pasta que contém os arquivos de instalação e a unidade do pendrive. Para o pendrive poder ser selecionado é preciso que esteja formatado adequadamente, provavelmente não está então clique no botão RMPrepUSB para formatar o disco USB.

Na janela da ferramenta RMPrepUSB escolha as opções desejadas e clique no botão "Prepare Drive". Para as opções, se o pendrive tem até 2GB de capacidade é indicado o sistema de arquivos FAT16, se for maior pode ser FAT32, e deixe a opção de boot como "WinPE/Vista v2 bootable [BOOTMGR] CC4". Clique em Exit para fechar o RMPrepUSB e retornar ao WinSetupFromUSB.

Verifique as demais opções na janela do WinSetupFromUSB, auxiliando-se pelas dicas dos balões de ajuda, para a necessidade de alguma configuração particular. Na maioria dos casos pode deixá-las como estão. Clique no botão GO para dar início ao processo de cópia para o pendrive. Concluído, pode sair do programa, o pendrive já está pronto.

Para realizar o boot pelo pendrive, no netbook, entre no setup da bios e habilite este recurso. A instalação do Windows pelo pendrive é um pouco diferente da instalação feita direta do CD. O gerenciador de boot utilizado pelo pendrive mostra duas opções à serem escolhidas, "First part of Windows XP Professional Setup" e "Second part of Windows XP Professional Setup". A segunda parte é para quando o computador reiniciar durante a instalação. De resto é a mesma coisa e realizado estes procedimentos o seu Windows XP será instalado com sucesso.

O uso do nLite só é necessário se desejar remover algum componente, incorporar alguma atualização ou automatizar algum passo da instalação do Windows XP, senão pode usar direto o conteúdo oficial da mídia de instalação. Para poupar espaço uma solução é remover os componentes de exemplos, ajudas e qualquer outro extra que costuma vir junto na instalação do Windows XP. É interessante também remover todos os drivers pois normalmente serão instalados os fornecidos pelo fabricante. Mas recomendo não remover o "Suporte ao hardware" para evitar problemas básicos de detecção.

Este artigo utiliza as versões nLite 1.4.9.1 e WinSetupFromUSB 0.2.3.

sexta-feira, 13 de novembro de 2009

Definindo apelidos e funções para comandos no bashrc

O arquivo bashrc determina o comportamento do shell, neste caso o interpretador de comandos bash. Basicamente o arquivo bashrc permite criar atalhos, podendo ser apelidos (alias) ou programas interativos (funções), que são carregados na inicialização do bash. O arquivo bashrc permite criar atalhos para praticamente todos os comandos.

Por exemplo, é muito mais fácil digitar o atalho "l" do que um comando como "ls -laF --color=auto". E uma função é como um roteiro (script) para o shell colocado em um arquivo bashrc. É ideal para casos em que o atalho não será para apenas um simples comando ou necessita de uma lógica em alguma estrutura de programação.

Existem dois arquivos bashrc que o interpretador de comandos bash carrega em cada nova inicialização do shell, o /etc/bashrc é carregado para todos os usuários e o ~/.bashrc é carregado para o usuário que iniciou o shell, ou seja, cada usuário tem o seu arquivo ~/.bashrc.

Tanto para apelidos ou para funções é recomendável testar primeiro os comandos em uma execução direta no prompt antes de incluí-los no arquivo bashrc. Diferentemente de um script para o shell, a interpretação de uma função não gera um novo processo no sistema.

Alguns exemplos de apelidos definidos no arquivo bashrc:

alias l="ls -laF --color=auto"
alias cds="cd /etc/rc.d/init.d && ls"
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias qag="rpm -qa | grep -i"
alias av="avast -a -c -t=A"
alias fd='mount /dev/fd0 /mnt/floppy; cd /mnt/floppy && ls'


Uma função pode ser definida com a estrutura apresentada abaixo:

function nome_da_função()
{
comando 1;
comando 2;
comando 3;
...
}


A palavra "function" é opcional na declaração de uma função mas pode ser considerada uma boa prática. Veja um exemplo bastante interessante:

function extrair()
{
if [ -f $1 ] ; then
case $1 in
*.tar.bz2) tar xvjf $1 ;;
*.tar.gz) tar xvzf $1 ;;
*.bz2) bunzip2 $1 ;;
*.rar) unrar x $1 ;;
*.gz) gunzip $1 ;;
*.tar) tar xvf $1 ;;
*.tbz2) tar xvjf $1 ;;
*.tgz) tar xvzf $1 ;;
*.zip) unzip $1 ;;
*.Z) uncompress $1 ;;
*.7z) 7z x $1 ;;
*) echo "'$1' não pode ser extraído via >extrair<" ;;
esac
else
echo "'$1' não é um arquivo válido"
fi
}


Para ativar uma definição imediatamente após a sua inclusão no arquivo bashrc, sem a necessidade de sair do interpretador de comandos e entrar novamente, basta digitar:

$ source ~/.bashrc


Para saber quais apelidos estão ativos no interpretador bash basta executar o comando alias no prompt. O shell irá imprimir a lista dos apelidos na saída padrão, normalmente na tela do monitor. As funções ativas podem ser vistas com a execução do comando set, sem opções, onde o nome e o valor de cada variável e função do shell serão mostrados na tela.

quarta-feira, 11 de novembro de 2009

O que é virtualização?

Em uma breve definição, virtualização é a execução de vários sistemas operacionais em um único computador físico. Uma máquina virtual é um ambiente operacional completo que se comporta como se fosse um computador independente. Com a virtualização, um computador pode manter vários sistemas operacionais em uso.

Os ambientes operacionais são totalmente independentes um dos outros, salvo o hardware do computador que hospeda os sistemas virtualizados, esses ambientes virtuais não têm nada mais em comum. Se um sistema operacional pode ser instalado em um hardware real, poderá ser instalado em uma máquina virtual. O computador servidor pode hospedar vários sistemas operacionais, sejam eles iguais, similares ou completamente diferentes. Os sistemas operacionais virtualizados são independentes entre si.

Não é preciso que o computador servidor tenha um hardware específico para virtualização, porque quase todos os equipamentos são capazes de hospedar uma ou mais máquinas virtuais. Para isso, é preciso apenas um software especial desenvolvido para emular o ambiente físico. Basicamente, o software simula o hardware de forma que o sistema operacional é instalado sobre esse software. Existem diversos softwares para executar máquinas virtuais, os mais populares são o VMware, o VirtualBox e o Virtual PC. E outros menos famosos como o Parallels, o Xen e o QEMU.

Uma característica interessante que facilita a portabilidade das máquinas virtuais, entre servidores com especificações de hardware diferentes, é que o hardware que é apresentado ao sistema operacional virtual é o mesmo. Deste modo os drivers de dispositivos instalados sempre são os mesmos não importando qual hardware o servidor possui.

Em um ambiente computacional virtual, existem dois componentes principais, o hospedeiro e o convidado. O hospedeiro é o sistema operacional executado diretamente sobre o hardware físico. Este hospedeiro é o sistema operacional que você instala inicialmente sobre o servidor. Pode ser um Linux ou um Windows por exemplo, entretanto existem alguns softwares de virtualização que não necessitam de um sistema hospedeiro, atuam como sendo o próprio sistema operacional do hardware, como o VMware ESX. O segundo componente é o sistema operacional convidado. O sistema operacional convidado é o ambiente computacional virtual que é executado sobre o sistema operacional hospedeiro como uma máquina virtual. Com a virtualização é possível manter simultaneamente vários sistemas convidados.

Apesar da virtualização permitir vários sistemas operacionais em execução simultânea, todos de forma independente, existe apenas um servidor físico, um único hardware para atender todo o processamento e armazenamento em memória. Assim, existe um limite para o número de máquinas virtuais que podem ser instaladas em um servidor.

Pode-se compartilhar um conjunto de recursos do servidor apenas até que eles se esgotem ou que as partes não ofereçam capacidade suficiente. A única restrição para o número de máquinas virtuais é definida pelos limites de memória, espaço em disco e poder de processamento da CPU oferecidos a elas. Qualquer computador que espera hospedar uma ou mais máquinas virtuais deve possuir recursos não apenas para o hospedeiro como também para acomodar os sistemas convidados. Se o computador hospedeiro não tem grande volume de espaço em disco e não apresenta memória ou poder de processamento suficientes, não poderá oferecer aos sistemas operacionais convidados recursos adequados e o sistema operacional convidado sofrerá baixo desempenho.

Sendo as únicas desvantagens da virtualização a limitação do hardware e no acesso direto ao hardware, as vantagens na adoção dos ambientes virtuais são grandes. A facilidade no gerenciamento e na manutenção, na realização de cópias de segurança e na restauração, faz da virtualização uma excelente ferramenta para o administrador do sistema. Além de contribuir para uma redução na infraestrutura de hardware e no consumo de energia.

Uma dica, o software Sun VirtualBox é gratuito e fácil de operar. Instale-o em seu computador e experimente executar um sistema Linux dentro do Windows ou vice-versa, ou em um Mac OS X! Livre-se do "dualboot", mantenha todos em execução simultânea.

segunda-feira, 9 de novembro de 2009

Como fazer conversões de unidades de medida

Uma unidade de medida é uma quantidade específica de determinada grandeza física usada para servir de padrão para outras medidas. Existem diferentes unidades de medida e, para citar algumas, as mais comuns no nosso dia a dia são as unidades usadas para medir as grandezas de área, comprimento, massa, temperatura, tempo, velocidade e volume.

Cada grandeza pode conter mais de uma unidade de medida, por exemplo o comprimento pode ser medido em metros, em jardas, em milhas etc. E entre as unidades de medida das grandezas existe sempre um valor de correspondência para a conversão.

Para efetuar a conversão entre duas unidades devemos saber qual o fator de equivalência. Por exemplo, na grandeza de comprimento temos que 1 polegada é igual a 0,0254 metro, ou 2,54 centímetros, então 2 polegadas em centímetro será 2 vezes 2,54. Uma simples regra de três.

No sentido inverso o fator será outro. No exemplo da conversão de metro para polegada, se não tivermos a informação do fator, o seu cálculo será a divisão de 1 por 0,0254. Como resultado obteremos que 1 metro equivale a 39,37 polegadas. Assim agora basta aplicar novamente a regra de três, por exemplo 0,5 metros em polegadas é igual a 0,5 vezes 39,37, o que dá 19,69 polegadas.

Aprofundando um pouco mais no assunto, sempre teremos os dois fatores que poderão ser utilizados em ambos os sentidos da conversão, considere a situação:

1 polegada = 0,0254 metro
1 metro = 39,37 polegadas


O cálculo de conversão de 2 polegadas em metro pode ser 2 vezes 0,0254, como visto anteriormente, ou pode também ser 2 dividido por 39,37. Ambos os resultados são 0,0508 metro. E no cálculo de 0,5 metros em polegadas pode ser 0,5 vezes 39,37 ou também 0,5 dividido por 0,0254. Ambos os resultados são 19,69 polegadas.

Sempre é uma regra de três que utilizamos para efetuar o cálculo da conversão, o que muda é a posição da incógnita de acordo com as informações que temos. Existem diversos softwares e calculadoras que facilitam a conversão, mas é bom saber como se faz.

Segue uma pequena listagem das equivalências entre algumas unidades de medida:

Medidas de comprimento:

1 metro    = 0,00062137119 milha
= 1,0936133 jardas
= 3,2808399 pés
= 39,370079 polegadas

1 milha = 1609,344 metros
= 1760 jardas
= 5280 pés

1 jarda = 0,9144 metro
= 3 pés
= 36 polegadas

1 pé = 0,3048 metro
= 0,33333333 jarda
= 12 polegadas

1 polegada = 0,0254 metro
= 0,083333333 pé


Medidas de área:

1 acre                = 4046,8726 metros quadrados
= 0,40468726 hectares

1 hectare = 10000 metros quadrados
= 0,4132231 alqueire (paulista)
= 2,4710439 acres

1 alqueire (paulista) = 24200 metros quadrados
= 2,42 hectares

1 metro quadrado = 0,0000413 alqueire (paulista)
= 0,0001 hectare
= 0,00024710439 acre


Medidas de volume:

1 barril (us) = 158,98729 litros
= 42 galões (us)

1 galão (us) = 3,7854118 litros
= 0,023809524 barril (us)
= 128 onças (us)

1 onça (us) = 0,02957353 litro
= 0,0078125 galão (us)

1 litro = 0,0062898108 barril (us)
= 0,26417205 galão (us)
= 33,814023 onças (us)


Medidas de massa:

1 libra      = 0,45359237 quilograma
= 16 onças

1 onça = 0,028349523 quilograma
= 0,0625 libra

1 quilograma = 2,2046226 libras
= 35,273962 onças

sábado, 7 de novembro de 2009

Algoritmos para construir o triângulo de Pascal

O triângulo de Pascal é uma disposição ordenada dos números binomiais. E pela definição, dados dois números naturais n e p, com n maior ou igual a p, chamamos de número binomial o par de valores:

|n|
|p|


Onde lê-se binomial de n sobre p, sendo n o numerador e p o denominador, e o cálculo de seu valor pode ser feito pela fórmula:

n! / (n-p)!p!


Na disposição ordenada dos números binomiais, denominado triângulo de Pascal, obtêm-se a forma infinita:

|0|
|0|

|1| |1|
|0| |1|

|2| |2| |2|
|0| |1| |2|

|3| |3| |3| |3|
|0| |1| |2| |3|

|4| |4| |4| |4| |4|
|0| |1| |2| |3| |4|

...


E se no triângulo de Pascal substituirmos cada binomial pelo respectivo valor, obteremos os elementos:

1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
...


A construção do triângulo de Pascal usando uma linguagem de programação de computadores pode ser feita com diversos algoritmos. Os apresentados aqui utilizam a própria fórmula da definição do número binomial ou as relações de Stiefel ou de Fermat.

Nos exemplos de códigos abaixo adotou-se uma matriz para armazenar os valores dos elementos e cada par Linha x Coluna referente aos índices na matriz corresponde respectivamente, de forma análoga, ao par n e p do número binomial.

Um algoritmo que utiliza a fórmula da definição pode ser algo como mostrado abaixo. Para cada elemento da matriz é utilizada a fórmula n! / (n-p)!p!:

for (L=0;L<=N-1;L++) {
for (C=0;C<=L;C++) {
matriz[L][C] = fatorial(L) / (fatorial(C) * fatorial(L-C));
}
}


Apenas para ilustração, a função fatorial que complementa o algoritmo:

public static long fatorial(int num) {
if (num <= 1) {
return 1;
} else {
return num * fatorial(num-1);
}
}


Os próximos três algoritmos utilizam a relação de Stiefel para calcular os valores dos elementos do triângulo de Pascal, onde:

|n|   | n |   |n+1|
|p| + |p+1| = |p+1|


Então, para aplicar esta relação fazemos o sentido inverso onde o valor de um elemento |n p| é igual a soma dos valores dos binômios em |n-1 p-1| e |n-1 p|.

Nesta primeira versão é feito um controle para o primeiro e o último elemento de cada linha receber 1, nos outros é realizada a soma:

for (L=0;L<=N-1;L++) {
for (C=0;C<=L;C++) {
if (C==0 || L==C) {
matriz[L][C] = 1;
} else {
matriz[L][C] = matriz[L-1][C] + matriz[L-1][C-1];
}
}
}


Uma propriedade do triângulo de Pascal é que numa linha qualquer, dois binomiais equidistantes dos extremos são iguais. Sendo assim, para esta segunda versão é feito o controle para o primeiro elemento receber 1, até a metade faz a soma, e depois da metade repete-se os elementos anteriores em ordem inversa:

for (L=0;L<=N-1;L++) {
for (C=0;C<=L;C++) {
if (C==0) {
matriz[L][C] = 1;
} else if (C<=(L/2)) {
matriz[L][C] = matriz[L-1][C] + matriz[L-1][C-1];
} else {
matriz[L][L-C] = matriz[L][C];
}
}
}


A terceira versão, que utiliza a relação de Stiefel, é uma forma recursiva onde usa uma função que retorna o valor de um binômio qualquer quando lhe é passada n e p como parâmetro:

for (L=0;L<=N-1;L++) {
for (C=0;C<=L;C++) {
matriz[L][C] = binomio(L,C);
}
}

public static int binomio(int L, int C) {
if (L==0 || C==0 || C==L) {
return 1;
} else {
return binomio(L-1, C-1) + binomio(L-1, C);
}
}


E nosso último algoritmo utiliza a relação de Fermat para calcular os valores dos elementos do triângulo de Pascal, onde:

|n|                 | n |
|p| * (n-p / p+1) = |p+1|


Da mesma forma, para aplicar esta relação fazemos o sentido inverso onde o valor de um elemento |n p| é igual a multiplicação do valor do binômio |n p-1| por (n-p+1)/p:

for (L=0;L<=N-1;L++) {
matriz[L][0] = 1;
for (C=1;C<=L;C++) {
matriz[L][C] = matriz[L][C-1] * (L-C+1) / C;
}
}


Apesar do triângulo de Pascal ser uma estrutura complexa com diversas propriedades e características capazes de relacioná-lo, por exemplo, com algumas sequências numéricas importantes, sua implementação na forma de um algoritmo para linguagem de programação é bastante simples, como foi visto neste artigo.

Obs: A notação no número binomial foi prejudicada neste artigo. O correto é utilizar um grande par de parênteses envolvendo os números n e p, mas aqui foi utilizado o caractere "|".

terça-feira, 3 de novembro de 2009

Descobrir o fabricante da placa de rede

Na tecnologia de redes Ethernet todas as placas de rede recebem um endereço chamado MAC, Media Access Control ou Controle de Acesso ao Meio. O endereço MAC é um endereço físico de 48 bits representado por 12 dígitos hexadecimais. Este endereço está gravado na memória ROM da placa de rede e teoricamente não existem duas placas de rede com o mesmo endereço MAC.

Pelo endereço MAC da placa de rede é possível descobrir o fabricante da placa. O IEEE através de sua Associação de Padrões controla mundialmente a identificação de todos os aparelhos eletro-eletrônicos pelo código do Identificador Único Organizacional, OUI. Este código são os três primeiros octetos do endereço MAC, ex.: 11-22-33-xx-xx-xx.

Neste site pode-se digitar os números, em "Search the public OUI listing...", e seu mecanismo de busca retorna as informações do fabricante:

http://standards.ieee.org/regauth/oui/index.shtml

Ainda é possível baixar a listagem de todos os fabricantes e seus respectivos OUI.

sexta-feira, 30 de outubro de 2009

Guia de referência cruzada dos gerenciadores de pacotes

Cada distribuição Linux adota um gerenciador de pacotes específico, os mais utilizados são as duplas deb/apt e rpm/yum.

Segue uma tabela de equivalência dentre alguns comandos destes gerenciadores. Os espaços em branco são para indicar ou a inexistência do comando ou o comando ainda não é conhecido por mim.

Por favor, quem souber mais, poste os comandos que faltam ou a correção para algum deles. Esta postagem será atualizada com frequência, assim que eu receber algo novo.

Data da última atualização: 30/10/2009
http://dan-scientia.blogspot.com/2009/10/guia-de-referencia-cruzada-dos.html






















































 dpkgrpmaptyum
SignificadoDebian PackageRPM Package Manager Advanced Packaging ToolYellow dog Updater, Modified
Extensão do pacote*.deb*.rpm*.deb*.rpm
Distros que adotam o empacotamentoDebian, Ubuntu, Linux Mint, KnoppixRed Hat, Fedora, Suse, CentOS, Mandriva, Yellow Dog, LinpusDebian, Ubuntu, Linux Mint, KnoppixRed Hat, Fedora, Suse, CentOS, Mandriva, Yellow Dog, Linpus
Configuração dos repositórios   /etc/apt/sources.list/etc/yum.conf ou /etc/yum.repos.d/
     
TarefaComando   
Instalar pacote do localdpkg -i <pacote>rpm -i <pacote> yum localinstall <pacote>
Atualizar pacote do local rpm -U <pacote> yum localupdate <pacote>
Atualizar pacote do repo   yum update <pacote>
Atualizar pacote se estiver instalado  rpm -F <pacote>  
Instalar pacote do repo  apt-get install <pacote>yum install <pacote>
Instalar grupo de pacotes   yum groupinstall <grupo>
Reinstalar um pacote   yum reinstall <pacote>
Atualizar grupo de pacotes   yum groupupdate <grupo>
Remover pacotedpkg -r <pacote>rpm -e <pacote>apt-get remove <pacote>yum remove <pacote>
Remover pacotes órfãos   package-cleanup --orphans
Remover pacotes solitários   package-cleanup --leaves
Remover grupo de pacotes   yum groupremove <grupo>
Listar arquivos do pacote instaladodpkg -L <pacote>rpm -ql <pacote> 
Listar arquivos do pacote não instaladodpkg-deb -c <pacote> rpm -qpl <pacote>  
Mostrar informações do pacote instaladodpkg -s <pacote>rpm -qi <pacote>apt-cache show <pacote>yum info <pacote>
Mostrar informações do pacote não instalado rpm -qpi <pacote>apt-cache show <pacote>yum info <pacote>
Mostrar novidades da versão do pacote  rpm -q --changelog <pacote>apt-listchanges <pacote> 
Mostrar detalhes sobre um grupo de pacotes   yum groupinfo <grupo>
Extrair arquivo do pacotedpkg-deb --extract <pacote>rpm2cpio <pacote>|cpio -vid  
Listar todos os pacotes instaladosdpkg -lrpm -qa yum list installed
Listar todos os pacotes disponíveis  apt-cache pkgnamesyum list
Listar os grupos de pacotes disponíveis   yum grouplist
Verificar integridade do pacote rpm -K <pacote>  
Verificar integridade dos arquivos instalados do pacote rpm -V <pacote>  
Verificar integridade dos arquivos instalados de todos os pacotesdebsumsrpm -Va  
Mostrar qual pacote pertence o arquivodpkg -S <arquivo>rpm -qf <arquivo>apt-file search <arquivo>yum provides <arquivo>
Listar todos os arquivos que acompanham o arquivo no pacote rpm -qdf <arquivo>  
Mostrar as dependências do pacote rpm -qpR <pacote>apt-cache depends <pacote>yum deplist <pacote>
Mostrar os pacotes que dependem do pacote rpm -q --whatrequires apt-cache rdepends <pacote>yum resolvedep <dependência>
Procurar expressão em pacotes do repositório  apt-cache search <expressão>yum search <expressão>
Procurar pacotes nos repositórios    
Exibir os repositórios de software configurados   yum repolist
Atualizar lista de pacotes dos repositórios  apt-get update(o yum faz automaticamente a cada uso)
Verificar novas atualizações   apt-get -s upgradeyum check-update
Atualizar pacotes  apt-get upgradeyum update
Atualizar todo o sistema  apt-get dist-upgrade yum upgrade
Remover pacote do cache local  apt-get cleanyum clean packages
Remover somente pacotes obsoletos do cache local  apt-get autoclean 
Remover cabeçalhos do cache local  apt-file purgeyum clean headers
Remover cabeçalhos obsoletos do cache local   yum clean oldheaders
Remover pacotes e cabeçalhos do cache local   yum clean all
Mostrar estado do cache  apt-cache stats 

terça-feira, 27 de outubro de 2009

Problema de Lógica: Degraus da escada rolante

Atenção, resposta após o problema!

João e Pedro desejam descobrir quantos degraus ficam visíveis em uma escada rolante. Para isso eles começaram a subir a escada juntos, sendo que João subia um degrau à cada passo, enquanto Pedro subia dois degraus à cada passo. O primeiro que chegou ao topo contou 28 degraus e o segundo contou 21 degraus. Com esses dados foi possível responder a questão. Quantos degraus ficam visíveis nesta escada rolante? Observação: a escada está em funcionamento.






RESPOSTA:






Pedro foi o primeiro à chegar ao topo pois ele avançava dois degraus à cada passo, então foi ele quem contou 28 degraus. Como a escada está em funcionamento, ajudando-os a subir, no tempo gasto para Pedro chegar ao topo a escada o ajudou x degraus, desta forma o número de degraus visíveis nesta escada é 28 + x.

Como Pedro avançou dois degraus por vez e contou 28, então ele deu 14 passos até o topo. Assim no momento que Pedro chegou ao topo, João havia avançado 14 degraus. Neste tempo a escada ajudou x degraus então até esta altura em que João se encontra existem 14 + x degraus visíveis.

João contou 21 degraus, se ele está no 14 então faltam 7 para ele chegar ao topo. Como 7 é metade de 14 então a escada ainda vai ajudar mais x/2 degraus. Desta altura até o topo existem 7 + x/2 degraus visíveis.

O número de degraus visíveis para João e para Pedro é o mesmo, então basta montar a equação:

28 + x = 14 + x + 7 + x/2
28 - 14 - 7 = x - x + x/2
7 = x/2
x = 14

Se x é igual a 14 então o número de degraus visíveis é 28 + x = 28 + 14 = 42 degraus. Ou, utilizando a contagem de João, o número de degraus visíveis é 14 + x + 7 + x/2 = 14 + 14 + 7 + 14/2 = 42 degraus.

domingo, 25 de outubro de 2009

A centróide de um polígono

A centróide é o ponto no interior de uma figura geométrica que define o centro geométrico. Se a figura geométrica possui um corpo de densidade uniforme então a centróide coincide com o centro de massa e se a figura geométrica está submetida a um campo gravitacional então este ponto coincide com o centro de gravidade.

A centróide de um polígono fechado, não sobreposto e definido por n vértices, pode ser calculado utilizando uma fórmula que recebe as coordenadas dos vértices e sua área. Então antes de se calcular a centróide por esta fórmula é necessário calcular a área do polígono.

O cálculo para determinar a área de um polígono utiliza uma fórmula bastante simples. Considere um polígono feito com segmentos de reta entre n vértices (xi,yi), com i=0 até n-1. O último vértice (xn,yn) é assumido para ser o mesmo que o primeiro (x0,y0), isto é, o polígono está fechado.

A área é dada pela fórmula:


O sinal da área pode ser usado para determinar a ordem dos vértices do polígono. Se o sinal é positivo então os vértices estão ordenados no sentido contra o relógio, de outra forma, se o sinal é negativo então os vértices estão ordenados no sentido do relógio.

Para os cálculos das coordenadas da centróide utilizam-se as fórmulas abaixo:


Vejamos então um exemplo. Abaixo é apresentado um gráfico com um polígono e seus vértices estão nas coordenadas (1,3),(7,2),(10,0),(11,5),(8,7) e (3,6). Vamos calcular as coordenadas da centróide.


Aplicando a fórmula do cálculo da área temos:

A = ((1*2-7*3) + (7*0-10*2) + (10*5-11*0) + (11*7-8*5) + (8*6-3*7) + (3*3-1*6))/2 = 39

A coordenada x da centróide é o resultado da expressão abaixo:

Cx = ((1+7)*(1*2-7*3) + (7+10)*(7*0-10*2) + (10+11)*(10*5-11*0) + (11+8)*(11*7-8*5) + (8+3)*(8*6-3*7) + (3+1)*(3*3-1*6))/(6*39) = 6,7

E a coordenada y da centróide é o resultado da expressão abaixo:

Cy = ((3+2)*(1*2-7*3) + (2+0)*(7*0-10*2) + (0+5)*(10*5-11*0) + (5+7)*(11*7-8*5) + (7+6)*(8*6-3*7) + (6+3)*(3*3-1*6))/(6*39) = 4,0

Assim a centróide deste polígono está na coordenada x = 6,7 e y = 4, já mostrado no desenho do polígono acima.

sábado, 24 de outubro de 2009

A onda sonora

O som, ou onda sonora, é definido como uma onda mecânica tridimensional, pois necessita de um meio material para se propagar e é capaz de se propagar em todas as direções. O som não se propaga no vácuo.

Nesta propagação acontece compressões e rarefações em propagação do meio, de forma longitudinal. Quando passa, a onda sonora não arrasta as partículas de ar, por exemplo, apenas faz com que estas vibrem em torno de sua posição de equilíbrio.

A audição humana consegue captar freqüências de ondas sonoras que variam entre 20Hz e 20000Hz, aproximadamente. São denominadas ondas de infra-som, as ondas de freqüência menor que 20Hz, e ultra-som as de freqüência acima de 20000Hz.

A velocidade do som depende, entre outros fatores, do meio de propagação. A velocidade nos sólidos é maior que no líquidos e nos líquidos é maior que nos gases. Na água é aproximadamente igual a 1450m/s e no ar à 20°C é 343m/s. A propagação do som em meios gasosos depende fortemente da temperatura do gás.

Como trata-se de onda então possui alguns conceitos. Em uma oscilação, a amplitude é a distância medida na vertical entre o ponto máximo ou mínimo e o de equilíbrio. A frequência é o número de oscilações por unidade de tempo e período é o tempo decorrido numa oscilação. O comprimento de onda é a distância percorrida pela onda durante uma oscilação.

A onda sonora possui algumas características como a sua altura, intervalo e timbre. A altura do som depende apenas de sua frequência, sendo definida como a diferenciação entre grave e agudo. Um tom de maior freqüência é agudo e um de menor é grave.

Os intervalos entre dois sons são dados pelo quociente entre suas frequências. Como o intervalo é um quociente entre duas medidas de mesma unidade, este não tem dimensão. Na música é dada uma nomenclatura para cada intervalo, por exemplo o intervalo acústico de uma quarta possui a razão de frequência 4:3 e as notas musicais de mesmo nome são separadas por um intervalo de uma oitava, 2:1.

O timbre de um som é a característica que permite diferenciar dois sons de mesma altura e mesma intensidade, mas que são emitidos por instrumentos diferentes. Assim uma música executada por um violino e um piano se diferencia pelo timbre.

A intensidade está relacionada com a amplitude da onda sonora e é a qualidade que nos permite caracterizar se um som é forte ou fraco e depende da energia que a onda sonora transfere. Uma maior amplitude é um som mais forte, com mais energia e ouvido a maior distancia da fonte sonora. Uma menor amplitude é um som mais fraco, com menos energia e ouvido a uma menor distancia. Conforme um observador se afasta de uma fonte sonora, a intensidade sonora ou nível sonoro diminui logaritmicamente.

A unidade utilizada para o nível sonoro é o Bel, mas como esta unidade é grande comparada com a maioria dos valores de nível sonoro utilizados no cotidiano, seu múltiplo usual é o decibel (dB), de maneira que 1B = 10dB.

Na propagação do som observam-se os fenômenos gerais da propagação ondulatória. Devido à sua natureza longitudinal, o som não pode ser polarizado e sofre os fenômenos de difração, reflexão, refração, interferência e efeito Doppler.

A difração é a propriedade de contornar obstáculos. Ao encontrar obstáculos à sua frente, a onda sonora continua a provocar compressões e rarefações no meio em que está se propagando e ao redor de obstáculos envolvidos pelo mesmo meio. Desta forma, consegue contorná-los. A difração depende do comprimento de onda.

A reflexão do som obedece às leis da reflexão ondulatória nos meios materiais elásticos. Quando uma onda sonora encontra um obstáculo que não possa ser contornado, ela "bate e volta". A reflexão do som ocorre em superfícies cuja extensão seja grande em comparação com seu comprimento de onda. A reflexão, por sua vez, determina novos fenômenos conhecidos como reforço, reverberação e eco.

Quando o som breve direto atinge o tímpano dos nossos ouvidos, ele o excita. A excitação completa ocorre em 0,1 segundo. Se o som refletido chegar ao tímpano antes do décimo de segundo, o som refletido reforça a excitação do tímpano e reforça a ação do som direto. É o fenômeno do reforço.

Na reverberação, o som breve refletido chega ao ouvido antes que o tímpano, já excitado pelo som direto, tenha tempo de se recuperar da excitação, a fase de persistência auditiva. Desta forma, começa a ser excitado novamente, combinando duas excitações diferentes. Isso ocorre quando o intervalo de tempo entre o ramo direto e o ramo refletido é maior ou igual a zero, porém menor que 0,1 segundo. O resultado é uma confusão auditiva, o que prejudica o discernimento tanto do som direto quanto do refletido.

No eco, o som breve refletido chega ao tímpano após este ter sido excitado pelo som direto e ter-se recuperado dessa excitação. Depois de ter voltado completamente ao seu estado natural, onde completou a fase de persistência auditiva, começa a ser excitado novamente pelo som breve refletido. Isto permite discernir perfeitamente as duas excitações.

A refração do som obedece às leis da refração ondulatória. Este fenômeno caracteriza o desvio sofrido pela frente da onda quando ela passa de um meio para outro, cuja elasticidade, ou compressibilidade para as ondas longitudinais, seja diferente. Um exemplo seria a onda sonora passar do ar para a água. Quando uma onda sonora sofre refração, ocorre uma mudança no seu comprimento de onda e na sua velocidade de propagação. Sua frequência, que depende apenas da fonte emissora, se mantém inalterada.

A interferência é a conseqüência da superposição de ondas sonoras. Quando duas fontes sonoras produzem, ao mesmo tempo e num mesmo ponto, ondas concordantes, seus efeitos se somam, mas se essas ondas estão em discordância, isto é, se a primeira produz uma compressão num ponto em que a segunda produz uma rarefação, seus efeitos se neutralizam e a combinação desses dois sons provoca o silêncio.

O efeito Doppler é um efeito descrito como uma característica observada em ondas emitidas ou refletidas por fontes em movimento relativo ao observador. Para ondas sonoras, o efeito Doppler constitui o fenômeno pelo qual um observador percebe freqüências diferentes das emitidas por uma fonte e acontece devido à velocidade relativa entre o a onda sonora e o movimento relativo entre o observador e/ou a fonte.

Supondo que o observador esteja em repouso e a fonte se movimente. Caso a fonte esteja se aproximando do observador, há um encurtamento do comprimento da onda, relacionado à velocidade relativa, e a freqüência real será menor que a observada. Caso a fonte esteja se afastando do observador, há um alongamento aparente do comprimento de onda.

Supondo que a fonte esteja em repouso e o observador se movimente. Caso o observador se aproxime da fonte, em um mesmo intervalo de tempo ele encontrará mais frentes de onda do que se estivesse parado. Assim a frequência observada deverá ser maior que a frequência emitida pela fonte. Neste caso, o comprimento de onda não é alterado, mas a velocidade de propagação é ligeiramente aumentada.

No caso em que o observador se afasta da fonte, em um mesmo intervalo de tempo ele encontrará menor número de frentes de onda do que se estivesse parado. Assim a frequência observada deverá ser menor que a frequência emitida pela fonte. A dedução do cálculo da frequência observada será análoga ao caso anterior, no entanto a velocidade de propagação é ligeiramente reduzida.

terça-feira, 20 de outubro de 2009

Grandeza, Razão e Proporção

Grandeza é uma relação numérica estabelecida com algo. Por exemplo, a altura de uma pessoa, o peso de um objeto, o volume de um tanque e a quantidade de peças são grandezas.

Razão é a divisão ou relação entre duas grandezas. Chama-se de razão entre dois números reais a e b ou a razão de a para b, com b diferente de zero, o quociente a/b ou a:b.

Na razão a/b ou a:b o número a é denominado antecedente e o número b é denominado consequente.

As razões podem ser entre grandezas da mesma unidade de medida, por exemplo a razão entre o número de meninos e o número de meninas, ou entre grandezas de unidades de medidas diferentes, por exemplo a razão entre a distância percorrida e o combustível consumido.

Uma razão bastante comum é a velocidade, dada pela divisão da distância percorrida pelo tempo gasto, por exemplo 80km/2h é igual a 40km/h. Outra razão bastante comum é a escala, que é a razão entre o comprimento considerado no desenho e o comprimento real correspondente, ambos medidos na mesma unidade, por exemplo 1:1000.

A razão inversa é o inverso da divisão, assim Ri = 1/R = 1/(a/b) = b/a. Duas razões são inversas entre si quando o produto delas é igual a 1, a/b x b/a = 1.

Proporção é a igualdade entre razões, ou seja, entre razões equivalentes. Por exemplo, se um carro faz 12km por litro de combustível, então para rodar 24km é preciso 2 litros de combustível, 12/1 = 24/2.

A proporção possui algumas propriedades, uma é se multiplicarmos em cruz os resultados serão iguais. O produto dos meios é igual ao produto dos extremos:

a/b = c/d  =>  a.d = b.c


Quando somamos ou subtraímos termo a termo a razão se mantém. A soma dos antecedentes está para a soma dos consequentes, assim como cada antecedente está para o seu consequente, e a diferença dos antecedentes está para a diferença dos consequentes, assim como cada antecedente está para o seu consequente:

a/b = c/d  =  (a+c)/(b+d)  =  (a-c)/(b-d)


A soma dos dois primeiros termos está para o 2º (ou 1º) termo, assim como a soma dos dois últimos está para o 4º (ou 3º):

a/b = c/d  =>  (a+b)/a = (c+d)/c  =>  (a+b)/b = (c+d)/d


A diferença dos dois primeiros termos está para o 2º (ou 1º) termo, assim como a diferença dos dois últimos está para o 4º (ou 3º):

a/b = c/d  =>  (a-b)/a = (c-d)/c  =>  (a-b)/b = (c-d)/d


O produto dos antecedentes está para o produto dos consequentes, assim como o quadrado de cada antecedente está para quadrado do seu consequente:

a/b = c/d  =>  (a.c)/(b.d) = a²/b² = c²/d²


Uma proporção múltipla é uma série de razões iguais, assim a/b = c/d = e/f.

Duas grandezas a e b são diretamente proporcionais quando a razão a/b entre os valores de a e do correspondente valor b é sempre constante, a/b = k. Quando o aumento de uma implica no aumento da outra, quando a redução de uma implica na redução da outra:

  a  b  a/b
4 2 2
6 3 2
8 4 2

4/2 = 6/3 = 8/4 = 2

4/6 = 2/3 => 4.3 = 6.2 = 12


E duas grandezas a e b são inversamente proporcionais quando o produto a.b entre os valores de a e o correspondente valor b é sempre constante, a.b = k. Quando o aumento de uma implica na redução da outra, quando a redução de uma implica no aumento da outra:

  a  b  a.b
6 1 6
3 2 6
1 6 6

6.1 = 3.2 = 1.6 = 6

6/3 = 1/(1/2) => 6/3 = 2/1 => 6.1 = 3.2 = 6


Para resolver problemas que envolvam duas ou mais grandezas direta ou inversamente proporcionais utiliza-se um sistema de cálculo denominado regra de três. O problema que envolve somente duas grandezas é chamado de regra de três simples e o problema que envolve três ou mais grandezas é chamado de regra de três composta.

Na solução de problemas deste tipo devemos igualar a razão da grandeza que queremos descobrir com as razões restantes, aplicando nestas outras a propriedade do produto dos antecedentes para o produto dos consequentes, nos casos de regra de três composta.

Mas antes é necessário estabelecer a direção de proporcionalidade entre cada grandeza e a grandeza a ser determinada. Por exemplo:

Problema: Seis operários trabalhando oito horas por dia concluem o trabalho em cinco dias. Dois operários trabalhando seis horas por dia irão concluir o trabalho em quantos dias?

Operários  Horas/Dia   Dias
6 8 5
2 6 x


Comparando a coluna Operários com Dias, com a diminuição do número de operários, a quantidade de dias deve aumentar, então trata-se de uma relação inversamente proporcional. Nesse caso, deve-se inverter a coluna dos operários.

Comparando a coluna Horas/Dia com Dias, com a diminuição das horas diárias, a quantidade de dias deve aumentar, então trata-se também de uma relação inversamente proporcional. Da mesma forma, deve-se inverter a coluna das horas/dia.

O cálculo da equação fica assim:

5/x = (2*6)/(6*8)
5/x = 12/48
x/5 = 48/12
x = 4*5
x = 20


Resposta: O trabalho será concluído em 20 dias.

quinta-feira, 8 de outubro de 2009

Pesquisa binária em vetor ordenado

A pesquisa ou busca binária é um algoritmo de pesquisa em vetores bastante eficiente. Aplicando somente quando o vetor está ordenado, o algoritmo realiza sucessivas divisões no espaço de pesquisa comparando o elemento procurado com o elemento do meio do vetor.

Se o elemento do meio do vetor for igual ao elemento procurado, a pesquisa termina com sucesso retornando a posição do elemento. Caso contrário, se o elemento do meio vier antes do elemento procurado, então repete-se a pesquisa para a metade posterior ao meio do vetor. E se o elemento do meio vier depois do elemento procurado, repete-se a pesquisa para a metade anterior ao meio do vetor.

No exemplo de código a seguir, em linguagem C, é apresentado duas versões do algoritmo, uma função com a versão iterativa e outra função com a versão recursiva. Quando o elemento procurado não for encontrado é retornado o valor -1.

A variável esq armazena a primeira posição mais à esquerda, o início do vetor do espaço de pesquisa e, do mesmo modo, a variável dir armazena a última posição mais à direita, o fim do vetor do espaço de pesquisa. Acompanhe o código:

#include <stdio.h>
#include <stdlib.h>

int pesqbit(int *vetor, int tamanho, int valor) { // versão iterativa.

int esq = 0;
int dir = tamanho - 1;
int meio;

while (esq <= dir) {

meio = (esq + dir)/2;

if (vetor[meio] == valor) {
return meio;
} else if ((vetor[meio] < valor) && (esq < dir)) {
esq = meio + 1;
} else if ((vetor[meio] > valor) && (esq < meio)) {
dir = meio - 1;
} else {
return -1;
}
}

}

int pesqbre(int *vetor, int esq, int dir, int valor) { // versão recursiva.

int meio = (esq + dir)/2;

if (vetor[meio] == valor) {
return meio;
} else if ((vetor[meio] < valor) && (esq < dir)) {
return pesqbre(vetor, meio+1, dir, valor);
} else if ((vetor[meio] > valor) && (esq < meio)) {
return pesqbre(vetor, esq, meio-1, valor);
} else {
return -1;
}

}

int main() { // exemplo de uso com as chamadas para as funções.

int valor;
int vetor[] = {1,2,3,4,5,6,7,8,9,10,11,12};

printf("Digite um numero: ");
scanf("%d", &valor);

printf("(Versao Iterativa) A posicao e: %d\n", pesqbit(vetor, sizeof vetor / sizeof (int), valor));
printf("(Versao Recursiva) A posicao e: %d\n\n", pesqbre(vetor, 0, (sizeof vetor / sizeof (int))-1, valor));

}

Como chegar na fórmula de resolução da equação de 2º grau

Embora no Brasil a fórmula de resolução da equação de 2º grau seja atribuída ao matemático indiano Bhaskara (1114-1185), ela foi desenvolvida alguns séculos depois pelo matemático francês François Viète (1540-1603).

Na época de Bhaskara a resolução tinha a forma de prosa, como uma receita que ia descrevendo as operações da resolução do problema. Assim, os indianos usavam a seguinte regra:

"Multiplique ambos os membros da equação pelo número que vale quatro vezes o coeficiente do quadrado e some a eles um número igual ao quadrado do coeficiente original da incógnita. A solução desejada é a raiz quadrada disso."

Bhaskara conhecia a regra acima, porém a regra não foi descoberta por ele. A regra já era do conhecimento de, no mínimo, o matemático Sridara, que viveu há mais de 100 anos antes de Bhaskara.

História à parte, veja como aplicando a regra na equação ax² + bx + c = 0 se chega à fórmula que conhecemos como fórmula de Bhaskara:

A equação do 2º grau:


Multiplique ambos os membros da equação pelo número que vale quatro vezes o coeficiente do quadrado:


Some a eles um número igual ao quadrado do coeficiente original da incógnita:


A solução desejada é a raiz quadrada disso:


sexta-feira, 2 de outubro de 2009

O estado obsoleto das distros Linux

Existe um interessante estudo estatístico sobre o estado de atualização das distribuições Linux. Útil para nos mostrar o quanto uma determinada distribuição está desatualizada nas versões de seus pacotes.

Vale lembrar que isto não quer dizer que a distribuição está ruim ou cheia de falhas pois nem sempre a versão mais nova é a mais estável, apenas nos mostra o quão atual está a distribuição.

O OpenSourceWatershed é um projeto com o objetivo de entender o relacionamento entre as distribuições e os componentes individuais de software. É a base para um estudo maior sobre as distribuições e suas evoluções, a distrologia.

Atualmente a análise estatística está sendo feita com a observação de vinte pacotes, que podemos considerar como os principais em uma distro. Dentre eles estão o Kernel, o GCC, a GlibC, o Gnome, o KDE, o Firefox, o Xorg, o Httpd e o PostgreSQL. E também por enquanto observando apenas dez distros, dentre elas as principais.

As três formas de análise são a porcentagem de pacotes obsoletos, a média do número de versões mais novas dos pacotes do que a fornecida na distro e a média de tempo que a distro demora para atualizar os pacotes.

A tabela com as versões atuais das distros é apresentada abaixo:

                                             Média        Média
Rank Distro Codinome % Obsoleto Nov. Vers. de atraso
1 arch 40,0% 1,35 2 sem
2 fedora 11 55,0% 1,65 8 sem
3 freebsd 8 66,66% 3,73 31 sem
4 slackware 13.0 82,35% 4,29 15 sem
5 gentoo 85,0% 6,10 19 sem
6 opensuse 11.1 85,0% 7,35 35 sem
7 funtoo 85,0% 6,05 18 sem
8 ubuntu jaunty 90,0% 6,05 22 sem
9 sabayon 4 94,73% 6,58 29 sem
10 debian lenny 100,0% 17,15 53 sem


Observando apenas as 4 distros bases (Fedora, Slackware, Suse e Debian), podemos perceber que a Fedora está na frente com apenas 55% dos pacotes sendo obsoletos, demorando em média 8 semanas para atualizar um pacote. E como era de se imaginar, pois sabemos que prevalece a estabilidade, a distro Debian está com 100% dos pacotes obsoletos, em uma média de 17,15 versões atrás, das versões atuais dos pacotes.

Quer saber mais? Acompanhe este estudo acessando o endereço: http://oswatershed.org/

quarta-feira, 23 de setembro de 2009

A árvore genealógica das linguagens de programação

Uma linguagem de programação é um conjunto de palavras capaz de expressar instruções para um computador. É um conjunto de regras padronizadas usadas para construir um programa de computador. Uma determinada combinação das palavras da linguagem, formando uma seqüência lógica de eventos, constitui o código fonte de um software. Esse código fonte, armazenado em um aquivo texto, é depois traduzido para código de máquina, que é executado pelo computador.

A intenção das linguagens de programação é tornar mais fácil a criação de softwares pelo programador, pois é uma linguagem próxima à linguagem humana, ao contrário da linguagem de máquina que utiliza códigos semelhantes às instruções do hardware.

Nos anos 50 foi o início das linguagens modernas de programação. As três primeiras linguagens de programação modernas, as quais suas descendentes ainda são utilizadas são FORTRAN (FORmula TRANslator), LISP (LISt Processor) e COBOL (COmmon Business Oriented Language).

Do FORTRAN vieram linguagens como Basic, C, Pascal, estas vindas da linha da linguagem ALGOL. Muitas outras, a maioria, vieram a partir destas descendências. Para ter uma idéia, Perl, PHP, Java, vieram da linguagem C, e também tem VisualBasic e Delphi que vieram do Basic e Pascal respectivamente.

No site de Éric Lévénez existe uma página que contém uma apresentação gráfica muito interessante da linha do tempo das linguagens de programação com todas as descendências. Lá é possível conhecer a origem das diversas linguagens. Acesse esta página neste endereço: http://www.levenez.com/lang/

Outros sites possuem conteúdo semelhante, são acessados nos endereços abaixo:

http://www.digibarn.com/collections/posters/tongues/
http://oreilly.com/pub/a/oreilly/news/languageposter_0504.html
http://merd.sourceforge.net/pixel/language-study/diagram.html

segunda-feira, 21 de setembro de 2009

Problema de lógica: A cor dos vestidos das três senhoras

Atenção, a resposta está logo após o problema!

Três senhoras, dona Branca, dona Rosa e dona Violeta, passeavam pelo parque quando dona Rosa disse:
- Não é curioso que estejamos usando vestidos de cores branca, rosa e violeta, embora nenhuma de nós esteja usando um vestido de cor igual ao seu próprio nome?
- Uma simples coincidência. - respondeu a senhora com o vestido violeta.
Qual a cor do vestido de cada senhora?





RESPOSTA





Se a senhora com o vestido violeta respondeu a dona Rosa, então ela não é a própria dona Rosa. Além disso, como ela não tem o vestido da mesma cor de seu nome, ela também não é a dona Violeta. Logo, é a dona Branca que está com o vestido violeta. Dona Rosa não está usando o vestido rosa nem o violeta, portanto só pode estar usando o branco. Conseqüentemente, dona Violeta veste o vestido rosa.

sábado, 19 de setembro de 2009

Unidades de Medida do Computador

Toda informação introduzida em um computador precisa ser entendida pela máquina, para que possa corretamente interpretá-la e processá-la. O computador, sendo um equipamento eletrônico, armazena e movimenta as informações internamente sob forma eletrônica, em um valor de voltagem ou de corrente. Para uma maior simplicidade e confiabilidade na representação elétrica da informação, os valores de voltagem, ou de corrente, são gerados e manipulados pelos circuitos em apenas dois valores diferentes, 0 e 1.

Dessa forma, os computadores digitais são totalmente binários. Toda informação introduzida em um computador é convertida para a forma binária. Tornando inclusive mais simples o emprego da lógica booleana para o tratamento da informação.

Assim, a menor unidade de informação armazenável em um computador é o algarismo binário ou dígito binário, conhecido como bit (contração das palavras inglesas binary digit). O bit pode ter então somente dois valores, 0 e 1.

Mas para poder armazenar as informações da linguagem humana, o computador manipula os bits em grupos ordenados. Por definição, instituída pela IBM e atualmente utilizada por praticamente todos os fabricantes de computadores, um caractere da linguagem humana é armazenado em um grupo ordenado de oito bits. Com isso o byte, definido como um grupo ordenado de oito bits, é a menor unidade de armazenamento de informação útil em computadores para nossa linguagem.

Em Dezembro de 1998 a Comissão Eletrotécnica Internacional (IEC), líder em padronização mundial de eletrotecnologia, aprovou como um padrão internacional nomes e símbolos para os prefixos dos múltiplos binários usados no campo de processamento e transmissão de dados.

Prefixos binários são nomes ou sí­mbolos que precedem a unidade de medida, para indicar a sua multiplicação por potências de base dois, semelhante aos prefixos padronizados pelo Sistema Internacional de Unidades (SI), onde a multiplicação se dá por potências de base dez. Os nomes e símbolos dos prefixos binários e suas respectivas potências binárias são mostrados abaixo:

1 Kilobyte  (KB)                   = 2^10 Bytes = 1.024 Bytes
1 Megabyte (MB) = 1024 Kilobytes = 2^20 Bytes = 1.048.576 Bytes
1 Gigabyte (GB) = 1024 Megabytes = 2^30 Bytes = 1.073.741.824 Bytes
1 Terabyte (TB) = 1024 Gigabytes = 2^40 Bytes = 1.099.511.627.776 Bytes
1 Petabyte (PB) = 1024 Terabytes = 2^50 Bytes = 1.125.899.906.842.624 Bytes
1 Exabyte (EB) = 1024 Petabytes = 2^60 Bytes = 1.152.921.504.606.846.976 Bytes
1 Zettabyte (ZB) = 1024 Exabytes = 2^70 Bytes = 1.180.591.620.717.411.303.424 Bytes
1 Yottabyte (YB) = 1024 Zettabytes = 2^80 Bytes = 1.208.925.819.614.629.174.706.176 Bytes


Com o passar dos anos e com a acelerada evolução tecnológica dos computadores, torna-se mais comum entre nós o uso dos prefixos de potências maiores. O primeiro computador pessoal padrão IBM tinha apenas 640KB de memória RAM, hoje é comum computadores com 4 GB de RAM. Os primeiros discos rígidos para estes computadores tinham até 10 MB, hoje usamos discos rígidos de 500 GB. As primeiras mídias removíveis armazenavam 180 KB, hoje temos as mídias Blu-ray que armazenam até 93,2 GB.

Por enquanto estamos na era dos Terabytes e Petabytes, pois os maiores bancos de dados do planeta e os mais grandiosos cálculos matemáticos realizados em computadores manipulam quantidades de informações dentro destas faixas. Não se assuste se um dia começar a ver anúncios de câmeras digitais de 5 Exabytes!

sexta-feira, 18 de setembro de 2009

Medidas de Tendência Central

Uma forma útil de descrever um grupo como um todo consiste em encontrar um único número que represente o que é "médio" naquele conjunto particular de dados. Em estatística descritiva este valor é conhecido por medida de tendência central, pois geralmente se localiza em torno do centro de uma distribuição, onde a maior parte dos dados tende a concentrar-se.

A estatística descritiva é um ramo da estatística que aplica várias técnicas para descrever e sumariar um conjunto de dados. As medidas de tendência central mais conhecidas são a moda, a mediana, o ponto médio e a média.

A moda simplesmente é o dado que ocorre com maior freqüência no conjunto. A moda pode ser localizada com muito mais facilidade por exame do que por cálculo. Se os dados estão organizados em uma tabela de freqüências, a moda é o valor que possui a maior freqüência na tabela. Um conjunto pode não ter valores que se repetem, tornando uma distribuição amodal, ou pode ter duas ou mais modas tornando uma distribuição bimodal ou polimodal. Um conjunto com uma moda apenas é uma distribuição unimodal.

A mediana corresponde ao ponto central da distribuição e é localizada quando os dados estão dispostos em ordem. A mediana é considerada a medida de tendência central que corta a distribuição em duas partes iguais. Se for uma distribuição com número ímpar de dados, a mediana será o dado que fica exatamente no meio da distribuição. Sua posição é dada pela fórmula n+1/2. Se o número de dados for par haverá dois valores considerados centrais. Visto que a posição pela fórmula n+1/2 será um valor fracionado, a mediana vai cair entre os dois valores centrais, então a mediana será a média aritmética destes dois valores. Se os dados estão apresentados em uma tabela de freqüências basta construir uma distribuição de freqüências acumuladas e a mediana será o dado em que o valor acumulado contém a posição da mediana.

O ponto médio é o valor que está a meio caminho entre o menor e o maior valor do conjunto de dados. Para calcular soma-se esses valores extremos e divide-se o resultado por dois.

A média é o valor que aponta para onde mais se concentram os dados de uma distribuição. Pode ser considerada o ponto de equilíbrio das freqüências, num histograma. É a medida de tendência central mais comumente usada. Existem diversos tipos de média, cada uma adequada para uma determinada característica do conjunto de dados. Para suas fórmulas existem duas versões, uma para dados agrupados em uma tabela de freqüências, ou ponderada pelos pesos dos dados, e outra para dados não agrupados.

A média aritmética é a média mais simples, é o somatório dos dados de um conjunto dividido pelo número de dados deste conjunto.

Média aritmética:

Média aritmética ponderada:

A média geométrica é indicada para um conjunto onde os dados fazem uma progressão geométrica. É a raiz n-ésima do produtório dos dados de um conjunto.

Média geométrica:

Média geométrica ponderada:

A média harmônica de um conjunto de dados é utilizada quando se quer valorizar o conjunto onde os dados são mais uniformes, ou mais equilibrados. É o número de dados do conjunto dividido pelo somatório dos inversos dos dados:

Média harmônica:

Média harmônica ponderada:

Caso especial da média harmônica para dois valores:

A média desarmônica é utilizada quando se quer valorizar o conjunto onde os dados possuem uma maior disparidade, ou maior oscilação. É definida como a média harmônica entre a média aritmética desse conjunto e o quadrado da média aritmética do conjunto dividido pela média harmônica do mesmo:

Média desarmônica:

Média desarmônica ponderada:

Caso especial da média desarmônica para dois valores:

A média quadrática é a raiz quadrada da média aritmética dos quadrados dos dados:

Média quadrática:

Média quadrática ponderada:

A média cúbica é a raiz cúbica da média aritmética dos cubos dos dados:

Média cúbica:

Média cúbica ponderada:

Em uma análise estatística a moda nos mostra o valor mais comum do conjunto de dados, porém não é necessariamente igual à média. A mediana nos mostra o equilíbrio da distribuição dos dados no conjunto, se próxima ao valor da média. E a média é limitada pela influência dos valores das extremidades, por isso em alguns casos é muito comum ignorar o maior e o menor valor de um conjunto para se calcular a média.

A maioria dos autores adotam como símbolo da média populacional a letra grega μ (Mu) e o símbolo da média amostral a letra grega χ (Qui).

terça-feira, 15 de setembro de 2009

A proporção do nosso Sistema Solar

Um modelo do nosso Sistema Solar mantendo a mesma proporção, em dimensão reduzida, e adotando o diâmetro do Sol sendo igual a 1 metro, tem a escala de 1:1.391.900.000. A tabela abaixo mostra os diâmetros e órbitas dos principais astros do nosso Sistema Solar em escala reduzida, proporcionalmente ao modelo do Sol com 1 metro de diâmetro:

            Diâmetro (milímetros)   Raio da Órbita (metros)
Mercúrio 3,4 41,633
Vênus 8,6 77,67
Terra 9,1 107,457
Lua 2,4 0,276
Marte 4,8 163,689
Júpiter 100,2 559,048
Saturno 83,6 1.025,217
Urano 33,7 2.062,145
Netuno 32,6 3.232,919
Plutão 1,6 4.248,15


Nesta escala a velocidade da luz seria 215,3 milímetros por segundo, percorrendo em um ano 6.796,8 quilômetros, e o centro da nossa galáxia estaria a 188.340.398 quilômetros de distância.