SlideShare ist ein Scribd-Unternehmen logo
1 von 16
Downloaden Sie, um offline zu lesen
M IN I ST É RI O D A E DU C AÇ ÃO
                    UN I VE R SI D AD E A B ER T A DO B RA S IL – U A B
    INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE MATO GROSSO – IF - MT
                                    DIRETORIA DE ENSINO




CURSO SUPERIOR DE TECNOLOGIA EM SISTEMAS PARA
                                 INTERNET


            MODALIDADE A DISTÂNCIA - TSIAD




                         DISCIPLINA: Algoritmos




      Professor Autor:
                          Evandro César Freiberger
                           João Paulo Delgado Preti




                                      2009/1
Unidade II – Representação da Informação
                           no Computador



       APRESENTAÇÃO                                         3
       2. REPRESENTAÇÃO DA INFORMAÇÃO NO COMPUTADOR         3
             2.1 REPRESENTAÇÃO DE VALORES NUMÉRICOS         3
                   2.1.1 BASE HEXADECIMAL                   5
             2.2 TABELA DE CONVERSÃO                        7
                   2.2.1 AGRUPAMENTOS DE BITS CONHECIDOS    7
             2.3 REPRESENTAÇÃO DE CARACTERES                7
             2.4 REPRESENTAÇÃO DE VALORES LÓGICOS           8
             2.5 REPRESENTAÇÃO DE CORES                     8
             2.6 REPRESENTAÇÕES NUMÉRICAS COM SINAL         8
                   2.6.1 VALORES INTEIROS COM SINAL         9
                   2.6.2 VALORES NÃO INTEIROS              10
                   2.6.3 INSTRUÇÕES DE MÁQUINA             11
       BIBLIOGRAFIA                                        16




Algoritmos                                                  2
APRESENTAÇÃO
       Utilizaremos os ícones abaixo para que você facilmente localize aspectos
importantes do conteúdo:
                  Utilizado para apresentar uma definição.
                  Utilizado para apresentar uma dúvida pertinente ao contexto.
                  Utilizado para indicar um aviso.
                  Utilizado para indicar um ponto crítico ou problema a ser
                  considerado.
                  Utilizado para indicar uma referência na Internet.

       2. Representação da Informação no Computador
       Como foi apresentado anteriormente, os computadores digitais usam a base binária
na representação e processamento de todas as informações manipuladas.
       Entender a base binária nos ajudará entender como funcionam as principais tarefas
de um computador.

       2.1 Representação de Valores Numéricos
       Nessa seção iremos entender como são representadas as informações no
computador digital. Iniciaremos com a representação de valores numéricos (valores
inteiros sem sinal, valores inteiros com sinal e valores não inteiros), depois vamos
conhecer outras representações, tais como: caracteres, cores e instruções de máquina.

             Para facilitar a compreensão da base binária primeiro faremos uma revisão na
base numérica decimal, a base usada no nosso cotidiano para representação de
números. É formada por 10 dígitos: 0, 1, 2, 3, 4, 5, 6, 7, 8 e 9. Por ser a base do nosso dia
a dia, a maioria de nós nos esquecemos de como os valores são obtidos a partir de um
conjunto de dígitos decimais, por exemplo, porque a junção dos dígitos “1” com “0” com
“0” formam o valor 100 (cem). Vejamos:
              100 = 1²0¹0º = 1 x 10² + 0 x 10¹ + 0 x 10º
       Assim temos: 100 + 0 + 0 = 100
       Obs: os índices iniciam em zero na extremidade direita e crescem para a
extremidade esquerda; o valor dez é decorrente da base decimal.
              123 = 1²2¹3º = 1 x 10² + 2 x 10¹ + 3 x 10º
       Assim temos: 100 + 20 + 3 = 123
              1235 = 1³2²3¹5º = 1 x 10³ + 2 x 10² + 3 x 10¹ + 5 x 10º
       Assim temos: 1000 + 200 + 30 + 5 = 1235
       Agora vamos entender como funciona a base binária que é formada por apenas
dois dígitos: 0 e 1, com esses dois dígitos são representadas todas as informações que
são manipuladas pelo computador. Para facilitar nós iremos analisar a representação de

Algoritmos                                                                                 3
números inteiros positivos primeiramente. Analogamente à base decimal, os valores são
obtidos de uma cadeia de zeros e uns binários. Veja exemplos:

              A cadeia “10” (lê-se: um zero e não dez, lembre-se!), qual será o valor
numérico (base decimal) representado pela seqüência binária?
               10 = 1¹0º = 1 x 2¹ + 0 x 2º = 1 x 2 + 0 x 1
               = 2 na base decimal

             A cadeia “11” (lê-se um um e não onze).
               11 = 1¹1º = 1 x 2¹ +1 x 2º = 1 x 2 + 1 x 1
               = 3 na base decimal

             A cadeia “1000” (lê-se um zero zero zero e não mil).
               1000 = 1³0²0¹0º = 1 x 2³ + 0 x 2² + 0 x 2¹ + 0 x 2º
               =1x8+0x4+0x2+0x1
               = 8 na base decimal

             A cadeia “1000” (lê-se um zero zero um e não mil e um).
               1001 = 1³ 0² 2¹ 1º = 1 X 2³ + 0 X 2² + 0 X 2¹ + 1 X 2º = 1 x 8 + 0 x 4 + 0 x 2 + 1 x 1
       = 9 na base decimal
       Nos exemplos acima estávamos preocupados em obter um valor decimal (base
cotidiana) a partir de uma seqüência de dígitos binários. Agora vamos obter dígitos
binários a partir de um valor decimal. Para isso vamos usar a operação de divisão,
dividiremos o valor decimal por dois (base binária) varias vezes até obtermos a seqüência
completa. Uma observação importante é que usaremos a divisão inteira e não a divisão
fracionada. Por exemplo:
       5 / 2 = 2,5 na divisão fracionada
       5 / 2 = 2 com resto 1 na divisão inteira
       Resultado = 101 (lê-se um zero um)
       Vamos entender o que foi feito. A primeira divisão, dividiu o valor 5 por 2 (divisão
inteira), o resultado foi 2 e resto 1. A segunda divisão tomou o resultado da primeira, no
caso 2 e dividiu por 2, o resultado foi 1 e resto 0. A terceira divisão, tomou o resultado da
segunda, no caso 1 e dividiu por 2, o resultado foi 0, visto que não é possível realizar essa
divisão inteira, então o resultado é 0 e resto 1. Por ultimo pega-se os restos das divisões
no sentido do ultimo resto para o primeiro e essa é a seqüência binária que representa o
valor 5 decimal.
       Vamos a outro exemplo.
       Assim a seqüência binária que representa o valor inteiro 13 é
1101. Vamos verificar se o resultado está correto? Para isso temos que
fazer a operação inversa, ou seja, transformar a seqüência binária em
Algoritmos                                                                                         4
um número decimal, se obtivermos o valor 13 a nossa seqüência está correta.
       1101 = 1³1²0¹1º = 1 x 2³ + 1 x 2² + 0 x 2¹ + 1 x 2º = 1 x 8 + 1 x 4 + 0 x 2 + 1 x 1
       = 8 + 4 + 0 + 1 = 13

              2.1.1 Base Hexadecimal
       Outra base numérica muito usada na computação é a base hexadecimal. Essa
base foi desenvolvida para que grandes cadeias de binários pudessem ser visualizadas
de forma mais amigável. O computador manipula muito bem o binário, contudo o ser
humano tem muita dificuldade, principalmente quando as cadeias de binários tornam
extensas. Outra característica dos valores na base hexadecimal é que são facilmente
convertidos para binários ou vice-versa, não necessitando fazer conversões para a base
decimal. Vamos conhecer as características dessa base numérica.
       Possui 16 símbolos: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E e F, onde:
                      A = 10
                      B = 11
                      C = 12
                      D = 13
                      E = 14
                      F = 15, todos em valores decimal
       Dígitos Normais + 6 letras do alfabeto.
       As regras de conversão para a base decimal são as mesmas da base binária, o
que muda é a base, veja exemplo abaixo:
       O valor 453 na base hexadecimal representa que valor decimal?
       453 = 4²5¹3º = 4 x 16² + 5 x 16¹ + 3 x 16º = 4 x 256 + 5 x 16 + 3 x 1 = 1024 + 80
       + 3 = 1107 na base decimal
       Agora vamos obter a representação hexadecimal de um valor expresso em base
decimal, ou seja, vamos converter um valor decimal para um valor hexadecimal.
              170 / 16 = 10 resta 10
              10 / 16 = 0 resta 10
       Assim os restos são 10 e 10, como o valor 10 é representado pela letra A o símbolo
hexadecimal que representa o valor decimal 170 é AA.
       Outro exemplo:
                                  180 / 16 = 11 e resto 4
                                  11 / 16 = 0 e resto 11

       Os restos obtidos na ordem inversa de calculo foram 11 e 4, como o valor 11 é
representado pela letra B, o resultado da conversão é B4.


Algoritmos                                                                                   5
Anteriormente apresentamos a base hexadecimal como uma base opcional em
visualizações e grandes cadeias de binários, assim muitas interfaces de dispositivos
eletrônicos, ao invés de serem configurados e/ou manipulados diretamente em binários,
são manipulados em hexadecimal. Contudo os dispositivos continuam entendendo
binários, o que vai existir é um conversor de hexadecimal para binário e um conversor de
binário para hexadecimal. Vamos analisar o exemplo a seguir.
       Se tivermos uma cadeia hexadecimal e desejarmos convertê-la para binários, a
maneira mais natural de fazermos isso é converter o hexadecimal para decimal e depois o
decimal para binário. Veja exemplo:
       O valor AA em hexadecimal equivale 170 em decimal e a 10101010 em binário.
Contudo foi desenvolvida uma técnica de conversão de hexadecimal para binário de
forma direta, sem passar pelo decimal. Isso facilita a construção de dispositivos que
embora funcionem em binários, possam ser manipulados através de hexadecimais.
       Acompanhe o seguinte raciocínio:
             1 símbolo hexadecimal representa 16 valores decimais
             4 símbolos binários representam 16 valores decimal 24
             1 símbolo hexadecimal substitui 4 dígitos binários
       Assim, agrupamos os binários em grupos de quatro da direita para a esquerda,
depois calculamos o valor de cada grupo separadamente e substituímos esse valor pelo
símbolo hexadecimal correspondente.




       Outro exemplo:




       Foram inseridos dois zeros à esquerda do último grupo de binários para formar um
grupo de quatro, embora isso não afete o valor.
       3EB = 3 x 162 + E x 161 + B x 160 => 768 + 224 + 11 = 1003
       1111101011= 1 x 29 + 1 x 28 + 1 x 27 + 1 x 26 + 1 x 25 + 0 x 24 + 1 x 23 + 0 x 2 +
                                                                                      2


       1 x 21 + 1 x 20 = 512 + 256 + 128 + 64 + 32 + 0 + 8 + 0 + 2 + 1 = 1003
       A conversão de hexadecimal para binário é bastante simples, cada símbolo
hexadecimal produz um grupo de quatro binários que representam um valor entre 0 e 15.
       O valor B4 em hexadecimal equivale a 10110100 em binário, veja:



Algoritmos                                                                                  6
1x27+0x26+1x25+1x24+0x23+1x22+0x21+0x20 => 128 + 0 + 32 + 16 + 0 + 4 + 0
+ 0 = 180
       Com da tabela de conversão abaixo é possível converter qualquer valor
hexadecimal para binários ou vice-versa, sem fazer cálculos e também com baixa
probabilidade de erros.

       2.2 Tabela de conversão
                             Decimal Hexadecimal      Binário
                               00         0            0000
                               01         1            0001
                               02         2            0010
                               03         3            0011
                               04         4            0100
                               05         5            0101
                               06         6            0110
                               07         7            0111
                               08         8            1000
                               09         9            1001
                               10         A            1010
                               11         B            1011
                               12         C            1100
                               13         D            1101
                               14         E            1110
                               15         F            1111
             2.2.1 Agrupamentos de bits conhecidos
       Um dígito binário é chamado de bits – representa dois valores 2¹
             4 bits => nibble – representa 16 valores 24
             8 bits => byte – representa 256 valores 28
             1024 bytes => Um Kilobyte => 1KB = 210 = 1024 bytes
             1024 Kilobytes => Um Megabyte => 1MB = 220 = 1.048.576 bytes
             1024 Megabytes => Um Gigabyte => 1GB = 230 = 1.073.741.824 bytes
             1024 Gigabytes => Um Terabyte => 1TB = 240 = 1.099.511.627.776 bytes
       Até agora usamos os bits para representarem números inteiros sem sinal, contudo
os computadores usam os bits para representar todas as informações que ele manipula.
O que se pode representar com N bits?
       2N coisas.
       Quais coisas?
       Números! Caracteres! Pixeis! Valores Monetários! Posições! Instruções! ...
       Bits podem representar qualquer coisa!

       2.3 Representação de Caracteres
       Um dos padrões mais conhecidos de representação de caracteres é o ASCII –
American Standard Code for Information Interchange. Esse padrão usa um byte para
representar cada caractere e tem a possibilidade de representar 256 caracteres, visto que
um byte permite 256 combinação de valores ( 0 a 255).
       Exemplos de codificações da tabela ASCII:

Algoritmos                                                                             7
Caractere   Dec.   Hex.     Binário
                           Espaço      32     20     0010 0000
                              !        33     21     0010 0001
                              "        34     22     0010 0010
                              #        35     23     0010 0011
                             ...       ...    ...        ...
                              0        48     30     0011 0000
                              1        49     31     0011 0001
                              2        50     32     0011 0010
                              3        51     33     0011 0011
                             ...       ...    ...        ...
                              A        65     41     0100 0001
                              B        66     42     0100 0010
                             C         67     43     0100 0011
                             ...       ...    ...        ...
                              a        97     61     0110 0001
                              b        98     62     0110 0010
                              c        99     63     0110 0011
                             ...       ...    ...        ...
       Outra codificação para caracteres é o padrão Unicode, que usa dois bytes para
representar cada caractere, isso possibilita 65536 símbolos.

       2.4 Representação de Valores Lógicos
       Os valores lógicos serão muito usados nessa disciplina de algoritmo, eles
representam dois valores: verdadeiro e falso. Esses valores poderiam ser representados
apenas por um bit, contudo os computadores possuem uma quantidade mínima de
combinação de bits, chamada de “palavra”. A palavra de um computador é a quantidade
padrão de bits que são envolvidas nas operações de processamento. Os computadores
usam no mínimo uma palavra ou uma combinação de várias palavras para representarem
as informações envolvidas em suas operações. Assim os valores lógicos, apesar de
poderem ser representados apenas com um bit, normalmente são representados com um
byte, que é o tamanho padrão de palavra para a maioria dos computadores.

       2.5 Representação de Cores
       Assim como os caracteres, as cores podem ser representadas por vários padrões.
Um dos mais conhecidos é o padrão RGB (Red, Green, Blue), que usa três bytes para
representar as cores primárias (Vermelho, Verde e Azul). Cada byte pode variar entre 0 a
255, assim a combinação desses três bytes produzem uma mistura de cores primárias e
resultam em cores derivadas. Normalmente os valores RGB’s são visualizados em
interfaces de software através de valores em hexadecimais. Por exemplo: A45B3E, assim
a intensidade da cor vermelho é A4, da cor verde é 5B e da cor azul é 3E. Outro exemplo:
se definirmos 00 para as três cores, então teremos o preto, por outro lado, se definirmos
FF (255) para as três cores teremos o branco.

       2.6 Representações numéricas com sinal

Algoritmos                                                                             8
A representação numérica binária conhecida até agora não atende todas as
necessidades de representação de números. Além dos números naturais, precisamos
representar valores inteiros com sinal e valores não inteiros. Existem vários métodos de
representação numérica, vamos ver alguns deles para que possamos entender de forma
geral, como os números são representados.

              2.6.1 Valores Inteiros com Sinal
       Um dos métodos mais usados para representação de números inteiros com sinal é
o complemento de dois. Nesse método o bit mais significativo sinaliza o sinal, se for zero
o número é positivo, se for um o número é negativo. É importante termos em mente que
em função da representação de valores positivos e negativos, a faixa de valores de uma
palavra muda. Veja o exemplo de uma palavra de oito bits, naturalmente ela representaria
256 valores possíveis, se usarmos o valor numérico seria possível representar os valores
de 0 a 255. Quando precisamos representar valores negativos, esse mesmo byte
representará valores entre -128 a 0 e de 0 a 127. Assim, para uma quantidade de N bits,
teremos a possibilidade de expressar valores entre: -2(n-1) e 2(n-1) -1.
       Vamos aos passos do método:
              Inverta cada bit da cadeia de bits desejada, isso significa que onde tem zero
              fica um e onde tem um fica zero;
              Some um ao resultado obtido no passo anterior;
       Veja exemplo:
       O valor 10 expresso em um padrão binário de 8 bits: 00001010
                                   Valor positivo   00001010
                                   Inversão         11110101
                                   Soma Um          00000001
                                   Resultado        11110110
       Assim, o valor -10 decimal expresso em binário usando o método de complemento
de dois é: 11110110.
       Outra maneira de usar o método complemento de dois é executar o seguinte
procedimento:
              Tome o padrão binário do número positivo;
              A partir do bit menos significativo para o mais significativo (da direita para a
              esquerda) copie os bits até encontrar o primeiro bit 1, inclusive ele. Depois
              para os demais inverta todos os bits que restarem a esquerda.


                                  Valor original   00001010
                                  Cópia / Inversão 11110110
                                  Resultado        11110110
       Vamos encontrar o valor negativo do número 79:

Algoritmos                                                                                  9
Valorpositivo    01001111
                                 Cópia / Inversão 10110001
                                 Resultado        10110001
       Agora, vamos fazer o inverso, dado um valor negativo, vamos obter o valor
positivo. Funciona da mesma maneira, copiamos os bits da direita para a esquerda até
encontrar o bit um, inclusive ele, os demais serão invertidos.
                                 Valor negativo   10110001
                                 Cópia / Inversão 01001111
                                 Resultado        01001111
             2.6.2 Valores Não Inteiros
       Uma das notações mais utilizada para representação de números não inteiros é a
de Ponto Flutuante, que divide cadeia de bits em três termos:
       Sinal Expoente Mantissa
       O sinal é representado por um bit, se zero o número é positivo, se um o número é
negativo. O expoente estabelece a posição do ponto decimal binário e a mantissa
representa o valor a ser representado. Vamos analisar um exemplo, para facilitar
usaremos um byte apenas para representar números não inteiros, na prática os
computadores usam grande cadeia de bits.
       Tomemos a seguinte cadeia de bits: 00101010
                                 Sinal Expoente Mantissa
                                   0     010     1010
       Nesse exemplo estamos adotando três bits para o expoente e quatro para a
mantissa, contudo isso é definido em cada arquitetura de computador. Outro detalhe
importante é que o expoente deve ser um valor inteiro com sinal, então também deve ser
definido o método de representação de inteiros com sinal, nós usaremos o método
complemento de dois, visto que já conhecemos. Vamos analisar os dados do exemplo:
       Sinal 0 significa que o número que está representado é positivo. O expoente 010
resulta em um valor 2 positivo, isso significa que devemos deslocar o ponto decimal duas
casas a direita da mantissa, se fosse negativo o deslocamento do ponto seria a esquerda.
       Vamos agora aplicar essas informações na mantissa.
             Obtenha a mantissa: 1010
             Coloque o ponto decimal binário a esquerda da mantissa
             .1010
             Desloque o ponto decimal segundo o expoente analisado, no nosso caso
             deslocaremos o ponto duas casas a direita, então vamos obter:
             10.10
             Agora vamos obter o valor decimal, para isso temos que considerar o
             seguinte aspecto:

Algoritmos                                                                            10
7   6  5  4  3 2 1 0 1       2   3   4   5   6   7
             27  26 25 24 23 22 21 20 2-1 2-2 2-3 2-4 2-5 2-6 2-7
             128 64 32 16 8 4 2 1 1/2 1/4 1/8 1/16 1/32 1/64 1/128
       Assim se tivermos o padrão: 10.10, vamos obter o valor decimal da seguinte
maneira:
               128   64   32   16   8   4   2   1   1/2   1/4   1/8   1/16   1/32   1/64   1/128
                                            1   0   1     0
                                                2+0+½+¼
                                                2+¾
                                     2,75
       Na verdade continuamos a fazer a conversão de binário para decimal da mesma
maneira que fizemos até agora, porém estamos considerando a parte menor que zero nos
expoentes, veja resolução abaixo:
                      1 x 21 + 0 x 20 + 1 x 2-1 + 0 x 2-2 = 2 + 0 + ½ + ¼ = 2,75
       Se o padrão de bits fosse 10101010, faríamos o mesmo cálculo, porém no final
acrescentaríamos o sinal negativo ao resultado que seria: -2,75.

                2.6.3 Instruções de Máquina
       Até agora nós vimos como as informações são representadas em um computador,
mas será como elas são processadas? Como nós falamos para o computador o que ele
deve fazer? Será que é necessário dizer ao computador o que fazer?
       Não pretendo responder essas questões, mas sim conduzir você a um raciocínio
que o leve a respondê-las. Vejamos, no início dessa unidade iniciamos o texto dizendo
que o grande diferencial dos computadores é a sua capacidade de serem programados e
de sua extrema flexibilidade em resolver as mais diferentes tarefas. Vocês estão
lembrados da idéia de Jacquard (tear configurado com cartões perfurados) e
posteriormente o projeto de Babbage (o projeto da calculadora genérica)? Então o grande
desafio e inspiração desses projetos foi o de produzir máquinas genéricas, que não
precisavam ser reconstruídas para cada nova aplicabilidade desejada. Dessa mesma
maneira os computadores eletrônicos foram projetados. O modelo de arquitetura
formalizado por Von Newman tinha como princípio uma unidade de processamento, uma
unidade de controle, uma unidade de armazenamento e dispositivos de entrada e saída,
basicamente a mesma concepção de Babbage. Veja ilustração a seguir:




Algoritmos                                                                                         11
Figura 1.Representação de uma máquina computacional

         A Unidade Central de Processamento (CPU) é responsável pelo processamento e
controle das atividades que ocorrem no computador. É divida em duas subunidades: a
Unidade de Controle (UC) e a Unidade Lógica e Aritmética (ULA). A UC é responsável
pelo controle das tarefas que ocorrem na CPU e a ULA é onde ocorrem os cálculos e
comparações de dados em processamento. Para que um programa possa ser executado
no computador, este deve ser
carregado para uma região de
armazenamento           onde    a    UC
possa buscar as instruções que
devem ser executadas, essa
região    de     armazenamento        é
denominada             de      Memória
                                             Figura 2.Representação da Unidade Central de Processamento
Principal      (MP),    que    usa    a
tecnologia RAM (Memória de Acesso Aleatório). Além das instruções de um programa, os
dados que são manipulados por esse programa, também ficam armazenados na MP. A
ilustração a seguir, apesar de ser extremamente simplista, visto que na realidade as
CPU’s atuais possuem inúmeros elementos que foram desconsiderados nessa figura,
detalha um pouco melhor os elementos que compõem uma CPU.
         A ilustração anterior mostra que existem elementos tais como: CI (contador de
instruções), RI (registrador de instruções) e R0 ... RN (registradores de uso geral). Os
registradores de uma CPU são acumuladores de valores (alguns gerais outros
específicos) que são usados durante a execução de um programa.
         Cada processador é projetado e fabricado para reconhecer um conjunto de
instruções (comandos). A esse conjunto de instruções é dado o nome de Linguagem de
Máquina, já que é particular para cada modelo de processador. Uma instrução de
máquina é formada por um código, que a identifica, e os operandos da instrução.
Osoperandos são informações adicionais que cada instrução necessita para sua
execução.
         Veja a seguir a estrutura genérica de uma instrução de máquina.

Algoritmos                                                                                                12
Código     Operando 1 Operando 2 Operando 3
       Como todas as informações que um computador reconhece são representadas
com símbolos binários, as instruções de máquina também são. Os códigos das instruções
são valores inteiros sem sinal, os operandos podem ser caracteres, valores inteiros,
valores não inteiros, etc. Veja a seguir um exemplo de uma instrução de máquina.
                           Código    Operando1      Operando2      Operando3
             Decimal         1            1              2              3
             Binário      00000001    00000001       00000010       00000011
       Para entendermos o significado de uma instrução de máquina, precisamos saber
previamente alguns conceitos. O primeiro é o de programa armazenado, que diz respeito
às instruções de máquina que são armazenados em um arquivo, que recebe o nome de
código executável. Quando queremos executar um programa em um computador alguns
passos devem acontecer. Não vamos nesse momento levar em consideração todos os
aspectos da execução de um programa, e sim um conjunto mínimo que nos fará entender
o significado de instruções de máquina. Vamos abstrair, por exemplo, as etapas
realizadas pelo Sistema Operacional, que são importantes, mas nesse momento
aumentaria a complexidade do nosso entendimento. Vamos aos passos de execução de
um programa:
             1. Carregar o programa para a memória principal;
             2. Iniciar o registrador CI com o endereço de memória da primeira instrução
       do programa;
             3. Repetir os passos seguintes até encontrar o fim do programa ou ocorrer
       um erro:
                   a. Carregar a instrução de máquina (copiar) apontada pelo CI para o
                   RI;
                   b. Incrementar o CI para apontar para o próximo endereço da
                   memória (próxima instrução);
                   c. Decodificar (interpretar) a instrução que está no RI;
                   d. Delegar a execução da instrução para a parte correspondente da
                   ULA;
       Os sub-passos do passo 3, são denominados de ciclo de máquina, pois são
repetidos para cada instrução. O ciclo de máquina é formado por três etapas: busca,
decodificação e execução. Vamos conhecê-los em maiores detalhes:
       A busca de instrução é compreendida dos seguintes passos:
             A unidade de controle, através do registrador CI, requer da MP, a próxima
             instrução;



Algoritmos                                                                           13
Quando a MP disponibiliza a instrução, essa é armazenada no registrador
              RI;
              Por último é incrementado o CI, para indicar a próxima instrução;
       A decodificação de instrução é dividida em dois passos:
              A UC identifica a instrução pelo campo código;
              A UC invoca os circuitos da ULA, passando os operandos;
       A execução da instrução é executada pela ULA através dos passos:
              Execução da instrução com os operandos (valores) recebidos da UC;
       Vamos agora adotar um conjunto de instruções de máquina (hipotético) como
sendo uma linguagem de máquina, veja tabela a seguir:
        CódigoDec.   CódigoBin.           Operandos                   Interpretação
             1        00000001        R1       R2       R3     R1= R2 + R3
             2        00000010        R1       R2      Valor   R1= R2 + Valor
             3        00000011        R1       R2       R3     R1= R2–R3
             4        00000100        R1    Endereço    0      R1= [Endereço]
             5        00000101        R1    Endereço    0      [Endereço] =R1
             6        00000110        R1       R2       NI     Se R1= R2 CI =CI + 4 * NI
             7        00000111        R1       R2       NI     Se R1<>R2 CI = CI+4 * NI
             8        00001000     Endereço     0       0      CI = Endereço
             9        00001001        R1       R2       R3     R1= R2 * R3
            10        00001010        R1       R2       R3     R1=R2 div R3(divisão inteira)
            11        00001011        0         0        0     sair

       Exemplo de programa escrito com a linguagem de máquina acima, com valores
representados em base decimal:
                                  Endereço Conteúdo da Memória
                                  0000:0000    4    0 20    0
                                  0000:0004    4    1 24    0
                                  0000:0008    1    4 0     1
                                  0000:0012    5    4 28    0
                                  0000:0016    11   0 0     0
                                  0000:0020    5
                                  0000:0024    7
                                  0000:0028
                                  0000:0032

       Exemplo de programa escrito com a linguagem de máquina acima, com valores
representados em base hexadecimal (endereços) e base binária (instruções):
                     Endereço                Conteúdo da Memória
                     0000:0000    00000100   00000000 00010100     00000000
                     0000:0004    00000100   00000001 00011000     00000000
                     0000:0008    00000001   00000100 00000000     00000001
                     0000:000C    00000101   00000100 00011100     00000000
                     0000:0010    00001011   00000000 00000000     00000000
                     0000:0014    00000101
                     0000:0018    00000111
                     0000:001C
                     0000:0020

             Vamos brincar de CPU. Para facilitar vamos usar para as representações de
informação (dados e endereços) a base decimal, mas sendo consciente que internamente
a representação é binária.
Algoritmos                                                                                     14
Situação 01 – carga do programa para a memória principal
        Registradores   Valores
             CI         0000:0000
             RI                        · Inicia o valor de CI com o endereço da
             R0                        primeira instrução do programa a ser
             R1                        executado
             R2
             R3
             R4
       Situação 02 – execução do primeiro ciclo de máquina
    Registradores   Valores
         CI         0000:0004      · Carrega-se a instrução apontada pelo CI para o RI
         RI          4-0-20-0      · Incrementa CI para o novo endereço
         R0             5          · Decodifica a instrução: carregar o valor do endereço
         R1                        de memória 20 para o registrador R0 (neste caso o
         R2                        valor 5)
         R3
         R4
       Situação 03 – execução do segundo ciclo de máquina
    Registradores Valores
         CI       0000:0008
         RI        4-1-24-0          · Carrega-se a instrução apontada pelo CI para o RI
                                     · Incrementa CI para o novo endereço
         R0            5             · Decodifica a instrução: carregar o valor do endereço de
         R1            7             memória 24 para o registrador R1 (neste caso o valor 7)
         R2
         R3
         R4
       Situação 04 – execução do terceiro ciclo de máquina
   Registradores Valores
             CI     0000:0012       · Carrega-se a instrução apontada pelo CI para o RI
             RI      1-4-0-1        · Incrementa CI para o novo endereço
             R0         5           · Decodifica a instrução: somar o conteúdo do registrador
             R1         7           R0 com o conteúdo do registrador R1 e armazenar o
             R2                     resultado no registrador R4
             R3
             R4          12
       Situação 05 – execução do quarto ciclo de máquina
      Registradores Valores
              CI        0000:0016
                                      · Carrega-se a instrução apontada pelo CI para o RI
              RI         5-4-28-0
                                      · Incrementa CI para o novo endereço
              R0             5        · Decodifica a instrução: descarregar o conteúdo do
              R1             7        registrador R4 no endereço de memória 28
              R2
              R3
              R4              12

                                   Endereço Conteúdo da Memória
                                   0000:0000   4      0    20      0
                                   0000:0004   4      1    24      0
                                   0000:0008   1      4    0       1
                                   0000:0012   5      4    28      0
                                   0000:0016   11     0    0       0
                                   0000:0020   5
                                   0000:0024   7
                                   0000:0028   12
                                   0000:0032

Algoritmos                                                                                       15
Situação 06 – execução do quinto ciclo de máquina
      Registradores       Valores
             CI       0000:0024
             RI        11-0-0-0     · Carrega-se a instrução apontada pelo CI para o RI
             R0           5         · Incrementa CI para o novo endereço
             R1           7         · Decodifica a instrução: encerrar o programa
             R2
             R3
             R4             12


       [ Bibliografia ]


              BROOKSHEAR, J. Glenn. Ciência da Computação – Uma visão
       abrangente. 5. ed. Porto Alegre: Bookman, 2000.
              BARRETO, Jorge Muniz. Notas de aulas do mestrado em Ciência da
       Computação, 2000.
              CORTELAZZO,           Iolanda      B.     C,     link    disponível         na   web:
       http://www.boaaula.com.br/iolanda/hic/hicsum.html, consultado em 20/12/2007.
              MANZANO, Jose Augusto Navarro Garcia.; OLIVEIRA, Jayr Figueiredo de.
       Algoritmos:        Lógica    para    o   desenvolvimento         de    programação       de
       computadores. Érica, 18ª ed.




Algoritmos                                                                                       16

Weitere ähnliche Inhalte

Was ist angesagt?

Was ist angesagt? (19)

Apresentação1 sistemas numéricos
Apresentação1   sistemas numéricosApresentação1   sistemas numéricos
Apresentação1 sistemas numéricos
 
Sistemas de numeração
Sistemas de numeraçãoSistemas de numeração
Sistemas de numeração
 
Ponto Flutuante
Ponto FlutuantePonto Flutuante
Ponto Flutuante
 
Análise de arredondamento em ponto flutuante
Análise de arredondamento em ponto flutuanteAnálise de arredondamento em ponto flutuante
Análise de arredondamento em ponto flutuante
 
Converção de binarios para decimal.
Converção de binarios para decimal.Converção de binarios para decimal.
Converção de binarios para decimal.
 
Sistemas numericos
Sistemas numericosSistemas numericos
Sistemas numericos
 
Sistemas de-numeracao
Sistemas de-numeracaoSistemas de-numeracao
Sistemas de-numeracao
 
Sistemas numericos
Sistemas numericosSistemas numericos
Sistemas numericos
 
Sistemas digitais - Sistemas de Numeração
Sistemas digitais - Sistemas de NumeraçãoSistemas digitais - Sistemas de Numeração
Sistemas digitais - Sistemas de Numeração
 
Apostila digital cefetes
Apostila digital cefetesApostila digital cefetes
Apostila digital cefetes
 
Organização de Computadores - Aula 03
Organização de Computadores - Aula 03Organização de Computadores - Aula 03
Organização de Computadores - Aula 03
 
Sistema binario
Sistema binarioSistema binario
Sistema binario
 
Introducao Computacao Slide 1
Introducao Computacao Slide 1Introducao Computacao Slide 1
Introducao Computacao Slide 1
 
Edg cap01
Edg cap01Edg cap01
Edg cap01
 
PARTE 5 - Bases Especiais
PARTE 5 - Bases EspeciaisPARTE 5 - Bases Especiais
PARTE 5 - Bases Especiais
 
Calculo numerico
Calculo numerico Calculo numerico
Calculo numerico
 
2008 helio2anoaula01
2008 helio2anoaula012008 helio2anoaula01
2008 helio2anoaula01
 
Circuitos Digitais - Revisão
Circuitos Digitais - RevisãoCircuitos Digitais - Revisão
Circuitos Digitais - Revisão
 
Sistemas de numeração
Sistemas de numeraçãoSistemas de numeração
Sistemas de numeração
 

Andere mochten auch

Conversão de base 10 para base 2
Conversão de base 10 para base 2Conversão de base 10 para base 2
Conversão de base 10 para base 2mariafseabra
 
Lista de exercícios sistemas numéricos
Lista de exercícios   sistemas numéricosLista de exercícios   sistemas numéricos
Lista de exercícios sistemas numéricoswelingtonv
 
Exprsaõ logicas e tabela verdade exercicios
Exprsaõ logicas e tabela verdade exerciciosExprsaõ logicas e tabela verdade exercicios
Exprsaõ logicas e tabela verdade exerciciosJoãopedro Machado
 
bit, Byte, KiloByte
bit, Byte, KiloBytebit, Byte, KiloByte
bit, Byte, KiloBytePoliano123
 
Sistemas numericos
Sistemas numericosSistemas numericos
Sistemas numericosyuryja
 
Pronatec hw 2_av1_conversor-binario
Pronatec hw 2_av1_conversor-binarioPronatec hw 2_av1_conversor-binario
Pronatec hw 2_av1_conversor-binarioRosan Tavares
 
Ferramentas de Programação Paralela para Arquiteturas Multicore
Ferramentas de Programação Paralela para Arquiteturas MulticoreFerramentas de Programação Paralela para Arquiteturas Multicore
Ferramentas de Programação Paralela para Arquiteturas MulticoreHelton Ritter
 
Tabela asc ii completa
Tabela asc ii completaTabela asc ii completa
Tabela asc ii completajonh132
 
ACII - SL02 - Representação computacional
ACII - SL02 - Representação computacionalACII - SL02 - Representação computacional
ACII - SL02 - Representação computacionalUFPB
 
Aula expositiva sistemas de numeração indo arábico
Aula expositiva sistemas de numeração indo arábicoAula expositiva sistemas de numeração indo arábico
Aula expositiva sistemas de numeração indo arábicoescolaeliseunarciso
 
Gerenciamento de Projeto Rede de computadores
Gerenciamento de Projeto Rede de computadoresGerenciamento de Projeto Rede de computadores
Gerenciamento de Projeto Rede de computadoresLucas Mendes
 
1 história e características dos microcontroladores pic
1 história e características dos microcontroladores pic1 história e características dos microcontroladores pic
1 história e características dos microcontroladores picAnderson Inácio Morais
 

Andere mochten auch (20)

Conversão de base 10 para base 2
Conversão de base 10 para base 2Conversão de base 10 para base 2
Conversão de base 10 para base 2
 
Lista de exercícios sistemas numéricos
Lista de exercícios   sistemas numéricosLista de exercícios   sistemas numéricos
Lista de exercícios sistemas numéricos
 
Exprsaõ logicas e tabela verdade exercicios
Exprsaõ logicas e tabela verdade exerciciosExprsaõ logicas e tabela verdade exercicios
Exprsaõ logicas e tabela verdade exercicios
 
bit, Byte, KiloByte
bit, Byte, KiloBytebit, Byte, KiloByte
bit, Byte, KiloByte
 
Números decimais gabarito
Números decimais  gabaritoNúmeros decimais  gabarito
Números decimais gabarito
 
Sistemas numericos
Sistemas numericosSistemas numericos
Sistemas numericos
 
Pronatec hw 2_av1_conversor-binario
Pronatec hw 2_av1_conversor-binarioPronatec hw 2_av1_conversor-binario
Pronatec hw 2_av1_conversor-binario
 
Ferramentas de Programação Paralela para Arquiteturas Multicore
Ferramentas de Programação Paralela para Arquiteturas MulticoreFerramentas de Programação Paralela para Arquiteturas Multicore
Ferramentas de Programação Paralela para Arquiteturas Multicore
 
Famílias de computadores
Famílias de computadoresFamílias de computadores
Famílias de computadores
 
asdfafasdfa
asdfafasdfaasdfafasdfa
asdfafasdfa
 
Sistema de numeração
Sistema de numeraçãoSistema de numeração
Sistema de numeração
 
Python 05 - Ponto flutuante
Python 05  - Ponto flutuantePython 05  - Ponto flutuante
Python 05 - Ponto flutuante
 
Tabela asc ii completa
Tabela asc ii completaTabela asc ii completa
Tabela asc ii completa
 
ACII - SL02 - Representação computacional
ACII - SL02 - Representação computacionalACII - SL02 - Representação computacional
ACII - SL02 - Representação computacional
 
Aula expositiva sistemas de numeração indo arábico
Aula expositiva sistemas de numeração indo arábicoAula expositiva sistemas de numeração indo arábico
Aula expositiva sistemas de numeração indo arábico
 
Sistemas digitais 1
Sistemas digitais 1Sistemas digitais 1
Sistemas digitais 1
 
Gerenciamento de Projeto Rede de computadores
Gerenciamento de Projeto Rede de computadoresGerenciamento de Projeto Rede de computadores
Gerenciamento de Projeto Rede de computadores
 
1 história e características dos microcontroladores pic
1 história e características dos microcontroladores pic1 história e características dos microcontroladores pic
1 história e características dos microcontroladores pic
 
Códigos BCD, Gray e ASCII
Códigos  BCD, Gray e ASCIICódigos  BCD, Gray e ASCII
Códigos BCD, Gray e ASCII
 
Memórias
MemóriasMemórias
Memórias
 

Ähnlich wie Representação da Informação no Computador

Apresentação de Sistemas Numéricos - Bits Bytes
Apresentação de Sistemas Numéricos - Bits BytesApresentação de Sistemas Numéricos - Bits Bytes
Apresentação de Sistemas Numéricos - Bits BytesAnne Carolline Oliveira
 
Aula - conversao de bases.pdf
Aula - conversao de bases.pdfAula - conversao de bases.pdf
Aula - conversao de bases.pdfRodneyTeixeira2
 
aula2 de sistemas de numeração para matemática
aula2 de sistemas de numeração para matemáticaaula2 de sistemas de numeração para matemática
aula2 de sistemas de numeração para matemáticaLetciaMontelo3
 
O processamento binário
O processamento binárioO processamento binário
O processamento bináriocabaldreams
 
Cálculo Numérico
Cálculo NuméricoCálculo Numérico
Cálculo NuméricoSandro Lima
 
Apostila de práticas_de_eletrônica_digital_ii2
Apostila de práticas_de_eletrônica_digital_ii2Apostila de práticas_de_eletrônica_digital_ii2
Apostila de práticas_de_eletrônica_digital_ii2sinohara
 
Sistemas de numeração
Sistemas de numeraçãoSistemas de numeração
Sistemas de numeraçãoGoncalo
 
1 - Sistemas de Numeração.ppt
1 - Sistemas de Numeração.ppt1 - Sistemas de Numeração.ppt
1 - Sistemas de Numeração.pptJoberthSilva
 
Aula 3 - Erros.ppt
Aula 3 - Erros.pptAula 3 - Erros.ppt
Aula 3 - Erros.pptJoely14
 
sistemasdenumeracaoutilizadosnacomputacao5.ppt
sistemasdenumeracaoutilizadosnacomputacao5.pptsistemasdenumeracaoutilizadosnacomputacao5.ppt
sistemasdenumeracaoutilizadosnacomputacao5.pptCristian129328
 
FORTRAN 90 - Calculos numericos
FORTRAN 90 - Calculos numericosFORTRAN 90 - Calculos numericos
FORTRAN 90 - Calculos numericosDafmet Ufpel
 
Unidades de Informacao, Sistemas Numericos
Unidades de Informacao, Sistemas NumericosUnidades de Informacao, Sistemas Numericos
Unidades de Informacao, Sistemas NumericosArthur Emanuel
 
Programador de sistemas.pptx
Programador de sistemas.pptxProgramador de sistemas.pptx
Programador de sistemas.pptxBrenoSilva133383
 

Ähnlich wie Representação da Informação no Computador (20)

Apresentação de Sistemas Numéricos - Bits Bytes
Apresentação de Sistemas Numéricos - Bits BytesApresentação de Sistemas Numéricos - Bits Bytes
Apresentação de Sistemas Numéricos - Bits Bytes
 
Aula - conversao de bases.pdf
Aula - conversao de bases.pdfAula - conversao de bases.pdf
Aula - conversao de bases.pdf
 
aula2 de sistemas de numeração para matemática
aula2 de sistemas de numeração para matemáticaaula2 de sistemas de numeração para matemática
aula2 de sistemas de numeração para matemática
 
Unidades
UnidadesUnidades
Unidades
 
O processamento binário
O processamento binárioO processamento binário
O processamento binário
 
Sistema conversões
Sistema conversõesSistema conversões
Sistema conversões
 
Cálculo Numérico
Cálculo NuméricoCálculo Numérico
Cálculo Numérico
 
Apostila de práticas_de_eletrônica_digital_ii2
Apostila de práticas_de_eletrônica_digital_ii2Apostila de práticas_de_eletrônica_digital_ii2
Apostila de práticas_de_eletrônica_digital_ii2
 
Sistemas de numeração
Sistemas de numeraçãoSistemas de numeração
Sistemas de numeração
 
Calculo numérico
Calculo numéricoCalculo numérico
Calculo numérico
 
1 - Sistemas de Numeração.ppt
1 - Sistemas de Numeração.ppt1 - Sistemas de Numeração.ppt
1 - Sistemas de Numeração.ppt
 
Aula 3 - Erros.ppt
Aula 3 - Erros.pptAula 3 - Erros.ppt
Aula 3 - Erros.ppt
 
AC_aula_1-16.ppt
AC_aula_1-16.pptAC_aula_1-16.ppt
AC_aula_1-16.ppt
 
Noções
 Noções Noções
Noções
 
Sistemasde numeracao
Sistemasde numeracaoSistemasde numeracao
Sistemasde numeracao
 
Apostila de eletronica_digital
Apostila de eletronica_digitalApostila de eletronica_digital
Apostila de eletronica_digital
 
sistemasdenumeracaoutilizadosnacomputacao5.ppt
sistemasdenumeracaoutilizadosnacomputacao5.pptsistemasdenumeracaoutilizadosnacomputacao5.ppt
sistemasdenumeracaoutilizadosnacomputacao5.ppt
 
FORTRAN 90 - Calculos numericos
FORTRAN 90 - Calculos numericosFORTRAN 90 - Calculos numericos
FORTRAN 90 - Calculos numericos
 
Unidades de Informacao, Sistemas Numericos
Unidades de Informacao, Sistemas NumericosUnidades de Informacao, Sistemas Numericos
Unidades de Informacao, Sistemas Numericos
 
Programador de sistemas.pptx
Programador de sistemas.pptxProgramador de sistemas.pptx
Programador de sistemas.pptx
 

Representação da Informação no Computador

  • 1. M IN I ST É RI O D A E DU C AÇ ÃO UN I VE R SI D AD E A B ER T A DO B RA S IL – U A B INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE MATO GROSSO – IF - MT DIRETORIA DE ENSINO CURSO SUPERIOR DE TECNOLOGIA EM SISTEMAS PARA INTERNET MODALIDADE A DISTÂNCIA - TSIAD DISCIPLINA: Algoritmos Professor Autor: Evandro César Freiberger João Paulo Delgado Preti 2009/1
  • 2. Unidade II – Representação da Informação no Computador APRESENTAÇÃO 3 2. REPRESENTAÇÃO DA INFORMAÇÃO NO COMPUTADOR 3 2.1 REPRESENTAÇÃO DE VALORES NUMÉRICOS 3 2.1.1 BASE HEXADECIMAL 5 2.2 TABELA DE CONVERSÃO 7 2.2.1 AGRUPAMENTOS DE BITS CONHECIDOS 7 2.3 REPRESENTAÇÃO DE CARACTERES 7 2.4 REPRESENTAÇÃO DE VALORES LÓGICOS 8 2.5 REPRESENTAÇÃO DE CORES 8 2.6 REPRESENTAÇÕES NUMÉRICAS COM SINAL 8 2.6.1 VALORES INTEIROS COM SINAL 9 2.6.2 VALORES NÃO INTEIROS 10 2.6.3 INSTRUÇÕES DE MÁQUINA 11 BIBLIOGRAFIA 16 Algoritmos 2
  • 3. APRESENTAÇÃO Utilizaremos os ícones abaixo para que você facilmente localize aspectos importantes do conteúdo: Utilizado para apresentar uma definição. Utilizado para apresentar uma dúvida pertinente ao contexto. Utilizado para indicar um aviso. Utilizado para indicar um ponto crítico ou problema a ser considerado. Utilizado para indicar uma referência na Internet. 2. Representação da Informação no Computador Como foi apresentado anteriormente, os computadores digitais usam a base binária na representação e processamento de todas as informações manipuladas. Entender a base binária nos ajudará entender como funcionam as principais tarefas de um computador. 2.1 Representação de Valores Numéricos Nessa seção iremos entender como são representadas as informações no computador digital. Iniciaremos com a representação de valores numéricos (valores inteiros sem sinal, valores inteiros com sinal e valores não inteiros), depois vamos conhecer outras representações, tais como: caracteres, cores e instruções de máquina. Para facilitar a compreensão da base binária primeiro faremos uma revisão na base numérica decimal, a base usada no nosso cotidiano para representação de números. É formada por 10 dígitos: 0, 1, 2, 3, 4, 5, 6, 7, 8 e 9. Por ser a base do nosso dia a dia, a maioria de nós nos esquecemos de como os valores são obtidos a partir de um conjunto de dígitos decimais, por exemplo, porque a junção dos dígitos “1” com “0” com “0” formam o valor 100 (cem). Vejamos: 100 = 1²0¹0º = 1 x 10² + 0 x 10¹ + 0 x 10º Assim temos: 100 + 0 + 0 = 100 Obs: os índices iniciam em zero na extremidade direita e crescem para a extremidade esquerda; o valor dez é decorrente da base decimal. 123 = 1²2¹3º = 1 x 10² + 2 x 10¹ + 3 x 10º Assim temos: 100 + 20 + 3 = 123 1235 = 1³2²3¹5º = 1 x 10³ + 2 x 10² + 3 x 10¹ + 5 x 10º Assim temos: 1000 + 200 + 30 + 5 = 1235 Agora vamos entender como funciona a base binária que é formada por apenas dois dígitos: 0 e 1, com esses dois dígitos são representadas todas as informações que são manipuladas pelo computador. Para facilitar nós iremos analisar a representação de Algoritmos 3
  • 4. números inteiros positivos primeiramente. Analogamente à base decimal, os valores são obtidos de uma cadeia de zeros e uns binários. Veja exemplos: A cadeia “10” (lê-se: um zero e não dez, lembre-se!), qual será o valor numérico (base decimal) representado pela seqüência binária? 10 = 1¹0º = 1 x 2¹ + 0 x 2º = 1 x 2 + 0 x 1 = 2 na base decimal A cadeia “11” (lê-se um um e não onze). 11 = 1¹1º = 1 x 2¹ +1 x 2º = 1 x 2 + 1 x 1 = 3 na base decimal A cadeia “1000” (lê-se um zero zero zero e não mil). 1000 = 1³0²0¹0º = 1 x 2³ + 0 x 2² + 0 x 2¹ + 0 x 2º =1x8+0x4+0x2+0x1 = 8 na base decimal A cadeia “1000” (lê-se um zero zero um e não mil e um). 1001 = 1³ 0² 2¹ 1º = 1 X 2³ + 0 X 2² + 0 X 2¹ + 1 X 2º = 1 x 8 + 0 x 4 + 0 x 2 + 1 x 1 = 9 na base decimal Nos exemplos acima estávamos preocupados em obter um valor decimal (base cotidiana) a partir de uma seqüência de dígitos binários. Agora vamos obter dígitos binários a partir de um valor decimal. Para isso vamos usar a operação de divisão, dividiremos o valor decimal por dois (base binária) varias vezes até obtermos a seqüência completa. Uma observação importante é que usaremos a divisão inteira e não a divisão fracionada. Por exemplo: 5 / 2 = 2,5 na divisão fracionada 5 / 2 = 2 com resto 1 na divisão inteira Resultado = 101 (lê-se um zero um) Vamos entender o que foi feito. A primeira divisão, dividiu o valor 5 por 2 (divisão inteira), o resultado foi 2 e resto 1. A segunda divisão tomou o resultado da primeira, no caso 2 e dividiu por 2, o resultado foi 1 e resto 0. A terceira divisão, tomou o resultado da segunda, no caso 1 e dividiu por 2, o resultado foi 0, visto que não é possível realizar essa divisão inteira, então o resultado é 0 e resto 1. Por ultimo pega-se os restos das divisões no sentido do ultimo resto para o primeiro e essa é a seqüência binária que representa o valor 5 decimal. Vamos a outro exemplo. Assim a seqüência binária que representa o valor inteiro 13 é 1101. Vamos verificar se o resultado está correto? Para isso temos que fazer a operação inversa, ou seja, transformar a seqüência binária em Algoritmos 4
  • 5. um número decimal, se obtivermos o valor 13 a nossa seqüência está correta. 1101 = 1³1²0¹1º = 1 x 2³ + 1 x 2² + 0 x 2¹ + 1 x 2º = 1 x 8 + 1 x 4 + 0 x 2 + 1 x 1 = 8 + 4 + 0 + 1 = 13 2.1.1 Base Hexadecimal Outra base numérica muito usada na computação é a base hexadecimal. Essa base foi desenvolvida para que grandes cadeias de binários pudessem ser visualizadas de forma mais amigável. O computador manipula muito bem o binário, contudo o ser humano tem muita dificuldade, principalmente quando as cadeias de binários tornam extensas. Outra característica dos valores na base hexadecimal é que são facilmente convertidos para binários ou vice-versa, não necessitando fazer conversões para a base decimal. Vamos conhecer as características dessa base numérica. Possui 16 símbolos: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E e F, onde: A = 10 B = 11 C = 12 D = 13 E = 14 F = 15, todos em valores decimal Dígitos Normais + 6 letras do alfabeto. As regras de conversão para a base decimal são as mesmas da base binária, o que muda é a base, veja exemplo abaixo: O valor 453 na base hexadecimal representa que valor decimal? 453 = 4²5¹3º = 4 x 16² + 5 x 16¹ + 3 x 16º = 4 x 256 + 5 x 16 + 3 x 1 = 1024 + 80 + 3 = 1107 na base decimal Agora vamos obter a representação hexadecimal de um valor expresso em base decimal, ou seja, vamos converter um valor decimal para um valor hexadecimal. 170 / 16 = 10 resta 10 10 / 16 = 0 resta 10 Assim os restos são 10 e 10, como o valor 10 é representado pela letra A o símbolo hexadecimal que representa o valor decimal 170 é AA. Outro exemplo: 180 / 16 = 11 e resto 4 11 / 16 = 0 e resto 11 Os restos obtidos na ordem inversa de calculo foram 11 e 4, como o valor 11 é representado pela letra B, o resultado da conversão é B4. Algoritmos 5
  • 6. Anteriormente apresentamos a base hexadecimal como uma base opcional em visualizações e grandes cadeias de binários, assim muitas interfaces de dispositivos eletrônicos, ao invés de serem configurados e/ou manipulados diretamente em binários, são manipulados em hexadecimal. Contudo os dispositivos continuam entendendo binários, o que vai existir é um conversor de hexadecimal para binário e um conversor de binário para hexadecimal. Vamos analisar o exemplo a seguir. Se tivermos uma cadeia hexadecimal e desejarmos convertê-la para binários, a maneira mais natural de fazermos isso é converter o hexadecimal para decimal e depois o decimal para binário. Veja exemplo: O valor AA em hexadecimal equivale 170 em decimal e a 10101010 em binário. Contudo foi desenvolvida uma técnica de conversão de hexadecimal para binário de forma direta, sem passar pelo decimal. Isso facilita a construção de dispositivos que embora funcionem em binários, possam ser manipulados através de hexadecimais. Acompanhe o seguinte raciocínio: 1 símbolo hexadecimal representa 16 valores decimais 4 símbolos binários representam 16 valores decimal 24 1 símbolo hexadecimal substitui 4 dígitos binários Assim, agrupamos os binários em grupos de quatro da direita para a esquerda, depois calculamos o valor de cada grupo separadamente e substituímos esse valor pelo símbolo hexadecimal correspondente. Outro exemplo: Foram inseridos dois zeros à esquerda do último grupo de binários para formar um grupo de quatro, embora isso não afete o valor. 3EB = 3 x 162 + E x 161 + B x 160 => 768 + 224 + 11 = 1003 1111101011= 1 x 29 + 1 x 28 + 1 x 27 + 1 x 26 + 1 x 25 + 0 x 24 + 1 x 23 + 0 x 2 + 2 1 x 21 + 1 x 20 = 512 + 256 + 128 + 64 + 32 + 0 + 8 + 0 + 2 + 1 = 1003 A conversão de hexadecimal para binário é bastante simples, cada símbolo hexadecimal produz um grupo de quatro binários que representam um valor entre 0 e 15. O valor B4 em hexadecimal equivale a 10110100 em binário, veja: Algoritmos 6
  • 7. 1x27+0x26+1x25+1x24+0x23+1x22+0x21+0x20 => 128 + 0 + 32 + 16 + 0 + 4 + 0 + 0 = 180 Com da tabela de conversão abaixo é possível converter qualquer valor hexadecimal para binários ou vice-versa, sem fazer cálculos e também com baixa probabilidade de erros. 2.2 Tabela de conversão Decimal Hexadecimal Binário 00 0 0000 01 1 0001 02 2 0010 03 3 0011 04 4 0100 05 5 0101 06 6 0110 07 7 0111 08 8 1000 09 9 1001 10 A 1010 11 B 1011 12 C 1100 13 D 1101 14 E 1110 15 F 1111 2.2.1 Agrupamentos de bits conhecidos Um dígito binário é chamado de bits – representa dois valores 2¹ 4 bits => nibble – representa 16 valores 24 8 bits => byte – representa 256 valores 28 1024 bytes => Um Kilobyte => 1KB = 210 = 1024 bytes 1024 Kilobytes => Um Megabyte => 1MB = 220 = 1.048.576 bytes 1024 Megabytes => Um Gigabyte => 1GB = 230 = 1.073.741.824 bytes 1024 Gigabytes => Um Terabyte => 1TB = 240 = 1.099.511.627.776 bytes Até agora usamos os bits para representarem números inteiros sem sinal, contudo os computadores usam os bits para representar todas as informações que ele manipula. O que se pode representar com N bits? 2N coisas. Quais coisas? Números! Caracteres! Pixeis! Valores Monetários! Posições! Instruções! ... Bits podem representar qualquer coisa! 2.3 Representação de Caracteres Um dos padrões mais conhecidos de representação de caracteres é o ASCII – American Standard Code for Information Interchange. Esse padrão usa um byte para representar cada caractere e tem a possibilidade de representar 256 caracteres, visto que um byte permite 256 combinação de valores ( 0 a 255). Exemplos de codificações da tabela ASCII: Algoritmos 7
  • 8. Caractere Dec. Hex. Binário Espaço 32 20 0010 0000 ! 33 21 0010 0001 " 34 22 0010 0010 # 35 23 0010 0011 ... ... ... ... 0 48 30 0011 0000 1 49 31 0011 0001 2 50 32 0011 0010 3 51 33 0011 0011 ... ... ... ... A 65 41 0100 0001 B 66 42 0100 0010 C 67 43 0100 0011 ... ... ... ... a 97 61 0110 0001 b 98 62 0110 0010 c 99 63 0110 0011 ... ... ... ... Outra codificação para caracteres é o padrão Unicode, que usa dois bytes para representar cada caractere, isso possibilita 65536 símbolos. 2.4 Representação de Valores Lógicos Os valores lógicos serão muito usados nessa disciplina de algoritmo, eles representam dois valores: verdadeiro e falso. Esses valores poderiam ser representados apenas por um bit, contudo os computadores possuem uma quantidade mínima de combinação de bits, chamada de “palavra”. A palavra de um computador é a quantidade padrão de bits que são envolvidas nas operações de processamento. Os computadores usam no mínimo uma palavra ou uma combinação de várias palavras para representarem as informações envolvidas em suas operações. Assim os valores lógicos, apesar de poderem ser representados apenas com um bit, normalmente são representados com um byte, que é o tamanho padrão de palavra para a maioria dos computadores. 2.5 Representação de Cores Assim como os caracteres, as cores podem ser representadas por vários padrões. Um dos mais conhecidos é o padrão RGB (Red, Green, Blue), que usa três bytes para representar as cores primárias (Vermelho, Verde e Azul). Cada byte pode variar entre 0 a 255, assim a combinação desses três bytes produzem uma mistura de cores primárias e resultam em cores derivadas. Normalmente os valores RGB’s são visualizados em interfaces de software através de valores em hexadecimais. Por exemplo: A45B3E, assim a intensidade da cor vermelho é A4, da cor verde é 5B e da cor azul é 3E. Outro exemplo: se definirmos 00 para as três cores, então teremos o preto, por outro lado, se definirmos FF (255) para as três cores teremos o branco. 2.6 Representações numéricas com sinal Algoritmos 8
  • 9. A representação numérica binária conhecida até agora não atende todas as necessidades de representação de números. Além dos números naturais, precisamos representar valores inteiros com sinal e valores não inteiros. Existem vários métodos de representação numérica, vamos ver alguns deles para que possamos entender de forma geral, como os números são representados. 2.6.1 Valores Inteiros com Sinal Um dos métodos mais usados para representação de números inteiros com sinal é o complemento de dois. Nesse método o bit mais significativo sinaliza o sinal, se for zero o número é positivo, se for um o número é negativo. É importante termos em mente que em função da representação de valores positivos e negativos, a faixa de valores de uma palavra muda. Veja o exemplo de uma palavra de oito bits, naturalmente ela representaria 256 valores possíveis, se usarmos o valor numérico seria possível representar os valores de 0 a 255. Quando precisamos representar valores negativos, esse mesmo byte representará valores entre -128 a 0 e de 0 a 127. Assim, para uma quantidade de N bits, teremos a possibilidade de expressar valores entre: -2(n-1) e 2(n-1) -1. Vamos aos passos do método: Inverta cada bit da cadeia de bits desejada, isso significa que onde tem zero fica um e onde tem um fica zero; Some um ao resultado obtido no passo anterior; Veja exemplo: O valor 10 expresso em um padrão binário de 8 bits: 00001010 Valor positivo 00001010 Inversão 11110101 Soma Um 00000001 Resultado 11110110 Assim, o valor -10 decimal expresso em binário usando o método de complemento de dois é: 11110110. Outra maneira de usar o método complemento de dois é executar o seguinte procedimento: Tome o padrão binário do número positivo; A partir do bit menos significativo para o mais significativo (da direita para a esquerda) copie os bits até encontrar o primeiro bit 1, inclusive ele. Depois para os demais inverta todos os bits que restarem a esquerda. Valor original 00001010 Cópia / Inversão 11110110 Resultado 11110110 Vamos encontrar o valor negativo do número 79: Algoritmos 9
  • 10. Valorpositivo 01001111 Cópia / Inversão 10110001 Resultado 10110001 Agora, vamos fazer o inverso, dado um valor negativo, vamos obter o valor positivo. Funciona da mesma maneira, copiamos os bits da direita para a esquerda até encontrar o bit um, inclusive ele, os demais serão invertidos. Valor negativo 10110001 Cópia / Inversão 01001111 Resultado 01001111 2.6.2 Valores Não Inteiros Uma das notações mais utilizada para representação de números não inteiros é a de Ponto Flutuante, que divide cadeia de bits em três termos: Sinal Expoente Mantissa O sinal é representado por um bit, se zero o número é positivo, se um o número é negativo. O expoente estabelece a posição do ponto decimal binário e a mantissa representa o valor a ser representado. Vamos analisar um exemplo, para facilitar usaremos um byte apenas para representar números não inteiros, na prática os computadores usam grande cadeia de bits. Tomemos a seguinte cadeia de bits: 00101010 Sinal Expoente Mantissa 0 010 1010 Nesse exemplo estamos adotando três bits para o expoente e quatro para a mantissa, contudo isso é definido em cada arquitetura de computador. Outro detalhe importante é que o expoente deve ser um valor inteiro com sinal, então também deve ser definido o método de representação de inteiros com sinal, nós usaremos o método complemento de dois, visto que já conhecemos. Vamos analisar os dados do exemplo: Sinal 0 significa que o número que está representado é positivo. O expoente 010 resulta em um valor 2 positivo, isso significa que devemos deslocar o ponto decimal duas casas a direita da mantissa, se fosse negativo o deslocamento do ponto seria a esquerda. Vamos agora aplicar essas informações na mantissa. Obtenha a mantissa: 1010 Coloque o ponto decimal binário a esquerda da mantissa .1010 Desloque o ponto decimal segundo o expoente analisado, no nosso caso deslocaremos o ponto duas casas a direita, então vamos obter: 10.10 Agora vamos obter o valor decimal, para isso temos que considerar o seguinte aspecto: Algoritmos 10
  • 11. 7 6 5 4 3 2 1 0 1 2 3 4 5 6 7 27 26 25 24 23 22 21 20 2-1 2-2 2-3 2-4 2-5 2-6 2-7 128 64 32 16 8 4 2 1 1/2 1/4 1/8 1/16 1/32 1/64 1/128 Assim se tivermos o padrão: 10.10, vamos obter o valor decimal da seguinte maneira: 128 64 32 16 8 4 2 1 1/2 1/4 1/8 1/16 1/32 1/64 1/128 1 0 1 0 2+0+½+¼ 2+¾ 2,75 Na verdade continuamos a fazer a conversão de binário para decimal da mesma maneira que fizemos até agora, porém estamos considerando a parte menor que zero nos expoentes, veja resolução abaixo: 1 x 21 + 0 x 20 + 1 x 2-1 + 0 x 2-2 = 2 + 0 + ½ + ¼ = 2,75 Se o padrão de bits fosse 10101010, faríamos o mesmo cálculo, porém no final acrescentaríamos o sinal negativo ao resultado que seria: -2,75. 2.6.3 Instruções de Máquina Até agora nós vimos como as informações são representadas em um computador, mas será como elas são processadas? Como nós falamos para o computador o que ele deve fazer? Será que é necessário dizer ao computador o que fazer? Não pretendo responder essas questões, mas sim conduzir você a um raciocínio que o leve a respondê-las. Vejamos, no início dessa unidade iniciamos o texto dizendo que o grande diferencial dos computadores é a sua capacidade de serem programados e de sua extrema flexibilidade em resolver as mais diferentes tarefas. Vocês estão lembrados da idéia de Jacquard (tear configurado com cartões perfurados) e posteriormente o projeto de Babbage (o projeto da calculadora genérica)? Então o grande desafio e inspiração desses projetos foi o de produzir máquinas genéricas, que não precisavam ser reconstruídas para cada nova aplicabilidade desejada. Dessa mesma maneira os computadores eletrônicos foram projetados. O modelo de arquitetura formalizado por Von Newman tinha como princípio uma unidade de processamento, uma unidade de controle, uma unidade de armazenamento e dispositivos de entrada e saída, basicamente a mesma concepção de Babbage. Veja ilustração a seguir: Algoritmos 11
  • 12. Figura 1.Representação de uma máquina computacional A Unidade Central de Processamento (CPU) é responsável pelo processamento e controle das atividades que ocorrem no computador. É divida em duas subunidades: a Unidade de Controle (UC) e a Unidade Lógica e Aritmética (ULA). A UC é responsável pelo controle das tarefas que ocorrem na CPU e a ULA é onde ocorrem os cálculos e comparações de dados em processamento. Para que um programa possa ser executado no computador, este deve ser carregado para uma região de armazenamento onde a UC possa buscar as instruções que devem ser executadas, essa região de armazenamento é denominada de Memória Figura 2.Representação da Unidade Central de Processamento Principal (MP), que usa a tecnologia RAM (Memória de Acesso Aleatório). Além das instruções de um programa, os dados que são manipulados por esse programa, também ficam armazenados na MP. A ilustração a seguir, apesar de ser extremamente simplista, visto que na realidade as CPU’s atuais possuem inúmeros elementos que foram desconsiderados nessa figura, detalha um pouco melhor os elementos que compõem uma CPU. A ilustração anterior mostra que existem elementos tais como: CI (contador de instruções), RI (registrador de instruções) e R0 ... RN (registradores de uso geral). Os registradores de uma CPU são acumuladores de valores (alguns gerais outros específicos) que são usados durante a execução de um programa. Cada processador é projetado e fabricado para reconhecer um conjunto de instruções (comandos). A esse conjunto de instruções é dado o nome de Linguagem de Máquina, já que é particular para cada modelo de processador. Uma instrução de máquina é formada por um código, que a identifica, e os operandos da instrução. Osoperandos são informações adicionais que cada instrução necessita para sua execução. Veja a seguir a estrutura genérica de uma instrução de máquina. Algoritmos 12
  • 13. Código Operando 1 Operando 2 Operando 3 Como todas as informações que um computador reconhece são representadas com símbolos binários, as instruções de máquina também são. Os códigos das instruções são valores inteiros sem sinal, os operandos podem ser caracteres, valores inteiros, valores não inteiros, etc. Veja a seguir um exemplo de uma instrução de máquina. Código Operando1 Operando2 Operando3 Decimal 1 1 2 3 Binário 00000001 00000001 00000010 00000011 Para entendermos o significado de uma instrução de máquina, precisamos saber previamente alguns conceitos. O primeiro é o de programa armazenado, que diz respeito às instruções de máquina que são armazenados em um arquivo, que recebe o nome de código executável. Quando queremos executar um programa em um computador alguns passos devem acontecer. Não vamos nesse momento levar em consideração todos os aspectos da execução de um programa, e sim um conjunto mínimo que nos fará entender o significado de instruções de máquina. Vamos abstrair, por exemplo, as etapas realizadas pelo Sistema Operacional, que são importantes, mas nesse momento aumentaria a complexidade do nosso entendimento. Vamos aos passos de execução de um programa: 1. Carregar o programa para a memória principal; 2. Iniciar o registrador CI com o endereço de memória da primeira instrução do programa; 3. Repetir os passos seguintes até encontrar o fim do programa ou ocorrer um erro: a. Carregar a instrução de máquina (copiar) apontada pelo CI para o RI; b. Incrementar o CI para apontar para o próximo endereço da memória (próxima instrução); c. Decodificar (interpretar) a instrução que está no RI; d. Delegar a execução da instrução para a parte correspondente da ULA; Os sub-passos do passo 3, são denominados de ciclo de máquina, pois são repetidos para cada instrução. O ciclo de máquina é formado por três etapas: busca, decodificação e execução. Vamos conhecê-los em maiores detalhes: A busca de instrução é compreendida dos seguintes passos: A unidade de controle, através do registrador CI, requer da MP, a próxima instrução; Algoritmos 13
  • 14. Quando a MP disponibiliza a instrução, essa é armazenada no registrador RI; Por último é incrementado o CI, para indicar a próxima instrução; A decodificação de instrução é dividida em dois passos: A UC identifica a instrução pelo campo código; A UC invoca os circuitos da ULA, passando os operandos; A execução da instrução é executada pela ULA através dos passos: Execução da instrução com os operandos (valores) recebidos da UC; Vamos agora adotar um conjunto de instruções de máquina (hipotético) como sendo uma linguagem de máquina, veja tabela a seguir: CódigoDec. CódigoBin. Operandos Interpretação 1 00000001 R1 R2 R3 R1= R2 + R3 2 00000010 R1 R2 Valor R1= R2 + Valor 3 00000011 R1 R2 R3 R1= R2–R3 4 00000100 R1 Endereço 0 R1= [Endereço] 5 00000101 R1 Endereço 0 [Endereço] =R1 6 00000110 R1 R2 NI Se R1= R2 CI =CI + 4 * NI 7 00000111 R1 R2 NI Se R1<>R2 CI = CI+4 * NI 8 00001000 Endereço 0 0 CI = Endereço 9 00001001 R1 R2 R3 R1= R2 * R3 10 00001010 R1 R2 R3 R1=R2 div R3(divisão inteira) 11 00001011 0 0 0 sair Exemplo de programa escrito com a linguagem de máquina acima, com valores representados em base decimal: Endereço Conteúdo da Memória 0000:0000 4 0 20 0 0000:0004 4 1 24 0 0000:0008 1 4 0 1 0000:0012 5 4 28 0 0000:0016 11 0 0 0 0000:0020 5 0000:0024 7 0000:0028 0000:0032 Exemplo de programa escrito com a linguagem de máquina acima, com valores representados em base hexadecimal (endereços) e base binária (instruções): Endereço Conteúdo da Memória 0000:0000 00000100 00000000 00010100 00000000 0000:0004 00000100 00000001 00011000 00000000 0000:0008 00000001 00000100 00000000 00000001 0000:000C 00000101 00000100 00011100 00000000 0000:0010 00001011 00000000 00000000 00000000 0000:0014 00000101 0000:0018 00000111 0000:001C 0000:0020 Vamos brincar de CPU. Para facilitar vamos usar para as representações de informação (dados e endereços) a base decimal, mas sendo consciente que internamente a representação é binária. Algoritmos 14
  • 15. Situação 01 – carga do programa para a memória principal Registradores Valores CI 0000:0000 RI · Inicia o valor de CI com o endereço da R0 primeira instrução do programa a ser R1 executado R2 R3 R4 Situação 02 – execução do primeiro ciclo de máquina Registradores Valores CI 0000:0004 · Carrega-se a instrução apontada pelo CI para o RI RI 4-0-20-0 · Incrementa CI para o novo endereço R0 5 · Decodifica a instrução: carregar o valor do endereço R1 de memória 20 para o registrador R0 (neste caso o R2 valor 5) R3 R4 Situação 03 – execução do segundo ciclo de máquina Registradores Valores CI 0000:0008 RI 4-1-24-0 · Carrega-se a instrução apontada pelo CI para o RI · Incrementa CI para o novo endereço R0 5 · Decodifica a instrução: carregar o valor do endereço de R1 7 memória 24 para o registrador R1 (neste caso o valor 7) R2 R3 R4 Situação 04 – execução do terceiro ciclo de máquina Registradores Valores CI 0000:0012 · Carrega-se a instrução apontada pelo CI para o RI RI 1-4-0-1 · Incrementa CI para o novo endereço R0 5 · Decodifica a instrução: somar o conteúdo do registrador R1 7 R0 com o conteúdo do registrador R1 e armazenar o R2 resultado no registrador R4 R3 R4 12 Situação 05 – execução do quarto ciclo de máquina Registradores Valores CI 0000:0016 · Carrega-se a instrução apontada pelo CI para o RI RI 5-4-28-0 · Incrementa CI para o novo endereço R0 5 · Decodifica a instrução: descarregar o conteúdo do R1 7 registrador R4 no endereço de memória 28 R2 R3 R4 12 Endereço Conteúdo da Memória 0000:0000 4 0 20 0 0000:0004 4 1 24 0 0000:0008 1 4 0 1 0000:0012 5 4 28 0 0000:0016 11 0 0 0 0000:0020 5 0000:0024 7 0000:0028 12 0000:0032 Algoritmos 15
  • 16. Situação 06 – execução do quinto ciclo de máquina Registradores Valores CI 0000:0024 RI 11-0-0-0 · Carrega-se a instrução apontada pelo CI para o RI R0 5 · Incrementa CI para o novo endereço R1 7 · Decodifica a instrução: encerrar o programa R2 R3 R4 12 [ Bibliografia ] BROOKSHEAR, J. Glenn. Ciência da Computação – Uma visão abrangente. 5. ed. Porto Alegre: Bookman, 2000. BARRETO, Jorge Muniz. Notas de aulas do mestrado em Ciência da Computação, 2000. CORTELAZZO, Iolanda B. C, link disponível na web: http://www.boaaula.com.br/iolanda/hic/hicsum.html, consultado em 20/12/2007. MANZANO, Jose Augusto Navarro Garcia.; OLIVEIRA, Jayr Figueiredo de. Algoritmos: Lógica para o desenvolvimento de programação de computadores. Érica, 18ª ed. Algoritmos 16