Provas Exercícios Programação Página Principal barra_de_navegacao principal programacao proxima anterior exercicios projetos provas notas

Sistemas de Numeração
Sistema Decimal - usa dez dígitos  0, 1, 2, 3, 4, 5, 6, 7, 8, 9 e a base ou raiz é 10(dez).
Um número maior que 9 é representado usando uma convenção que atribui significado à posição ou lugar ocupado por um dígito no arranjo.
Exemplo.
6903 = 6X103 + 9X102 + 0X101 + 3X100


Sistema Binário - sistema numérico de base(ou raiz) 2, que usa somente dois dígitos numéricos 0 e 1
Vantagem - correspondência biunívoca entre os dois dígitos (números) 0 e 1 e os dois valôres lógicos (não numéricos) de variáveis lógicas 0 e 1.
Exemplo.
100112 = 1X24 + 0X23 + 0X22 +1 X21 + 1X20 = 1910
1,11012 = 1X20 + 1X2-1 + 1X2-2 + 0X2-3 + 1X2-4 = 1,81210
Dígitos à direita da vírgula binária são coeficientes de 2-n, onde n é a distância do dígito da vírgula binária.


Sistemas de Numeração Octal e Hexadecimal
Sistema Octal
Base: 8
Dígitos Numéricos:0, 1, 2, 3, 4, 5, 6, 7
Três dígitos binários podem representar exatamente oito(23) números diferentes.


Sistema Hexadecimal

Base: 16

Dígitos Numéricos: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F

Quatro dígitos binários podem representar exatamente dezesseis(24) números diferentes.

A Tabela da Fig.1 mostra números equivalentes com bases decimal, octal e hexadecimal.

fig1a
Fig.1


Conversão de Bases de Sistemas Numéricos
Conversão entre Números Binários e Decimais
Converte-se a parte inteira e a parte fracionária independentemente e se justapõe os resultados.
Exemplo
Converter 19,6910 para a base 2. A parte inteira é obtida fazendo divisões sucessivas por 2 e tomando-se os restos na ordem inversa para formar o binário equivalente.
 
0
1
2
4
9
19
Dividendo
1
0
0
1
1
 -
Resto

1910 = 100112

A parte fracionária é convertida fazendo-se multiplicação sucessivas por 2 e formando o número binário com as partes inteiras dos resultados das multiplicações.
 
0,69 X 2 = 1,38 1
MSB
0,38 X 2 = 0,76
0
0,76 X 2 = 1,52
1
0,52 X 2 = 1,04
1
LSB
0,6910 = 0,10112
19,6910 = 10011,10112


Conversão Binário para Octal
Agrupar os dígitos binários três a três a partir da vírgula binária em ambas as direções, e substituir cada grupo pelo equivalente octal.
1001111,10110112=117,5548


Conversão Binário para Hexadecimal
Agrupar os dígitos binários quatro a quatro, a partir da vírgula binária, em ambas as direções,e substituir cada grupo pelo seu equivalente hexadecimal.
10011111100,1101001010102 = 4FC,D2A16


Conversão Hexadecimal para Binário
Substituir cada dígito hexadecimal pelo binário equivalente de quatro dígitos.
DEA16 = 1101111010102


Códigos BCD e Refletido(Gray)
A representação binária requer mais de três vezes o número de dígitos da representação decimal.
Na conversão, cada dígito binário afeta cada dígito decimal e vice-versa.


Decimal Codificado em Binário - BCDNo sistema BCD, quatro dígitos binários são usados para representar os dígitos decimais de 0 a 9. A tabela da Fig.2 mostra a representação BCD dos dígitos decimais.

fig2
Fig.2


Para números decimais com mais de um dígito, a cada dígito decimal corresponde um grupo binário da correspondente representação BCD.
Exemplo.
Decimal
4
7
BCD
 0101
0100
0010
0111

542710 =  0101010000100111BCD
Desvantagem: apenas 10 das 16 combinações possíveis de quatro bits são utilizadas.


Código Refletido(Gray)
fig3a

A Fig.3 mostra a formação do Código Refletido para os números decimais de 0 a 7.

Para a obtenção do código deve-se fazer um rebatimento das palavras códigos e completar os códigos acima do "espelho" com 0 a esquerda e os códigos abaixo do espelho com 1 a esquerda.

Propriedades.
(1) a representação de cada número difere em apenas um dígito das representações
dos números imediatamente menor e maior.
(2) em qualquer ponto do desenvolvimento do código, o primeiro e o último código
diferem em apenas um dígito.

Fig.3


Código Johnson
O código Johnson é um código numérico de cinco dígitos binários, onde uma palavra código difere das palavras imediatamente próximas em apenas um dígito binário.

Decimal
ABCDE
0
00000
1
00001
2
00011
3
00111
4
01111
5
11111
6
11110
7
11100
8
11000
9
10000

A principal característica do código Johnson é a facilidade de gerar as palavras códigos.



Código Excesso-3
O código Excesso-3 é um código numérico binário que representa cada dígito decimal por um código binário com quatro dígitos. O código Excesso-3 é derivado do código BCD somando 3, (00112), a cada palavra do código BCD.
 
Decimal
Excesso-3
0
0011
1
0100
2
0101
3
0110
4
0111
5
1000
6
1001
7
1010
8
1011
9
1100


Código ASCII
O código ASCII - American Standard Code for Information Interchange - é um código de 7 bits possibilitando a codificação de 128(27) itens de informação.
O ASCII é empregado para troca de informações(dados, controle e comando) entre computadores e periféricos e é um padrão para as redes de comunicação.
 
A tabela da Fig.4 mostra os códigos ASCII.
fig4
Fig.4


Os código de comando e controle estão indicados na Fig.5 abaixo.
fig5
Fig.5

O bit mais significativo do código ASCII é empregado para a deteção de erros através da paridade do código. A paridade da palavra código será par se o número de 1s na  palavra é par e, caso o número de 1s seja ímpar, então a paridade é ímpar.
          Exemplo.
Caractere
ASCII
ASCII 8-bits
Paridade
S
1010011
11010011
ÍMPAR
S
1010011
01010011
PAR


Deteção e Correção de Erros
Sempre que informação é transmitida de um dispositivo(o transmissor) para um outro dispositivo (o receptor), existe a possibilidade que erros possam acontecer, de modo que o receptor não recebe a mesma informação que foi enviada  pelo transmissor. A maior causa de erros de transmissão é ruído elétrico, que consiste de flutuações espúrias na tensão ou corrente que estão presentes em todos sistemas  eletrônicos.

fig6
Fig.6

Um dos mais simples e usados métodos de deteção e correção de erros é o método da paridade, onde  transmissor e receptor concordam sobre a paridade a ser usada na  transmissão - par ou ímpar - e, então, o transmissor acrescenta o bit de paridade para adequar o código à paridade adotada.Quando a informação chega no receptor, o processo inverso é realizado.Caso a paridade esteja incorreta, houve um erro na transmissão.
O método da paridade deteta apenas um erro. Ele não funciona para dois erros.


Códigos Detetores e Corretores de Erros
Os códigos numéricos são adequados à representação dos dígitos decimais, mas são pouco resistentes a erros de transmissão, que podem ocorrer devido a falhas de equipamentos ou a ruídos no canal de transmissão.
Em qualquer sistema físico existe a probabilidade não nula de ocorrer uma falha simples(erro). A probabilidade ocorrer 2 ou mais erros, em geral, é muito menor.


Códigos Detetores de Erros
Num código de 4 dígitos, a ocorrência de erro em um dos dígitos pode resultar em outra palavra do código, incorreta, embora válida.Por exemplo, em BCD, se acontece um erro no dígito menos significativo da palavra 0110 resulta na palavra 0111, que é uma palavra válida do código, provocando interpretação errada da mensagem.
Se um código possui a propriedade de que a ocorrência de um erro simples transforma uma palavra código válida em outra , inválida, então este código é detetor de erro.A figura abaixo mostra alguns exemplos.

fig7

Nestes códigos, a deteção do erro é feita pelo teste da paridade da palavra.Adiciona-se dígitos extras às palavras de modo que o números 1 na palavra seja par(ou ímpar).Em todos os exemplos da Fig.7 a paridade é par.
O código 2 em 5( 2 entre 5 ) consiste de todas as 10 combinações possíveis de dois dígitos 1 em um arranjo de cinco dígitos. Com exceção do código para o dígito 0, este código é ponderado, de pesos (0,1,2,4,7).
O código biquinário é um código ponderado com pesos (5, 0, 4, 3, 2, 1, 0) onde os dois dígitos mais significativos especificam se o arranjo está no intervalo entre 0 e 4, ou no intervalo entre 5 e 9.
O código BCD Par é o BCD com paridade par e é obtido do código BCD acrescentando-se o dígito P, de paridade, que pode ser 0 ou 1, para tornar o número de 1 no arranjo sempre par.

Fig.7

Em qualquer um dos três exemplos, a ocorrência de um erro simples transforma o arranjo válido em outro inválido, possibilitando a deteção do erro.


Chama-se distância entre dois arranjos códigos o número de dígitos que precisam ser complementados em um arranjo para ficar igual ao outro arranjo.Assim, a distância entre os dois arranjos 1010 e 0100 é igual a 3, pois os dois arranjos diferem em três posições.A distância mínima de um código é a menor distância entre duas palavras quaisquer deste código.


Códigos Corretores de Erros
Seja um código formado por duas palavras 000 e 111.Se acontecer um erro simples na primeira palavra, então ela pode mudar para 001, 010 ou 100.A segunda palavra do código pode ser modificada por um erro simples para 110, 101 ou 011.Veja que as palavras erradas em cada caso são diferentes: 001, 010, 100 para erro em 000 e 110, 101 e 011 pare erro em 111, então um erro simples pode ser detectado e corrigido e o código é dito corretor de erro simples.
Em geral, um código é chamado corretor de erro se a palavra correta pode ser obtida de qualquer palavra incorreta.
Se a distância mínima de um código é igual a 3, qualquer erro simples muda a palavra válida em outra inválida, que está a uma distância 1 da palavra original correta e à distância 2 de qualquer outra palavra código válida.Assim, num código de distância mínima 3, qualquer erro simples pode ser corrigido ou qualquer erro duplo pode ser detetado.Do mesmo modo, um código de distância mínima 4 pode corrigir erros simples e detetar erros duplos e triplos.


Códigos Cíclicos
A distância entre duas seqüências binárias com comprimento igual, dentro de um código, considerando os 0s e 1s, é chamada distância de Hamming.
A distância de Hamming representa a diferença entre os bits de uma seqüência para outra.O código BCD é um código com distância de Hamming variável, isto é, de uma palavra código para outra o número de dígitos que mudam não é constante.
Em várias aplicações se usam códigos com distâncias de Hamming constantes e igual a unidade.Nesses códigos, palavras sucessivas diferem, entre si, por um único dígito.Códigos com distância de Hamming igual a unidade são chamados de códigos cíclicos ou de reflexão.



Código de Hamming
Seja m uma mensagem de k bits que deve ser codificada e seja G a matriz geradora do código utilizado.As palavras códigos v=[v1v2...vn] com (n>k) são geradas pelo produto matricial lógico v=m.G, onde o produto matricial lógico é definido através das operações lógicas AND e XOR.
Pode-se definir uma matriz H, tal que
G.Ht=[00...0] (n-k zeros)
Assim, se v é uma palavra código válida, então v.Ht=[00...0], caso contrário o produto v.Ht não é nulo e é denominado síndrome do erro(s).
Um código é denominado de código Hamming se as colunas de sua matriz H são formadas por todas as
2(n-k)-1
possíveis palavras de (n-k) bits, excetuada a palavra nula.
Note que H é uma matriz de (n-k) linhas e 2(n-k)-1 colunas, portanto n=2(n-k)-1.
Se (n-k)=2 , n=3, k=1, então
H=

1
0
1

0
1
1
G.Ht=[0 0] e G=[1 1 1]
v=[v1 v2 v3]=[m1].[1 1 1]=[m1 m1 m1]
isto é, como o bit m1 pode assumir os valores 0 e 1, o código é formado pelas palavras [0 0 0 ] e [1 1 1]. Observe que a distancia entre as palavras códigos é 3, ou seja, o código é capaz de corrigir um erro.
Se (n-k)=3, n=7, k=4, então
H=

1
0
0
0
1
1
1

0
1
0
1
0
1
1
0
0
1
1
1
0
1

G.Ht=[0 0 0]

G=

0
1
1
1
0
0
0

1
0
1
0
1
0
0
1
1
0
0
0
1
0
1
1
1
0
0
0
1

v=[v1 v2 v3 v4 v4 v6 v7]=[m1 m2 m3 m4].G=[m2m3m4 m1m3m4m1m2m4m1 m2 m3 m4]
Assim, o bit v1 forma paridade par com os bits v5, v6 e v7, o bit v2 com os bits v4, v6 e v7 e o bit v3 com v4, v5 e v7.
O código Hamming completo para os 10 dígitos binários, com n=7 e k=4 é dado na tabela abaixo. Note que a distância mínima do código é 3, isto é, pode corrigir qualquer erro simples.

Dígito Decimal
Código Hamming
v1
v2
v3
v4
v5
v6
v7
0
0
0
0
0
0
0
0
1
1
1
1
0
0
0
1
2
1
1
1
0
0
0
1
3
0
0
1
0
0
1
1
4
1
0
1
0
1
0
0
5
0
1
0
0
1
0
1
6
0
1
1
0
1
1
0
7
1
0
0
0
1
1
1
8
0
1
1
1
0
0
0
9
1
0
0
1
0
0
1

Suponha que a palavra v=1001101 foi recebida. A operação v.Ht=s produz:

[1 0 0 1 1 0 1].


0
1
1

1
0
0
1
1
0
1
1
0

=[111 11 111]=[1 0 1]=s

s pode ser identificada como a quinta coluna da matriz H( ou a quinta linha da transposta de H), o que indica erro na posição v5 da palavra recebida, ou seja, a palavra transmitida foi 1001001. Se uma palavra válida for recebida, então s=[0 0 0].


varius1 Questões de Revisão
Resolva on-line  questões sobre sistemas numéricos, conversão entre sistemas numéricos, códigos e deteção e correção de erros.



Códigos de Barras
Códigos de Barras e Scanners de Código de Barras
Várias caixas registradoras e pontos-de-vendas identificam os produtos que estão vendendo através da leitura óptica de um código de linhas impressas em rótulos ou na embalagem do produto.O código formado por linhas claras e escuras é chamado código de barras. Um código de barras típico é mostrado na Fig.1.

fig8
Fig.8
Códigos de barras geralmente são horizontais com barras verticais alternadas escuras e espaços claros.Os dados são codificados variando as larguras dessas barras e espaços. Para ler um dado, um scanner é movido sobre o código de barras por um operador ou um feixe de luz é emitido pelo scanner sobre o código de barras.
Existem vários padrões de códigos de barras.Os principais são os seguintes:
              • MSI
              • UPC(Universal Product Code)
              • EAN(European Article Number)
              • CODABAR
              • 2-of-5
              • 2-of-5-Interleaved
              • Code 39
Especificações detalhadas e tolerâncias dos vários códigos de barras não existem. A falta dessas especificações possibilita amplas variações em um código de barras simples.Como resultado, qualquer scanner de código de barras deve ser projetado para manipular as diversas variações do código de barras.
Os primeiros scanners (leitores) de códigos de barras tinham uma fonte e um detetor de luz(ópticos) no mesmo equipamento.A luz emitida pelo emissor(fonte) passava por uma pequena abertura, localizada na extremidade do equipamento.O feixe óptico(de luz) atinge o código de barras e é refletido, pela mesma abertura, para o detetor de luz.Geralmente, a fonte de luz é ligada a extremidade do leitor através de fibra óptica e esta mesma fibra é usada pela luz refletida no código de barras para alcançar o detetor.
A abertura de um leitor refere-se ao diâmetro da janela na extremidade do leitor pode onde passa a luz refletida. A abertura determina quanto do código de barras o leitor verá.Não deve ser confundida a abertura do leitor e a janela na extremidade leitora.A janela do leitor é escolhida de modo que todo o código seja visto pela abertura do scanner.
A quantidade de luz que atinge o detetor depende do tamanho da abertura do leitor.Um leitor com grande abertura permite que grande quantidade de luz alcance o detetor, enquanto que um pequena abertura deixa pouca luz chegar ao detetor.Como o detetor tem uma faixa de luz nominal ao qual responde, leitores com aberturas menores podem precisar de mais luz da fonte que aberturas maiores, para atender aos requisitos de luz do detetor.Em geral, leitores com pequenas abertura consomem mais luz da fonte que os scanners com maiores aberturas.
Alguns códigos de barras podem ser lidos melhor por leitores com maiores aberturas enquanto para outros códigos de barras, pequenas aberturas são melhores.A Fig.9 abaixo mostra como funciona.

Na figura temos dois tipos de abertura: na superior, um leitor com abertura grande e, na inferior, o leitor tem uma pequena abertura.

Se abertura do leitor fôr muito grande e as barras com larguras muito estreitas, então pode ocorrer que o scanner não reconheça as barras.Por exemplo, se as barras têm larguras iguais a 4X10-3 polegadas(aproximadamente, 9mm) e abertura do leitor é 10X10-3 polegadas (em torno de 22,5mm), então 60% da abertura refletirá a luz dos espaços em branco ao lado de cada barra.A luz detectada pode não diminuir para um nível que permitirá a barra ser reconhecida.
Se a abertura fôr escolhida muito pequena, então qualquer marca ou borrão impresso, como um ponto de tinta, na região das barras, pode ser reconhecida como uma barra estreita; ou uma falha de tinta na barra ser reconhecida como um espaço.

Contraste ou tolerância de reconhecimento e consumo de potência formam o critério de seleção para a escolha da abertura de um scanner em relação a determinado código de barras. Então, a abertura do leitor deve ser bastante pequena para reconhecer as barras e larga o suficiente para tolerar erros de impressão. O consumo de potência óptica deve ser aceitável para aplicação desejada.

fig9
Fig.9

Para decodificar a informação do código de barras, as larguras relativas de barras claras e escuras devem ser determinadas. Se a velocidade do leitor sobre o código de barras fôsse constante, a distância percorrida pelo leitor poderia ser medida linearmente e as larguras seriam expressas em milésimos de polegadas. Porém, a velocidade do leitor não é constante. A velocidade de varredura está na faixa de 76 a 760 mm/seg.
Desde que o movimento do leitor é variável, as larguras das barras são determinadas medindo-se o tempo relativo em que o leitor as vê.Isto é feito através da amostragem da saída do leitor em uma taxa constante e comparando a taxa de mudança entre barras claras e escuras com essa taxa constante.

fig10Fig.10

Quando o leitor é movimentado sobre o código de barras, como mostrado na Fig.10a, o sinal elétrico é produzido pelo scanner apresenta a forma da Fig.10b.Esse sinal é convertido para o sinal digital mostrado na Fig.10c, e interpretado para determinar o caractere apropriado representado pelo código de barras. Cada espaço claro e escuro no código de barras é igual ou maior que uma unidade de tamanho chamado módulo.

Períodos de sinais elétricos não são medidos em termos de polegadas ou centímetros, mas em termos de tempo.Para produzir o sinal, o scanner é movimentado através do código de barras com certa velocidade.Se a velocidade do scanner fôr conhecida e constante, o sinal poderia ser dado em polegadas ou centímetros com precisão.As larguras das barras e espaços então seriam determinadas e comparadas.Desde que a velocidade do scanner não é conhecida, a largura de espaços e barras é expressa como uma função do tempo.A velocidade do scanner nem é conhecida nem constante sobre o código de barras.Mesmo que a velocidade do scanner fôsse constante, dimensões de larguras diferentes entre diferentes tamanhos de códigos de barras poderiam produzir sinais de larguras variáveis em termos de tempo.

Uma velocidade de 76 a 760mm/s é tolerável para maioria dos operadores e tipos de códigos.


Isto representa uma relação variável de 1 para 10.Desde que a variação de módulo na Fig.10a é apenas 2 para 1, a medida do módulo individual é desprezível.Assim, a comparação da largura do módulo é a única solução possível.
Para o código de barras da Fig.10, o caractere é representado por 7 bits.Sete bits fornecem 128 combinações diferentes.Contudo, neste caso, outras restrições são impostas ao código, como permitir auto-detecção.Isto limita as possibilidades de variações de combinações para 20 e a decodificação pode ser simplificada.Em lugar de usar as larguras de tempo representadas por t1, t3, t4, t5, e t6 como aproximadamente iguais, e metade das larguras representadas por t2 e t7, que poderia fornecer um numéro binário 0100001, uma maneira diferente é usada.
Os tempos ímpares representando as barras são comparados um ao outro, em base de par-a-par.A possibilidade para cada comparação é que o segundo tempo é igual, menor ou maior que o primeiro tempo.
Exemplos:
                1. t1 : t3 igual
                2. t3 : t5 igual
                3. t5 : t7 maior
Do mesmo modo, tempos pares representando espaços podem ser comparados.
Exemplos:
                1. t2 : t4 menor
                2. t4 : t6 igual
Para entender esse método, dígitos podem ser designados para essas relações comparativas.
                • igual é 1
                • maior é 2
                • menor é 0
O resultado das comparações acima seria o número 11201.Este número é menor em tamanho que o número 0100001.O número 11201 poderia ser usado com um ponteiro de uma tabela para obter o caractere resultante.A vantagem desse método é que a tabela pode ser dividida em cinco partes.Quando cada comparação é feita, o número de possibilidades é reduzido de modo que a parte da tabela a ser considerada pode ser reduzida até finalmente a quinta comparação localizar o número exato para obter o dígito.Se a interpretação binária fôr usada, o dígito não pode ser obtido até que todos os tempos sejam apresentados(ou seja, o caractere completo seja lido).

barra_de_informacao principal programacao proxima anterior exercicios projetos provas avaliacoes email

 

Atualizada em 30/08/11

apple_logo