SlideShare a Scribd company logo
1 of 259
Download to read offline
Algoritmos e Estruturas de Dados I

Marcos Castilho   Fabiano Silva    Daniel Weingaertner

                     Vers˜o 0.7
                         a
                    Maio de 2011
2

    Algoritmos e Estruturas de Dados I - Notas de Aula est´ licen-
                                                          a
    ciado segundo a licen¸a da Creative Commons Atribui¸ao-Uso
                         c                                c˜
    N˜o-Comercial-Vedada a Cria¸˜o de Obras Derivadas 2.5 Bra-
      a                         ca
    sil License.http://creativecommons.org/licenses/by-nc-nd/
    2.5/br/

    Algoritmos e Estruturas de Dados I - Notas de Aula is licen-
    sed under a Creative Commons Atribui¸ao-Uso N˜o-Comercial-
                                         c˜        a
    Vedada a Cria¸ao de Obras Derivadas 2.5 Brasil License.http:
                 c˜
    //creativecommons.org/licenses/by-nc-nd/2.5/br/




    AVISO: Este texto ainda est´ em constru¸˜o.
                               a           ca
Sum´rio
   a

1 Introdu¸˜o
         ca                                                                                                    7

2 Sobre problemas e solu¸˜es
                           co                                                        9
  2.1 Contando o n´mero de presentes em um evento . . . . . . . . . . . . . 9
                   u
  2.2 Trocando os quatro pneus . . . . . . . . . . . . . . . . . . . . . . . . . 12
  2.3 Conclus˜o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
             a

3 Sobre algoritmos e programas                                                       15
  3.1 O que ´ um algoritmo? . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
             e
  3.2 O que ´ um programa? . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
             e
  3.3 Exerc´
           ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

4 O modelo do computador                                                                                      21
  4.1 Hist´rico . . . . . . . . . . . . . . . . . . . . . . . . . .
           o                                                              .   .   .   .   .   .   .   .   .   21
  4.2 Princ´ ıpios do modelo . . . . . . . . . . . . . . . . . . .        .   .   .   .   .   .   .   .   .   22
      4.2.1 Endere¸os versus conte´dos . . . . . . . . . . .
                       c                  u                               .   .   .   .   .   .   .   .   .   22
      4.2.2 O repert´rio de instru¸oes . . . . . . . . . . . .
                         o               c˜                               .   .   .   .   .   .   .   .   .   23
      4.2.3 O ciclo de execu¸˜o de instru¸oes . . . . . . . .
                                 ca             c˜                        .   .   .   .   .   .   .   .   .   25
      4.2.4 Exemplo de execu¸ao de um programa . . . . .
                                   c˜                                     .   .   .   .   .   .   .   .   .   25
  4.3 Humanos versus computadores . . . . . . . . . . . . . .             .   .   .   .   .   .   .   .   .   26
      4.3.1 Abstra¸˜o dos endere¸os . . . . . . . . . . . . .
                       ca               c                                 .   .   .   .   .   .   .   .   .   27
      4.3.2 Abstra¸˜o dos c´digos das instru¸oes . . . . . .
                       ca        o                  c˜                    .   .   .   .   .   .   .   .   .   28
      4.3.3 Abstra¸˜o do repert´rio de instru¸˜es . . . . . .
                       ca             o              co                   .   .   .   .   .   .   .   .   .   29
      4.3.4 Abstra¸˜o dos endere¸os de mem´ria (vari´veis)
                       ca               c           o         a           .   .   .   .   .   .   .   .   .   30
  4.4 Abstra¸ao das instru¸˜es (linguagem) . . . . . . . . . .
               c˜             co                                          .   .   .   .   .   .   .   .   .   31
  4.5 Conclus˜o . . . . . . . . . . . . . . . . . . . . . . . . .
                 a                                                        .   .   .   .   .   .   .   .   .   33
  4.6 Exerc´  ıcios . . . . . . . . . . . . . . . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   35

5 Conceitos elementares                                                                                       37
  5.1 Algoritmos e linguagens de programa¸ao . . . . . .
                                         c˜                       .   .   .   .   .   .   .   .   .   .   .   37
  5.2 C´lculo de ra´ de uma equa¸ao do segundo grau
       a           ızes             c˜                            .   .   .   .   .   .   .   .   .   .   .   38
  5.3 Imprimir a soma de dois n´meros dados . . . . . .
                                u                                 .   .   .   .   .   .   .   .   .   .   .   39
  5.4 Imprimindo sequˆncias de n´meros na tela . . . . .
                       e          u                               .   .   .   .   .   .   .   .   .   .   .   40
  5.5 Imprimir os quadrados de uma faixa de n´meros . .
                                             u                    .   .   .   .   .   .   .   .   .   .   .   44
  5.6 Imprimindo a soma de v´rios pares de n´meros . .
                              a             u                     .   .   .   .   .   .   .   .   .   .   .   44


                                            3
4                                                                                                                      ´
                                                                                                                    SUMARIO

    5.7    Testar se um n´mero lido ´ positivo
                          u           e             .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   45
    5.8    Resumo . . . . . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   47
    5.9    Apˆndice . . . . . . . . . . . . . . .
              e                                     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   47
    5.10   Exerc´
                ıcios . . . . . . . . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   49

6 T´cnicas elementares
    e                                                                                                                               55
  6.1 Atribui¸˜es dentro de repeti¸˜es . . . . . .
              co                   co                               .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   55
      6.1.1 Somando n´meros . . . . . . . . .
                         u                                          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   55
  6.2 Desvios condicionais aninhados . . . . . .                    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   57
      6.2.1 O menor de trˆs . . . . . . . . . . .
                            e                                       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   58
  6.3 Desvios condicionais dentro de repeti¸oes .
                                             c˜                     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   58
      6.3.1 Imprimir apenas n´meros positivos
                                 u                                  .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   58
      6.3.2 Somando pares e ´   ımpares . . . . . .                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   61
      6.3.3 Convertendo para bin´rio . . . . .
                                    a                               .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   62
      6.3.4 Menor de 3, segunda vers˜o . . . .
                                         a                          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   64
  6.4 Repeti¸oes dentro de condi¸oes . . . . . .
             c˜                   c˜                                .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   65
      6.4.1 Calculo do MDC . . . . . . . . . .                      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   65
  6.5 Repeti¸oes aninhadas . . . . . . . . . . . .
             c˜                                                     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   66
      6.5.1 Tabuada . . . . . . . . . . . . . . .                   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   66
      6.5.2 Fatorial . . . . . . . . . . . . . . .                  .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   67
  6.6 Exerc´
           ıcios . . . . . . . . . . . . . . . . . .                .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   70

7 Aplica¸˜es das t´cnicas elementares
        co           e                                                                                                              75
  7.1 N´meros de Fibonacci . . . . . . .
        u                                           .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   75
  7.2 Maior segmento crescente . . . . .            .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   77
  7.3 S´ries . . . . . . . . . . . . . . . . .
       e                                            .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   79
      7.3.1 N´mero neperiano . . . . .
                u                                   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   79
      7.3.2 C´lculo do seno . . . . . . .
                a                                   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   80
  7.4 N´meros primos . . . . . . . . . . .
        u                                           .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   83
  7.5 Exerc´ıcios . . . . . . . . . . . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   86

8 Refinamentos sucessivos                                                                                                             91
  8.1 Primos entre si . . . . . . . . . . .         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    91
  8.2 Amigos quadr´ticos . . . . . . . . .
                     a                              .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    93
  8.3 Pal´ındromos . . . . . . . . . . . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    96
  8.4 Inverter um n´mero de trˆs d´
                    u             e ıgitos          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    99
  8.5 C´lculo do MDC pela defini¸˜o . .
        a                           ca              .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   101
  8.6 Exerc´ıcios . . . . . . . . . . . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   104

9 Fun¸˜es e procedimentos
      co                                                                                                                         107
  9.1 Motiva¸˜o . . . . . . . . . . . . . .
             ca                                     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 107
       9.1.1 Modularidade . . . . . . . .           .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 108
       9.1.2 Reaproveitamento de c´digo
                                     o              .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 108
       9.1.3 Legibilidade . . . . . . . . .         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 108
       9.1.4 Coment´rio adicional . . . .
                     a                              .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 109
  9.2 No¸oes fundamentais . . . . . . . .
          c˜                                        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 109
´
SUMARIO                                                                                                                  5

         9.2.1 Exemplo b´sico . . . . . . . . . . . . . . . . . .
                           a                                                        .   .   .   .   .   .   .   .   .   109
         9.2.2 O programa principal . . . . . . . . . . . . . . .                   .   .   .   .   .   .   .   .   .   109
         9.2.3 Vari´veis globais . . . . . . . . . . . . . . . . .
                    a                                                               .   .   .   .   .   .   .   .   .   110
         9.2.4 Fun¸oes . . . . . . . . . . . . . . . . . . . . . .
                    c˜                                                              .   .   .   .   .   .   .   .   .   110
         9.2.5 Parˆmetros por valor . . . . . . . . . . . . . . .
                   a                                                                .   .   .   .   .   .   .   .   .   112
         9.2.6 Parˆmetros por referˆncia . . . . . . . . . . . .
                   a                  e                                             .   .   .   .   .   .   .   .   .   113
         9.2.7 Procedimentos . . . . . . . . . . . . . . . . . .                    .   .   .   .   .   .   .   .   .   114
         9.2.8 Vari´veis locais . . . . . . . . . . . . . . . . . .
                    a                                                               .   .   .   .   .   .   .   .   .   115
   9.3   Alguns exemplos . . . . . . . . . . . . . . . . . . . . .                  .   .   .   .   .   .   .   .   .   116
         9.3.1 Calculando d´  ıgito verificador . . . . . . . . . . .                .   .   .   .   .   .   .   .   .   116
   9.4   C´lculo do MDC pela defini¸˜o . . . . . . . . . . . . .
           a                          ca                                            .   .   .   .   .   .   .   .   .   119
         9.4.1 Calculando ra´ de equa¸˜es do segundo grau
                               ızes         co                                      .   .   .   .   .   .   .   .   .   121
   9.5   Exerc´
              ıcios . . . . . . . . . . . . . . . . . . . . . . . . .               .   .   .   .   .   .   .   .   .   124

10 Estruturas de dados                                                                                               125
   10.1 Vetores . . . . . . . . . . . . . . . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 125
        10.1.1 Primeiros problemas com vetores . .          .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 128
        10.1.2 Soma e produto escalar de vetores . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 136
        10.1.3 Busca em vetores . . . . . . . . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 138
        10.1.4 Ordena¸ao em vetores . . . . . . . .
                        c˜                                  .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 148
        10.1.5 Outros algoritmos com vetores . . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 152
        10.1.6 Exerc´ ıcios . . . . . . . . . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 163
   10.2 Matrizes . . . . . . . . . . . . . . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 179
        10.2.1 Matrizes em Pascal . . . . . . . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 179
        10.2.2 Exemplos elementares . . . . . . . .         .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 180
        10.2.3 Procurando elementos em matrizes .           .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 186
        10.2.4 Inserindo uma coluna em uma matriz           .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 188
        10.2.5 Aplica¸oes de matrizes em imagens .
                       c˜                                   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 190
        10.2.6 Exerc´ ıcios . . . . . . . . . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 194
   10.3 Registros . . . . . . . . . . . . . . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 209
        10.3.1 Introdu¸ao aos registros . . . . . . .
                        c˜                                  .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 209
        10.3.2 Vetores de registros . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 210
        10.3.3 Registros com vetores . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 212
        10.3.4 Observa¸˜es importantes . . . . . . .
                         co                                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 213
        10.3.5 Exerc´ ıcios . . . . . . . . . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 216

11 Desenvolvendo programas de maior porte                                              225
        11.0.1 Campo minado . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
   11.1 Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234

12 Tipos abstratos de dados                                                           241
   12.1 Tipo Conjunto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
   12.2 Tipo Lista . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
        12.2.1 Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
6      ´
    SUMARIO
Cap´
   ıtulo 1

Introdu¸˜o
       ca

Este material cont´m notas de aulas da disciplina CI055 – Algoritmos e Estruturas de
                  e
Dados I, ministrada para os curso de Bacharelado em Ciˆncia da Computa¸ao (BCC),
                                                       e                   c˜
Matem´tica Industrial (MatInd) e para o Bacharelado em Inform´tica Biom´dica
      a                                                              a           e
(BIB) da Universidade Federal do Paran´. a
   Esta disciplina ´ ministrada no primeiro semestre (para os calouros) e ´ a primeira
                   e                                                      e
das quatro que cobrem o conte´do b´sico de algoritmos sem o qual um curso de
                                 u     a
computa¸ao n˜o faz sentido. As disciplinas subsequentes s˜o:
         c˜ a                                             a

   • Algoritmos e Estruturas de Dados II;

   • Algoritmos e Estruturas de Dados III; e

   • Algoritmos e Teoria dos Grafos.

    A orienta¸˜o da Coordena¸ao dos cursos ´ que este deve ter um conte´do forte
             ca                  c˜               e                             u
em conceitos de algoritmos no qual a implementa¸ao final em uma linguagem de pro-
                                                     c˜
grama¸ao ´ vista apenas como um mecanismo facilitador ao aprendizado dos conceitos
       c˜ e
te´ricos.
  o
    O texto est´ dividido em duas partes bem definidas, a primeira entre os cap´
               a                                                                  ıtulos 2
e 9, cont´m os princ´
          e           ıpios b´sicos da constru¸˜o de algoritmos elementares, incluindo
                             a                  ca
a parte de subprogramas, com especial aten¸˜o a quest˜es tais como passagem de
                                                 ca          o
parˆmetros e vari´veis locais e globais. A no¸˜o de modularidade ´ bastante explorada.
    a             a                           ca                     e
    A segunda parte, a partir do cap´ ıtulo 10, cont´m princ´
                                                     e       ıpios de estruturas de dados
b´sicas, onde se introduz a no¸ao de vetores unidimensionais, a primeira das estruturas
 a                             c˜
de dados. Nesta estrutura, praticamos a elabora¸˜o de algoritmos modulares e j´ n˜o
                                                    ca                              a a
escrevemos um c´digo inteiro, mas sim um conjunto de fun¸oes e procedimentos que,
                  o                                            c˜
em uma abordagem por refinamentos sucessivos (top down), s˜o constru´
                                                                   a         ıdos passo a
passo.
    Alguns algoritmos importantes s˜o estudados em suas vers˜es b´sicas: busca e
                                        a                            o    a
ordena¸ao de vetores. No¸˜es de complexidade de algoritmos s˜o mencionadas, ainda
        c˜                 co                                      a
que de modo informal, pois isto ´ conte´do de per´
                                    e      u           ıodos mais avan¸ados. Contudo, ´
                                                                       c                 e
importante ao aprendiz ter no¸ao clara da diferen¸a de custo entre diferentes algorit-
                                c˜                    c
mos.


                                            7
8                                                     CAP´               ¸˜
                                                         ITULO 1. INTRODUCAO

    As ultimas estruturas de dados relevantes para o primeiro per´
        ´                                                           ıodo s˜o as matrizes
                                                                          a
e o conceito de registro. Havendo tempo, tamb´m se discute estruturas um pouco
                                                      e
mais sofisticadas, misturando-se vetores, registros e matrizes.
    Finalmente se oferece um desafio aos alunos. O objetivo ´ o de mostrar uma
                                                                   e
aplica¸ao interessante dos conceitos que eles j´ dominam. Normalmente trabalha-se
       c˜                                         a
em sala de aula o desenvolvimento de um programa que tem sido a constru¸ao de um
                                                                               c˜
jogo simples que pode ser implementado em uma estrutura de matriz, eventualmente
com registros. A ideia ´ que eles possam fazer um programa mais extenso para
                            e
treinarem a constru¸ao de programas modulares. Este material constitui o ultimo
                      c˜                                                           ´
cap´ıtulo deste material.
    O estudante n˜o deve iniciar uma parte sem antes ter compreendido o conte´do
                    a                                                                 u
das anteriores. Tamb´m n˜o deve iniciar um novo cap´
                       e      a                           ıtulo sem ter compreendido os
anteriores.
    Sobre a linguagem, o estudante ´ encorajado a buscar apoio na literatura e nos
                                          e
guias de referˆncia dispon´
               e              ıveis para o compilador escolhido (Free Pascal ), incluindo
um guia de referˆncia b´sico que foi escrito pelos monitores da disciplina no ano de
                  e       a
2009.
    A leitura destas notas de aula n˜o isenta o estudante de buscar literatura comple-
                                        a
mentar, sempre bem-vinda. Em particular, uma ´tima hist´ria da computa¸ao pode
                                                      o        o                c˜
ser encontrada em [Tre83]. Alguns excelentes textos introdut´rios em algoritmos est˜o
                                                                o                       a
em [Car82], [Sal98], [Med05] e [Wir78]. Para mais detalhes de programa¸˜o em Pascal
                                                                          ca
o leitor pode consultar [Far99] e tamb´m os guias de referˆncia da linguagem [Gui].
                                            e                  e
Finalmente, embora talvez de dif´ compreens˜o para um iniciante, recomendamos
                                      ıcil          a
pelo menos folhear o material em [Knu68].
Cap´
   ıtulo 2

Sobre problemas e solu¸oes
                      c˜

Vamos iniciar nosso estudo com uma breve discuss˜o sobre problemas e solu¸˜es. O
                                                a                        co
objetivo ´ deixar claro desde o in´ que:
         e                        ıcio

   • n˜o existe, em geral, uma unica solu¸˜o para o mesmo problema;
      a                        ´         ca

   • algumas solu¸oes s˜o melhores do que outras, sob algum crit´rio;
                 c˜    a                                        e

   • alguns problemas s˜o casos particulares de outros similares;
                       a

   • as vezes, ´ melhor resolver o problema mais gen´rico, assim, resolve-se uma
               e                                    e
     classe de problemas, e n˜o apenas um.
                             a

   Ser˜o apresentados dois problemas reais e para cada um deles segue uma discuss˜o
       a                                                                         a
sobre a existˆncia de diversas solu¸oes para um dado problema. A ˆnfase ser´ dada
              e                    c˜                              e         a
nas diferen¸as entre as solu¸˜es e tamb´m na discuss˜o sobre at´ que ponto deve-se
           c                co          e            a          e
ficar satisfeito com a primeira solu¸ao obtida ou se ela pode ser generalizada para
                                    c˜
problemas similares.


2.1     Contando o n´ mero de presentes em um evento
                    u
No primeiro dia letivo do primeiro semestre de 2009, um dos autores deste material
colocou o seguinte problema aos novos alunos: quer´  ıamos saber quantos estudantes
estavam presentes na sala de aula naquele momento. A sala tinha capacidade aproxi-
mada de 100 lugares e a naquele momento estava razoavelmente cheia.
    Os estudantes discutiram v´rias possibilidades. Apresentamos todas elas a seguir.
                              a

Primeira solu¸˜o
             ca
A primeira solu¸ao parecia t˜o obvia que levou algum tempo at´ algum aluno verbali-
                c˜            a ´                             e
zar: o professor conta os alunos um por um, tomando o cuidado de n˜o contar algu´m
                                                                   a              e
duas vezes e tamb´m de n˜o esquecer de contar algu´m.
                   e        a                        e
    Quais s˜o as vantagens deste m´todo? Trata-se de uma solu¸ao simples, f´cil de
           a                        e                           c˜            a
                                       ´ uma solu¸ao perfeita para salas de aula com
executar e produz o resultado correto. E          c˜

                                         9
10                           CAP´                              ¸˜
                                ITULO 2. SOBRE PROBLEMAS E SOLUCOES

poucos alunos, digamos, 20 ou 30. Outro aspecto considerado foi o fato de que este
m´todo n˜o exige nenhum conhecimento pr´vio de quem vai executar a opera¸˜o, a
  e       a                                e                                ca
n˜o ser saber contar. Tamb´m n˜o exige nenhum equipamento adicional.
 a                          e     a
    Quais as desvantagens? Se o n´mero de alunos na sala for grande, o tempo ne-
                                    u
cess´rio para o t´rmino da opera¸ao pode ser insatisfat´rio. Para piorar, quanto
    a             e                 c˜                  o
maior o n´mero, maior a chance de aparecerem erros na contagem. Foi discutida a
          u
adequa¸ao desta solu¸˜o para se contar os presentes em um com´ ou manifesta¸ao
       c˜            ca                                       ıcio             c˜
popular numa pra¸a p´blica. Concluiu-se pela inviabilidade do m´todo nestes casos.
                   c u                                          e
    Executamos a contagem em aproximadamente 1 minuto. Dois alunos tamb´m      e
fizeram a contagem e, ap´s conferˆncia, obtivemos o resultado correto, que serviu
                          o          e
para an´lise das outras solu¸˜es.
        a                   co

Segunda solu¸˜o
            ca
Pensando no problema de se contar na ordem de 100 alunos, um estudante sugeriu
que se fizesse apenas a contagem das carteiras vazias e em seguida uma subtra¸ao com
                                                                            c˜
rela¸ao ao n´mero total de carteiras na sala.
    c˜       u
    A solu¸˜o tamb´m ´ muito simples e funciona perfeitamente bem, mas exige um
           ca      e e
conhecimento pr´vio: deve-se saber antecipadamente o total de carteiras na sala.
                 e
    Esta maneira de contar ´ cada vez melhor quanto maior for o n´mero de presentes,
                           e                                      u
pois o n´mero de carteiras vazias ´ menor do que o das ocupadas. Por outro lado, se
        u                          e
a sala estiver com pouca gente, o m´todo anterior ´ mais eficiente.
                                     e             e
    Os alunos observaram tamb´m que a solu¸ao n˜o se aplica para os casos de con-
                                e             c˜ a
tagem de presentes a um com´ numa pra¸a p´blica, pois n˜o h´ carteiras na rua.
                              ıcio          c u              a a

Terceira solu¸˜o
             ca
Para resolver o problema do com´    ıcio, outro estudante sugeriu que se fizesse uma
estimativa baseada na metragem total da pra¸a, multiplicada pelo n´mero estimado
                                               c                     u
de pessoas por metro quadrado.
    Solu¸ao elegante, na pr´tica ´ o que a organiza¸˜o do com´ e a pol´ usam.
        c˜                  a     e                   ca        ıcio       ıcia
Mas deve-se saber de antem˜o a metragem da pra¸a e estimar a taxa de pessoas por
                             a                      c
metro quadrado. O m´todo ´ t˜o bom quanto melhor for a estimativa. Tamb´m ´
                        e      e a                                                e e
melhor se a popula¸ao estiver uniformemente distribu´
                    c˜                                  ıda.
    Concluiu-se que ´ um bom m´todo, mas que n˜o ´ preciso. Isto ´, a chance
                      e             e                  a e               e
do n´mero estimado ser exatamente o n´mero de presentes ´ baixa. Os m´todos
     u                                     u                   e                e
anteriores s˜o exatos, isto ´, nos d˜o o n´mero correto de presentes. Este m´todo
            a               e        a      u                                    e
tamb´m serve razoavelmente bem para o n´mero de alunos na sala de aula. De fato,
     e                                       u
nesta aula, o professor conseguiu o n´mero com aproxima¸ao 80% correta. A quest˜o
                                      u                     c˜                      a
que restou ´ se o erro de 20% ´ aceit´vel ou n˜o. Isto depende do motivo pelo qual
            e                   e      a        a
se quer contar os alunos na sala.

Quarta solu¸˜o
           ca
Para resolver o problema da precis˜o, outro estudante sugeriu o uso de roletas.
                                  a
´
2.1. CONTANDO O NUMERO DE PRESENTES EM UM EVENTO                                   11

    Efetivamente ´ esta a solu¸ao para contar torcedores no est´dio ou presentes em
                   e           c˜                                 a
um show de rock. Mas tamb´m foi considerado que a solu¸˜o exige uma ou mais
                               e                               ca
catracas, uma barreira para ningu´m entrar sem passar pela roleta e etc, para se
                                    e
garantir a exatid˜o do resultado. No caso do com´ n˜o seria vi´vel. No caso da
                   a                                 ıcio a         a
sala de aula foi constatado que n˜o havia roletas e portanto o m´todo n˜o se aplicava.
                                  a                              e     a

Quinta solu¸˜o
           ca
Mais uma vez outro estudante apresentou uma boa alternativa: contar o n´mero de
                                                                             u
filas de carteiras e, dado que todas tenham o mesmo n´mero de estudantes, ent˜o
                                                         u                          a
bastaria uma simples multiplica¸˜o para a determina¸˜o do n´mero correto.
                                  ca                 ca       u
    De fato esta solu¸˜o funciona perfeitamente bem em lugares como por exemplo o
                     ca
ex´rcito. As filas s˜o rapidamente arrumadas com, digamos, 10 soldados em cada fila,
  e                a
sabendo-se o n´mero de filas basta multiplicar por 10, eventualmente tendo-se que
                u
contar o n´mero de pessoas em uma fila que n˜o tenha completado 10.
           u                                  a
    Infelizmente as carteiras estavam bagun¸adas na nossa sala e este c´lculo n˜o pode
                                           c                           a       a
ser feito. Tamb´m ficaria estranho o professor colocar todos os alunos em filas. Foi
                 e
tamb´m observado que o m´todo fornece a solu¸ao exata para o problema.
      e                      e                 c˜

Sexta solu¸˜o
          ca
Nova sugest˜o de outro aluno: cada estudante no in´ de cada fila conta o n´mero de
             a                                      ıcio                     u
alunos da sua fila, tomando o cuidado de contar a si pr´prio tamb´m. Depois soma-se
                                                        o        e
todas as contagens de todos os primeiros de fila.
    Solu¸ao muito boa. Na verdade ´ a vers˜o em paralelo da primeira solu¸˜o.
        c˜                              e       a                               ca
Distribuindo-se a tarefa, cada primeiro de fila tem entre 10 e 15 alunos para con-
tar em sua fila. Se a soma foi correta o n´mero obtido ao final do processo ´ exato.
                                           u                                  e
No caso daquela aula os estudantes realizaram a opera¸˜o em poucos segundos, mais
                                                         ca
algum tempo para as somas (isto demorou mais. . . ). Mas o resultado foi exato.
    A solu¸ao n˜o exige conhecimento pr´vio, n˜o exige equipamento adicional e ´
           c˜ a                            e      a                                e
razoavelmente escal´vel, isto ´, funciona para salas de tamanhos diferentes.
                    a         e

S´tima solu¸˜o
 e         ca
Para finalizar, o professor apresentou a solu¸ao seguinte: todos os estudantes se le-
                                              c˜
vantam e se atribuem o n´mero 1. Em seguida os alunos se organizam em pares. Em
                          u
cada par, primeiro ´ somado o n´mero de cada um dos dois, um deles guarda este
                     e             u
n´mero e permanece de p´, o outro deve se sentar. Os que ficaram em p´ repetem
 u                         e                                                 e
este processo at´ que s´ exista um unico aluno em p´. Ele tem o n´mero exato de
                e       o            ´                  e              u
estudantes na sala.
    Como se divide a sala em pares, ap´s a primeira rodada metade da sala deve ter
                                        o
o n´mero 2 e a outra metade est´ sentada, considerando que a sala tem o n´mero de
   u                              a                                           u
alunos par. Se for ´
                   ımpar um deles ter´ ainda o n´mero 1. Ap´s a segunda rodada um
                                      a          u             o
quarto dos alunos dever´ ter o n´mero 4 e trˆs quartos estar˜o sentados, eventualmente
                        a       u           e               a
um deles ter´ um n´mero ´
             a        u              ´ f´cil perceber que o resultado sai em tempo
                             ımpar. E a
12                            CAP´                              ¸˜
                                 ITULO 2. SOBRE PROBLEMAS E SOLUCOES

proporcional ao logaritmo do n´mero total de alunos, o que ´ bem r´pido. De fato,
                                 u                             e      a
para mil pessoas o processo termina em 10 passos e para um milh˜o de pessoas termina
                                                                 a
em 20 passos.
    Parece um bom algoritmo, ele d´ resultado exato, n˜o exige conhecimento pr´vio,
                                     a                  a                       e
´ escal´vel, isto ´, funciona muito bem para um grande n´mero de pessoas, mas exige
e      a          e                                       u
organiza¸ao dos presentes.
          c˜
    Infelizmente aquela turma n˜o se organizou direito e o resultado veio com um erro
                                 a
de 40%. . . Mas ap´s duas rodadas de treinamento, na terceira conseguimos obter o
                     o
resultado correto.


2.2      Trocando os quatro pneus
Todo mundo sabe trocar pneus, embora n˜o goste. O processo que um cidad˜o comum
                                           a                                 a
executa ´ muito simples: levanta o carro com o macaco, tira todos os quatro parafusos
         e
da roda com o pneu furado, tira a roda do eixo, coloca a roda com o pneu novo no
eixo, em seguida aperta os quatro parafusos. Finalmente, baixa o carro e est´ pronto.
                                                                               a
    Nos anos 1980, um famoso piloto de f´rmula 1 imaginou que poderia ser campe˜o
                                           o                                          a
do mundo se pudesse usar um composto de pneu mais mole e com isto ganhar preciosos
segundos com rela¸ao aos seus concorrentes. O problema ´ que estes compostos mais
                   c˜                                       e
moles se deterioram rapidamente exigindo a troca dos quatro pneus no meio da corrida.
O tal piloto, ap´s alguns c´lculos, concluiu que se levasse menos de 8 segundos para
                 o           a
trocar os quatro pneus, valeria a pena aplicar este m´todo.
                                                       e
    Obviamente a solu¸˜o caseira n˜o serve. O m´todo descrito acima custa em geral
                        ca           a             e
20 minutos por pneu, com um pouco de pr´tica 10 minutos. Com muita pr´tica 2 ou
                                             a                                a
3 minutos. Para trocar os quatro pneus, 8 a 12 minutos.
    Da´ o problema: Como trocar os quatro pneus de um carro em menos de 8 segun-
       ı
dos?
    Um dos grandes custos de tempo ´ ter que trocar o macaco para cada roda: usamos
                                       e
um macaco hidr´ulico, destes de loja de pneus, e levantamos o carro todo de uma s´
                 a                                                                      o
vez.
    Mas, para cada roda, temos 4 parafusos, isto ´, 16 no total, ou melhor, 32, pois
                                                     e
tem que tirar e depois recolocar: usa-se uma aparafusadeira el´trica para amenizar o
                                                                 e
problema, mas ainda n˜o ´ suficiente.
                         a e
    Se a roda tiver um unico parafuso a economia de tempo ´ maior ainda. Mas
                           ´                                       e
ainda estamos na casa dos minutos, e o tempo total deve ser menor que 8 segundos.
Desistimos do campeonato?
    Com 4 pessoas, cada uma troca uma roda, divide-se o tempo por 4. Opa! J´           a
estamos abaixo de 1 minuto.
    Se tiver ainda a possibilidade de 3 pessoas por roda: um tira o parafuso, outro tira
a roda velha, um terceiro coloca a roda nova e o primeiro aperta o parafuso. Mais 2
mecˆnicos para levantar e baixar o carro todo de uma vez e est´ feito.
     a                                                             a
    Hoje em dia se trocam os quatro pneus de um carro de f´rmula 1, com direito a
                                                               o
completar o tanque de gasolina, em cerca de 6 segundos.
    Ah, o tal piloto foi campe˜o naquele ano, pois tamb´m usou o truque de aquecer
                                a                         e
˜
2.3. CONCLUSAO                                                                    13

os pneus antes da prova e andar com o carro contendo metade da gasolina, j´ que ele
                                                                            a
ia ter que parar nos boxes de qualquer maneira para trocar os pneus. . . O cara ´ um
                                                                                e
gˆnio.
 e


2.3         Conclus˜o
                   a
Mesmo para um problema simples existem diversas solu¸˜es. A escolha da melhor
                                                             co
depende de v´rios fatores. Por exemplo, se a resposta deve ser exata ou n˜o ou se os
              a                                                              a
conhecimentos pr´vios necess´rios est˜o dispon´
                  e           a        a         ıveis, e assim por diante.
    ´
    E importante notar que somente ap´s uma s´rie de considera¸oes ´ poss´ escolher
                                       o        e                c˜ e       ıvel
a melhor t´cnica e somente em seguida executar a tarefa.
            e
    Algumas solu¸˜es existem a no¸˜o de paralelismo. Hoje em dia os computadores
                  co                ca
vˆm com v´rios n´cleos de processamento e sempre existe a chance de se tentar quebrar
 e          a     u
um problema em v´rios outros menores e deixar que v´rios processadores resolvam
                     a                                     a
seus peda¸os de solu¸ao e depois tentar juntar os resultados com mais alguma opera¸˜o
          c          c˜                                                           ca
simples.
    No caso da f´rmula 1 isto funcionou, mas em geral n˜o ´ verdade. Infelizmente
                 o                                           a e
existe o problema da dependˆncia de dados. Por exemplo, o mecˆnico que vai colocar
                             e                                     a
a roda nova s´ pode trabalhar depois que o outro tirou a roda velha. Em problemas
              o
com alto grau de dependˆncia, paralelizar ´ complicado.1 .
                         e                  e




  1
      N˜o se estudar˜o algoritmos paralelos nesta disciplina.
       a            a
14   CAP´                              ¸˜
        ITULO 2. SOBRE PROBLEMAS E SOLUCOES
Cap´
   ıtulo 3

Sobre algoritmos e programas

Ap´s o estudo do problema, an´lise das diversas possibilidades de solu¸ao e a escolha
   o                           a                                      c˜
da melhor delas, cabe agora a tarefa de escrever um programa que implemente esta
solu¸ao. Antes, contudo, ´ preciso saber a diferen¸a entre um algoritmo em um
    c˜                     e                        c
programa. Isto ser´ discutido neste cap´
                  a                    ıtulo.


3.1     O que ´ um algoritmo?
              e
Um algoritmo ´ uma sequˆncia extremamente precisa de instru¸oes que, quando lida
                e          e                                   c˜
e executada por uma outra pessoa, produz o resultado esperado, isto ´, a solu¸ao de
                                                                      e       c˜
um problema. Esta sequˆncia de instru¸oes ´ nada mais nada menos que um registro
                         e              c˜ e
escrito da sequˆncia de passos necess´rios que devem ser executados para manipular
                e                    a
informa¸oes, ou dados, para se chegar na resposta do problema.
         c˜
    Isto serve por dois motivos: o primeiro ´ que atrav´s do registro se garante que
                                             e         e
n˜o haver´ necessidade de se redescobrir a solu¸ao quando muito tempo tiver passado
 a         a                                   c˜
e todos tiverem esquecido do problema; o outro motivo ´ que, as vezes, queremos
                                                          e
que outra pessoa execute a solu¸ao, mas atrav´s de instru¸˜es precisas, de maneira
                                 c˜             e          co
que n˜o haja erros durante o processo. Queremos um algoritmo para a solu¸ao do
       a                                                                      c˜
problema.
    Uma receita de bolo de chocolate ´ um bom exemplo de um algoritmo (a lista de
                                      e
ingredientes e as quantidades foram omitidas, bem como a receita da cobertura):

Bata em uma batedeira a manteiga e o a¸ucar. Junte as gemas uma a uma
                                      c´
at´ obter um creme homog^neo. Adicione o leite aos poucos. Desligue a
  e                     e
batedeira e adicione a farinha de trigo, o chocolate em p´, o fermento
                                                         o
e reserve. Bata as claras em neve e junte-as a massa de chocolate
                                             `
misturando delicadamente. Unte uma forma retangular pequena
com manteiga e farinha e leve para assar em forno m´dio pr´-aquecido
                                                   e       e
por aproximadamente 30 minutos. Desenforme o bolo ainda
quente e reserve.

    Este ´ um bom exemplo de algoritmo pois podemos extrair caracter´
         e                                                          ısticas bastante
interessantes do texto. Em primeiro lugar, a pessoa que escreveu a receita n˜o ´a e

                                         15
16                        CAP´
                             ITULO 3. SOBRE ALGORITMOS E PROGRAMAS

necessariamente a mesma pessoa que vai fazer o bolo. Logo, podemos estabelecer,
sem preju´ que foi escrita por um mas ser´ executada por outro.
          ızo,                               a
   Outras caracter´
                  ısticas interessantes que est˜o impl´
                                               a      ıcitas s˜o as seguintes:
                                                              a

     • as frases s˜o instru¸oes no modo imperativo: bata isso, unte aquilo. S˜o ordens,
                  a        c˜                                                a
       n˜o sugest˜es. Quem segue uma receita obedece quem a escreveu;
        a         o

     • as instru¸oes est˜o na forma sequencial: apenas uma pessoa executa. N˜o exis-
                c˜      a                                                   a
       tem a¸oes simultˆneas.
             c˜         a

     • existe uma ordem para se executar as instru¸˜es: primeiro bata a manteiga e
                                                  co
       o a¸ucar; depois junte as gemas, uma a uma, at´ acabar os ovos; em seguida
          c                                           e
       adicione o leite.

     • algumas instru¸oes n˜o s˜o executadas imediatamente, ´ preciso entrar em um
                     c˜    a a                              e
       modo de repeti¸ao de um conjunto de outras instru¸˜es: enquanto houver ovos
                      c˜                                co
       n˜o usados, junte mais uma gema. S´ pare quando tiver usado todos os ovos.
        a                                 o

     • algumas outras instru¸oes n˜o foram mencionadas, mas s˜o obviamente ne-
                               c˜     a                             a
       cess´rias que ocorram: ´ preciso separar as gemas das claras antes de come¸ar
           a                    e                                                  c
       a tarefa de se fazer o bolo, assim como ´ preciso ainda antes quebrar os ovos.
                                               e

     • algumas instru¸oes, ou conjunto de instru¸oes, podem ter a ordem invertida:
                      c˜                           c˜
       pode-se fazer primeiro a massa e depois a cobertura, ou vice-e-versa. Mas nunca
       se pode colocar no forno a assadeira antes de se chegar ao t´rmino do preparo
                                                                     e
       da massa.

   Mesmo levando estas coisas em considera¸ao, qualquer ser humano bem treinado
                                            c˜
em cozinha conseguiria fazer um bolo de chocolate razo´vel com as instru¸˜es acima,
                                                       a                 co
pois todas as receitas seguem o mesmo padr˜o. As conven¸˜es que est˜o impl´
                                            a               co         a      ıcitas
no algoritmo s˜o conhecidas de qualquer cozinheiro, pois seguem um formato padr˜o.
              a                                                                  a
   O formato padr˜o para algoritmos que vamos considerar ´ o seguinte:
                   a                                         e

     • as instru¸˜es ser˜o escritas uma em cada linha;
                co      a

     • as instru¸oes ser˜o executadas uma a uma, da primeira at´ a ultima linha,
                c˜      a                                          e ´
       nesta ordem, a menos que o pr´prio algoritmo tenha instru¸˜es que alterem este
                                    o                           co
       comportamento;

     • em cada linha, uma instru¸ao faz somente uma coisa;
                                c˜

     • tudo o que est´ impl´
                     a     ıcito dever´ ser explicitado.
                                      a

   A figura 3.1 ilustra a receita de bolo de chocolate escrita dentro deste formato
padr˜o.
    a
´
3.1. O QUE E UM ALGORITMO?                                                      17

Algoritmo para fazer um bolo de chocolate.
in´cio
  ı
     Providencie todos os ingredientes da receita.
     Providencie uma forma pequena.
     Ligue o forno em temperatura m´dia.
                                    e
     Coloque a menteiga na batedeira.
     Coloque o a¸ucar na batedeira.
                c
     Ligue a batedeira.
     Enquanto um creme homog^neo n~o for obtido, junte mais uma gema.
                            e     a
     Adicione aos poucos o leite.
     Desligue a batedeira.
     Adicione a farinha de trigo.
     Adicione o chocolate em p´.
                               o
     Adicione o fermento.
     Reserve a massa obtida em um lugar tempor´rio.
                                              a
     Execute o algoritmo para obter as claras em neve.
     Junte as claras em neve a massa de chocolate que estava reservada.
                              `
     Misture esta massa delicadamente.
     Execute o algoritmo para untar a forma com manteiga e farinha.
     Coloque a forma no forno.
     Espere 30 minutos.
     Tire a forma do forno.
     Desenforme o bolo ainda quente.
     Separe o bolo em um lugar tempor´rio.
                                      a
     Fa¸a a cobertura segundo o algoritmo de fazer cobertura.
       c
     Coloque a cobertura no bolo.
fim.


                Figura 3.1: Algoritmo para fazer bolo de chocolate.

  Infelizmente, nem todos conseguem fazer o bolo, pois existem instru¸˜es que so-
                                                                     co
mente os iniciados decifram:
   • “adicione aos poucos”;
   • “misturando delicadamente”;
   • “quando o creme fica homogˆneo?”. . .
                              e
    No caso do computador a situa¸ao ´ pior ainda, pois trata-se de um circuito
                                   c˜ e
eletrˆnico, de uma m´quina. Por este motivo, as instru¸oes devem ser precisas e
     o                 a                                 c˜
organizadas.
    Um algoritmo feito para um computador executar deve tornar expl´ ıcito todas as
informa¸oes impl´
        c˜       ıcitas. Tamb´m deve evitar o uso de frases amb´
                             e                                 ıguas ou imprecisas
e deve ser o mais detalhado poss´ıvel. Tamb´m n˜o pode ter frases de significado
                                             e    a
desconhecido.
    Na pr´xima se¸ao vamos desenvolver melhor este tema.
          o       c˜
18                        CAP´
                             ITULO 3. SOBRE ALGORITMOS E PROGRAMAS

3.2     O que ´ um programa?
              e
Um programa ´ a codifica¸ao em alguma linguagem formal que garanta que os pas-
               e           c˜
sos do algoritmo sejam executados da maneira como se espera por quem executa as
instru¸oes.
      c˜
    Vamos imaginar, a t´ıtulo de ilustra¸ao, que ´ a primeira vez que a pessoa entra na
                                        c˜       e
cozinha em toda a sua vida e resolve fazer um bolo de chocolate seguindo o algorimo 3.1
    O algoritmo 3.1 foi escrito por um cozinheiro para ser executado por um outro
cozinheiro, o que n˜o ´ o caso, pois a pessoa ´ inexperiente em cozinha e n˜o sabe o
                   a e                         e                              a
que significa “bater as claras em neve”. Significa que o novato vai ficar sem o bolo.
    O novato precisaria de algo mais detalhado, isto ´, de instru¸˜es meticulosas de
                                                        e          co
como se obt´m claras em neve. Poderia ser algo como ilustrado na figura 3.2.
            e
Algoritmo para fazer claras em neve
in´cio
  ı
     Repita os tr^s seguintes passos:
                  e
         Pegue um ovo.
         Quebre o ovo.
         Separe a clara da gema.
         Coloque somente a clara em um prato fundo.
     At´ que todos os ovos tenham sido utilizados.
       e
     Pegue um garfo.
     Mergulhe a ponta do garfo no prato.
     Repita os seguinteis passos:
           Bata a clara com o garfo por um tempo.
           Levante o garfo.
           Observe se a espuma produzida fica presa no garfo
     Quando a espuma ficar presa no garfo, pare.
     Neste ponto suas claras em neve est~o prontas.
                                         a
fim.


                  Figura 3.2: Algoritmo para fazer claras em neve.

    J´ temos algo mais detalhado, mas nosso inexperiente cozinheiro pode ainda ter
     a
problemas: como se separa a clara da gema? Este tipo de situa¸ao parece n˜o ter fim.
                                                               c˜           a
Qual ´ o limite do processo de detalhamento da solu¸ao?
      e                                             c˜
    O problema ´ que o cozinheiro que escreveu a receita original n˜o sabia o n´ de
                e                                                   a           ıvel
instru¸ao de quem ia efetivamente fazer o bolo. Para isto, ´ preciso que se estabele¸a
       c˜                                                  e                         c
o n´ m´
   ıvel ınimo de conhecimento para quem vai executar, assim quem escreve sabe at´      e
onde deve ir o n´ de detalhamento de sua receita.
                 ıvel
    Um programa, neste sentido, ´ um algoritmo escrito de forma t˜o detalhada quanto
                                e                                 a
for necess´rio para quem executa as instru¸oes. O algoritmo pode ser mais gen´rico,
          a                               c˜                                     e
o programa n˜o.
              a
    Como estamos pensando em deixar que o computador execute um algoritmo, pre-
cisamos escrever um programa em uma linguagem que o computador possa entender
´
3.2. O QUE E UM PROGRAMA?                                                        19

as instru¸oes para posteriormente poder execut´-las com sucesso.
         c˜                                      a
    Qual ´, afinal, o conjunto de instru¸oes que o computador conhece? Para responder
         e                             c˜
a esta pergunta precisamos conhecer melhor como funciona um computador, para, em
seguida, continuarmos no estudo de algoritmos.
20                        CAP´
                             ITULO 3. SOBRE ALGORITMOS E PROGRAMAS

3.3       Exerc´
               ıcios
     1. Escreva algoritmos como os que foram escritos neste cap´
                                                               ıtulo para cada uma
        das solu¸˜es do problema discutido na se¸ao 2.1.
                co                              c˜

     2. Escreva um algoritmo para o problema da troca de um unico pneu de um carro.
                                                            ´

     3. Escreva um algoritmo para o problema de trocar um pneu de uma bicicleta.
Cap´
   ıtulo 4

O modelo do computador

Esta se¸ao tem dois objetivos, o primeiro ´ mostrar como ´ o funcionamento dos
       c˜                                   e              e
computadores modernos, isto ´, no n´
                              e       ıvel de m´quina. A segunda ´ que o aluno
                                                a                   e
perceba, desde o in´ do seu aprendizado, as limita¸oes a que est´ sujeito quando
                   ıcio                             c˜           a
programa, e quais s˜o todas as instru¸˜es que o computador conhece.
                   a                 co

    Ao final da leitura, o estudante deve compreender que, por mais sofisticada que
seja a linguagem de programa¸˜o utilizada, a computa¸˜o de verdade ocorre como
                               ca                     ca
                    1
ser´ mostrado aqui.
   a


4.1       Hist´rico
              o
Um computador (hardware) ´ um conjunto de circuitos eletrˆnicos que manipulam
                                e                                 o
sinais el´tricos e que s˜o capazes de transformar sinais de entrada em sinais de sa´
         e              a                                                           ıda.
Os sinais el´tricos podem ser representados, basicamente, pelos n´meros zero e um.
             e                                                       u
Existem v´rias maneiras de se fazer isto, mas n˜o entraremos em detalhes neste texto.
           a                                    a
    O importante a destacar ´ que uma computa¸˜o ´ uma manipula¸˜o de dados
                                e                   ca e                  ca
residentes em mem´ria atrav´s de altera¸oes de sinais el´tricos realizadas por circuitos
                     o        e          c˜              e
integrados implementados normalmente em placas de sil´     ıcio.
    Quando os computadores foram criados, na d´cada de 1930, a programa¸ao deles
                                                  e                           c˜
era feita de maneira muito prec´ria. Era necess´rio configurar uma situa¸ao dos
                                   a                a                           c˜
circuitos para manipular os sinais el´tricos da maneira desejada para cada programa
                                      e
particular. Para se executar outro programa era necess´rio alterar os circuitos, assim
                                                         a
se reprogramando o computador para manipular os dados de outra maneira.
    Um computador era algo raro naqueles tempos, e devia rodar v´rios programas
                                                                       a
diferentes, o que resultava em imenso trabalho para os engenheiros (os programadores
eram engenheiros na ´poca).
                       e
    A mem´ria do computador, naqueles tempos, era exclusividade dos dados que
             o
seriam manipulados. O programa era feito nos circuitos eletrˆnicos.
                                                                 o
   1
    O texto que segue foi adaptado de outro escrito pelo prof. Renato Carmo para a disciplina CI-208
- Programa¸˜o de Computadores ministrada para diversos cursos na UFPR.
           ca




                                                21
22                                       CAP´
                                            ITULO 4. O MODELO DO COMPUTADOR

    John von Neumann propˆs um modelo bastante simples, no qual tanto o programa
                             o
quanto os dados poderiam ficar simultaneamente em mem´ria, desde que a parte que
                                                          o
ficaria programada nos circuitos pudesse interpretar o que era dado e o que era o
programa e realizar os c´lculos, isto ´, manipular os dados.
                         a            e
    Isto foi poss´
                 ıvel pela implementa¸ao em hardware de um limitado conjunto de
                                       c˜
instru¸oes que s˜o usados pelo programa que est´ em mem´ria. Isto revolucionou a
       c˜        a                                a          o
arte da programa¸˜o. Os computadores modernos ainda funcionam assim.
                   ca

         Nesta se¸˜o pretende-se mostrar atrav´s de um exemplo os princ´
                 ca                           e                        ıpios deste modelo.


4.2           Princ´
                   ıpios do modelo
Conforme explicado, Von Neumann propˆs que os dados e o programa poderiam ser
                                         o
carregados em mem´ria ao mesmo tempo. Um elemento adicional denominado ciclo
                     o
de execu¸˜o de instru¸˜es controla a execu¸ao do programa.
         ca            co                  c˜
   A ideia ´ implementar em hardware um pequeno conjunto de instru¸oes que n˜o
            e                                                          c˜       a
mudam e programar o computador para realizar opera¸oes complexas a partir da
                                                       c˜
execu¸ao de v´rias instru¸˜es b´sicas da m´quina.
      c˜      a           co   a           a
   Cada fabricante define o seu conjunto de instru¸oes b´sicas, mas o importante a
                                                  c˜    a
observar ´ que, uma vez implementadas, este conjunto define tudo o que o computador
          e
            ´
sabe fazer. E isto que queremos saber.

   Neste cap´
            ıtulo vamos usar como exemplo um computador fabricado pela Big Com-
puter Company (BCC).

4.2.1          Endere¸os versus conte´ dos
                     c               u
O computador da BCC implementa o modelo Von Neumann, logo, sua mem´ria           o
cont´m os dados e o programa.
     e
    A mem´ria do computador em um dado instante do tempo ´ uma configura¸˜o de
            o                                                 e               ca
sinais el´tricos que podem ser vistos pelo ser humano como uma sequˆncia absurda
          e                                                             e
de zeros e uns (chamados de bits).2
    O ser humano costuma n˜o gostar muito desta forma de visualiza¸˜o, ent˜o con-
                             a                                        ca     a
vencionou algumas maneiras de enxergar n´meros inteiros que representam os bits.
                                            u
N˜o vamos apresentar neste texto as diversas maneiras de convers˜o de n´meros, o
  a                                                                 a      u
leitor interessado pode estudar sobre representa¸˜o bin´ria na literatura.
                                                ca      a
    Vamos imaginar que a mem´ria do computador ´ uma tabela contendo ´
                                 o                    e                      ındices
(endere¸os) com conte´dos (dados). A t´
         c             u                   ıtulo de exemplo, vamos considerar uma
“fotografia” da mem´ria de um computador da BCC em um certo momento, fotografia
                     o
esta apresentada na figura 4.1


     2
         Quem assistiu ao filme Matrix pode imaginar a complica¸˜o.
                                                              ca
4.2. PRINC´
          IPIOS DO MODELO                                                            23

 Endere¸o
       c     Conte´ do
                   u        Endere¸o
                                  c       Conte´ do
                                                u             Endere¸o
                                                                    c    Conte´ do
                                                                               u
    0           1              21            49                  42         54
    1           54             22            6                   43          8
    2           2              23            52                  44         57
    3           1              24            51                  45          9
    4           50             25            3                   46         33
    5           4              26            53                  47          2
    6           7              27            46                  48         76
    7           46             28            52                  49         67
    8           4              29            5                   50         76
    9           47             30            55                  51        124
    10          46             31            53                  52         14
    11          46             32            54                  53         47
    12          7              33            8                   54        235
    13          48             34            55                  55         35
    14          4              35            2                   56         23
    15          49             36            56                  57         78
    16          50             37            46                  58        243
    17          48             38            52                  59         27
    18          3              39            5                   60         88
    19          51             40            57                  61         12
    20          47             41            56                  62         12

                     Figura 4.1: Uma fotografia da mem´ria.
                                                     o

   Para melhor entendimento, ´ importante que o leitor tenha em mente a diferen¸a
                              e                                                c
entre endere¸o e conte´do do endere¸o. Para facilitar a compreens˜o, vamos adotar
            c         u            c                             a
uma nota¸ao. Seja p um endere¸o. Denotamos por [p] o conte´do do endere¸o p.
         c˜                     c                              u            c
Vejamos alguns exemplos com base na figura 4.1:

                                          [0] = 1
                                     [[0]] = [1] = 54
                              [[[0]]] = [[1]] = [54] = 235
                                  [0] + 1 = 1 + 1 = 2
                                   [0 + 1] = [1] = 54
                            [[0] + 1] = [1 + 1] = [2] = 2
                         [[0] + [1]] = [1 + 54] = [55] = 35

4.2.2    O repert´rio de instru¸oes
                 o             c˜
Conforme mencionado, o modelo Von Neumann pressup˜e que o computador que est´
                                                      o                          a
em uso possui um conjunto limitado de instru¸oes programado em hardware.
                                             c˜
   Cada equipamento tem o seu repert´rio de instru¸˜es. O repert´rio do computador
                                    o             co            o
da BCC foi definido ap´s longas discuss˜es da equipe t´cnica da empresa e tem um
                      o               o                e
conjunto extremamente limitado de instru¸˜es, na verdade apenas nove.
                                        co
24                                 CAP´
                                      ITULO 4. O MODELO DO COMPUTADOR

  Esta defini¸˜o levou em conta a capacidade financeira da empresa que n˜o tinha
             ca                                                            a
muita verba para gravar em circuitos integrados um conjunto mais rico de instru¸˜es.
                                                                               co
                                                                             3
  As nove instru¸oes do computador da BCC s˜o apresentadas na figura 4.2. .
                 c˜                             a




 C´digo
  o          Mnemˆnico Descri¸˜o
                  o             ca                           Nota¸˜o
                                                                   ca
    1          load    escreva em [p + 1] o valor do         [p + 1] ← [p + 2].
                       n´mero em [p + 2] e some 3
                         u
                       em p
         2      add    escreva em [p + 1] o valor da         [p + 1] ← [[p + 2]] + [[p + 3]].
                       soma dos n´meros em [[p +
                                     u
                       2]] e [[p + 3]] e some 4 em p
         3      sub    escreva em [p + 1] o valor            [p + 1] ← [[p + 2]] − [[p + 3]].
                       da subtra¸ao do n´mero em
                                  c˜        u
                       [[p+2]] pelo n´mero em [[p+
                                       u
                       3]] e some 4 em p
         4     mult    escreva em [p + 1] o valor            [p + 1] ← [[p + 2]] × [[p + 3]].
                       do produto dos n´meros em
                                           u
                       [[p + 2]] e [[p + 3]] e some 4
                       em p
                                                                         [[p+2]]
         5      div    escreva em [p + 1] o valor da         [p + 1] ←   [[p+3]]
                                                                                 .
                       divis˜o do n´mero em [[p +
                             a        u
                       2]] pelo n´mero em [[p + 3]]
                                  u
                       e some 4 em p
         6     sqrt    escreva em [p + 1] o valor da         [p + 1] ←      [[p + 2]].
                       raiz quadrada de [[p + 2]] e
                       some 3 em p
         7     read    leia um n´mero do teclado,
                                   u                         [p + 1] ← ∨.
                       escreva-o em [p + 1] e some
                       2 em p
         8     write   escreva [[p + 1]] na tala e               ← [[p + 1]].
                       some 2 em p
         9     stop    pare                                  •

             Figura 4.2: O repert´rio de instru¸oes do computador da BCC.
                                 o             c˜




     3
    Os concorrentes comerciais famosos da BCC implementam algumas centenas de instru¸˜es, e
                                                                                    co
ainda nenhuma delas ´ a de bater claras em neve.
                     e
4.2. PRINC´
          IPIOS DO MODELO                                                           25

4.2.3    O ciclo de execu¸˜o de instru¸˜es
                         ca           co
O ciclo de execu¸˜o de instru¸˜es define o comportamento do computador. Funciona
                ca           co
assim (no computador da BCC):

  1. comece com p = 0;
  2. interprete [p] de acordo com a tabela de instru¸˜es e pare somente quando a
                                                    co
     instru¸ao for uma ordem de parar (instru¸ao 9, stop).
           c˜                                c˜

    Devemos lembrar que este comportamento tamb´m est´ implementado nos circui-
                                               e     a
tos eletrˆnicos do computador da BCC.
         o

4.2.4    Exemplo de execu¸˜o de um programa
                         ca
A grande surpresa por tr´s do modelo de Von Neumann ´ que, mesmo que o leitor
                           a                               e
ainda n˜o compreenda, o que existe na verdade “disfar¸ado” na fotografia da mem´ria
       a                                               c                          o
da figura 4.1 ´ um programa que pode ser executado pelo computador, desde que todo
             e
o processo siga as instru¸˜es descritas na se¸˜o anterior.
                         co                   ca
   Vamos tentar acompanhar passo a passo como ´ o funcionamento deste esquema.
                                                     e
Para isto, o leitor talvez queira ir marcando, a l´pis, as altera¸˜es que ser˜o feitas
                                                    a            co          a
                     o                            o             ´
a seguir em uma c´pia da “fotografia da mem´ria” acima. E recomendado neste
momento se ter uma vers˜o impressa daquela p´gina.
                          a                      a
   Notem que, no momento, n˜o ´ necess´rio sabermos qual o programa implemen-
                                a e         a
tado, afinal de contas, o computador jamais saber´. . . Ele executa cegamente as ins-
                                                     a
tru¸oes. N´s saberemos logo a frente, mas, agora, para entendermos como ´ o funci-
   c˜      o                  `                                             e
onamento deste modelo, vamos nos imaginar fazendo o papel do computador.

  1. O programa come¸a com p = 0
                    c
  2. Em seguida, ´ preciso interpretar [p], isto ´ [0] = 1. A instru¸ao de c´digo “1” ´
                  e                              e                  c˜      o         e
     “load”, cujo comportamento ´, segundo a tabela de instru¸˜es “escreva em [2]
                                   e                               co
     o valor do n´mero em [3] e some 3 em p”. Ora, [2] = 54 e [3] = 2. Logo, o valor
                 u
     2 ´ colocado como sendo o conte´do da posi¸˜o 54. Havia nesta posi¸˜o o valor
       e                             u              ca                      ca
     235. Ap´s a execu¸ao da instru¸ao, existe um 2 neste lugar. O valor 235 n˜o
              o        c˜            c˜                                             a
     existe mais. Ao final foi somado 3 no valor de p, isto ´, agora p = 3.
                                                             e
  3. Como p = 3 devemos interpretar [3] = 1. Logo, a instru¸ao ´ novamente “load”.
                                                           c˜ e
     Analogamente ao que foi feito no par´grafo anterior, o conte´do de [5] = 4 ´
                                          a                        u             e
     colocado como sendo o conte´do da posi¸ao [4] = 50. Na posi¸ao 50 havia o
                                 u           c˜                      c˜
     valor 76. Ap´s a execu¸ao da instru¸˜o o 76 d´ lugar ao 4. Ao final o valor de
                   o         c˜         ca        a
     p foi atualizado para 6.
  4. Como p = 6 devemos interpretar [6] = 7. Logo, a instru¸˜o para ser executada
                                                              ca
     agora ´ “read”, isto ´, esperar o usu´rio digitar algo no teclado e carregar este
            e              e              a
     valor em [p + 1] = [7] = 46. Supondo que o usu´rio digitou o valor 5, este agora
                                                     a
     substitui o antigo valor, que era 33. Ao final, o valor de p foi atualizado de 6
     para 8.
26                                CAP´
                                     ITULO 4. O MODELO DO COMPUTADOR

     5. Como p = 8 devemos interpretar [8] = 4. Logo, a instru¸˜o a ser executada
                                                                   ca
        ´ “mult”. Isto faz com que o computador fa¸a a multiplica¸ao do valor em
        e                                              c              c˜
        [[10]] = [46] pelo mesmo valor em [[11]] = [46]. O valor em [46] ´ 5 (aquele
                                                                            e
        n´mero que o usu´rio tinha digitado no teclado). O resultado da multiplica¸˜o,
          u               a                                                       ca
        5 × 5 = 25, ´ carregado na posi¸˜o de mem´ria [9] = 47. O valor ali que era 2
                     e                 ca           o
        agora passa a ser 25. Ao final, ao valor de p foi somado 4, logo neste momento
        p = 12.


    ´
   E importante salientar que este ´ um processo repetitivo que s´ terminar´ quando
                                   e                             o          a
a instru¸˜o “stop” for a da vez. O leitor ´ encorajado a acompanhar a execu¸˜o
        ca                                 e                                      ca
passo a passo at´ o final para entender como ´ exatamente o comportamento dos
                 e                             e
computadores quando executam programas. Isto ´, fica como exerc´
                                                   e                   ıcio ao leitor!
Destacamos que os circuitos implementados cuidam da altera¸˜o do estado el´trico
                                                              ca               e
dos circuitos da mem´ria.
                     o


4.3       Humanos versus computadores
N´s seres humanos n˜o nos sentimos muito a vontade com este tipo de trabalho
  o                    a                           `
repetitivo. Temos a tendˆncia a identificar “meta-regras” e executar a opera¸ao com
                         e                                                     c˜
base em um comportamento de mais alto n´      ıvel. Em suma, n´s aprendemos algo neste
                                                               o
processo, coisa que o computador s´ faz em filmes de fic¸˜o cient´
                                      o                    ca      ıfica.
    A primeira coisa que nos perguntamos ´: por qual motivo ora se soma um valor
                                               e
em p, ora outro? Isto ´, quando executamos a opera¸˜o “load”, o valor somado em p
                       e                               ca
foi 3. Depois, quando executada a opera¸ao “read” o valor somado foi 2. Em seguida,
                                          c˜
para a instru¸˜o “mult” o valor somado foi 4.
              ca
    O estudante atento, notadamente aquele que foi at´ o final na execu¸ao do ciclo de
                                                        e                c˜
opera¸oes deixado como exerc´
       c˜                      ıcio, talvez tenha percebido uma sutileza por tr´s deste
                                                                                a
modelo.
    De fato, quando se executa a instru¸ao [p], o conte´do de [p+1] sempre ´ o endere¸o
                                        c˜             u                    e        c
de destino dos dados que s˜o resultado da opera¸ao em execu¸ao. Os endere¸os
                             a                        c˜            c˜              c
subsequentes apontam para os operandos da opera¸ao que est´ programada para
                                                        c˜         a
acontecer.
    Assim:

     • Se for uma multiplica¸˜o, subtra¸ao ou soma, precisamos de dois operandos e
                             ca          c˜
       do endere¸o destino, por isto se soma 4 em p;
                c

     • Se for um “load” precisamos de um operando apenas, assim como para a raiz
       quadrada, por isto se soma 3 em p;

     • Se for uma leitura do teclado ou uma escrita na tela do computador, ent˜o um
                                                                              a
       unico argumento ´ necess´rio, por isto se soma apenas 2 em p.
       ´                e        a

   Uma outra observa¸ao importante ´ que, por quest˜es de hardware, o computador
                     c˜              e               o
precisa entender a mem´ria como esta esp´cie de “tripa”. O ser humano, ao contr´rio,
                      o                 e                                      a
4.3. HUMANOS VERSUS COMPUTADORES                                               27

uma vez que j´ identificou pequenos blocos relacionados as instru¸oes, pode tentar
              a                                           `        c˜
entender esta mesma mem´ria em outro formato, isto ´, separando cada um destes
                           o                           e
pequenos blocos em uma unica linha.
                         ´
    Observamos que apenas os n´meros de 1 a 9 podem ser interpretados como c´digos
                               u                                             o
de alguma instru¸˜o, pois s˜o os unicos c´digos da tabela de instru¸oes da BCC.
                ca         a     ´       o                         c˜
    A separa¸ao dos pequenos blocos resulta em uma visualiza¸˜o em que os dados
            c˜                                                 ca
s˜o separados das instru¸˜es numa mesma linha, cada linha agora representa toda a
 a                      co
instru¸ao com os dados. Isto pode ser visto na figura 4.3. Importante notar que ´ a
      c˜                                                                        e
mesma informa¸ao da figura 4.1, s´ que em outro formato visual.
               c˜                 o

             Endere¸o Instru¸ao Operando Operando Operando
                   c        c˜
                0         1        54        2
                3         1        50        4
                6         7        46
                8         4        47       46       46
               12         7        48
               14         4        49       50       48
               18         3        51       47       49
               22         6        52       51
               25         3        53       46       52
               29         5        55       53       54
               33         8        55
               35         2        56       46       52
               39         5        57       56       54
               43         8        57
               45         9


                       Figura 4.3: Separando as instru¸oes.
                                                      c˜


4.3.1    Abstra¸˜o dos endere¸os
               ca            c
Continuando nossa explora¸ao de aspectos percebidos pelo ser humano a partir da
                         c˜
maneira como o computador trabalha, agora ´ poss´ percebermos mais duas coisas
                                          e     ıvel
importantes:

  1. O computador n˜o mudou seu modo de operar, ele continua executando as
                     a
     instru¸oes na mem´ria conforme foi apresentado na se¸ao 4.2.4;
           c˜          o                                 c˜

  2. A visualiza¸˜o na forma apresentada na figura 4.3 ´ apenas uma maneira mais
                ca                                    e
     simples para o ser humano perceber o que o computador est´ fazendo.
                                                               a

   Esta segunda observa¸ao ´ muito importante. Ela nos permite aumentar o grau de
                         c˜ e
“facilidade visual” ou, dizendo de outra maneira, o grau de nota¸˜o sobre o modelo
                                                                ca
Von Neumann, o que vai nos permitir a compreens˜o do processo de uma maneira
                                                    a
cada vez mais “humana”.
28                               CAP´
                                    ITULO 4. O MODELO DO COMPUTADOR

    De fato, a partir da figura 4.3, podemos perceber que o endere¸o em que ocorre
                                                                   c
a instru¸ao ´ irrelevante para n´s, humanos. Podemos perfeitamente compreender o
        c˜ e                    o
processo de computa¸˜o se eliminarmos a coluna do “Endere¸o” na figura 4.3.
                      ca                                   c
    A figura 4.4 ilustra como ficaria o programa em mem´ria visto de outra maneira,
                                                       o
agora n˜o apenas em formato de blocos mas tamb´m sem a coluna dos endere¸os. Va-
        a                                       e                           c
mos perceber que, apesar de muito parecido com a figura anterior, o grau de “polui¸ao
                                                                                 c˜
visual” ´ bem menor.
        e

                   Instru¸ao Operando Operando Operando
                         c˜
                       1        54        2
                       1        50        4
                       7        46
                       4        47       46       46
                       7        48
                       4        49       50       48
                       3        51       47       49
                       6        52       51
                       3        53       46       52
                       5        55       53       54
                       8        55
                       2        56       46       52
                       5        57       56       54
                       8        57
                       9


                       Figura 4.4: Abstra¸ao dos endere¸os.
                                         c˜            c

    Vale a pena refor¸ar: o computador n˜o mudou, ele continua operando sobre os
                       c                   a
circuitos eletrˆnicos, o que estamos fazendo ´ uma tentativa, um pouco mais humana,
               o                             e
de enxergar isto.

4.3.2    Abstra¸˜o dos c´digos das instru¸oes
               ca       o                c˜
Continuando neste processo de “fazer a coisa do modo mais confort´vel para o ser
                                                                       a
humano”, afirmamos que ´ poss´ aumentar ainda mais o grau de nota¸˜o.
                           e     ıvel                                      ca
    Para a etapa seguinte, vamos observar que, embora os computadores manipulem
n´meros (em particular, n´meros bin´rios) de maneira muito eficiente e r´pida, o
 u                           u         a                                      a
mesmo n˜o ocorre para os humanos, que tˆm a tendˆncia a preferirem nomes.
         a                                 e         e
    De fato, basta observar que n´s usamos no nosso dia-a-dia nomes tais como Marcos,
                                 o
Jos´ ou Maria e n˜o n´meros tais como o RG do Marcos, o CPF do Jos´ ou o PIS da
   e               a u                                                   e
Maria.
    Ora, j´ que ´ assim, qual o motivo de usarmos os n´meros 1 − 9 para as instru¸oes
          a     e                                      u                         c˜
se podemos perfeitamente usar o mnemˆnico associado ao c´digo?
                                         o                   o
    Desta forma, vamos modificar ainda mais uma vez nossa visualiza¸ao da mem´ria,
                                                                     c˜          o
desta vez escrevendo os nomes dos mnemˆnicos no lugar dos n´meros. Assim, na
                                            o                    u
4.3. HUMANOS VERSUS COMPUTADORES                                                  29

coluna Instru¸˜o, substituiremos o n´mero 1 por load, 2 por add, 3 por sub e assim
              ca                     u
por diante, conforme a figura 4.2.
   O programa da figura 4.4 pode ser visualizado novamente de outra forma, tal como
apresentado na figura 4.5. Notem que o grau de compreens˜o do c´digo, embora ainda
                                                        a     o
n˜o esteja em uma forma totalmente amig´vel, j´ ´ bastante melhor do que aquela
 a                                         a    ae
primeira apresenta¸ao da “fotografia da mem´ria”.
                   c˜                        o
   De fato, agora ´ poss´ compreender o significado das linhas, em que existe um
                   e     ıvel
destaque para a opera¸˜o (o mnemˆnico), a segunda coluna ´ o endere¸o de destino
                      ca           o                       e         c
da opera¸˜o e as outras colunas s˜o os operandos.
         ca                      a

                   Instru¸ao Operando Operando Operando
                         c˜
                     load       54       2
                     load       50       4
                     read       46
                     mult       47       46       46
                     read       48
                     mult       49       50       48
                      sub       51       47       49
                     sqrt       52       51
                      sub       53       46       52
                      div       55       53       54
                     write      55
                      add       56       46       52
                      div       57       56       54
                     write      57
                     stop


                 Figura 4.5: Programa reescrito com Mnemˆnicos.
                                                        o

   O que falta ainda a ser melhorado? N´s humanos usamos desde a mais tenra idade
                                       o
outro tipo de nota¸ao para representarmos opera¸oes. Este ´ o pr´ximo passo.
                  c˜                           c˜         e     o

4.3.3    Abstra¸˜o do repert´rio de instru¸˜es
               ca           o             co
Nesta etapa, observaremos que as instru¸˜es executadas pelo computador nada mais
                                         co
s˜o do que manipula¸ao dos dados em mem´ria. Os c´lculos s˜o feitos sobre os dados
 a                   c˜                     o          a      a
e o resultado ´ colocado em alguma posi¸ao de mem´ria.
              e                          c˜           o
    Podemos melhorar o grau de abstra¸ao considerando a nota¸˜o apresentada na
                                         c˜                       ca
figura 4.6. Isto ´, vamos usar as tradicionais letras finais do alfabeto para ajudar na
                e
melhoria da facilidade visual. Assim poderemos reescrever o programa mais uma vez
e ele ficar´ como apresentado na figura 4.7.
          a
30                              CAP´
                                   ITULO 4. O MODELO DO COMPUTADOR

                                     [p]    Instru¸˜o
                                                   ca    Nota¸˜o
                                                              ca
                                     1      load x y     x ← [y]
                                     2      add x y z    x ← [y] + [z]
                                     3      sub x y z    x ← [y] − [z]
              x = [p + 1]            4      mult x y z   x ← [y] × [z]
              y = [p + 2]
                                     5      div x y z    x ← [y]
                                                             [z]
              z = [p + 3]
                                     6      sqrt x y     x ← [y]
                                     7      read x       x←V
                                     8      write x      V ← [x]
                                     9      stop         •
                      Figura 4.6: Nota¸ao para as instru¸˜es.
                                      c˜                co

                                54 ←       2
                                50 ←       4
                                46 ←       ∨
                                47 ←       [46] × [46]
                                48 ←       ∨
                                49 ←       [50] × [48]
                                51 ←       [47] − [49]
                                52 ←         [[51]]
                                53 ←       [46] − [52]
                                           [53]
                                55 ←       [54]
                                   ←       [55]
                                56 ←       [46] + [52]
                                           [56]
                                57 ←       [54]
                                   ←       [57]
                                •

                  Figura 4.7: Programa escrito sob nova nota¸ao.
                                                            c˜

4.3.4    Abstra¸˜o dos endere¸os de mem´ria (vari´veis)
               ca            c         o         a
Na verdade, assim como j´ observamos que o c´digo da instru¸ao n˜o nos interessa,
                          a                   o              c˜ a
vamos perceber que o mesmo ´ verdade com rela¸˜o aos endere¸os de mem´ria. Ent˜o,
                              e               ca           c         o        a
convencionaremos que os n´meros podem ser trocados por nomes. Fazemos isto na
                            u
vers˜o seguinte do mesmo programa.
     a
    Conv´m notar que o ser humano gosta de dar nomes apropriados para as coi-
         e
sas4 . Assim, ´ importante que os nomes que usarmos tenham alguma rela¸˜o com o
              e                                                        ca
     4
     Quem quiser ter uma ideia do estrago quando n˜o damos bons nomes para as
                                                      a
coisas, pode acompanhar dois di´logos humor´
                                 a           ısticos, um deles, o original, da du-
pla Abbot & Costello sobre um jogo de beisebol, a outra de um ex-presidente
dos Estados Unidos falando sobre o novo presidente da China.       Ambos os v´ıdeos
est˜o dispon´
   a        ıveis no YouTube:  (1) http://www.youtube.com/watch?v=sShMA85pv8M; (2)
http://www.youtube.com/watch?v=Lr1DWkgUBTw.
¸˜            ¸˜
4.4. ABSTRACAO DAS INSTRUCOES (LINGUAGEM)                                        31

significado que eles est˜o desempenhando no programa.
                       a
    Ent˜o chega o momento de n´s sabermos que o programa que est´ em mem´ria
       a                        o                                a         o
recebe como entrada dois valores b e c e escreve como sa´ as ra´
                                                        ıda    ızes da equa¸ao
                                                                           c˜
x2 − bx + c = 0. Os c´lculos usam o m´todo de B´skara. A figura 4.8 mostra a
                         a               e         a
conven¸˜o para a substitui¸˜o dos endere¸os por nomes.
       ca                  ca           c


                          Endere¸o
                                c      Nome
                          54           dois
                          50           quatro
                          46           B
                          47           quadradoB
                          48           C
                          49           quadruploC
                          51           discriminante
                          52           raizDiscriminante
                          53           dobroMenorRaiz
                          55           menorRaiz
                          56           dobroMaiorRaiz
                          57           maiorRaiz

                   Figura 4.8: Dando nomes para os endere¸os.
                                                         c



    Agora, usaremos esta conven¸ao de troca de endere¸os por nomes para podermos
                               c˜                    c
reescrever o programa ainda mais uma vez, obtendo a vers˜o da figura 4.9.
                                                         a
    Esta vers˜o define o ultimo grau de abstra¸˜o simples. A partir deste ponto a
             a           ´                    ca
nota¸ao deixa de ser s´ uma abreviatura das instru¸oes e a tradu¸ao deixa de ser
     c˜               o                            c˜            c˜
direta.



   Apesar do fato de ser o ultimo n´ de nota¸ao simples, ainda ´ poss´ melhorar-
                            ´        ıvel       c˜               e    ıvel
mos o grau de facilidade visual, mas desta vez passamos para a nota¸ao ou linguagem
                                                                   c˜
de “alto n´
          ıvel”, que vai exigir a introdu¸ao dos chamados compiladores.
                                          c˜


4.4     Abstra¸˜o das instru¸˜es (linguagem)
              ca            co
Apesar de todas as nota¸oes e conven¸oes que foram feitas no programa, at´ se chegar
                        c˜           c˜                                  e
na vers˜o mostrada na figura 4.9, de certa maneira, o programa ainda est´ em um
       a                                                                   a
formato muito parecido com o do programa original.
   Para que seja poss´ aumentar o n´ de nota¸ao ainda mais ´ preciso contar com
                     ıvel             ıvel       c˜             e
a ajuda de programas tradutores, ou como eles s˜o mais conhecidos, os compiladores.
                                               a
   Estes programas conseguem receber como entrada um texto escrito em um for-
mato adequado e gerar como sa´ um programa no formato da m´quina. Isto ´
                                 ıda                                a              e
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados
Estrutura de dados

More Related Content

What's hot

Apostila ruby-completa
Apostila ruby-completaApostila ruby-completa
Apostila ruby-completamako2887
 
Programacao cpp
Programacao cppProgramacao cpp
Programacao cppTiago
 
Tcc Mauricio Bento Ghem 2009 - Versão Final
Tcc Mauricio Bento Ghem 2009 - Versão FinalTcc Mauricio Bento Ghem 2009 - Versão Final
Tcc Mauricio Bento Ghem 2009 - Versão Finalimpalador69
 
K19 k01-logica-de-programacao-em-java
K19 k01-logica-de-programacao-em-javaK19 k01-logica-de-programacao-em-java
K19 k01-logica-de-programacao-em-javaAndré Bellarmino
 
Dissertação Mestrado
Dissertação MestradoDissertação Mestrado
Dissertação MestradoJoel Carvalho
 
História da criptografia
História da criptografiaHistória da criptografia
História da criptografiatiojoffre
 
Drivers de Dispositivos Linux
Drivers de Dispositivos LinuxDrivers de Dispositivos Linux
Drivers de Dispositivos LinuxHudson Augusto
 
Manipulando pacotes
Manipulando pacotesManipulando pacotes
Manipulando pacotesTiago
 
Linux basico
Linux basicoLinux basico
Linux basicoTiago
 
Apostila de Java: Orientação a Objetos
Apostila de Java: Orientação a ObjetosApostila de Java: Orientação a Objetos
Apostila de Java: Orientação a ObjetosK19 Treinamentos
 
Apostila Tutorial CakePHP
Apostila Tutorial CakePHPApostila Tutorial CakePHP
Apostila Tutorial CakePHPFernando Palma
 
Aprenda a Programar com C#
Aprenda a Programar com C#Aprenda a Programar com C#
Aprenda a Programar com C#Antonio Trigo
 
Programming Languages Paradigms
Programming Languages ParadigmsProgramming Languages Paradigms
Programming Languages Paradigmsrodrigovmoraes
 

What's hot (18)

Apostila ruby-completa
Apostila ruby-completaApostila ruby-completa
Apostila ruby-completa
 
Scilab programacao
Scilab programacaoScilab programacao
Scilab programacao
 
Programacao cpp
Programacao cppProgramacao cpp
Programacao cpp
 
Tcc Mauricio Bento Ghem 2009 - Versão Final
Tcc Mauricio Bento Ghem 2009 - Versão FinalTcc Mauricio Bento Ghem 2009 - Versão Final
Tcc Mauricio Bento Ghem 2009 - Versão Final
 
Tutorial de Uppaal
Tutorial de UppaalTutorial de Uppaal
Tutorial de Uppaal
 
K19 k01-logica-de-programacao-em-java
K19 k01-logica-de-programacao-em-javaK19 k01-logica-de-programacao-em-java
K19 k01-logica-de-programacao-em-java
 
Dissertação Mestrado
Dissertação MestradoDissertação Mestrado
Dissertação Mestrado
 
Apostila tex
Apostila texApostila tex
Apostila tex
 
História da criptografia
História da criptografiaHistória da criptografia
História da criptografia
 
Drivers de Dispositivos Linux
Drivers de Dispositivos LinuxDrivers de Dispositivos Linux
Drivers de Dispositivos Linux
 
Manipulando pacotes
Manipulando pacotesManipulando pacotes
Manipulando pacotes
 
Linux basico
Linux basicoLinux basico
Linux basico
 
Apostila de Java: Orientação a Objetos
Apostila de Java: Orientação a ObjetosApostila de Java: Orientação a Objetos
Apostila de Java: Orientação a Objetos
 
Apostila Tutorial CakePHP
Apostila Tutorial CakePHPApostila Tutorial CakePHP
Apostila Tutorial CakePHP
 
Aprenda a Programar com C#
Aprenda a Programar com C#Aprenda a Programar com C#
Aprenda a Programar com C#
 
Programming Languages Paradigms
Programming Languages ParadigmsProgramming Languages Paradigms
Programming Languages Paradigms
 
Apostila geo gebra
Apostila geo gebraApostila geo gebra
Apostila geo gebra
 
Php
PhpPhp
Php
 

Similar to Estrutura de dados

Algoritmos jabour
Algoritmos jabourAlgoritmos jabour
Algoritmos jabourfjabour
 
Ncl e Lua - desenvolvendo aplicações interativas para tv digital
Ncl e Lua - desenvolvendo aplicações interativas para tv digitalNcl e Lua - desenvolvendo aplicações interativas para tv digital
Ncl e Lua - desenvolvendo aplicações interativas para tv digitalRafael Carvalho
 
PSI2594 - Projeto de Formatura - Escola Politecnica da Usp - LabTeX : Interfa...
PSI2594 - Projeto de Formatura - Escola Politecnica da Usp - LabTeX : Interfa...PSI2594 - Projeto de Formatura - Escola Politecnica da Usp - LabTeX : Interfa...
PSI2594 - Projeto de Formatura - Escola Politecnica da Usp - LabTeX : Interfa...Fernando José Capeletto Neto
 
Handbook de ti_para_concursos
Handbook de ti_para_concursosHandbook de ti_para_concursos
Handbook de ti_para_concursosfernandao777
 
Handbook de ti para concursos – o guia definitivo
Handbook de ti para concursos – o guia definitivoHandbook de ti para concursos – o guia definitivo
Handbook de ti para concursos – o guia definitivoAri Filho
 
Shell script
Shell scriptShell script
Shell scriptTiago
 
Apostila com limites e derivada
Apostila com limites e derivadaApostila com limites e derivada
Apostila com limites e derivadaWalmar de Paula
 
Relatório de Projecto de Licenciatura
Relatório de Projecto de LicenciaturaRelatório de Projecto de Licenciatura
Relatório de Projecto de LicenciaturaJoel Carvalho
 
Protecao-por-sprinklers-em-depositos-de-grande-altura.pdf
Protecao-por-sprinklers-em-depositos-de-grande-altura.pdfProtecao-por-sprinklers-em-depositos-de-grande-altura.pdf
Protecao-por-sprinklers-em-depositos-de-grande-altura.pdfLuizSilva791823
 
Handbook de ti para concursos
Handbook de ti para concursosHandbook de ti para concursos
Handbook de ti para concursosalalves31
 
F ferrari ccechinel-introducao-a-algoritmos
F ferrari ccechinel-introducao-a-algoritmosF ferrari ccechinel-introducao-a-algoritmos
F ferrari ccechinel-introducao-a-algoritmospaula maria
 
F ferrari ccechinel-introducao-a-algoritmos
F ferrari ccechinel-introducao-a-algoritmosF ferrari ccechinel-introducao-a-algoritmos
F ferrari ccechinel-introducao-a-algoritmososmarpx
 
F ferrari ccechinel-introducao-a-algoritmos
F ferrari ccechinel-introducao-a-algoritmosF ferrari ccechinel-introducao-a-algoritmos
F ferrari ccechinel-introducao-a-algoritmosRicardo Borges
 
257553303-Resumo-TI-Para-Concursos.pdf
257553303-Resumo-TI-Para-Concursos.pdf257553303-Resumo-TI-Para-Concursos.pdf
257553303-Resumo-TI-Para-Concursos.pdfRicardoZorekDaniel1
 
Fortran_95_curso_basico_Editora_XXX.pdf
Fortran_95_curso_basico_Editora_XXX.pdfFortran_95_curso_basico_Editora_XXX.pdf
Fortran_95_curso_basico_Editora_XXX.pdfMarcosSilva130534
 

Similar to Estrutura de dados (20)

Algoritmos jabour
Algoritmos jabourAlgoritmos jabour
Algoritmos jabour
 
Introdução às redes
Introdução às redesIntrodução às redes
Introdução às redes
 
Ncl e Lua - desenvolvendo aplicações interativas para tv digital
Ncl e Lua - desenvolvendo aplicações interativas para tv digitalNcl e Lua - desenvolvendo aplicações interativas para tv digital
Ncl e Lua - desenvolvendo aplicações interativas para tv digital
 
Arquitetura computadores
Arquitetura computadoresArquitetura computadores
Arquitetura computadores
 
Curso C
Curso CCurso C
Curso C
 
PSI2594 - Projeto de Formatura - Escola Politecnica da Usp - LabTeX : Interfa...
PSI2594 - Projeto de Formatura - Escola Politecnica da Usp - LabTeX : Interfa...PSI2594 - Projeto de Formatura - Escola Politecnica da Usp - LabTeX : Interfa...
PSI2594 - Projeto de Formatura - Escola Politecnica da Usp - LabTeX : Interfa...
 
Handbook de ti_para_concursos
Handbook de ti_para_concursosHandbook de ti_para_concursos
Handbook de ti_para_concursos
 
Handbook de ti para concursos – o guia definitivo
Handbook de ti para concursos – o guia definitivoHandbook de ti para concursos – o guia definitivo
Handbook de ti para concursos – o guia definitivo
 
Shell script
Shell scriptShell script
Shell script
 
Taxonomias
TaxonomiasTaxonomias
Taxonomias
 
Apostila com limites e derivada
Apostila com limites e derivadaApostila com limites e derivada
Apostila com limites e derivada
 
Relatório de Projecto de Licenciatura
Relatório de Projecto de LicenciaturaRelatório de Projecto de Licenciatura
Relatório de Projecto de Licenciatura
 
Protecao-por-sprinklers-em-depositos-de-grande-altura.pdf
Protecao-por-sprinklers-em-depositos-de-grande-altura.pdfProtecao-por-sprinklers-em-depositos-de-grande-altura.pdf
Protecao-por-sprinklers-em-depositos-de-grande-altura.pdf
 
Handbook de ti para concursos
Handbook de ti para concursosHandbook de ti para concursos
Handbook de ti para concursos
 
F ferrari ccechinel-introducao-a-algoritmos
F ferrari ccechinel-introducao-a-algoritmosF ferrari ccechinel-introducao-a-algoritmos
F ferrari ccechinel-introducao-a-algoritmos
 
F ferrari ccechinel-introducao-a-algoritmos
F ferrari ccechinel-introducao-a-algoritmosF ferrari ccechinel-introducao-a-algoritmos
F ferrari ccechinel-introducao-a-algoritmos
 
F ferrari ccechinel-introducao-a-algoritmos
F ferrari ccechinel-introducao-a-algoritmosF ferrari ccechinel-introducao-a-algoritmos
F ferrari ccechinel-introducao-a-algoritmos
 
F ferrari ccechinel-introducao-a-algoritmos
F ferrari ccechinel-introducao-a-algoritmosF ferrari ccechinel-introducao-a-algoritmos
F ferrari ccechinel-introducao-a-algoritmos
 
257553303-Resumo-TI-Para-Concursos.pdf
257553303-Resumo-TI-Para-Concursos.pdf257553303-Resumo-TI-Para-Concursos.pdf
257553303-Resumo-TI-Para-Concursos.pdf
 
Fortran_95_curso_basico_Editora_XXX.pdf
Fortran_95_curso_basico_Editora_XXX.pdfFortran_95_curso_basico_Editora_XXX.pdf
Fortran_95_curso_basico_Editora_XXX.pdf
 

More from Fernando Palma

CRM Gerenciamento Do Relacionamento Com Clientes | Prof. Francisco Alves | C...
CRM Gerenciamento Do Relacionamento Com Clientes | Prof. Francisco Alves |  C...CRM Gerenciamento Do Relacionamento Com Clientes | Prof. Francisco Alves |  C...
CRM Gerenciamento Do Relacionamento Com Clientes | Prof. Francisco Alves | C...Fernando Palma
 
Formação em ciência de dados
Formação em ciência de dadosFormação em ciência de dados
Formação em ciência de dadosFernando Palma
 
Apostila de Introdução ao Arduino
Apostila de Introdução ao ArduinoApostila de Introdução ao Arduino
Apostila de Introdução ao ArduinoFernando Palma
 
Apostila Arduino Basico
Apostila Arduino BasicoApostila Arduino Basico
Apostila Arduino BasicoFernando Palma
 
Cartilha Segurança na Internet - CERT.br
Cartilha Segurança na Internet - CERT.brCartilha Segurança na Internet - CERT.br
Cartilha Segurança na Internet - CERT.brFernando Palma
 
Ebook Apache Server: Guia Introdutório
Ebook Apache Server: Guia IntrodutórioEbook Apache Server: Guia Introdutório
Ebook Apache Server: Guia IntrodutórioFernando Palma
 
Apostila Zend Framework
Apostila Zend FrameworkApostila Zend Framework
Apostila Zend FrameworkFernando Palma
 
Ebook Governança de TI na Prática
Ebook Governança de TI na PráticaEbook Governança de TI na Prática
Ebook Governança de TI na PráticaFernando Palma
 
Simulado ITIL Foundation - Questões Comentadas
Simulado ITIL Foundation - Questões ComentadasSimulado ITIL Foundation - Questões Comentadas
Simulado ITIL Foundation - Questões ComentadasFernando Palma
 
Introdução à Aprendizagem de Máquina
Introdução à Aprendizagem de MáquinaIntrodução à Aprendizagem de Máquina
Introdução à Aprendizagem de MáquinaFernando Palma
 
PDTI - Plano Diretor de Tecnologia da Informação (modelo)
PDTI - Plano Diretor de Tecnologia da Informação (modelo)PDTI - Plano Diretor de Tecnologia da Informação (modelo)
PDTI - Plano Diretor de Tecnologia da Informação (modelo)Fernando Palma
 
Guia Salarial 2017 Robert Half Brasil
Guia Salarial 2017 Robert Half BrasilGuia Salarial 2017 Robert Half Brasil
Guia Salarial 2017 Robert Half BrasilFernando Palma
 
Gerenciamento na nuvem e System Center
Gerenciamento na nuvem e System CenterGerenciamento na nuvem e System Center
Gerenciamento na nuvem e System CenterFernando Palma
 
SAN: Storage Area Network
SAN: Storage Area NetworkSAN: Storage Area Network
SAN: Storage Area NetworkFernando Palma
 
Ebook ITIL Na Prática
Ebook ITIL Na PráticaEbook ITIL Na Prática
Ebook ITIL Na PráticaFernando Palma
 
Exemplo de Plano Estratégico de TI - MEC
Exemplo de Plano Estratégico de TI - MECExemplo de Plano Estratégico de TI - MEC
Exemplo de Plano Estratégico de TI - MECFernando Palma
 
Internet Das Coisas Trabalho Acadêmico
Internet Das Coisas Trabalho AcadêmicoInternet Das Coisas Trabalho Acadêmico
Internet Das Coisas Trabalho AcadêmicoFernando Palma
 

More from Fernando Palma (20)

CRM Gerenciamento Do Relacionamento Com Clientes | Prof. Francisco Alves | C...
CRM Gerenciamento Do Relacionamento Com Clientes | Prof. Francisco Alves |  C...CRM Gerenciamento Do Relacionamento Com Clientes | Prof. Francisco Alves |  C...
CRM Gerenciamento Do Relacionamento Com Clientes | Prof. Francisco Alves | C...
 
Formação em ciência de dados
Formação em ciência de dadosFormação em ciência de dados
Formação em ciência de dados
 
Apostila de Introdução ao Arduino
Apostila de Introdução ao ArduinoApostila de Introdução ao Arduino
Apostila de Introdução ao Arduino
 
Apostila Arduino Basico
Apostila Arduino BasicoApostila Arduino Basico
Apostila Arduino Basico
 
Cartilha Segurança na Internet - CERT.br
Cartilha Segurança na Internet - CERT.brCartilha Segurança na Internet - CERT.br
Cartilha Segurança na Internet - CERT.br
 
Ebook Apache Server: Guia Introdutório
Ebook Apache Server: Guia IntrodutórioEbook Apache Server: Guia Introdutório
Ebook Apache Server: Guia Introdutório
 
Apostila Zend Framework
Apostila Zend FrameworkApostila Zend Framework
Apostila Zend Framework
 
Hacker Ético
Hacker ÉticoHacker Ético
Hacker Ético
 
Ebook Governança de TI na Prática
Ebook Governança de TI na PráticaEbook Governança de TI na Prática
Ebook Governança de TI na Prática
 
Simulado ITIL Foundation - Questões Comentadas
Simulado ITIL Foundation - Questões ComentadasSimulado ITIL Foundation - Questões Comentadas
Simulado ITIL Foundation - Questões Comentadas
 
Introdução à Aprendizagem de Máquina
Introdução à Aprendizagem de MáquinaIntrodução à Aprendizagem de Máquina
Introdução à Aprendizagem de Máquina
 
PDTI - Plano Diretor de Tecnologia da Informação (modelo)
PDTI - Plano Diretor de Tecnologia da Informação (modelo)PDTI - Plano Diretor de Tecnologia da Informação (modelo)
PDTI - Plano Diretor de Tecnologia da Informação (modelo)
 
Guia Salarial 2017 Robert Half Brasil
Guia Salarial 2017 Robert Half BrasilGuia Salarial 2017 Robert Half Brasil
Guia Salarial 2017 Robert Half Brasil
 
Tutorial memcached
Tutorial memcachedTutorial memcached
Tutorial memcached
 
Gerenciamento na nuvem e System Center
Gerenciamento na nuvem e System CenterGerenciamento na nuvem e System Center
Gerenciamento na nuvem e System Center
 
SAN: Storage Area Network
SAN: Storage Area NetworkSAN: Storage Area Network
SAN: Storage Area Network
 
Linguagem ABAP
Linguagem ABAPLinguagem ABAP
Linguagem ABAP
 
Ebook ITIL Na Prática
Ebook ITIL Na PráticaEbook ITIL Na Prática
Ebook ITIL Na Prática
 
Exemplo de Plano Estratégico de TI - MEC
Exemplo de Plano Estratégico de TI - MECExemplo de Plano Estratégico de TI - MEC
Exemplo de Plano Estratégico de TI - MEC
 
Internet Das Coisas Trabalho Acadêmico
Internet Das Coisas Trabalho AcadêmicoInternet Das Coisas Trabalho Acadêmico
Internet Das Coisas Trabalho Acadêmico
 

Estrutura de dados

  • 1. Algoritmos e Estruturas de Dados I Marcos Castilho Fabiano Silva Daniel Weingaertner Vers˜o 0.7 a Maio de 2011
  • 2. 2 Algoritmos e Estruturas de Dados I - Notas de Aula est´ licen- a ciado segundo a licen¸a da Creative Commons Atribui¸ao-Uso c c˜ N˜o-Comercial-Vedada a Cria¸˜o de Obras Derivadas 2.5 Bra- a ca sil License.http://creativecommons.org/licenses/by-nc-nd/ 2.5/br/ Algoritmos e Estruturas de Dados I - Notas de Aula is licen- sed under a Creative Commons Atribui¸ao-Uso N˜o-Comercial- c˜ a Vedada a Cria¸ao de Obras Derivadas 2.5 Brasil License.http: c˜ //creativecommons.org/licenses/by-nc-nd/2.5/br/ AVISO: Este texto ainda est´ em constru¸˜o. a ca
  • 3. Sum´rio a 1 Introdu¸˜o ca 7 2 Sobre problemas e solu¸˜es co 9 2.1 Contando o n´mero de presentes em um evento . . . . . . . . . . . . . 9 u 2.2 Trocando os quatro pneus . . . . . . . . . . . . . . . . . . . . . . . . . 12 2.3 Conclus˜o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 a 3 Sobre algoritmos e programas 15 3.1 O que ´ um algoritmo? . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 e 3.2 O que ´ um programa? . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 e 3.3 Exerc´ ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 4 O modelo do computador 21 4.1 Hist´rico . . . . . . . . . . . . . . . . . . . . . . . . . . o . . . . . . . . . 21 4.2 Princ´ ıpios do modelo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 4.2.1 Endere¸os versus conte´dos . . . . . . . . . . . c u . . . . . . . . . 22 4.2.2 O repert´rio de instru¸oes . . . . . . . . . . . . o c˜ . . . . . . . . . 23 4.2.3 O ciclo de execu¸˜o de instru¸oes . . . . . . . . ca c˜ . . . . . . . . . 25 4.2.4 Exemplo de execu¸ao de um programa . . . . . c˜ . . . . . . . . . 25 4.3 Humanos versus computadores . . . . . . . . . . . . . . . . . . . . . . . 26 4.3.1 Abstra¸˜o dos endere¸os . . . . . . . . . . . . . ca c . . . . . . . . . 27 4.3.2 Abstra¸˜o dos c´digos das instru¸oes . . . . . . ca o c˜ . . . . . . . . . 28 4.3.3 Abstra¸˜o do repert´rio de instru¸˜es . . . . . . ca o co . . . . . . . . . 29 4.3.4 Abstra¸˜o dos endere¸os de mem´ria (vari´veis) ca c o a . . . . . . . . . 30 4.4 Abstra¸ao das instru¸˜es (linguagem) . . . . . . . . . . c˜ co . . . . . . . . . 31 4.5 Conclus˜o . . . . . . . . . . . . . . . . . . . . . . . . . a . . . . . . . . . 33 4.6 Exerc´ ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 5 Conceitos elementares 37 5.1 Algoritmos e linguagens de programa¸ao . . . . . . c˜ . . . . . . . . . . . 37 5.2 C´lculo de ra´ de uma equa¸ao do segundo grau a ızes c˜ . . . . . . . . . . . 38 5.3 Imprimir a soma de dois n´meros dados . . . . . . u . . . . . . . . . . . 39 5.4 Imprimindo sequˆncias de n´meros na tela . . . . . e u . . . . . . . . . . . 40 5.5 Imprimir os quadrados de uma faixa de n´meros . . u . . . . . . . . . . . 44 5.6 Imprimindo a soma de v´rios pares de n´meros . . a u . . . . . . . . . . . 44 3
  • 4. 4 ´ SUMARIO 5.7 Testar se um n´mero lido ´ positivo u e . . . . . . . . . . . . . . . . . . . . 45 5.8 Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 5.9 Apˆndice . . . . . . . . . . . . . . . e . . . . . . . . . . . . . . . . . . . . 47 5.10 Exerc´ ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 6 T´cnicas elementares e 55 6.1 Atribui¸˜es dentro de repeti¸˜es . . . . . . co co . . . . . . . . . . . . . . . . 55 6.1.1 Somando n´meros . . . . . . . . . u . . . . . . . . . . . . . . . . 55 6.2 Desvios condicionais aninhados . . . . . . . . . . . . . . . . . . . . . . 57 6.2.1 O menor de trˆs . . . . . . . . . . . e . . . . . . . . . . . . . . . . 58 6.3 Desvios condicionais dentro de repeti¸oes . c˜ . . . . . . . . . . . . . . . . 58 6.3.1 Imprimir apenas n´meros positivos u . . . . . . . . . . . . . . . . 58 6.3.2 Somando pares e ´ ımpares . . . . . . . . . . . . . . . . . . . . . . 61 6.3.3 Convertendo para bin´rio . . . . . a . . . . . . . . . . . . . . . . 62 6.3.4 Menor de 3, segunda vers˜o . . . . a . . . . . . . . . . . . . . . . 64 6.4 Repeti¸oes dentro de condi¸oes . . . . . . c˜ c˜ . . . . . . . . . . . . . . . . 65 6.4.1 Calculo do MDC . . . . . . . . . . . . . . . . . . . . . . . . . . 65 6.5 Repeti¸oes aninhadas . . . . . . . . . . . . c˜ . . . . . . . . . . . . . . . . 66 6.5.1 Tabuada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 6.5.2 Fatorial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 6.6 Exerc´ ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 7 Aplica¸˜es das t´cnicas elementares co e 75 7.1 N´meros de Fibonacci . . . . . . . u . . . . . . . . . . . . . . . . . . . . 75 7.2 Maior segmento crescente . . . . . . . . . . . . . . . . . . . . . . . . . 77 7.3 S´ries . . . . . . . . . . . . . . . . . e . . . . . . . . . . . . . . . . . . . . 79 7.3.1 N´mero neperiano . . . . . u . . . . . . . . . . . . . . . . . . . . 79 7.3.2 C´lculo do seno . . . . . . . a . . . . . . . . . . . . . . . . . . . . 80 7.4 N´meros primos . . . . . . . . . . . u . . . . . . . . . . . . . . . . . . . . 83 7.5 Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 8 Refinamentos sucessivos 91 8.1 Primos entre si . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 8.2 Amigos quadr´ticos . . . . . . . . . a . . . . . . . . . . . . . . . . . . . . 93 8.3 Pal´ındromos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 8.4 Inverter um n´mero de trˆs d´ u e ıgitos . . . . . . . . . . . . . . . . . . . . 99 8.5 C´lculo do MDC pela defini¸˜o . . a ca . . . . . . . . . . . . . . . . . . . . 101 8.6 Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 9 Fun¸˜es e procedimentos co 107 9.1 Motiva¸˜o . . . . . . . . . . . . . . ca . . . . . . . . . . . . . . . . . . . . 107 9.1.1 Modularidade . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 9.1.2 Reaproveitamento de c´digo o . . . . . . . . . . . . . . . . . . . . 108 9.1.3 Legibilidade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 9.1.4 Coment´rio adicional . . . . a . . . . . . . . . . . . . . . . . . . . 109 9.2 No¸oes fundamentais . . . . . . . . c˜ . . . . . . . . . . . . . . . . . . . . 109
  • 5. ´ SUMARIO 5 9.2.1 Exemplo b´sico . . . . . . . . . . . . . . . . . . a . . . . . . . . . 109 9.2.2 O programa principal . . . . . . . . . . . . . . . . . . . . . . . . 109 9.2.3 Vari´veis globais . . . . . . . . . . . . . . . . . a . . . . . . . . . 110 9.2.4 Fun¸oes . . . . . . . . . . . . . . . . . . . . . . c˜ . . . . . . . . . 110 9.2.5 Parˆmetros por valor . . . . . . . . . . . . . . . a . . . . . . . . . 112 9.2.6 Parˆmetros por referˆncia . . . . . . . . . . . . a e . . . . . . . . . 113 9.2.7 Procedimentos . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 9.2.8 Vari´veis locais . . . . . . . . . . . . . . . . . . a . . . . . . . . . 115 9.3 Alguns exemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 9.3.1 Calculando d´ ıgito verificador . . . . . . . . . . . . . . . . . . . . 116 9.4 C´lculo do MDC pela defini¸˜o . . . . . . . . . . . . . a ca . . . . . . . . . 119 9.4.1 Calculando ra´ de equa¸˜es do segundo grau ızes co . . . . . . . . . 121 9.5 Exerc´ ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 10 Estruturas de dados 125 10.1 Vetores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 10.1.1 Primeiros problemas com vetores . . . . . . . . . . . . . . . . . 128 10.1.2 Soma e produto escalar de vetores . . . . . . . . . . . . . . . . . 136 10.1.3 Busca em vetores . . . . . . . . . . . . . . . . . . . . . . . . . . 138 10.1.4 Ordena¸ao em vetores . . . . . . . . c˜ . . . . . . . . . . . . . . . 148 10.1.5 Outros algoritmos com vetores . . . . . . . . . . . . . . . . . . . 152 10.1.6 Exerc´ ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163 10.2 Matrizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 10.2.1 Matrizes em Pascal . . . . . . . . . . . . . . . . . . . . . . . . . 179 10.2.2 Exemplos elementares . . . . . . . . . . . . . . . . . . . . . . . 180 10.2.3 Procurando elementos em matrizes . . . . . . . . . . . . . . . . 186 10.2.4 Inserindo uma coluna em uma matriz . . . . . . . . . . . . . . . 188 10.2.5 Aplica¸oes de matrizes em imagens . c˜ . . . . . . . . . . . . . . . 190 10.2.6 Exerc´ ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194 10.3 Registros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 10.3.1 Introdu¸ao aos registros . . . . . . . c˜ . . . . . . . . . . . . . . . 209 10.3.2 Vetores de registros . . . . . . . . . . . . . . . . . . . . . . . . . 210 10.3.3 Registros com vetores . . . . . . . . . . . . . . . . . . . . . . . . 212 10.3.4 Observa¸˜es importantes . . . . . . . co . . . . . . . . . . . . . . . 213 10.3.5 Exerc´ ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 11 Desenvolvendo programas de maior porte 225 11.0.1 Campo minado . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 11.1 Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234 12 Tipos abstratos de dados 241 12.1 Tipo Conjunto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 12.2 Tipo Lista . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 12.2.1 Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
  • 6. 6 ´ SUMARIO
  • 7. Cap´ ıtulo 1 Introdu¸˜o ca Este material cont´m notas de aulas da disciplina CI055 – Algoritmos e Estruturas de e Dados I, ministrada para os curso de Bacharelado em Ciˆncia da Computa¸ao (BCC), e c˜ Matem´tica Industrial (MatInd) e para o Bacharelado em Inform´tica Biom´dica a a e (BIB) da Universidade Federal do Paran´. a Esta disciplina ´ ministrada no primeiro semestre (para os calouros) e ´ a primeira e e das quatro que cobrem o conte´do b´sico de algoritmos sem o qual um curso de u a computa¸ao n˜o faz sentido. As disciplinas subsequentes s˜o: c˜ a a • Algoritmos e Estruturas de Dados II; • Algoritmos e Estruturas de Dados III; e • Algoritmos e Teoria dos Grafos. A orienta¸˜o da Coordena¸ao dos cursos ´ que este deve ter um conte´do forte ca c˜ e u em conceitos de algoritmos no qual a implementa¸ao final em uma linguagem de pro- c˜ grama¸ao ´ vista apenas como um mecanismo facilitador ao aprendizado dos conceitos c˜ e te´ricos. o O texto est´ dividido em duas partes bem definidas, a primeira entre os cap´ a ıtulos 2 e 9, cont´m os princ´ e ıpios b´sicos da constru¸˜o de algoritmos elementares, incluindo a ca a parte de subprogramas, com especial aten¸˜o a quest˜es tais como passagem de ca o parˆmetros e vari´veis locais e globais. A no¸˜o de modularidade ´ bastante explorada. a a ca e A segunda parte, a partir do cap´ ıtulo 10, cont´m princ´ e ıpios de estruturas de dados b´sicas, onde se introduz a no¸ao de vetores unidimensionais, a primeira das estruturas a c˜ de dados. Nesta estrutura, praticamos a elabora¸˜o de algoritmos modulares e j´ n˜o ca a a escrevemos um c´digo inteiro, mas sim um conjunto de fun¸oes e procedimentos que, o c˜ em uma abordagem por refinamentos sucessivos (top down), s˜o constru´ a ıdos passo a passo. Alguns algoritmos importantes s˜o estudados em suas vers˜es b´sicas: busca e a o a ordena¸ao de vetores. No¸˜es de complexidade de algoritmos s˜o mencionadas, ainda c˜ co a que de modo informal, pois isto ´ conte´do de per´ e u ıodos mais avan¸ados. Contudo, ´ c e importante ao aprendiz ter no¸ao clara da diferen¸a de custo entre diferentes algorit- c˜ c mos. 7
  • 8. 8 CAP´ ¸˜ ITULO 1. INTRODUCAO As ultimas estruturas de dados relevantes para o primeiro per´ ´ ıodo s˜o as matrizes a e o conceito de registro. Havendo tempo, tamb´m se discute estruturas um pouco e mais sofisticadas, misturando-se vetores, registros e matrizes. Finalmente se oferece um desafio aos alunos. O objetivo ´ o de mostrar uma e aplica¸ao interessante dos conceitos que eles j´ dominam. Normalmente trabalha-se c˜ a em sala de aula o desenvolvimento de um programa que tem sido a constru¸ao de um c˜ jogo simples que pode ser implementado em uma estrutura de matriz, eventualmente com registros. A ideia ´ que eles possam fazer um programa mais extenso para e treinarem a constru¸ao de programas modulares. Este material constitui o ultimo c˜ ´ cap´ıtulo deste material. O estudante n˜o deve iniciar uma parte sem antes ter compreendido o conte´do a u das anteriores. Tamb´m n˜o deve iniciar um novo cap´ e a ıtulo sem ter compreendido os anteriores. Sobre a linguagem, o estudante ´ encorajado a buscar apoio na literatura e nos e guias de referˆncia dispon´ e ıveis para o compilador escolhido (Free Pascal ), incluindo um guia de referˆncia b´sico que foi escrito pelos monitores da disciplina no ano de e a 2009. A leitura destas notas de aula n˜o isenta o estudante de buscar literatura comple- a mentar, sempre bem-vinda. Em particular, uma ´tima hist´ria da computa¸ao pode o o c˜ ser encontrada em [Tre83]. Alguns excelentes textos introdut´rios em algoritmos est˜o o a em [Car82], [Sal98], [Med05] e [Wir78]. Para mais detalhes de programa¸˜o em Pascal ca o leitor pode consultar [Far99] e tamb´m os guias de referˆncia da linguagem [Gui]. e e Finalmente, embora talvez de dif´ compreens˜o para um iniciante, recomendamos ıcil a pelo menos folhear o material em [Knu68].
  • 9. Cap´ ıtulo 2 Sobre problemas e solu¸oes c˜ Vamos iniciar nosso estudo com uma breve discuss˜o sobre problemas e solu¸˜es. O a co objetivo ´ deixar claro desde o in´ que: e ıcio • n˜o existe, em geral, uma unica solu¸˜o para o mesmo problema; a ´ ca • algumas solu¸oes s˜o melhores do que outras, sob algum crit´rio; c˜ a e • alguns problemas s˜o casos particulares de outros similares; a • as vezes, ´ melhor resolver o problema mais gen´rico, assim, resolve-se uma e e classe de problemas, e n˜o apenas um. a Ser˜o apresentados dois problemas reais e para cada um deles segue uma discuss˜o a a sobre a existˆncia de diversas solu¸oes para um dado problema. A ˆnfase ser´ dada e c˜ e a nas diferen¸as entre as solu¸˜es e tamb´m na discuss˜o sobre at´ que ponto deve-se c co e a e ficar satisfeito com a primeira solu¸ao obtida ou se ela pode ser generalizada para c˜ problemas similares. 2.1 Contando o n´ mero de presentes em um evento u No primeiro dia letivo do primeiro semestre de 2009, um dos autores deste material colocou o seguinte problema aos novos alunos: quer´ ıamos saber quantos estudantes estavam presentes na sala de aula naquele momento. A sala tinha capacidade aproxi- mada de 100 lugares e a naquele momento estava razoavelmente cheia. Os estudantes discutiram v´rias possibilidades. Apresentamos todas elas a seguir. a Primeira solu¸˜o ca A primeira solu¸ao parecia t˜o obvia que levou algum tempo at´ algum aluno verbali- c˜ a ´ e zar: o professor conta os alunos um por um, tomando o cuidado de n˜o contar algu´m a e duas vezes e tamb´m de n˜o esquecer de contar algu´m. e a e Quais s˜o as vantagens deste m´todo? Trata-se de uma solu¸ao simples, f´cil de a e c˜ a ´ uma solu¸ao perfeita para salas de aula com executar e produz o resultado correto. E c˜ 9
  • 10. 10 CAP´ ¸˜ ITULO 2. SOBRE PROBLEMAS E SOLUCOES poucos alunos, digamos, 20 ou 30. Outro aspecto considerado foi o fato de que este m´todo n˜o exige nenhum conhecimento pr´vio de quem vai executar a opera¸˜o, a e a e ca n˜o ser saber contar. Tamb´m n˜o exige nenhum equipamento adicional. a e a Quais as desvantagens? Se o n´mero de alunos na sala for grande, o tempo ne- u cess´rio para o t´rmino da opera¸ao pode ser insatisfat´rio. Para piorar, quanto a e c˜ o maior o n´mero, maior a chance de aparecerem erros na contagem. Foi discutida a u adequa¸ao desta solu¸˜o para se contar os presentes em um com´ ou manifesta¸ao c˜ ca ıcio c˜ popular numa pra¸a p´blica. Concluiu-se pela inviabilidade do m´todo nestes casos. c u e Executamos a contagem em aproximadamente 1 minuto. Dois alunos tamb´m e fizeram a contagem e, ap´s conferˆncia, obtivemos o resultado correto, que serviu o e para an´lise das outras solu¸˜es. a co Segunda solu¸˜o ca Pensando no problema de se contar na ordem de 100 alunos, um estudante sugeriu que se fizesse apenas a contagem das carteiras vazias e em seguida uma subtra¸ao com c˜ rela¸ao ao n´mero total de carteiras na sala. c˜ u A solu¸˜o tamb´m ´ muito simples e funciona perfeitamente bem, mas exige um ca e e conhecimento pr´vio: deve-se saber antecipadamente o total de carteiras na sala. e Esta maneira de contar ´ cada vez melhor quanto maior for o n´mero de presentes, e u pois o n´mero de carteiras vazias ´ menor do que o das ocupadas. Por outro lado, se u e a sala estiver com pouca gente, o m´todo anterior ´ mais eficiente. e e Os alunos observaram tamb´m que a solu¸ao n˜o se aplica para os casos de con- e c˜ a tagem de presentes a um com´ numa pra¸a p´blica, pois n˜o h´ carteiras na rua. ıcio c u a a Terceira solu¸˜o ca Para resolver o problema do com´ ıcio, outro estudante sugeriu que se fizesse uma estimativa baseada na metragem total da pra¸a, multiplicada pelo n´mero estimado c u de pessoas por metro quadrado. Solu¸ao elegante, na pr´tica ´ o que a organiza¸˜o do com´ e a pol´ usam. c˜ a e ca ıcio ıcia Mas deve-se saber de antem˜o a metragem da pra¸a e estimar a taxa de pessoas por a c metro quadrado. O m´todo ´ t˜o bom quanto melhor for a estimativa. Tamb´m ´ e e a e e melhor se a popula¸ao estiver uniformemente distribu´ c˜ ıda. Concluiu-se que ´ um bom m´todo, mas que n˜o ´ preciso. Isto ´, a chance e e a e e do n´mero estimado ser exatamente o n´mero de presentes ´ baixa. Os m´todos u u e e anteriores s˜o exatos, isto ´, nos d˜o o n´mero correto de presentes. Este m´todo a e a u e tamb´m serve razoavelmente bem para o n´mero de alunos na sala de aula. De fato, e u nesta aula, o professor conseguiu o n´mero com aproxima¸ao 80% correta. A quest˜o u c˜ a que restou ´ se o erro de 20% ´ aceit´vel ou n˜o. Isto depende do motivo pelo qual e e a a se quer contar os alunos na sala. Quarta solu¸˜o ca Para resolver o problema da precis˜o, outro estudante sugeriu o uso de roletas. a
  • 11. ´ 2.1. CONTANDO O NUMERO DE PRESENTES EM UM EVENTO 11 Efetivamente ´ esta a solu¸ao para contar torcedores no est´dio ou presentes em e c˜ a um show de rock. Mas tamb´m foi considerado que a solu¸˜o exige uma ou mais e ca catracas, uma barreira para ningu´m entrar sem passar pela roleta e etc, para se e garantir a exatid˜o do resultado. No caso do com´ n˜o seria vi´vel. No caso da a ıcio a a sala de aula foi constatado que n˜o havia roletas e portanto o m´todo n˜o se aplicava. a e a Quinta solu¸˜o ca Mais uma vez outro estudante apresentou uma boa alternativa: contar o n´mero de u filas de carteiras e, dado que todas tenham o mesmo n´mero de estudantes, ent˜o u a bastaria uma simples multiplica¸˜o para a determina¸˜o do n´mero correto. ca ca u De fato esta solu¸˜o funciona perfeitamente bem em lugares como por exemplo o ca ex´rcito. As filas s˜o rapidamente arrumadas com, digamos, 10 soldados em cada fila, e a sabendo-se o n´mero de filas basta multiplicar por 10, eventualmente tendo-se que u contar o n´mero de pessoas em uma fila que n˜o tenha completado 10. u a Infelizmente as carteiras estavam bagun¸adas na nossa sala e este c´lculo n˜o pode c a a ser feito. Tamb´m ficaria estranho o professor colocar todos os alunos em filas. Foi e tamb´m observado que o m´todo fornece a solu¸ao exata para o problema. e e c˜ Sexta solu¸˜o ca Nova sugest˜o de outro aluno: cada estudante no in´ de cada fila conta o n´mero de a ıcio u alunos da sua fila, tomando o cuidado de contar a si pr´prio tamb´m. Depois soma-se o e todas as contagens de todos os primeiros de fila. Solu¸ao muito boa. Na verdade ´ a vers˜o em paralelo da primeira solu¸˜o. c˜ e a ca Distribuindo-se a tarefa, cada primeiro de fila tem entre 10 e 15 alunos para con- tar em sua fila. Se a soma foi correta o n´mero obtido ao final do processo ´ exato. u e No caso daquela aula os estudantes realizaram a opera¸˜o em poucos segundos, mais ca algum tempo para as somas (isto demorou mais. . . ). Mas o resultado foi exato. A solu¸ao n˜o exige conhecimento pr´vio, n˜o exige equipamento adicional e ´ c˜ a e a e razoavelmente escal´vel, isto ´, funciona para salas de tamanhos diferentes. a e S´tima solu¸˜o e ca Para finalizar, o professor apresentou a solu¸ao seguinte: todos os estudantes se le- c˜ vantam e se atribuem o n´mero 1. Em seguida os alunos se organizam em pares. Em u cada par, primeiro ´ somado o n´mero de cada um dos dois, um deles guarda este e u n´mero e permanece de p´, o outro deve se sentar. Os que ficaram em p´ repetem u e e este processo at´ que s´ exista um unico aluno em p´. Ele tem o n´mero exato de e o ´ e u estudantes na sala. Como se divide a sala em pares, ap´s a primeira rodada metade da sala deve ter o o n´mero 2 e a outra metade est´ sentada, considerando que a sala tem o n´mero de u a u alunos par. Se for ´ ımpar um deles ter´ ainda o n´mero 1. Ap´s a segunda rodada um a u o quarto dos alunos dever´ ter o n´mero 4 e trˆs quartos estar˜o sentados, eventualmente a u e a um deles ter´ um n´mero ´ a u ´ f´cil perceber que o resultado sai em tempo ımpar. E a
  • 12. 12 CAP´ ¸˜ ITULO 2. SOBRE PROBLEMAS E SOLUCOES proporcional ao logaritmo do n´mero total de alunos, o que ´ bem r´pido. De fato, u e a para mil pessoas o processo termina em 10 passos e para um milh˜o de pessoas termina a em 20 passos. Parece um bom algoritmo, ele d´ resultado exato, n˜o exige conhecimento pr´vio, a a e ´ escal´vel, isto ´, funciona muito bem para um grande n´mero de pessoas, mas exige e a e u organiza¸ao dos presentes. c˜ Infelizmente aquela turma n˜o se organizou direito e o resultado veio com um erro a de 40%. . . Mas ap´s duas rodadas de treinamento, na terceira conseguimos obter o o resultado correto. 2.2 Trocando os quatro pneus Todo mundo sabe trocar pneus, embora n˜o goste. O processo que um cidad˜o comum a a executa ´ muito simples: levanta o carro com o macaco, tira todos os quatro parafusos e da roda com o pneu furado, tira a roda do eixo, coloca a roda com o pneu novo no eixo, em seguida aperta os quatro parafusos. Finalmente, baixa o carro e est´ pronto. a Nos anos 1980, um famoso piloto de f´rmula 1 imaginou que poderia ser campe˜o o a do mundo se pudesse usar um composto de pneu mais mole e com isto ganhar preciosos segundos com rela¸ao aos seus concorrentes. O problema ´ que estes compostos mais c˜ e moles se deterioram rapidamente exigindo a troca dos quatro pneus no meio da corrida. O tal piloto, ap´s alguns c´lculos, concluiu que se levasse menos de 8 segundos para o a trocar os quatro pneus, valeria a pena aplicar este m´todo. e Obviamente a solu¸˜o caseira n˜o serve. O m´todo descrito acima custa em geral ca a e 20 minutos por pneu, com um pouco de pr´tica 10 minutos. Com muita pr´tica 2 ou a a 3 minutos. Para trocar os quatro pneus, 8 a 12 minutos. Da´ o problema: Como trocar os quatro pneus de um carro em menos de 8 segun- ı dos? Um dos grandes custos de tempo ´ ter que trocar o macaco para cada roda: usamos e um macaco hidr´ulico, destes de loja de pneus, e levantamos o carro todo de uma s´ a o vez. Mas, para cada roda, temos 4 parafusos, isto ´, 16 no total, ou melhor, 32, pois e tem que tirar e depois recolocar: usa-se uma aparafusadeira el´trica para amenizar o e problema, mas ainda n˜o ´ suficiente. a e Se a roda tiver um unico parafuso a economia de tempo ´ maior ainda. Mas ´ e ainda estamos na casa dos minutos, e o tempo total deve ser menor que 8 segundos. Desistimos do campeonato? Com 4 pessoas, cada uma troca uma roda, divide-se o tempo por 4. Opa! J´ a estamos abaixo de 1 minuto. Se tiver ainda a possibilidade de 3 pessoas por roda: um tira o parafuso, outro tira a roda velha, um terceiro coloca a roda nova e o primeiro aperta o parafuso. Mais 2 mecˆnicos para levantar e baixar o carro todo de uma vez e est´ feito. a a Hoje em dia se trocam os quatro pneus de um carro de f´rmula 1, com direito a o completar o tanque de gasolina, em cerca de 6 segundos. Ah, o tal piloto foi campe˜o naquele ano, pois tamb´m usou o truque de aquecer a e
  • 13. ˜ 2.3. CONCLUSAO 13 os pneus antes da prova e andar com o carro contendo metade da gasolina, j´ que ele a ia ter que parar nos boxes de qualquer maneira para trocar os pneus. . . O cara ´ um e gˆnio. e 2.3 Conclus˜o a Mesmo para um problema simples existem diversas solu¸˜es. A escolha da melhor co depende de v´rios fatores. Por exemplo, se a resposta deve ser exata ou n˜o ou se os a a conhecimentos pr´vios necess´rios est˜o dispon´ e a a ıveis, e assim por diante. ´ E importante notar que somente ap´s uma s´rie de considera¸oes ´ poss´ escolher o e c˜ e ıvel a melhor t´cnica e somente em seguida executar a tarefa. e Algumas solu¸˜es existem a no¸˜o de paralelismo. Hoje em dia os computadores co ca vˆm com v´rios n´cleos de processamento e sempre existe a chance de se tentar quebrar e a u um problema em v´rios outros menores e deixar que v´rios processadores resolvam a a seus peda¸os de solu¸ao e depois tentar juntar os resultados com mais alguma opera¸˜o c c˜ ca simples. No caso da f´rmula 1 isto funcionou, mas em geral n˜o ´ verdade. Infelizmente o a e existe o problema da dependˆncia de dados. Por exemplo, o mecˆnico que vai colocar e a a roda nova s´ pode trabalhar depois que o outro tirou a roda velha. Em problemas o com alto grau de dependˆncia, paralelizar ´ complicado.1 . e e 1 N˜o se estudar˜o algoritmos paralelos nesta disciplina. a a
  • 14. 14 CAP´ ¸˜ ITULO 2. SOBRE PROBLEMAS E SOLUCOES
  • 15. Cap´ ıtulo 3 Sobre algoritmos e programas Ap´s o estudo do problema, an´lise das diversas possibilidades de solu¸ao e a escolha o a c˜ da melhor delas, cabe agora a tarefa de escrever um programa que implemente esta solu¸ao. Antes, contudo, ´ preciso saber a diferen¸a entre um algoritmo em um c˜ e c programa. Isto ser´ discutido neste cap´ a ıtulo. 3.1 O que ´ um algoritmo? e Um algoritmo ´ uma sequˆncia extremamente precisa de instru¸oes que, quando lida e e c˜ e executada por uma outra pessoa, produz o resultado esperado, isto ´, a solu¸ao de e c˜ um problema. Esta sequˆncia de instru¸oes ´ nada mais nada menos que um registro e c˜ e escrito da sequˆncia de passos necess´rios que devem ser executados para manipular e a informa¸oes, ou dados, para se chegar na resposta do problema. c˜ Isto serve por dois motivos: o primeiro ´ que atrav´s do registro se garante que e e n˜o haver´ necessidade de se redescobrir a solu¸ao quando muito tempo tiver passado a a c˜ e todos tiverem esquecido do problema; o outro motivo ´ que, as vezes, queremos e que outra pessoa execute a solu¸ao, mas atrav´s de instru¸˜es precisas, de maneira c˜ e co que n˜o haja erros durante o processo. Queremos um algoritmo para a solu¸ao do a c˜ problema. Uma receita de bolo de chocolate ´ um bom exemplo de um algoritmo (a lista de e ingredientes e as quantidades foram omitidas, bem como a receita da cobertura): Bata em uma batedeira a manteiga e o a¸ucar. Junte as gemas uma a uma c´ at´ obter um creme homog^neo. Adicione o leite aos poucos. Desligue a e e batedeira e adicione a farinha de trigo, o chocolate em p´, o fermento o e reserve. Bata as claras em neve e junte-as a massa de chocolate ` misturando delicadamente. Unte uma forma retangular pequena com manteiga e farinha e leve para assar em forno m´dio pr´-aquecido e e por aproximadamente 30 minutos. Desenforme o bolo ainda quente e reserve. Este ´ um bom exemplo de algoritmo pois podemos extrair caracter´ e ısticas bastante interessantes do texto. Em primeiro lugar, a pessoa que escreveu a receita n˜o ´a e 15
  • 16. 16 CAP´ ITULO 3. SOBRE ALGORITMOS E PROGRAMAS necessariamente a mesma pessoa que vai fazer o bolo. Logo, podemos estabelecer, sem preju´ que foi escrita por um mas ser´ executada por outro. ızo, a Outras caracter´ ısticas interessantes que est˜o impl´ a ıcitas s˜o as seguintes: a • as frases s˜o instru¸oes no modo imperativo: bata isso, unte aquilo. S˜o ordens, a c˜ a n˜o sugest˜es. Quem segue uma receita obedece quem a escreveu; a o • as instru¸oes est˜o na forma sequencial: apenas uma pessoa executa. N˜o exis- c˜ a a tem a¸oes simultˆneas. c˜ a • existe uma ordem para se executar as instru¸˜es: primeiro bata a manteiga e co o a¸ucar; depois junte as gemas, uma a uma, at´ acabar os ovos; em seguida c e adicione o leite. • algumas instru¸oes n˜o s˜o executadas imediatamente, ´ preciso entrar em um c˜ a a e modo de repeti¸ao de um conjunto de outras instru¸˜es: enquanto houver ovos c˜ co n˜o usados, junte mais uma gema. S´ pare quando tiver usado todos os ovos. a o • algumas outras instru¸oes n˜o foram mencionadas, mas s˜o obviamente ne- c˜ a a cess´rias que ocorram: ´ preciso separar as gemas das claras antes de come¸ar a e c a tarefa de se fazer o bolo, assim como ´ preciso ainda antes quebrar os ovos. e • algumas instru¸oes, ou conjunto de instru¸oes, podem ter a ordem invertida: c˜ c˜ pode-se fazer primeiro a massa e depois a cobertura, ou vice-e-versa. Mas nunca se pode colocar no forno a assadeira antes de se chegar ao t´rmino do preparo e da massa. Mesmo levando estas coisas em considera¸ao, qualquer ser humano bem treinado c˜ em cozinha conseguiria fazer um bolo de chocolate razo´vel com as instru¸˜es acima, a co pois todas as receitas seguem o mesmo padr˜o. As conven¸˜es que est˜o impl´ a co a ıcitas no algoritmo s˜o conhecidas de qualquer cozinheiro, pois seguem um formato padr˜o. a a O formato padr˜o para algoritmos que vamos considerar ´ o seguinte: a e • as instru¸˜es ser˜o escritas uma em cada linha; co a • as instru¸oes ser˜o executadas uma a uma, da primeira at´ a ultima linha, c˜ a e ´ nesta ordem, a menos que o pr´prio algoritmo tenha instru¸˜es que alterem este o co comportamento; • em cada linha, uma instru¸ao faz somente uma coisa; c˜ • tudo o que est´ impl´ a ıcito dever´ ser explicitado. a A figura 3.1 ilustra a receita de bolo de chocolate escrita dentro deste formato padr˜o. a
  • 17. ´ 3.1. O QUE E UM ALGORITMO? 17 Algoritmo para fazer um bolo de chocolate. in´cio ı Providencie todos os ingredientes da receita. Providencie uma forma pequena. Ligue o forno em temperatura m´dia. e Coloque a menteiga na batedeira. Coloque o a¸ucar na batedeira. c Ligue a batedeira. Enquanto um creme homog^neo n~o for obtido, junte mais uma gema. e a Adicione aos poucos o leite. Desligue a batedeira. Adicione a farinha de trigo. Adicione o chocolate em p´. o Adicione o fermento. Reserve a massa obtida em um lugar tempor´rio. a Execute o algoritmo para obter as claras em neve. Junte as claras em neve a massa de chocolate que estava reservada. ` Misture esta massa delicadamente. Execute o algoritmo para untar a forma com manteiga e farinha. Coloque a forma no forno. Espere 30 minutos. Tire a forma do forno. Desenforme o bolo ainda quente. Separe o bolo em um lugar tempor´rio. a Fa¸a a cobertura segundo o algoritmo de fazer cobertura. c Coloque a cobertura no bolo. fim. Figura 3.1: Algoritmo para fazer bolo de chocolate. Infelizmente, nem todos conseguem fazer o bolo, pois existem instru¸˜es que so- co mente os iniciados decifram: • “adicione aos poucos”; • “misturando delicadamente”; • “quando o creme fica homogˆneo?”. . . e No caso do computador a situa¸ao ´ pior ainda, pois trata-se de um circuito c˜ e eletrˆnico, de uma m´quina. Por este motivo, as instru¸oes devem ser precisas e o a c˜ organizadas. Um algoritmo feito para um computador executar deve tornar expl´ ıcito todas as informa¸oes impl´ c˜ ıcitas. Tamb´m deve evitar o uso de frases amb´ e ıguas ou imprecisas e deve ser o mais detalhado poss´ıvel. Tamb´m n˜o pode ter frases de significado e a desconhecido. Na pr´xima se¸ao vamos desenvolver melhor este tema. o c˜
  • 18. 18 CAP´ ITULO 3. SOBRE ALGORITMOS E PROGRAMAS 3.2 O que ´ um programa? e Um programa ´ a codifica¸ao em alguma linguagem formal que garanta que os pas- e c˜ sos do algoritmo sejam executados da maneira como se espera por quem executa as instru¸oes. c˜ Vamos imaginar, a t´ıtulo de ilustra¸ao, que ´ a primeira vez que a pessoa entra na c˜ e cozinha em toda a sua vida e resolve fazer um bolo de chocolate seguindo o algorimo 3.1 O algoritmo 3.1 foi escrito por um cozinheiro para ser executado por um outro cozinheiro, o que n˜o ´ o caso, pois a pessoa ´ inexperiente em cozinha e n˜o sabe o a e e a que significa “bater as claras em neve”. Significa que o novato vai ficar sem o bolo. O novato precisaria de algo mais detalhado, isto ´, de instru¸˜es meticulosas de e co como se obt´m claras em neve. Poderia ser algo como ilustrado na figura 3.2. e Algoritmo para fazer claras em neve in´cio ı Repita os tr^s seguintes passos: e Pegue um ovo. Quebre o ovo. Separe a clara da gema. Coloque somente a clara em um prato fundo. At´ que todos os ovos tenham sido utilizados. e Pegue um garfo. Mergulhe a ponta do garfo no prato. Repita os seguinteis passos: Bata a clara com o garfo por um tempo. Levante o garfo. Observe se a espuma produzida fica presa no garfo Quando a espuma ficar presa no garfo, pare. Neste ponto suas claras em neve est~o prontas. a fim. Figura 3.2: Algoritmo para fazer claras em neve. J´ temos algo mais detalhado, mas nosso inexperiente cozinheiro pode ainda ter a problemas: como se separa a clara da gema? Este tipo de situa¸ao parece n˜o ter fim. c˜ a Qual ´ o limite do processo de detalhamento da solu¸ao? e c˜ O problema ´ que o cozinheiro que escreveu a receita original n˜o sabia o n´ de e a ıvel instru¸ao de quem ia efetivamente fazer o bolo. Para isto, ´ preciso que se estabele¸a c˜ e c o n´ m´ ıvel ınimo de conhecimento para quem vai executar, assim quem escreve sabe at´ e onde deve ir o n´ de detalhamento de sua receita. ıvel Um programa, neste sentido, ´ um algoritmo escrito de forma t˜o detalhada quanto e a for necess´rio para quem executa as instru¸oes. O algoritmo pode ser mais gen´rico, a c˜ e o programa n˜o. a Como estamos pensando em deixar que o computador execute um algoritmo, pre- cisamos escrever um programa em uma linguagem que o computador possa entender
  • 19. ´ 3.2. O QUE E UM PROGRAMA? 19 as instru¸oes para posteriormente poder execut´-las com sucesso. c˜ a Qual ´, afinal, o conjunto de instru¸oes que o computador conhece? Para responder e c˜ a esta pergunta precisamos conhecer melhor como funciona um computador, para, em seguida, continuarmos no estudo de algoritmos.
  • 20. 20 CAP´ ITULO 3. SOBRE ALGORITMOS E PROGRAMAS 3.3 Exerc´ ıcios 1. Escreva algoritmos como os que foram escritos neste cap´ ıtulo para cada uma das solu¸˜es do problema discutido na se¸ao 2.1. co c˜ 2. Escreva um algoritmo para o problema da troca de um unico pneu de um carro. ´ 3. Escreva um algoritmo para o problema de trocar um pneu de uma bicicleta.
  • 21. Cap´ ıtulo 4 O modelo do computador Esta se¸ao tem dois objetivos, o primeiro ´ mostrar como ´ o funcionamento dos c˜ e e computadores modernos, isto ´, no n´ e ıvel de m´quina. A segunda ´ que o aluno a e perceba, desde o in´ do seu aprendizado, as limita¸oes a que est´ sujeito quando ıcio c˜ a programa, e quais s˜o todas as instru¸˜es que o computador conhece. a co Ao final da leitura, o estudante deve compreender que, por mais sofisticada que seja a linguagem de programa¸˜o utilizada, a computa¸˜o de verdade ocorre como ca ca 1 ser´ mostrado aqui. a 4.1 Hist´rico o Um computador (hardware) ´ um conjunto de circuitos eletrˆnicos que manipulam e o sinais el´tricos e que s˜o capazes de transformar sinais de entrada em sinais de sa´ e a ıda. Os sinais el´tricos podem ser representados, basicamente, pelos n´meros zero e um. e u Existem v´rias maneiras de se fazer isto, mas n˜o entraremos em detalhes neste texto. a a O importante a destacar ´ que uma computa¸˜o ´ uma manipula¸˜o de dados e ca e ca residentes em mem´ria atrav´s de altera¸oes de sinais el´tricos realizadas por circuitos o e c˜ e integrados implementados normalmente em placas de sil´ ıcio. Quando os computadores foram criados, na d´cada de 1930, a programa¸ao deles e c˜ era feita de maneira muito prec´ria. Era necess´rio configurar uma situa¸ao dos a a c˜ circuitos para manipular os sinais el´tricos da maneira desejada para cada programa e particular. Para se executar outro programa era necess´rio alterar os circuitos, assim a se reprogramando o computador para manipular os dados de outra maneira. Um computador era algo raro naqueles tempos, e devia rodar v´rios programas a diferentes, o que resultava em imenso trabalho para os engenheiros (os programadores eram engenheiros na ´poca). e A mem´ria do computador, naqueles tempos, era exclusividade dos dados que o seriam manipulados. O programa era feito nos circuitos eletrˆnicos. o 1 O texto que segue foi adaptado de outro escrito pelo prof. Renato Carmo para a disciplina CI-208 - Programa¸˜o de Computadores ministrada para diversos cursos na UFPR. ca 21
  • 22. 22 CAP´ ITULO 4. O MODELO DO COMPUTADOR John von Neumann propˆs um modelo bastante simples, no qual tanto o programa o quanto os dados poderiam ficar simultaneamente em mem´ria, desde que a parte que o ficaria programada nos circuitos pudesse interpretar o que era dado e o que era o programa e realizar os c´lculos, isto ´, manipular os dados. a e Isto foi poss´ ıvel pela implementa¸ao em hardware de um limitado conjunto de c˜ instru¸oes que s˜o usados pelo programa que est´ em mem´ria. Isto revolucionou a c˜ a a o arte da programa¸˜o. Os computadores modernos ainda funcionam assim. ca Nesta se¸˜o pretende-se mostrar atrav´s de um exemplo os princ´ ca e ıpios deste modelo. 4.2 Princ´ ıpios do modelo Conforme explicado, Von Neumann propˆs que os dados e o programa poderiam ser o carregados em mem´ria ao mesmo tempo. Um elemento adicional denominado ciclo o de execu¸˜o de instru¸˜es controla a execu¸ao do programa. ca co c˜ A ideia ´ implementar em hardware um pequeno conjunto de instru¸oes que n˜o e c˜ a mudam e programar o computador para realizar opera¸oes complexas a partir da c˜ execu¸ao de v´rias instru¸˜es b´sicas da m´quina. c˜ a co a a Cada fabricante define o seu conjunto de instru¸oes b´sicas, mas o importante a c˜ a observar ´ que, uma vez implementadas, este conjunto define tudo o que o computador e ´ sabe fazer. E isto que queremos saber. Neste cap´ ıtulo vamos usar como exemplo um computador fabricado pela Big Com- puter Company (BCC). 4.2.1 Endere¸os versus conte´ dos c u O computador da BCC implementa o modelo Von Neumann, logo, sua mem´ria o cont´m os dados e o programa. e A mem´ria do computador em um dado instante do tempo ´ uma configura¸˜o de o e ca sinais el´tricos que podem ser vistos pelo ser humano como uma sequˆncia absurda e e de zeros e uns (chamados de bits).2 O ser humano costuma n˜o gostar muito desta forma de visualiza¸˜o, ent˜o con- a ca a vencionou algumas maneiras de enxergar n´meros inteiros que representam os bits. u N˜o vamos apresentar neste texto as diversas maneiras de convers˜o de n´meros, o a a u leitor interessado pode estudar sobre representa¸˜o bin´ria na literatura. ca a Vamos imaginar que a mem´ria do computador ´ uma tabela contendo ´ o e ındices (endere¸os) com conte´dos (dados). A t´ c u ıtulo de exemplo, vamos considerar uma “fotografia” da mem´ria de um computador da BCC em um certo momento, fotografia o esta apresentada na figura 4.1 2 Quem assistiu ao filme Matrix pode imaginar a complica¸˜o. ca
  • 23. 4.2. PRINC´ IPIOS DO MODELO 23 Endere¸o c Conte´ do u Endere¸o c Conte´ do u Endere¸o c Conte´ do u 0 1 21 49 42 54 1 54 22 6 43 8 2 2 23 52 44 57 3 1 24 51 45 9 4 50 25 3 46 33 5 4 26 53 47 2 6 7 27 46 48 76 7 46 28 52 49 67 8 4 29 5 50 76 9 47 30 55 51 124 10 46 31 53 52 14 11 46 32 54 53 47 12 7 33 8 54 235 13 48 34 55 55 35 14 4 35 2 56 23 15 49 36 56 57 78 16 50 37 46 58 243 17 48 38 52 59 27 18 3 39 5 60 88 19 51 40 57 61 12 20 47 41 56 62 12 Figura 4.1: Uma fotografia da mem´ria. o Para melhor entendimento, ´ importante que o leitor tenha em mente a diferen¸a e c entre endere¸o e conte´do do endere¸o. Para facilitar a compreens˜o, vamos adotar c u c a uma nota¸ao. Seja p um endere¸o. Denotamos por [p] o conte´do do endere¸o p. c˜ c u c Vejamos alguns exemplos com base na figura 4.1: [0] = 1 [[0]] = [1] = 54 [[[0]]] = [[1]] = [54] = 235 [0] + 1 = 1 + 1 = 2 [0 + 1] = [1] = 54 [[0] + 1] = [1 + 1] = [2] = 2 [[0] + [1]] = [1 + 54] = [55] = 35 4.2.2 O repert´rio de instru¸oes o c˜ Conforme mencionado, o modelo Von Neumann pressup˜e que o computador que est´ o a em uso possui um conjunto limitado de instru¸oes programado em hardware. c˜ Cada equipamento tem o seu repert´rio de instru¸˜es. O repert´rio do computador o co o da BCC foi definido ap´s longas discuss˜es da equipe t´cnica da empresa e tem um o o e conjunto extremamente limitado de instru¸˜es, na verdade apenas nove. co
  • 24. 24 CAP´ ITULO 4. O MODELO DO COMPUTADOR Esta defini¸˜o levou em conta a capacidade financeira da empresa que n˜o tinha ca a muita verba para gravar em circuitos integrados um conjunto mais rico de instru¸˜es. co 3 As nove instru¸oes do computador da BCC s˜o apresentadas na figura 4.2. . c˜ a C´digo o Mnemˆnico Descri¸˜o o ca Nota¸˜o ca 1 load escreva em [p + 1] o valor do [p + 1] ← [p + 2]. n´mero em [p + 2] e some 3 u em p 2 add escreva em [p + 1] o valor da [p + 1] ← [[p + 2]] + [[p + 3]]. soma dos n´meros em [[p + u 2]] e [[p + 3]] e some 4 em p 3 sub escreva em [p + 1] o valor [p + 1] ← [[p + 2]] − [[p + 3]]. da subtra¸ao do n´mero em c˜ u [[p+2]] pelo n´mero em [[p+ u 3]] e some 4 em p 4 mult escreva em [p + 1] o valor [p + 1] ← [[p + 2]] × [[p + 3]]. do produto dos n´meros em u [[p + 2]] e [[p + 3]] e some 4 em p [[p+2]] 5 div escreva em [p + 1] o valor da [p + 1] ← [[p+3]] . divis˜o do n´mero em [[p + a u 2]] pelo n´mero em [[p + 3]] u e some 4 em p 6 sqrt escreva em [p + 1] o valor da [p + 1] ← [[p + 2]]. raiz quadrada de [[p + 2]] e some 3 em p 7 read leia um n´mero do teclado, u [p + 1] ← ∨. escreva-o em [p + 1] e some 2 em p 8 write escreva [[p + 1]] na tala e ← [[p + 1]]. some 2 em p 9 stop pare • Figura 4.2: O repert´rio de instru¸oes do computador da BCC. o c˜ 3 Os concorrentes comerciais famosos da BCC implementam algumas centenas de instru¸˜es, e co ainda nenhuma delas ´ a de bater claras em neve. e
  • 25. 4.2. PRINC´ IPIOS DO MODELO 25 4.2.3 O ciclo de execu¸˜o de instru¸˜es ca co O ciclo de execu¸˜o de instru¸˜es define o comportamento do computador. Funciona ca co assim (no computador da BCC): 1. comece com p = 0; 2. interprete [p] de acordo com a tabela de instru¸˜es e pare somente quando a co instru¸ao for uma ordem de parar (instru¸ao 9, stop). c˜ c˜ Devemos lembrar que este comportamento tamb´m est´ implementado nos circui- e a tos eletrˆnicos do computador da BCC. o 4.2.4 Exemplo de execu¸˜o de um programa ca A grande surpresa por tr´s do modelo de Von Neumann ´ que, mesmo que o leitor a e ainda n˜o compreenda, o que existe na verdade “disfar¸ado” na fotografia da mem´ria a c o da figura 4.1 ´ um programa que pode ser executado pelo computador, desde que todo e o processo siga as instru¸˜es descritas na se¸˜o anterior. co ca Vamos tentar acompanhar passo a passo como ´ o funcionamento deste esquema. e Para isto, o leitor talvez queira ir marcando, a l´pis, as altera¸˜es que ser˜o feitas a co a o o ´ a seguir em uma c´pia da “fotografia da mem´ria” acima. E recomendado neste momento se ter uma vers˜o impressa daquela p´gina. a a Notem que, no momento, n˜o ´ necess´rio sabermos qual o programa implemen- a e a tado, afinal de contas, o computador jamais saber´. . . Ele executa cegamente as ins- a tru¸oes. N´s saberemos logo a frente, mas, agora, para entendermos como ´ o funci- c˜ o ` e onamento deste modelo, vamos nos imaginar fazendo o papel do computador. 1. O programa come¸a com p = 0 c 2. Em seguida, ´ preciso interpretar [p], isto ´ [0] = 1. A instru¸ao de c´digo “1” ´ e e c˜ o e “load”, cujo comportamento ´, segundo a tabela de instru¸˜es “escreva em [2] e co o valor do n´mero em [3] e some 3 em p”. Ora, [2] = 54 e [3] = 2. Logo, o valor u 2 ´ colocado como sendo o conte´do da posi¸˜o 54. Havia nesta posi¸˜o o valor e u ca ca 235. Ap´s a execu¸ao da instru¸ao, existe um 2 neste lugar. O valor 235 n˜o o c˜ c˜ a existe mais. Ao final foi somado 3 no valor de p, isto ´, agora p = 3. e 3. Como p = 3 devemos interpretar [3] = 1. Logo, a instru¸ao ´ novamente “load”. c˜ e Analogamente ao que foi feito no par´grafo anterior, o conte´do de [5] = 4 ´ a u e colocado como sendo o conte´do da posi¸ao [4] = 50. Na posi¸ao 50 havia o u c˜ c˜ valor 76. Ap´s a execu¸ao da instru¸˜o o 76 d´ lugar ao 4. Ao final o valor de o c˜ ca a p foi atualizado para 6. 4. Como p = 6 devemos interpretar [6] = 7. Logo, a instru¸˜o para ser executada ca agora ´ “read”, isto ´, esperar o usu´rio digitar algo no teclado e carregar este e e a valor em [p + 1] = [7] = 46. Supondo que o usu´rio digitou o valor 5, este agora a substitui o antigo valor, que era 33. Ao final, o valor de p foi atualizado de 6 para 8.
  • 26. 26 CAP´ ITULO 4. O MODELO DO COMPUTADOR 5. Como p = 8 devemos interpretar [8] = 4. Logo, a instru¸˜o a ser executada ca ´ “mult”. Isto faz com que o computador fa¸a a multiplica¸ao do valor em e c c˜ [[10]] = [46] pelo mesmo valor em [[11]] = [46]. O valor em [46] ´ 5 (aquele e n´mero que o usu´rio tinha digitado no teclado). O resultado da multiplica¸˜o, u a ca 5 × 5 = 25, ´ carregado na posi¸˜o de mem´ria [9] = 47. O valor ali que era 2 e ca o agora passa a ser 25. Ao final, ao valor de p foi somado 4, logo neste momento p = 12. ´ E importante salientar que este ´ um processo repetitivo que s´ terminar´ quando e o a a instru¸˜o “stop” for a da vez. O leitor ´ encorajado a acompanhar a execu¸˜o ca e ca passo a passo at´ o final para entender como ´ exatamente o comportamento dos e e computadores quando executam programas. Isto ´, fica como exerc´ e ıcio ao leitor! Destacamos que os circuitos implementados cuidam da altera¸˜o do estado el´trico ca e dos circuitos da mem´ria. o 4.3 Humanos versus computadores N´s seres humanos n˜o nos sentimos muito a vontade com este tipo de trabalho o a ` repetitivo. Temos a tendˆncia a identificar “meta-regras” e executar a opera¸ao com e c˜ base em um comportamento de mais alto n´ ıvel. Em suma, n´s aprendemos algo neste o processo, coisa que o computador s´ faz em filmes de fic¸˜o cient´ o ca ıfica. A primeira coisa que nos perguntamos ´: por qual motivo ora se soma um valor e em p, ora outro? Isto ´, quando executamos a opera¸˜o “load”, o valor somado em p e ca foi 3. Depois, quando executada a opera¸ao “read” o valor somado foi 2. Em seguida, c˜ para a instru¸˜o “mult” o valor somado foi 4. ca O estudante atento, notadamente aquele que foi at´ o final na execu¸ao do ciclo de e c˜ opera¸oes deixado como exerc´ c˜ ıcio, talvez tenha percebido uma sutileza por tr´s deste a modelo. De fato, quando se executa a instru¸ao [p], o conte´do de [p+1] sempre ´ o endere¸o c˜ u e c de destino dos dados que s˜o resultado da opera¸ao em execu¸ao. Os endere¸os a c˜ c˜ c subsequentes apontam para os operandos da opera¸ao que est´ programada para c˜ a acontecer. Assim: • Se for uma multiplica¸˜o, subtra¸ao ou soma, precisamos de dois operandos e ca c˜ do endere¸o destino, por isto se soma 4 em p; c • Se for um “load” precisamos de um operando apenas, assim como para a raiz quadrada, por isto se soma 3 em p; • Se for uma leitura do teclado ou uma escrita na tela do computador, ent˜o um a unico argumento ´ necess´rio, por isto se soma apenas 2 em p. ´ e a Uma outra observa¸ao importante ´ que, por quest˜es de hardware, o computador c˜ e o precisa entender a mem´ria como esta esp´cie de “tripa”. O ser humano, ao contr´rio, o e a
  • 27. 4.3. HUMANOS VERSUS COMPUTADORES 27 uma vez que j´ identificou pequenos blocos relacionados as instru¸oes, pode tentar a ` c˜ entender esta mesma mem´ria em outro formato, isto ´, separando cada um destes o e pequenos blocos em uma unica linha. ´ Observamos que apenas os n´meros de 1 a 9 podem ser interpretados como c´digos u o de alguma instru¸˜o, pois s˜o os unicos c´digos da tabela de instru¸oes da BCC. ca a ´ o c˜ A separa¸ao dos pequenos blocos resulta em uma visualiza¸˜o em que os dados c˜ ca s˜o separados das instru¸˜es numa mesma linha, cada linha agora representa toda a a co instru¸ao com os dados. Isto pode ser visto na figura 4.3. Importante notar que ´ a c˜ e mesma informa¸ao da figura 4.1, s´ que em outro formato visual. c˜ o Endere¸o Instru¸ao Operando Operando Operando c c˜ 0 1 54 2 3 1 50 4 6 7 46 8 4 47 46 46 12 7 48 14 4 49 50 48 18 3 51 47 49 22 6 52 51 25 3 53 46 52 29 5 55 53 54 33 8 55 35 2 56 46 52 39 5 57 56 54 43 8 57 45 9 Figura 4.3: Separando as instru¸oes. c˜ 4.3.1 Abstra¸˜o dos endere¸os ca c Continuando nossa explora¸ao de aspectos percebidos pelo ser humano a partir da c˜ maneira como o computador trabalha, agora ´ poss´ percebermos mais duas coisas e ıvel importantes: 1. O computador n˜o mudou seu modo de operar, ele continua executando as a instru¸oes na mem´ria conforme foi apresentado na se¸ao 4.2.4; c˜ o c˜ 2. A visualiza¸˜o na forma apresentada na figura 4.3 ´ apenas uma maneira mais ca e simples para o ser humano perceber o que o computador est´ fazendo. a Esta segunda observa¸ao ´ muito importante. Ela nos permite aumentar o grau de c˜ e “facilidade visual” ou, dizendo de outra maneira, o grau de nota¸˜o sobre o modelo ca Von Neumann, o que vai nos permitir a compreens˜o do processo de uma maneira a cada vez mais “humana”.
  • 28. 28 CAP´ ITULO 4. O MODELO DO COMPUTADOR De fato, a partir da figura 4.3, podemos perceber que o endere¸o em que ocorre c a instru¸ao ´ irrelevante para n´s, humanos. Podemos perfeitamente compreender o c˜ e o processo de computa¸˜o se eliminarmos a coluna do “Endere¸o” na figura 4.3. ca c A figura 4.4 ilustra como ficaria o programa em mem´ria visto de outra maneira, o agora n˜o apenas em formato de blocos mas tamb´m sem a coluna dos endere¸os. Va- a e c mos perceber que, apesar de muito parecido com a figura anterior, o grau de “polui¸ao c˜ visual” ´ bem menor. e Instru¸ao Operando Operando Operando c˜ 1 54 2 1 50 4 7 46 4 47 46 46 7 48 4 49 50 48 3 51 47 49 6 52 51 3 53 46 52 5 55 53 54 8 55 2 56 46 52 5 57 56 54 8 57 9 Figura 4.4: Abstra¸ao dos endere¸os. c˜ c Vale a pena refor¸ar: o computador n˜o mudou, ele continua operando sobre os c a circuitos eletrˆnicos, o que estamos fazendo ´ uma tentativa, um pouco mais humana, o e de enxergar isto. 4.3.2 Abstra¸˜o dos c´digos das instru¸oes ca o c˜ Continuando neste processo de “fazer a coisa do modo mais confort´vel para o ser a humano”, afirmamos que ´ poss´ aumentar ainda mais o grau de nota¸˜o. e ıvel ca Para a etapa seguinte, vamos observar que, embora os computadores manipulem n´meros (em particular, n´meros bin´rios) de maneira muito eficiente e r´pida, o u u a a mesmo n˜o ocorre para os humanos, que tˆm a tendˆncia a preferirem nomes. a e e De fato, basta observar que n´s usamos no nosso dia-a-dia nomes tais como Marcos, o Jos´ ou Maria e n˜o n´meros tais como o RG do Marcos, o CPF do Jos´ ou o PIS da e a u e Maria. Ora, j´ que ´ assim, qual o motivo de usarmos os n´meros 1 − 9 para as instru¸oes a e u c˜ se podemos perfeitamente usar o mnemˆnico associado ao c´digo? o o Desta forma, vamos modificar ainda mais uma vez nossa visualiza¸ao da mem´ria, c˜ o desta vez escrevendo os nomes dos mnemˆnicos no lugar dos n´meros. Assim, na o u
  • 29. 4.3. HUMANOS VERSUS COMPUTADORES 29 coluna Instru¸˜o, substituiremos o n´mero 1 por load, 2 por add, 3 por sub e assim ca u por diante, conforme a figura 4.2. O programa da figura 4.4 pode ser visualizado novamente de outra forma, tal como apresentado na figura 4.5. Notem que o grau de compreens˜o do c´digo, embora ainda a o n˜o esteja em uma forma totalmente amig´vel, j´ ´ bastante melhor do que aquela a a ae primeira apresenta¸ao da “fotografia da mem´ria”. c˜ o De fato, agora ´ poss´ compreender o significado das linhas, em que existe um e ıvel destaque para a opera¸˜o (o mnemˆnico), a segunda coluna ´ o endere¸o de destino ca o e c da opera¸˜o e as outras colunas s˜o os operandos. ca a Instru¸ao Operando Operando Operando c˜ load 54 2 load 50 4 read 46 mult 47 46 46 read 48 mult 49 50 48 sub 51 47 49 sqrt 52 51 sub 53 46 52 div 55 53 54 write 55 add 56 46 52 div 57 56 54 write 57 stop Figura 4.5: Programa reescrito com Mnemˆnicos. o O que falta ainda a ser melhorado? N´s humanos usamos desde a mais tenra idade o outro tipo de nota¸ao para representarmos opera¸oes. Este ´ o pr´ximo passo. c˜ c˜ e o 4.3.3 Abstra¸˜o do repert´rio de instru¸˜es ca o co Nesta etapa, observaremos que as instru¸˜es executadas pelo computador nada mais co s˜o do que manipula¸ao dos dados em mem´ria. Os c´lculos s˜o feitos sobre os dados a c˜ o a a e o resultado ´ colocado em alguma posi¸ao de mem´ria. e c˜ o Podemos melhorar o grau de abstra¸ao considerando a nota¸˜o apresentada na c˜ ca figura 4.6. Isto ´, vamos usar as tradicionais letras finais do alfabeto para ajudar na e melhoria da facilidade visual. Assim poderemos reescrever o programa mais uma vez e ele ficar´ como apresentado na figura 4.7. a
  • 30. 30 CAP´ ITULO 4. O MODELO DO COMPUTADOR [p] Instru¸˜o ca Nota¸˜o ca 1 load x y x ← [y] 2 add x y z x ← [y] + [z] 3 sub x y z x ← [y] − [z] x = [p + 1] 4 mult x y z x ← [y] × [z] y = [p + 2] 5 div x y z x ← [y] [z] z = [p + 3] 6 sqrt x y x ← [y] 7 read x x←V 8 write x V ← [x] 9 stop • Figura 4.6: Nota¸ao para as instru¸˜es. c˜ co 54 ← 2 50 ← 4 46 ← ∨ 47 ← [46] × [46] 48 ← ∨ 49 ← [50] × [48] 51 ← [47] − [49] 52 ← [[51]] 53 ← [46] − [52] [53] 55 ← [54] ← [55] 56 ← [46] + [52] [56] 57 ← [54] ← [57] • Figura 4.7: Programa escrito sob nova nota¸ao. c˜ 4.3.4 Abstra¸˜o dos endere¸os de mem´ria (vari´veis) ca c o a Na verdade, assim como j´ observamos que o c´digo da instru¸ao n˜o nos interessa, a o c˜ a vamos perceber que o mesmo ´ verdade com rela¸˜o aos endere¸os de mem´ria. Ent˜o, e ca c o a convencionaremos que os n´meros podem ser trocados por nomes. Fazemos isto na u vers˜o seguinte do mesmo programa. a Conv´m notar que o ser humano gosta de dar nomes apropriados para as coi- e sas4 . Assim, ´ importante que os nomes que usarmos tenham alguma rela¸˜o com o e ca 4 Quem quiser ter uma ideia do estrago quando n˜o damos bons nomes para as a coisas, pode acompanhar dois di´logos humor´ a ısticos, um deles, o original, da du- pla Abbot & Costello sobre um jogo de beisebol, a outra de um ex-presidente dos Estados Unidos falando sobre o novo presidente da China. Ambos os v´ıdeos est˜o dispon´ a ıveis no YouTube: (1) http://www.youtube.com/watch?v=sShMA85pv8M; (2) http://www.youtube.com/watch?v=Lr1DWkgUBTw.
  • 31. ¸˜ ¸˜ 4.4. ABSTRACAO DAS INSTRUCOES (LINGUAGEM) 31 significado que eles est˜o desempenhando no programa. a Ent˜o chega o momento de n´s sabermos que o programa que est´ em mem´ria a o a o recebe como entrada dois valores b e c e escreve como sa´ as ra´ ıda ızes da equa¸ao c˜ x2 − bx + c = 0. Os c´lculos usam o m´todo de B´skara. A figura 4.8 mostra a a e a conven¸˜o para a substitui¸˜o dos endere¸os por nomes. ca ca c Endere¸o c Nome 54 dois 50 quatro 46 B 47 quadradoB 48 C 49 quadruploC 51 discriminante 52 raizDiscriminante 53 dobroMenorRaiz 55 menorRaiz 56 dobroMaiorRaiz 57 maiorRaiz Figura 4.8: Dando nomes para os endere¸os. c Agora, usaremos esta conven¸ao de troca de endere¸os por nomes para podermos c˜ c reescrever o programa ainda mais uma vez, obtendo a vers˜o da figura 4.9. a Esta vers˜o define o ultimo grau de abstra¸˜o simples. A partir deste ponto a a ´ ca nota¸ao deixa de ser s´ uma abreviatura das instru¸oes e a tradu¸ao deixa de ser c˜ o c˜ c˜ direta. Apesar do fato de ser o ultimo n´ de nota¸ao simples, ainda ´ poss´ melhorar- ´ ıvel c˜ e ıvel mos o grau de facilidade visual, mas desta vez passamos para a nota¸ao ou linguagem c˜ de “alto n´ ıvel”, que vai exigir a introdu¸ao dos chamados compiladores. c˜ 4.4 Abstra¸˜o das instru¸˜es (linguagem) ca co Apesar de todas as nota¸oes e conven¸oes que foram feitas no programa, at´ se chegar c˜ c˜ e na vers˜o mostrada na figura 4.9, de certa maneira, o programa ainda est´ em um a a formato muito parecido com o do programa original. Para que seja poss´ aumentar o n´ de nota¸ao ainda mais ´ preciso contar com ıvel ıvel c˜ e a ajuda de programas tradutores, ou como eles s˜o mais conhecidos, os compiladores. a Estes programas conseguem receber como entrada um texto escrito em um for- mato adequado e gerar como sa´ um programa no formato da m´quina. Isto ´ ıda a e