terça-feira, 21 de outubro de 2014

Sistemas de Numeração - Série Digital

Sistemas de Numeração

Se você gosta de eletrônica digital, programação de computadores ou de dispositivos embarcados, tais como microcontroladores ou CLP's, e tem vontade de iniciar um estudo nessa área mas não sabe por onde começar, então um bom ponto de partida são os sistemas de numeração. Sem um conhecimento sobre como funcionam os sistemas de numeração você terá dificuldade para entender os conceitos mais básicos de eletrônica digital, como por exemplo o funcionamento de funções lógicas e não terá qualquer possibilidade de compreender como operam as unidades lógico aritméticas das CPU's de microprocessadores e microcontroladores. Além disso, toda e qualquer atividade de programação, seja de computadores ou microcontroladores, faz uso intensivo de técnicas que só podem ser aplicadas a partir do domínio dos sistemas de numeração. Como você deve saber, o sistema de numeração que usamos em nosso dia a dia é o decimal, ou de base dez, e dispõe de dez algarismos — 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Mas em programação e lógica digital faz-se uso de outros sistemas, como o binário e hexadecimal, base dois porque dispõe de dois algarismos — 0 e 1 — e base dezesseis com dezesseis algarismos — 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F —, respectivamente. Mas seja qual for o sistema que se use, sempre vale a regra de formação de números, denominada posicional.

Qual a vantagem de se usar outros sistemas?

Circuitos digitais funcionam à base de dois estados lógicos. Esses estados são referidos como alto/baixo, ligado/desligado, high/low, 1/0, enfim, dependendo do contexto você vai encontrar uma ou outra denominação. Mas o que importa mesmo é ter em mente que são dois estados opostos. Em termos elétricos, isso significa que um circuito digital opera em dois níveis de tensão, digamos 5V e 0V, ou 5V e -5V, só para exemplificar. E sendo assim, um sistema de numeração que contenha apenas dois dígitos cai como uma luva nesse cenário, já que podemos fazer uma correspondência direta entre cada dígito e um dos estados do circuito. Por exemplo, podemos associar o dígito 0 ao estado baixo e o dígito 1 ao estado alto. Ou o inverso, sem problemas. O que importa mesmo é que o sistema binário é perfeito para essa tarefa justamente por conter apenas dois dígitos. Mas, onde é que o sistema hexadecimal entra nessa história?
Se você já lidou com quantidades expressas em notação binária sabe o qual desagradável pode ser. Sequências enormes de zeros e uns podem ser mamão com açúcar para uma máquina mas não são fáceis de digerir por humanos, pelo menos pelos "normais". É que quanto menor o número de algarismos de uma base, maior a quantidade de dígitos necessários para representar uma determinada quantidade. Por exemplo, 2014 representado em binário fica:

`2014_10=11111011110_2`

Os índices inferiores indicam as bases em que os números estão expressos.
Bem, se base com poucos dígitos implicam em representações extensas, então deve ser razoável imaginar que bases com muitos dígitos possam representar as mesmas quantidades de forma compacta. Exatamente! E essa é a razão da importância da base hexadecimal. Por conter dezesseis dígitos ela permite uma notação muito compactada até para números grandes. Veja:

`2014_10=11111011110_2=7DE_16`

Como vemos, apenas três dígitos foram suficientes, contra quatro na base dez e onze na base dois. Portanto, o sistema binário é perfeito para as máquinas, mas o hexadecimal é conveniente para nós. Na prática, usamos ambos, conforme o contexto. Nesse ponto é importante salientar que, na verdade, máquinas não sabem nada a respeito de sistemas de numeração. Toda e qualquer informação fornecida à uma máquina é convertida na linguagem específica da máquina em questão por programas especiais, denominados compiladores, assemblers etc. Mas isso fica pra uma outra postagem.

Contar é fácil?

Depende. Se entendemos como funciona o sistema de numeração posicional, contar é fácil até mesmo em outros sistemas, como o binário e o hexadecimal. Imaginemos a seguinte situação: alguém lhe pede para contar a quantidade de maçãs numa cesta. Você começa, retirando as maçãs e contando no sistema a que está habituado, o decimal:

— 1, 2, 3, 4, ..., 8, 9, 10. Dez maçãs!


Pergunto: porque após o nove, último dígito da base dez, seguiu-se um e zero juntos? Perguntando de outra forma, porque não 11 ? Porque não 12? Essa pergunta pode parecer estranha devido ao fato de que você se acostumou a contar dessa maneira desde cedo. Mas já se perguntou isso? Há alguma regra que determine o que vem depois do último algarismo da base, quando a contagem não pode prosseguir por terem sidos todos usados? A resposta é sim, há uma regra e essa regra vale para todo e qualquer sistema de numeração, tenha ele a quantidade de algarismos que tiver. Depois que você a tiver aprendido e se tornar consciente da maneira pela qual formamos os números, quer dizer, da regra de formação, poderá contar em qualquer base, binária, octal, hexadecimal ou qualquer outra.
A regra é a seguinte: esgotados os algarismos da base no processo de contagem, volta-se ao primeiro algarismo e acrescenta-se uma unidade à ordem (ou posição, daí o nome posicional) imediatamente superior, que fica à esquerda. Agora fica claro o porquê de 10 e não 11 ou 12. Uma vez atingido o nove no processo de contagem, volta-se ao início da base, 0, e acrescenta-se uma unidade à ordem superior, que até esse momento não tinha algarismo algum. A partir daí o processo de contagem continua, quer dizer, a ordem mais baixa é acrescida de uma unidade a cada avanço na contagem até atingir nove. No próximo incremento, retorna a zero novamente e uma unidade é acrescida à ordem seguinte, que agora contém dois, formando 20. E assim indefinidamente...

A decomposição de um número de acordo com a notação posicional

No sistema de notação posicional, cada ordem ou posição tem seu valor ponderado à uma potência da base, segundo a ordem que ocupa. Para sabermos que quantidade representa um determinado número basta decompormos o número levando em conta a ordem de cada algarismo. Por exemplo, o número 26 pode ser decomposto assim:

`(2*10^1)+(6*10^0)=(2*10)+(6*1)=20+6=26`

Já o número 2654 fica assim:

`(2*10^3)+(6*10^2)+(5*10^1)+(4*10^0)=2000+600+50+4=2654`

Observe atentamente cada parênteses. Veja que temos um par de parênteses para cada dígito do número — um par para cada ordem — e que cada dígito multiplica a potência de dez que corresponde àquela ordem. Note também que a potência de dez da primeira ordem é zero e não um. Aliás, praticamente tudo em computação começa em zero.
Na próxima postagem dessa série vamos ver como isso funciona na base dois e algumas coisas mais. Até lá!

Verifique seu progresso!


A importância do sistema de numeração binário, tanto para a computação quanto para os sistemas digitais em geral, deve-se:

a) Ao fato de que é mais fácil expressar quantidades nessa base.
b) A podermos associar os algarismos da base a dois estados elétricos.
c) À facilidade de se realizar operações matemáticas nessa base.
d) Ao fato de haver mais precisão nas operações envolvendo binários.


No sistema posicional, cada algarismo representa uma quantidade que pode ser avaliada:

a) Dividindo o algarismo pela potência da base correspondente à ordem.
b) Somando o algarismo à potência da base correspondente à ordem.
c) Multiplicando o algarismo pela potência da base correspondente à ordem.
d) Multiplicando o algarismo pela base elevada a zero.

quarta-feira, 24 de setembro de 2014

OpenDSA: Projeto Aberto e Interativo para Ensinar Algoritmos e Estruturas de Dados

Buscando me aprofundar no importante tema que abrange análise de algoritmos e estruturas de dados resolvi fazer umas buscas na net. E como sempre, a gente encontra muito mais do que procura. Me deparei com um projeto coordenado pelo Dr Clifford Shaffer, do Departamento de Ciência da Computação do Instituto Politécnico e Universidade Estadual da Virgínia, nos Estados Unidos. O projeto intitula-se OpenDSA: Open Source Interactive Data Structures and Algorithms e, em poucas palavras, trata-se de um e-book on line baseado no livro Data Structures and Algorithm Analysis, de autoria do próprio professor. Mas não é um e-book comum, daqueles que você baixa e lê, apenas. O projeto coordenado pelo Dr Shaffer oferece ao leitor um ambiente interativo no qual o mesmo tem à sua disposição ferramentas de simulação que lhe possibilitam ver os algoritmos em ação, passo a passo, com recursos tais como avançar a simulação, retroceder e por aí afora. Na página do projeto - http://www.algoviz.org/OpenDSA/ - está escrito:

"Nossa meta é desenvolver um livro texto interativo on line completo, para cursos de Estruturas de Dados e Algoritmos. O OpenDSA inclui muitas visualizações e exercícios interativos."

E em outro ponto continua:

"As visualizações e exercícios foram projetadas para serem integradas com tutoriais explicativos, sendo a unidade básica de instrução um 'módulo'. Um módulo é uma página HTML, correspondendo a uma única seção do livro texto, ou a um tópico simples que pode ser parte de uma aula. Os módulos são então agrupados para formar uma instância do livro".

O Dr Shaffer diz ainda que há suporte para instrutores que permite atribuir tarefas e rastrear o progresso dos alunos ao longo do aprendizado. Ele diz ainda:

"Uma vez pronto o OpenDSA incluirá:
  • centenas de módulos instrucionais, onde cada módulo equivale a um tópico, como por exemplo um algoritmo de ordenação, que corresponde a algumas páginas do livro texto, mantendo a mesma qualidade do livro.  Um eTextbook pode ser composto por qualquer combinação entre os módulos e isso é definido por um arquivo de configuração editável, tornando fácil para um instrutor criar um livro texto adequado às necessidades de sua turma.
  •  Cada algoritmo ou estrutura de dados é ilustrada por uma visualização interativa. Os estudantes podem entrar com dados para para testar casos e ver como o algoritmo ou estrutura de dados se comporta em relação àquela entrada, e podem controlar o andamento da visualização.

  • Cada módulo contém múltiplas tarefas interativas que dão ao estudante retorno imediato a respeito de seu desempenho em relação ao material. Estamos falando de muitas centenas de exercícios.
















Tudo isso é oferecido sob licença Creative Commons, o que significa que qualquer um tem acesso ao código fonte, podendo usar e modificar de acordo com seus propósitos e necessidades.

Bem, o que eu posso dizer é que baixei o livro em pdf, na página do projeto mesmo, e é excelente. Mas é claro, está em inglês. Então fiz contato com o Dr Shaffer solicitando permissão para fazer uma tradução do texto. Ele amavelmente agradeceu meu interesse e deu permissão. Isso vai aparecer aos poucos aqui no blog, dentro da minha disponibilidade de tempo.
Enquanto isso, vá lá conferir: http://www.algoviz.org/OpenDSA/