Programação Imperativa

Aula 3

Sumário




Sistemas de numeração

O sistema de numeração que nós usamos é o sistema decimal. Este sistema chama-se decimal (ou de base 10) porque utiliza 10 símbolos: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Com estes 10 símbolos somos capazes de construir números tais como 747. O número 747 tem uma sequência de 3 símbolos (ou algarismos), dois dos quais repetidos (dois setes). No entanto, o primeiro 7 tem um valor diferente do segundo 7. O primeiro vale 700 (7 centenas) mas o segundo já só vale 7 (7 unidades).

    747 = 700 + 40 + 7 = 7*102 + 4*101 + 7*100

Resumindo, os algarismos tem um valor diferente consoante a sua posição. No sistema decimal, o peso dos algarismos são potências de 10. Todos nós aprendemos isto na escola primária e nada disto é novidade. Estamos tão habituados a lidar com números que acabamos por manipulá-los muitas vezes por intuição.

Agora imaginen o seguinte. Faz de conta que na escola primária vos tinham ensinado apenas os algarismos 0,1,2. Como é que poderíamos escrever os outros números utilizando apenas estes três símbolos?

Antes de o fazer vamos voltar outra vez ao sistema decimal e ver como é que contamos os números.

     0
     1
     2
     3
     4
     5
     6
     7
     8  
     9
    10
    11
    12
     .
     .
     .
    19
    20
    21
     .
     .
     .
    99
   100
   101
     .
     .
     .

Como só temos 10 símbolos, quando um algarismo chega a 9, temos de fazer "0 e vai um..." Se na escola primária só nos tivessem ensinado 3 símbolos (0,1,2) seria a mesma coisa: quando o algarismo chegasse a 2 teríamos de fazer "0 e vai um..."

     0
     1
     2
    10
    11
    12
    20
    21
    22
   100  
   101
   102
   110
   111
   112
   120   
   121
   122
   200
   201
     .
     .
     .

O conceito é exactamente o mesmo que existe no sistema decimal. Por exemplo, o número 121 na base três tem 3 símbolos mas o primeiro 1 tem um valor diferente do segundo 1. Com um sistema de base 3, o peso dos algarismos são potências de 3.

    121 = 1*32 + 2*31 + 1*30

isto é, o número 121 na base 3 corresponde ao número 9+6+1=16 na base 10.

As pessoas usam o sistema decimal mas podiam utilizar outro sistema qualquer. Aliás, antes de se ter inventado os sistemas de numeração, o ser humano usava um sistema de numeração com um só símbolo (contava as coisas com pauzinhos). Os computadores utilizam o sistema de numeração binário (tem apenas dois símbolos: 0 e 1). De seguida apresenta-se os números de 0 a 20 na base 10, base 3, base 2 e na base 1.

    base 10     base 3     base 2       base 1 (pauzinhos)
       0          0           0                       
       1          1           1                          |
       2          2          10                         ||
       3         10          11                        |||
       4         11         100                       ||||
       5         12         101                      |||||
       6         20         110                     ||||||
       7         21         111                    |||||||
       8         22        1000                   ||||||||
       9        100        1001                  |||||||||
      10        101        1010                 ||||||||||
      11        102        1011                ||||||||||| 
      12        110        1100               ||||||||||||
      13        111        1101              |||||||||||||
      14        112        1110             |||||||||||||| 
      15        120        1111            |||||||||||||||  
      16        121       10000           |||||||||||||||| 
      17        122       10001          |||||||||||||||||
      18        200       10010         ||||||||||||||||||
      19        201       10011        |||||||||||||||||||
      20        202       10100       ||||||||||||||||||||   
       .         .          .                   .
       .         .          .                   .
       .         .          .                   .

Codificação de informação

Num computador, a informação é sempre armazenada como uma sequência de dígitos binários. Como tal, toda a informação tem de ser codificada de alguma maneira numa sequência de zeros e uns. Para os números não negativos já vimos como é que isso pode ser feito, mas também se pode fazer a mesma coisa para os números negativos, números reais, caracteres, imagens, e som.

Por exemplo, os caracteres ('a','b','c', ...,'A','B','C,...,'+','-','?',...) costumam ser representados internamente nos computadores usando o código ASCII (American Standard Code for Information Interchange). Cada caracter é codificado usando 8 dígitos binários. De seguida, apresenta-se o código de alguns caracteres:

                código      código
    caracter   decimal     binário 
    --------   -------    ---------
       .           .          .
       .           .          .
       .           .          .
       #          35       00100011
       $          36       00100100
       %          37       00100101
       &          38       00100110
       '          39       00100111
       (          40       00101000
       )          41       00101001
       *          42       00101010  
       +          43       00101011   
       ,          44       00101100
       -          45       00101101
       .          46       00101110
       /          47       00101111
       0          48       00110000
       1          49       00110001
       2          50       00110010
       3          51       00110011
       .           .          .
       .           .          .
       .           .          .
       A          65       01000001
       B          66       01000010
       C          67       01000011
       .           .          .
       .           .          .
       .           .          .
       a          97       01100001
       b          98       01100010
       c          99       01100011
       .           .          .
       .           .          .
       .           .          .

O importante a reter é que com uma sequência de N dígitos binários podemos representar 2 elevado a N coisas diferentes. Assim, com 8 dígitos binários podemos representar 28=256 caracteres diferentes.

Unidades de informação: bits, bytes, kilobytes, megabytes, ...

Tal como existem unidades para medir pesos (miligrama, grama, kilograma,...) e distâncias (milímetro, centímetro, decímetro, metro, ...), também existem unidades para medir informação (bit, byte, kilobyte, megabyte, gigabyte, terabyte, ...).

Um bit é a unidade de informação correspondente a um único dígito binário. Um byte são 8 bits. Um kilobyte são 210 = 1024 bytes. Um megabyte são 220 bytes (aproximadamente 1 milhão de bytes). Um gigabyte são 230 bytes (aproximadamente 1 bilião de bytes). Um terabyte são 240 bytes (aproximadamente 1 trilião de bytes).

Para simplificar, é costume designar kilobyte por Kbyte ou simplesmente KB. O mesmo se passa para megabyte (MB) e gigabyte (GB)

Para terem uma ordem de grandeza, uma disquete pode armazenar 1,4 MB e um disco de um computador que as pessoas tipicamente compram para ter em casa pode armazenar cerca de 6 GB. De agora em diante já não necessitam de ficar assustados quando ouvirem alguém a falar sobre bits e bytes em conversas de café.

Álgebra de Boole

A programação de computadores requer um domínio completo de operadores lógicos: conjunção (e), disjunção (ou), negação (não). Os operandos são valores lógicos (verdadeiro ou falso). Representando 1 como verdadeiro e 0 como falso, podemos obter as seguintes tabelas de verdade para as funções e, ou e não (em inglês: and, or, not).

                      |                          |
   x    y    x e y    |     x    y    x ou y     |    x    não x
  ---  ---  -------   |    ---  ---  --------    |   ---  -------
   1    1      1      |     1    1       1       |    1      0  
   1    0      0      |     1    0       1       |    0      1
   0    1      0      |     0    1       1       |
   0    0      0      |     0    0       0       | 
                      |                          |

Estas três funções lógicas também são chamadas de funções booleanas (George Boole foi um cientista que inventou uma álgebra, chamada álgebra booleana, que tem como base estas três funções). Com estas 3 funções podemos construir funções mais complexas. Exemplo:

  f(x,y) = x e (não y)

A respectiva tabela de verdade é:

                                                
   x    y    não y    x e (não y)  
  ---  ---  -------   -----------  
   1    1      0          0        
   1    0      1          1        
   0    1      0          0        
   0    0      1          0        
                      

O que esta tabela de verdade indica é que (x e (não y)) só é verdade se x for verdade e y for falso. Reparem que x e y são proposições (coisas que podem ter o valor verdadeiro ou falso). Por exemplo, se

  x --> o João gosta da Maria
  y --> a Ana gosta do Pedro

então

  não y       --> a Ana não gosta do Pedro
  x e (não y) --> o João gosta da Maria e a Ana não gosta do Pedro