Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Algoritmos e Estruturas de Dados IMarcos Castilho   Fabiano Silva    Daniel Weingaertner                     Vers˜o 0.7   ...
2    Algoritmos e Estruturas de Dados I - Notas de Aula est´ licen-                                                       ...
Sum´rio   a1 Introdu¸˜o         ca                                                                                        ...
4                                                                                                                      ´  ...
´SUMARIO                                                                                                                  ...
6      ´    SUMARIO
Cap´   ıtulo 1Introdu¸˜o       caEste material cont´m notas de aulas da disciplina CI055 – Algoritmos e Estruturas de     ...
8                                                     CAP´               ¸˜                                               ...
Cap´   ıtulo 2Sobre problemas e solu¸oes                      c˜Vamos iniciar nosso estudo com uma breve discuss˜o sobre p...
10                           CAP´                              ¸˜                                ITULO 2. SOBRE PROBLEMAS ...
´2.1. CONTANDO O NUMERO DE PRESENTES EM UM EVENTO                                   11    Efetivamente ´ esta a solu¸ao pa...
12                            CAP´                              ¸˜                                 ITULO 2. SOBRE PROBLEMA...
˜2.3. CONCLUSAO                                                                    13os pneus antes da prova e andar com o...
14   CAP´                              ¸˜        ITULO 2. SOBRE PROBLEMAS E SOLUCOES
Cap´   ıtulo 3Sobre algoritmos e programasAp´s o estudo do problema, an´lise das diversas possibilidades de solu¸ao e a es...
16                        CAP´                             ITULO 3. SOBRE ALGORITMOS E PROGRAMASnecessariamente a mesma pe...
´3.1. O QUE E UM ALGORITMO?                                                      17Algoritmo para fazer um bolo de chocola...
18                        CAP´                             ITULO 3. SOBRE ALGORITMOS E PROGRAMAS3.2     O que ´ um program...
´3.2. O QUE E UM PROGRAMA?                                                        19as instru¸oes para posteriormente pode...
20                        CAP´                             ITULO 3. SOBRE ALGORITMOS E PROGRAMAS3.3       Exerc´          ...
Cap´   ıtulo 4O modelo do computadorEsta se¸ao tem dois objetivos, o primeiro ´ mostrar como ´ o funcionamento dos       c...
22                                       CAP´                                            ITULO 4. O MODELO DO COMPUTADOR  ...
4.2. PRINC´          IPIOS DO MODELO                                                            23 Endere¸o       c     Co...
24                                 CAP´                                      ITULO 4. O MODELO DO COMPUTADOR  Esta defini¸˜...
4.2. PRINC´          IPIOS DO MODELO                                                           254.2.3    O ciclo de execu...
26                                CAP´                                     ITULO 4. O MODELO DO COMPUTADOR     5. Como p =...
4.3. HUMANOS VERSUS COMPUTADORES                                               27uma vez que j´ identificou pequenos blocos...
28                               CAP´                                    ITULO 4. O MODELO DO COMPUTADOR    De fato, a par...
4.3. HUMANOS VERSUS COMPUTADORES                                                  29coluna Instru¸˜o, substituiremos o n´m...
30                              CAP´                                   ITULO 4. O MODELO DO COMPUTADOR                    ...
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
Estrutura de dados
Upcoming SlideShare
Loading in …5
×

Estrutura de dados

10,246 views

Published on

Acesse centenas de materiais e mais de 04 mil horas de cursos online gratuitos de TI no Portal GSTI: www.portalgsti.com.br.

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Estrutura de dados

  1. 1. Algoritmos e Estruturas de Dados IMarcos Castilho Fabiano Silva Daniel Weingaertner Vers˜o 0.7 a Maio de 2011
  2. 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. 3. Sum´rio a1 Introdu¸˜o ca 72 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 a3 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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204 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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355 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. 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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496 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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 707 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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 868 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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1049 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. 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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12410 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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21611 Desenvolvendo programas de maior porte 225 11.0.1 Campo minado . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 11.1 Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23412 Tipos abstratos de dados 241 12.1 Tipo Conjunto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 12.2 Tipo Lista . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 12.2.1 Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
  6. 6. 6 ´ SUMARIO
  7. 7. Cap´ ıtulo 1Introdu¸˜o caEste material cont´m notas de aulas da disciplina CI055 – Algoritmos e Estruturas de eDados 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 edas quatro que cobrem o conte´do b´sico de algoritmos sem o qual um curso de u acomputa¸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 uem 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˜ ete´ricos. o O texto est´ dividido em duas partes bem definidas, a primeira entre os cap´ a ıtulos 2e 9, cont´m os princ´ e ıpios b´sicos da constru¸˜o de algoritmos elementares, incluindo a caa parte de subprogramas, com especial aten¸˜o a quest˜es tais como passagem de ca oparˆ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 dadosb´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 aescrevemos 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 apasso. Alguns algoritmos importantes s˜o estudados em suas vers˜es b´sicas: busca e a o aordena¸ao de vetores. No¸˜es de complexidade de algoritmos s˜o mencionadas, ainda c˜ co aque de modo informal, pois isto ´ conte´do de per´ e u ıodos mais avan¸ados. Contudo, ´ c eimportante ao aprendiz ter no¸ao clara da diferen¸a de custo entre diferentes algorit- c˜ cmos. 7
  8. 8. 8 CAP´ ¸˜ ITULO 1. INTRODUCAO As ultimas estruturas de dados relevantes para o primeiro per´ ´ ıodo s˜o as matrizes ae o conceito de registro. Havendo tempo, tamb´m se discute estruturas um pouco emais sofisticadas, misturando-se vetores, registros e matrizes. Finalmente se oferece um desafio aos alunos. O objetivo ´ o de mostrar uma eaplica¸ao interessante dos conceitos que eles j´ dominam. Normalmente trabalha-se c˜ aem 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, eventualmentecom registros. A ideia ´ que eles possam fazer um programa mais extenso para etreinarem 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 udas anteriores. Tamb´m n˜o deve iniciar um novo cap´ e a ıtulo sem ter compreendido osanteriores. Sobre a linguagem, o estudante ´ encorajado a buscar apoio na literatura e nos eguias de referˆncia dispon´ e ıveis para o compilador escolhido (Free Pascal ), incluindoum guia de referˆncia b´sico que foi escrito pelos monitores da disciplina no ano de e a2009. A leitura destas notas de aula n˜o isenta o estudante de buscar literatura comple- amentar, 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 aem [Car82], [Sal98], [Med05] e [Wir78]. Para mais detalhes de programa¸˜o em Pascal cao leitor pode consultar [Far99] e tamb´m os guias de referˆncia da linguagem [Gui]. e eFinalmente, embora talvez de dif´ compreens˜o para um iniciante, recomendamos ıcil apelo menos folhear o material em [Knu68].
  9. 9. Cap´ ıtulo 2Sobre problemas e solu¸oes c˜Vamos iniciar nosso estudo com uma breve discuss˜o sobre problemas e solu¸˜es. O a coobjetivo ´ 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 asobre a existˆncia de diversas solu¸oes para um dado problema. A ˆnfase ser´ dada e c˜ e anas diferen¸as entre as solu¸˜es e tamb´m na discuss˜o sobre at´ que ponto deve-se c co e a eficar 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 uNo primeiro dia letivo do primeiro semestre de 2009, um dos autores deste materialcolocou o seguinte problema aos novos alunos: quer´ ıamos saber quantos estudantesestavam 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. aPrimeira solu¸˜o caA primeira solu¸ao parecia t˜o obvia que levou algum tempo at´ algum aluno verbali- c˜ a ´ ezar: o professor conta os alunos um por um, tomando o cuidado de n˜o contar algu´m a eduas 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 comexecutar e produz o resultado correto. E c˜ 9
  10. 10. 10 CAP´ ¸˜ ITULO 2. SOBRE PROBLEMAS E SOLUCOESpoucos alunos, digamos, 20 ou 30. Outro aspecto considerado foi o fato de que estem´todo n˜o exige nenhum conhecimento pr´vio de quem vai executar a opera¸˜o, a e a e can˜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- ucess´rio para o t´rmino da opera¸ao pode ser insatisfat´rio. Para piorar, quanto a e c˜ omaior o n´mero, maior a chance de aparecerem erros na contagem. Foi discutida a uadequa¸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 efizeram a contagem e, ap´s conferˆncia, obtivemos o resultado correto, que serviu o epara an´lise das outras solu¸˜es. a coSegunda solu¸˜o caPensando no problema de se contar na ordem de 100 alunos, um estudante sugeriuque 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 econhecimento 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 upois o n´mero de carteiras vazias ´ menor do que o das ocupadas. Por outro lado, se u ea 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˜ atagem de presentes a um com´ numa pra¸a p´blica, pois n˜o h´ carteiras na rua. ıcio c u a aTerceira solu¸˜o caPara resolver o problema do com´ ıcio, outro estudante sugeriu que se fizesse umaestimativa baseada na metragem total da pra¸a, multiplicada pelo n´mero estimado c ude 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 ıciaMas deve-se saber de antem˜o a metragem da pra¸a e estimar a taxa de pessoas por a cmetro quadrado. O m´todo ´ t˜o bom quanto melhor for a estimativa. Tamb´m ´ e e a e emelhor 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 edo n´mero estimado ser exatamente o n´mero de presentes ´ baixa. Os m´todos u u e eanteriores s˜o exatos, isto ´, nos d˜o o n´mero correto de presentes. Este m´todo a e a u etamb´m serve razoavelmente bem para o n´mero de alunos na sala de aula. De fato, e unesta aula, o professor conseguiu o n´mero com aproxima¸ao 80% correta. A quest˜o u c˜ aque restou ´ se o erro de 20% ´ aceit´vel ou n˜o. Isto depende do motivo pelo qual e e a ase quer contar os alunos na sala.Quarta solu¸˜o caPara resolver o problema da precis˜o, outro estudante sugeriu o uso de roletas. a
  11. 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˜ aum show de rock. Mas tamb´m foi considerado que a solu¸˜o exige uma ou mais e cacatracas, uma barreira para ningu´m entrar sem passar pela roleta e etc, para se egarantir a exatid˜o do resultado. No caso do com´ n˜o seria vi´vel. No caso da a ıcio a asala de aula foi constatado que n˜o havia roletas e portanto o m´todo n˜o se aplicava. a e aQuinta solu¸˜o caMais uma vez outro estudante apresentou uma boa alternativa: contar o n´mero de ufilas de carteiras e, dado que todas tenham o mesmo n´mero de estudantes, ent˜o u abastaria 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 caex´rcito. As filas s˜o rapidamente arrumadas com, digamos, 10 soldados em cada fila, e asabendo-se o n´mero de filas basta multiplicar por 10, eventualmente tendo-se que ucontar 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 aser feito. Tamb´m ficaria estranho o professor colocar todos os alunos em filas. Foi etamb´m observado que o m´todo fornece a solu¸ao exata para o problema. e e c˜Sexta solu¸˜o caNova sugest˜o de outro aluno: cada estudante no in´ de cada fila conta o n´mero de a ıcio ualunos da sua fila, tomando o cuidado de contar a si pr´prio tamb´m. Depois soma-se o etodas 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 caDistribuindo-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 eNo caso daquela aula os estudantes realizaram a opera¸˜o em poucos segundos, mais caalgum 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 erazoavelmente escal´vel, isto ´, funciona para salas de tamanhos diferentes. a eS´tima solu¸˜o e caPara 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 ucada par, primeiro ´ somado o n´mero de cada um dos dois, um deles guarda este e un´mero e permanece de p´, o outro deve se sentar. Os que ficaram em p´ repetem u e eeste processo at´ que s´ exista um unico aluno em p´. Ele tem o n´mero exato de e o ´ e uestudantes na sala. Como se divide a sala em pares, ap´s a primeira rodada metade da sala deve ter oo n´mero 2 e a outra metade est´ sentada, considerando que a sala tem o n´mero de u a ualunos par. Se for ´ ımpar um deles ter´ ainda o n´mero 1. Ap´s a segunda rodada um a u oquarto dos alunos dever´ ter o n´mero 4 e trˆs quartos estar˜o sentados, eventualmente a u e aum deles ter´ um n´mero ´ a u ´ f´cil perceber que o resultado sai em tempo ımpar. E a
  12. 12. 12 CAP´ ¸˜ ITULO 2. SOBRE PROBLEMAS E SOLUCOESproporcional ao logaritmo do n´mero total de alunos, o que ´ bem r´pido. De fato, u e apara mil pessoas o processo termina em 10 passos e para um milh˜o de pessoas termina aem 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 exigee a e uorganiza¸ao dos presentes. c˜ Infelizmente aquela turma n˜o se organizou direito e o resultado veio com um erro ade 40%. . . Mas ap´s duas rodadas de treinamento, na terceira conseguimos obter o oresultado correto.2.2 Trocando os quatro pneusTodo mundo sabe trocar pneus, embora n˜o goste. O processo que um cidad˜o comum a aexecuta ´ muito simples: levanta o carro com o macaco, tira todos os quatro parafusos eda roda com o pneu furado, tira a roda do eixo, coloca a roda com o pneu novo noeixo, 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 ado mundo se pudesse usar um composto de pneu mais mole e com isto ganhar preciosossegundos com rela¸ao aos seus concorrentes. O problema ´ que estes compostos mais c˜ emoles 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 atrocar 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 e20 minutos por pneu, com um pouco de pr´tica 10 minutos. Com muita pr´tica 2 ou a a3 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 eum macaco hidr´ulico, destes de loja de pneus, e levantamos o carro todo de uma s´ a ovez. Mas, para cada roda, temos 4 parafusos, isto ´, 16 no total, ou melhor, 32, pois etem que tirar e depois recolocar: usa-se uma aparafusadeira el´trica para amenizar o eproblema, mas ainda n˜o ´ suficiente. a e Se a roda tiver um unico parafuso a economia de tempo ´ maior ainda. Mas ´ eainda 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´ aestamos abaixo de 1 minuto. Se tiver ainda a possibilidade de 3 pessoas por roda: um tira o parafuso, outro tiraa roda velha, um terceiro coloca a roda nova e o primeiro aperta o parafuso. Mais 2mecˆ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 ocompletar 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. 13. ˜2.3. CONCLUSAO 13os pneus antes da prova e andar com o carro contendo metade da gasolina, j´ que ele aia ter que parar nos boxes de qualquer maneira para trocar os pneus. . . O cara ´ um egˆnio. e2.3 Conclus˜o aMesmo para um problema simples existem diversas solu¸˜es. A escolha da melhor codepende de v´rios fatores. Por exemplo, se a resposta deve ser exata ou n˜o ou se os a aconhecimentos 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 ıvela 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 cavˆm com v´rios n´cleos de processamento e sempre existe a chance de se tentar quebrar e a uum problema em v´rios outros menores e deixar que v´rios processadores resolvam a aseus peda¸os de solu¸ao e depois tentar juntar os resultados com mais alguma opera¸˜o c c˜ casimples. No caso da f´rmula 1 isto funcionou, mas em geral n˜o ´ verdade. Infelizmente o a eexiste o problema da dependˆncia de dados. Por exemplo, o mecˆnico que vai colocar e aa roda nova s´ pode trabalhar depois que o outro tirou a roda velha. Em problemas ocom alto grau de dependˆncia, paralelizar ´ complicado.1 . e e 1 N˜o se estudar˜o algoritmos paralelos nesta disciplina. a a
  14. 14. 14 CAP´ ¸˜ ITULO 2. SOBRE PROBLEMAS E SOLUCOES
  15. 15. Cap´ ıtulo 3Sobre algoritmos e programasAp´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 estasolu¸ao. Antes, contudo, ´ preciso saber a diferen¸a entre um algoritmo em um c˜ e cprograma. Isto ser´ discutido neste cap´ a ıtulo.3.1 O que ´ um algoritmo? eUm 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˜ eescrito da sequˆncia de passos necess´rios que devem ser executados para manipular e ainforma¸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 en˜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 eque outra pessoa execute a solu¸ao, mas atrav´s de instru¸˜es precisas, de maneira c˜ e coque 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 eingredientes 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 ebatedeira e adicione a farinha de trigo, o chocolate em p´, o fermento oe reserve. Bata as claras em neve e junte-as a massa de chocolate `misturando delicadamente. Unte uma forma retangular pequenacom manteiga e farinha e leve para assar em forno m´dio pr´-aquecido e epor aproximadamente 30 minutos. Desenforme o bolo aindaquente e reserve. Este ´ um bom exemplo de algoritmo pois podemos extrair caracter´ e ısticas bastanteinteressantes do texto. Em primeiro lugar, a pessoa que escreveu a receita n˜o ´a e 15
  16. 16. 16 CAP´ ITULO 3. SOBRE ALGORITMOS E PROGRAMASnecessariamente 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 copois todas as receitas seguem o mesmo padr˜o. As conven¸˜es que est˜o impl´ a co a ıcitasno 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 formatopadr˜o. a
  17. 17. ´3.1. O QUE E UM ALGORITMO? 17Algoritmo 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- comente 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˜ eeletrˆ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 asinforma¸oes impl´ c˜ ıcitas. Tamb´m deve evitar o uso de frases amb´ e ıguas ou imprecisase deve ser o mais detalhado poss´ıvel. Tamb´m n˜o pode ter frases de significado e adesconhecido. Na pr´xima se¸ao vamos desenvolver melhor este tema. o c˜
  18. 18. 18 CAP´ ITULO 3. SOBRE ALGORITMOS E PROGRAMAS3.2 O que ´ um programa? eUm 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 asinstru¸oes. c˜ Vamos imaginar, a t´ıtulo de ilustra¸ao, que ´ a primeira vez que a pessoa entra na c˜ ecozinha 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 outrocozinheiro, o que n˜o ´ o caso, pois a pessoa ´ inexperiente em cozinha e n˜o sabe o a e e aque 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 cocomo se obt´m claras em neve. Poderia ser algo como ilustrado na figura 3.2. eAlgoritmo para fazer claras em nevein´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. afim. Figura 3.2: Algoritmo para fazer claras em neve. J´ temos algo mais detalhado, mas nosso inexperiente cozinheiro pode ainda ter aproblemas: como se separa a clara da gema? Este tipo de situa¸ao parece n˜o ter fim. c˜ aQual ´ 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 ıvelinstru¸ao de quem ia efetivamente fazer o bolo. Para isto, ´ preciso que se estabele¸a c˜ e co n´ m´ ıvel ınimo de conhecimento para quem vai executar, assim quem escreve sabe at´ eonde deve ir o n´ de detalhamento de sua receita. ıvel Um programa, neste sentido, ´ um algoritmo escrito de forma t˜o detalhada quanto e afor necess´rio para quem executa as instru¸oes. O algoritmo pode ser mais gen´rico, a c˜ eo 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. 19. ´3.2. O QUE E UM PROGRAMA? 19as 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, emseguida, continuarmos no estudo de algoritmos.
  20. 20. 20 CAP´ ITULO 3. SOBRE ALGORITMOS E PROGRAMAS3.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. 21. Cap´ ıtulo 4O modelo do computadorEsta se¸ao tem dois objetivos, o primeiro ´ mostrar como ´ o funcionamento dos c˜ e ecomputadores modernos, isto ´, no n´ e ıvel de m´quina. A segunda ´ que o aluno a eperceba, desde o in´ do seu aprendizado, as limita¸oes a que est´ sujeito quando ıcio c˜ aprograma, 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 queseja a linguagem de programa¸˜o utilizada, a computa¸˜o de verdade ocorre como ca ca 1ser´ mostrado aqui. a4.1 Hist´rico oUm computador (hardware) ´ um conjunto de circuitos eletrˆnicos que manipulam e osinais 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 uExistem 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 caresidentes em mem´ria atrav´s de altera¸oes de sinais el´tricos realizadas por circuitos o e c˜ eintegrados 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 eparticular. Para se executar outro programa era necess´rio alterar os circuitos, assim ase reprogramando o computador para manipular os dados de outra maneira. Um computador era algo raro naqueles tempos, e devia rodar v´rios programas adiferentes, o que resultava em imenso trabalho para os engenheiros (os programadoreseram engenheiros na ´poca). e A mem´ria do computador, naqueles tempos, era exclusividade dos dados que oseriam 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. 22 CAP´ ITULO 4. O MODELO DO COMPUTADOR John von Neumann propˆs um modelo bastante simples, no qual tanto o programa oquanto os dados poderiam ficar simultaneamente em mem´ria, desde que a parte que oficaria programada nos circuitos pudesse interpretar o que era dado e o que era oprograma 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 oarte 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 modeloConforme explicado, Von Neumann propˆs que os dados e o programa poderiam ser ocarregados em mem´ria ao mesmo tempo. Um elemento adicional denominado ciclo ode 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˜ amudam 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˜ aobservar ´ 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 uO computador da BCC implementa o modelo Von Neumann, logo, sua mem´ria ocont´m os dados e o programa. e A mem´ria do computador em um dado instante do tempo ´ uma configura¸˜o de o e casinais el´tricos que podem ser vistos pelo ser humano como uma sequˆncia absurda e ede 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 avencionou algumas maneiras de enxergar n´meros inteiros que representam os bits. uN˜o vamos apresentar neste texto as diversas maneiras de convers˜o de n´meros, o a a uleitor 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 oesta apresentada na figura 4.1 2 Quem assistiu ao filme Matrix pode imaginar a complica¸˜o. ca
  23. 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 centre endere¸o e conte´do do endere¸o. Para facilitar a compreens˜o, vamos adotar c u c auma nota¸ao. Seja p um endere¸o. Denotamos por [p] o conte´do do endere¸o p. c˜ c u cVejamos 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] = 354.2.2 O repert´rio de instru¸oes o c˜Conforme mencionado, o modelo Von Neumann pressup˜e que o computador que est´ o aem 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 oda BCC foi definido ap´s longas discuss˜es da equipe t´cnica da empresa e tem um o o econjunto extremamente limitado de instru¸˜es, na verdade apenas nove. co
  24. 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 amuita 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 coainda nenhuma delas ´ a de bater claras em neve. e
  25. 25. 4.2. PRINC´ IPIOS DO MODELO 254.2.3 O ciclo de execu¸˜o de instru¸˜es ca coO ciclo de execu¸˜o de instru¸˜es define o comportamento do computador. Funciona ca coassim (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 atos eletrˆnicos do computador da BCC. o4.2.4 Exemplo de execu¸˜o de um programa caA grande surpresa por tr´s do modelo de Von Neumann ´ que, mesmo que o leitor a eainda n˜o compreenda, o que existe na verdade “disfar¸ado” na fotografia da mem´ria a c oda figura 4.1 ´ um programa que pode ser executado pelo computador, desde que todo eo processo siga as instru¸˜es descritas na se¸˜o anterior. co ca Vamos tentar acompanhar passo a passo como ´ o funcionamento deste esquema. ePara 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 nestemomento 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 atado, afinal de contas, o computador jamais saber´. . . Ele executa cegamente as ins- atru¸oes. N´s saberemos logo a frente, mas, agora, para entendermos como ´ o funci- c˜ o ` eonamento 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. 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 aa instru¸˜o “stop” for a da vez. O leitor ´ encorajado a acompanhar a execu¸˜o ca e capasso a passo at´ o final para entender como ´ exatamente o comportamento dos e ecomputadores 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 edos circuitos da mem´ria. o4.3 Humanos versus computadoresN´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 oprocesso, 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 eem p, ora outro? Isto ´, quando executamos a opera¸˜o “load”, o valor somado em p e cafoi 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 amodelo. De fato, quando se executa a instru¸ao [p], o conte´do de [p+1] sempre ´ o endere¸o c˜ u e cde destino dos dados que s˜o resultado da opera¸ao em execu¸ao. Os endere¸os a c˜ c˜ csubsequentes apontam para os operandos da opera¸ao que est´ programada para c˜ aacontecer. 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 oprecisa entender a mem´ria como esta esp´cie de “tripa”. O ser humano, ao contr´rio, o e a
  27. 27. 4.3. HUMANOS VERSUS COMPUTADORES 27uma 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 epequenos blocos em uma unica linha. ´ Observamos que apenas os n´meros de 1 a 9 podem ser interpretados como c´digos u ode 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˜ cas˜o separados das instru¸˜es numa mesma linha, cada linha agora representa toda a a coinstru¸ao com os dados. Isto pode ser visto na figura 4.3. Importante notar que ´ a c˜ emesma 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 cContinuando 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 ıvelimportantes: 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 caVon Neumann, o que vai nos permitir a compreens˜o do processo de uma maneira acada vez mais “humana”.
  28. 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 ca instru¸ao ´ irrelevante para n´s, humanos. Podemos perfeitamente compreender o c˜ e oprocesso 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, oagora n˜o apenas em formato de blocos mas tamb´m sem a coluna dos endere¸os. Va- a e cmos 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 acircuitos eletrˆnicos, o que estamos fazendo ´ uma tentativa, um pouco mais humana, o ede 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 ahumano”, afirmamos que ´ poss´ aumentar ainda mais o grau de nota¸˜o. e ıvel ca Para a etapa seguinte, vamos observar que, embora os computadores manipulemn´meros (em particular, n´meros bin´rios) de maneira muito eficiente e r´pida, o u u a amesmo 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, oJos´ ou Maria e n˜o n´meros tais como o RG do Marcos, o CPF do Jos´ ou o PIS da e a u eMaria. 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˜ odesta vez escrevendo os nomes dos mnemˆnicos no lugar dos n´meros. Assim, na o u
  29. 29. 4.3. HUMANOS VERSUS COMPUTADORES 29coluna Instru¸˜o, substituiremos o n´mero 1 por load, 2 por add, 3 por sub e assim ca upor diante, conforme a figura 4.2. O programa da figura 4.4 pode ser visualizado novamente de outra forma, tal comoapresentado na figura 4.5. Notem que o grau de compreens˜o do c´digo, embora ainda a on˜o esteja em uma forma totalmente amig´vel, j´ ´ bastante melhor do que aquela a a aeprimeira apresenta¸ao da “fotografia da mem´ria”. c˜ o De fato, agora ´ poss´ compreender o significado das linhas, em que existe um e ıveldestaque para a opera¸˜o (o mnemˆnico), a segunda coluna ´ o endere¸o de destino ca o e cda 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 ooutro tipo de nota¸ao para representarmos opera¸oes. Este ´ o pr´ximo passo. c˜ c˜ e o4.3.3 Abstra¸˜o do repert´rio de instru¸˜es ca o coNesta etapa, observaremos que as instru¸˜es executadas pelo computador nada mais cos˜o do que manipula¸ao dos dados em mem´ria. Os c´lculos s˜o feitos sobre os dados a c˜ o a ae 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˜ cafigura 4.6. Isto ´, vamos usar as tradicionais letras finais do alfabeto para ajudar na emelhoria da facilidade visual. Assim poderemos reescrever o programa mais uma veze ele ficar´ como apresentado na figura 4.7. a
  30. 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 aNa verdade, assim como j´ observamos que o c´digo da instru¸ao n˜o nos interessa, a o c˜ avamos perceber que o mesmo ´ verdade com rela¸˜o aos endere¸os de mem´ria. Ent˜o, e ca c o aconvencionaremos que os n´meros podem ser trocados por nomes. Fazemos isto na uvers˜o seguinte do mesmo programa. a Conv´m notar que o ser humano gosta de dar nomes apropriados para as coi- esas4 . 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 acoisas, 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-presidentedos Estados Unidos falando sobre o novo presidente da China. Ambos os v´ıdeosest˜o dispon´ a ıveis no YouTube: (1) http://www.youtube.com/watch?v=sShMA85pv8M; (2)http://www.youtube.com/watch?v=Lr1DWkgUBTw.

×