You are on page 1of 131
Pare uae) Le aaa Tn eta Bi he Dale At i) a PT Te TAT Pe me | CLL TT TT Ll mo LO nM HTT A mee, = as | ALGORITMOS E LOGICA DE ae Me | | || ee ee il HLL : _. HTL ee HLT il ty adce tnearacionais de ctaionaedo na hbLicasto (C1) indice pare catsiogo stetensticn 1, Algostense + canputacores « sroscanacio Algoritmos e Logica de Programacao Um Texto Introdutério para Engenharia 2* edicdo revista ¢ ampliada Marco Antonio Furlan de Souza Marcelo Marques Gomes Marcio Vieira Soares Ricardo Concilio 3% CENGAGE Learning: Avista Brasil «Sapo « Coreia « México» Cingapura + Espanha « Reino Unido « Estados Unidos ae CENGAGE ie Tearaing Algoritmos Logica de Programacso Um Texto introdutério para Engenharia ‘Marco Antonio Furlan de Souza ‘Marcelo Marques Gomes Marcio Vieira Soares ¢ RicardoConello (Geren Eo Patrica La Rosa Editor de Desenvolvimento: Fabio Goneales Supenisoca de Produc Editor: Fabiana Alencar Albuquerque Copidesque: Marla Alice da Costs evs Rinaldo Mle! Diagramasso: Maro Antonio Furtan de Suze capa Ale Gustavo Pesquis leonograic: Graciela Nala s Impresso no Brasil, Printed in Brazil, 1234567 1312111009 (© 200 Cengage Lesming Edigces tide Todos os crits reservados. Nenhuma pate deseo po der servepoieits, spam qua fem oz mele enpegates, sama pemissf, por eit. de Editor, os ifratoresaplicamse a sangbespreviatas nos artigos 102,104,106 6107 da Le 9.610, da 9 de everere de 398. Esta Eaitora empenfou'se em conatr os rezponséveis Delos drets autoais de todos os materia utiaads este lo. Se porventura or constataa 3 omisso nvoluntina naidentticarae de alga dees, dispomo-noe a efetur, futuramente os posse acertos, ara infoomagaes sobre nosss produto, ese em ‘conta pele telfone 0800 11938 Para permisso de uso de materia deca obra, envi seu pecido para dritosautorlseeengage.com (© 20m Cengage Leaning, Todo os dieltsreserados. Isen3:97ea5-22-1299 ISBN: 362211298 Cengage Lesrning CCondomino E-Business Park ua Werner Siemens, Il = Prédio 20 = paso 04 Lapa de Bano ~CEPOS068-900 - Sto Paulo SP “es (3665-900 - Fax (1) 365.9901, SSAC: 0800 11939, Pare suas slugs de ers eaprendiado vise worncengagescom.br Para meus pais e para minha esposa Isabel. MARS Dedico este trabalho aos meus pais, pela dedicagéo © apoio durante toda a vida, MMG. A minha esposa Ivani ao tio Cesar Timo-Iaria pelo apoio e paciéncia. MVS, Para todos os amigos que colaboraram, mesmo que indiretamente, com esse trabalho. Para ela, quem me acompanharé no dia a dia, RC. Sumario Preficio 1. Introdugao 11 O desenvolvimento de um software 1.2. Algoritmos e légica de programacio 1.2.1 O significado de um algoritmo 1.2.2 Exemplo de algoritmo 1.3. formalizacio de um algoritmo 13.1 A sintaxe de um algoritmo 13.2 Exemplo de sintaxe de um algoritmo 1.3.3 A semantica de um algoritmo 1.4 Como resolver problemas 14.1 A andlise e a sintese de um problema 14.2 Modelagem de problemas 1.4.3 O papel da l6gica em programagao . 15 Como se portar em um curso de computagao 1.6. Exercicios 2 Conceitos de Computacio e Computadores 2.1 Origens da computacao 21.1 Anecessidade de calcular 2.1.2 O desenvolvimento de sistemas de numeracio 22 Aevolugdo dos computadores . . . 22.1 Geragdo zero —Computadores puramente mecéinicos 2.2.2 Primeira geragdo - Computadores a valvula ¢ relé 223 Segunda geracdo - Computadores transistorizados 224 Terceira gera¢do ~ Computadores com circuitos integrados 22.5 Quarta geragdo - Computadores com chips VLSI viii__Algoritmos e Logica de Programacao 23. A representagio da informagéo em um computador 23,1 AeletrOnica digital do computador 2.3.2 Conceitos de bits ¢ seus miltiplos 23.3 Caraateres ¢ cadeias de caracteres 234 Imagens . . 23.5 Sons , 2.4 A arqutetura de um computador 2.5 0 funcionamento da UCP na execugo dos programas 2.6 O projeto l6gico na construgo de programas 3. Algoritmos e Fluxogramas 3.1 Revisio do conceito de algoritmo 3.2. Aplicabilidade dos algoritmos 3.2.1 Exemplo nfo computacional de um algoritmo 3.2.2 Exemplo computacional de um algoritmo 3.3. Propriedades de unalgoritmo 3.4 Fluxogramas 3.5. Construindo fluxogramas 3.5.1 Fluxograma minimo ... . 3.5.2 Fluxograma com comandos sequenciais 3.5.3 Fluxograma com comandos de decisio 3.54 Fluxograma com comandos de repetigao 3.5.5 Simulagéo de algoritmos com fluxogramas 3.6 Convengdes para tipas de dados, 3.6.1 Néimeros 3.6.2 Caracteres ¢ cadeias de caracteres 3.63. Valores l6gicos 3.7 Convengdes para os nomes de varidveis, 3.8 Convencdes para as expressbes . . 3.8.1 Operagdo de atribuigéo 3.8.2 Operagdes aritméticas 3.8.3 Operagdes relacionais 3.84 Operagdes légicas 3.8.5 Expressdes . 3.9 Sub-rotinas predefinidas 3.9.1 Pung6es mateméticas . 3.9.2 Fungdes, © rocetientos para ascadeias decaracteres 3.10 Exercicios 3.11 Bxereicios resolvidos 101 102 103 105 us Suméio 4 Bstruturas de Programacio 7 41 42 43 44 45 46 ar Bstruturas de programago Estruturas sequenciais, Esiruturas de decisio . 43.1 Estrutura SE-ENTAO 432 Bstrutura SE-ENTAO-SENAO 433 Estrutura CASO 4.3.4 Exemplos de estruturas de deciséo Estruturas de repetigao 44.1 Bstratura ENQUANTO-FACA, 442. Bstratura REPITA-ATE . 4.43. Bstrutura PARA-ATE-FACA 4.44 Exemplos de estruturas de repeticao 445. Simbolos especificos para estruturas de repetigao (ISO 5807) Outras representagées de algoritmos Le 4.5.1 Portugol 452 Diagramas de Nassi-Schneidermann Exercicios . . Exercicios resolvidos 5 Variaveis Indexadas SA 52 33 54 55 56 $7 58 Motivagio . YVariveis indexadas unidimensionais a Represenago de vetores na meméria do computador Utilizagdo de vetores . Exemplos de flxogramas com vetores 5.5.1 Localizagio de um elemento do vetor 5.5.2 Média aritmética dos elementos de um vetor 5.53 Localizagio de elementos de um veto po alzum crtério 5.5.4 Determinagdo do maior e menor elemento de um vetor 5.5.5 Céloulo de um polinémio pelo método de Homer ‘Varidveis indexadas bidimensionais : Exemplos de fluxogramas com matrizes 5.7.1 Leitura de elementos para uma matriz 5.7.2 Produto de um vetor por uma matriz, Exercicios ix 12s 125, 126 127 127 128 129 130 132 132 133, 134 136 143, 146 146 149 192 159 165 165 167 168 169 11 im 174 174 176 17 179 180 180 181 183 x___Algoritmos ¢ Logica de Programagéo 6 ‘Técnicas para a Solugéo de Problemas 6.1 A técnica top-down . 6.1.1 Exemplo de aplicago 62 Sub-totinas a . 62.1 Fungoes ... . 6.2.2 Exemplos de fungdes 6.2.3 O mecanismo de chamada de fungoes 6.24 Procedimentos 6.3 Exercicios 64 Exercicios resolvides Apéndice A Pequeno Histérico da Computao ‘AL Linha do tempo Apéndice BA Norma ISO 5807/1985 B.1 Os simbolos B.L.1 Siinbolos fativos a dados . ‘Simbolos telativos a processos ‘Simbolos de linhas, ‘Simbolos especiais, Textos internos Apéndice € Operadores e Funcées Predefinidas C1 Operadores mateméticos C2 Fungées predefinidas Referéncias Bibliogréficas Lista de Crédito das Figuras Sobre os Autores 191 191 192 197 197 199 208 208 212 215 215 221 222 223 224 225 . 226 27 29 230 231 235 Lista de Figuras 1.1 Simplificagao do processo de construgdo de um software 1.2. Uma receita de bolo é um algoritmo 1.3 A tarefa de especificar um algoritmo 1.4 O problema das Torres de Hanoi 1.5. Solugdo do problema das Torres de Hanoi 1.6 Preparagdo para 0 uso do algoritmo geral para as Torres de Hanci 1.7 Uso do algoritmo geral para o problema das Torres de Hanoi 1.8 Fluxograma para calcular a érea de um triangulo 1.9 Fluxograma para resolver o problema das canetas 21 O mimero 23.523 em egipcio 2.2 Um Sbaco tipico 23 uso do suan-phan chines 24 Os.ossos de Napier 2.5. Exemplo de uilizagdo dos ossos de Napier 26 A Pascaline de Pascal 2.7 Otear automético de Jacquard... . : 28 A méquina de diferengas de Babbage . aoe 2.9 O tabulador eletromecdnico de Hollerith 2.10 © computador Z-1 de Zuse 2.11 O computador ABC de Atanasoff e Berry 2.12 O computador Harvard Mark-1 de Aiken 2.13 O computador briténico Colossus 2.14 O computador Eniac 2.15 O computador Edvac 2.16 John von Neumann ¢ o computador [AS 2.17 O computador Edsac xii__Algoritmos e Légica de Programagao Lista de Figuras xiii 2.18 O computador Univac 42 3.21 Passo 3 na construgdo do flusograma para o problema das temperajuras 91 2.19 O computador IBM 709 2 3.22, Fluxograma final para 0 problema das temperaturas 2 2.20 O computador IBM 1401 43 3.23 Exemplo do comando de atribuigao. 7 2.21 computadag CDC-6600 44 3.24. Exemplo de operadores atitméticos 98 2.22 O computador IBM 360 45 3.25 Exemplo do uso de fungées mateméticas 104 2.23 O transistor como chave 48 3.26 Exemplo do uso de operacbes com cadeias de caracteres 105, 2.24 Tela em modo texto do programa Edit 33 3.27 Fluxograma para o Exercicio 3.37 ill 2.25 Tela em modo gréfico do aplicativo Paint do Windows 54 3.28 Fluxograma para o Exercicio 3.45 113 2.26 Exemplo de uma imagem 35 2,27 Bxemplo de uma forma de onda de som 57 4.1 Exemplo de fluxograma com estruturas sequencizis 126 2.28 Exemplo de uma forma de onda de som apés amostragem 37 4.2 Estrutura de decisio SE-ENTAO 127 2.29 Exemplo de uma forma de onda de som apés quantificagao 58 4.3. Estrutura de decisio SE-ENTAO-SENAO 128 2.30 Organizagao tipica de um computador 60 44 Estrutura de decisao CASO. 129 2.31 Caminho de dados de uma UCP 61 4.5. Exemplo de estrutura de decisdo SE-ENTAO-SENAO 130 2.32 Meméria principal do computador... 2 4.6 Exemplo de estrutura de deciséo CASO 131 2.33 Exemplo de a ‘instragio 64 4.7 Estrutura de repetigio ENQUANTO-FACA 133 2.34 Etapas no desenvol#fmento de um programa 64 4.8 Estrutura de repetigo REPITA-ATE. 13a 24 Flnogama mi . 4.9 Estrutura de repetigdo PARA-ATE-FACA. 134 32, rob forge exoa racoina dum ido. 75 SRG 136 3.3. Significado de variével em fiuxogramas - fe 4.11 O problema do célculo da flecha em uma viga 136 a eee encore pes a 3 ome a 3.5. Passo 2 na construct ixogral : = _ oe sou me oe da forca ' a 4.14. Exemplo da estrutura de repetigao ENQUANTO-FACA, 139 3.7 Oeefeito da enttada de dados nas variaveis 8 ; 5 Exemple Pate ae epee asd oak a 3.8 Passo 3 na construcio do fiuxoy 16 Processo de divisdo utilizado pelo algoritmo da bissecgto 39. O feito do comand de Same . fora m 4.17 Exemplo da estrutura de repeticio PARA-ATE-FAGA 142 3.10 Passo 4 na construgio do fluxograma para o problema da fora 2 9 4.18 Simbolo espeeifico para as estruturas de repetigéo (ISO 5807) 143 3.11. Fluxograma final para o problema da forca | a 4.19 Uso do simbolo especifico para as estruturas de repetigao 144 3.12 Passo 1 na construgéo do faxograma para o problema das rafzes. 81 4.20 Exemplos de uso do simbolo espectfico para as estruturas de repeti¢ao 145 3.13 Passo 2 na construgdo do fluxograma para o problema das rafzes 2 4.21 Algoritmo em Nassi-Schneidermann com instrugbes sequenciais 150 3.14 Encaminhamento apés um comando de deciso cee 82 4.22 Algoritmo em Nassi-Schneidermann com estruturas de decisio 150 3.15 Passo 3 na construgéo do fluxograma para o problema das rafzes 83 4.23 Algoritmo em Nassi-Schneidermann com a estrutura ENQUANTO-FACA 151 3.16 Fluxograma final, comentado, para o problema das raizes 84 4.24 Algoritmo em Nassi-Schneidermann com a estrutura REPITA-ATE. . .. 151 3.17 Fluxograma para o algoritmo de Buclides 7 2. 85 4.25 Fluxograma do Exercicio 4.1 i 3.18 Outro fluxograma para o algoritmo de Euclides . 86 4.26 Fluxograma do Exercicio 4.2 +5 153 3.19. Passo 1 na construcdo do flaxograma para o problema das temperaturas 89 4.27 Figura do Exercicio 4.16 156 3.20 Passo 2 na construgdo do fluxograma para o problema das temperaturas 90 4.28 Desenho da roseta do Exercicio 4.18 158 xiv__Algoritmos e Légica de Programa 5.1. Fluxograma para ordenartrés valores 166 5 5.2 Armazenamento de uma varidvel simples na meméria 168 5.3. Armazenamento de um vetor na meméria 169 5.4 Notagio parqutilizar vetotes 169 5.5. Fluxograma para armazenare localiza elementos de um vetor in 5.6 Fluxograma seguro para armazenar¢ localizar elementos de um vetor 173 + 57. Pcograna racer «mes ttt or eens dun vce 17 Lista de Tabelas 5.8 Floxograma para calcularo nimero de elementos acima e abaixo da mé- dia de um vetor 115 5.9. Floxograma para calcular 0 maior e 0 menor elemento de um vetor . . 176 510 Paso car pecan na 11 Algsrests pa rblema is Toes de Ha 9 5.12 Fluxograma para multiplicar um vetor por uma matriz . 182 2.1 Alguns simbolos do sistema de numeragio egipcio . . . . . 29 5.13 Fluxograma para o Exercicio 5.2 a 2.2. Simbolos do sistema de numerag8o romano. 30 Pee ener ey : 2.3. Simbolos do sistema de numeragio chines... 2... 20.02... 32 5.15 ‘Troca de elementogem um vetor 186 5.16 Trajeto em uma mfliz re 24 Os miltiplos do byte. . : 49 lh - ie 25. Atabela de c6digos ASC... . booeg sees SI 2.6 Codificagdo de uma cadeia de caracteres 1. 82 6.1 Ponto de patida na busca da solugio do problema das notas 193 2.7 Codificaggo de uma imagem... . bade eeec oes 56 6.2. Primeira partcso do problema cise. 194 28 Codificagdo de um sinal de som 1. 58 63 Segunda partgio do problema... 2.2... 194 64. Terceira partgao do problema coe i 3.1 Simulagdo do algoritmo de Euctides . 70 6.5. Partigfo final do problema : 196 3.2 Resumo dos simbolos vistos no Capftulo3. 0... oss 88 6.6. Representacio de fungio em fuxograma .. .. . 198 3.3 Simulaglo do fluxograma com valores de entrada errados eB 6.7 Fangio para calculara contribuigio doINSS. ss... . 200 3.4 Simulagdo do fluxograma com valores de entrada corretos. J... 9M. 68 Uso da fungio CaloContribINSS ... . 201 35° Operagdes artméticas . 1 98 6.9 Fungo para calular 0 desconto do IRRF 202 BG Opa mites 6.10 Fluxograma simplificado para 0 célculo do IRRF is 3.7 Operagdes légicas .. 0... 100 6.11 Omecanismo de chamada de uma fungéo.. 2 208 3.8 Precedéncia dos operadores 0 6.12 Representagio de um procedimento : 3.9 Fungdes matemsticas 103 6.13 Procedimento para realizar letura de um vetor .. 206 3.10 Pangoes procedimentos para as cadeies de caracteres 104 6.14 Utilizagio de um procedimento ... cove. 206 4.1 Tabela para o Exercicio 4.16 : [ise 5.1. Distribuigao de pessoas nas sals de aula m 5.2 DistribuicSo das salas de aula em um prédio com dois andares 179 5.3 Tabela de ocupagio das salas de aula 179 xvi 61 62 Bu B2 B3 BA cl c2 3 Algoritmos ¢ Légica de Programagio ‘Tabela de contribuigdes ao INSS ‘Tabela de descontos para o IRRF ‘Tabela de simbolos da ISO 5807 relativos a dados ‘Tabela de sfrffbolos da ISO 5807 relativos a processos ‘Tabela de simbolos da ISO 5807 relativos a processos Tabela de simbolos especinis da ISO 5807 Operadores mateméticos FungOes predefinidas : [Expresses derivadas de fungOes predefinidas 199 199 223 224 225 230 231 232 Lista de Algoritmos Ld 12 13 14 1s 16 17 18 19 ‘Algoritmo para resolver o problema das Torres de Hanoi Outro algoritmo para as Torres de Hanoi Algoritmo geral para as Torres de Hanoi Algoritmo informal para calcular a érea de um tridngulo Algoritmo em Portugol para calcular a érea de um triéngulo Algoritmo inicial para solucionar o problema das canetas Algoritmo geral para solucionar o problema das canetas ‘Algoritmo geral e correto para solucionar o problema das canetas ‘Algoritmo correto, comentado, para solucionar o problema das canetas 1.10 Algoritmo para o Exercicio 1.10 . . 24 31 32 33 34 35 4d 42 43 44 45 46 AT 48 Sa 52 61 ‘Algoritmo para o funcionamento da UCP ‘Algoritmo para fazer um sorvete de chocolate ‘Algoritmo para calcular oméximo divisor comum entre dois mtimeros Algoritmo para interpretar um fluxograma Algoritmo para calcular a forga exercida pela coluna de um Liquide Algoritmo para calcular as rafzes de uma equaglo de 2° grau Algoritmo minimo em Portugol . . . Algoritmo em Portugol com instrugSes sequencizis . Algoritmo em Portugol com comandos de leitura ¢ exibicao Algoritmo em Portugol com estruturas de decisio ‘Algoritmo em Portugol com estrtura ENQUANTO-FACA, ‘Algoritmo em Portugol com estrutura REPITA-ATE Algoritmo em Portugol com estrutura PARA-ATE-FACA ‘Algor em Portage com estutars DESDE PARA FAGA Algoritmo para ordenar trés valores “Algoritmo para armazenat localizar elementos de umm vetor Algoritmo de ordenagio por trocas 10 3 15 18 18 19 21 25 683 oo 0 74 76 81 146 146 147 147 148, 148 149 149 166 172 au Prefacio A quem se destina este livro? Este livro destina-se a um curso introdut6rio de légica de programacéo, especialmente ppara aqueles ministrados em escolas de Engenharia. Um dos principais problemas en- contrados pelo estudante de Engenharia em um primeiro curso de logica de programa- fo a caréncia de textos que abordem de forma direta e clara as etapas necessérias para suportar 0 processo de resolugao de problemas (computacionais ou ndo), a saber: a andlise, com a identificagao e solucdo de subproblemas, e a sfntese, unigo das solugdes cencontradas para compor a solugo do problema original. O resultado dessas etapas € sintetizado em passos que devem ser seguidos em determinada ordem e que constituem 198 algoritmos. Abordagem empregada Pretende-se aqui seguir uma apresentacio incremental dos t6picos. Inicialmente séo pro- ppostos problemas simples que envolvem raciocinio l6gico e que possuem solucdo livre, de modo a ambientar e a incentivar o estudante na descri¢ao dos passos elementares necessérios & resolucio de problemas. Isso ¢ fundamental, pois grande parte dos estu- antes que tem um primeiro contato com I6gica de programacdo apresenta deficiéncias, nna organizagio de suas solugdes e em abstragées. Além disso, neste primeiro contato, ‘um processo genérico de solugo de problemas é apresentado de maneira a fornecer um conjunto de dicas ou heurfsticas que podem ser aplicadas em todos os problemas a serem resolvidos, fortalecendo assim o processo de abstragdo, essencial em programacao, ‘A seguir so apresentados os conceitos de computagio ¢ computadores, Embora ‘um primeiro curso de l6gica de programago possa ser ministrado sem referéncias a ‘como um computador é organizado e como funciona, verifica-se na prética que esse en- foque no é adequado. Como se sabe, 0 grande problema do estudante nesses cursos xx Algoritmos ¢ Logica de Programagio introdutorios € a abstragdo de provedimentos e dados. Nesse ponto apresenta-se uma arquitetura de computador bem simples, baseada na arquitetura de Von Neumann, para fixar de modo tangivel os conceitos relacionados a instrugdes e dados opetados em com- putadores. Objetive-semqui que o estudante futuramente consiga relacionar os aspectos abstratos de computago, tais como varidveis, estruturas de programas e decomposi¢ao fancional com sua implementago, Essa parte serve ainda como incentivo para a neces- sidade de se descrever algoritmos antes de sua implementacio propriamente dita Depois, ¢ acompanhando todo o livro, emprega-se uma notagio formal para a so- lugGo de problemas. Utiliza-se neste texto a descriggo de algoritmos sob a forma de _fluxogramas baseados na norma ISO 5807/1985. Os fluxogramas so compostos por simbolos bésicos que representam as menores partes em um processo de solugao: €s- truturas sequenciais, de decisio ¢ de repetigio. O uso de fluxogramas nesta obra € jus- tificado pelo fato de que o engenheiro tem a obrigacao de desenvolver um raciocinio logico bem-estruturado e que o fluxograma ainda representa uma poderosa ferramenta para a verificagto ¢ teste da légica empregada na solucfo de problemas. A utilizagdo de fluxogramas em Engenhags é ampla: de descrigdes de programas até descrigSes de proces Se aicayte ou ecnerqunicos seu cmpege€ sma repd tia exclusivamente pela légica uilizada na composicao de seus blocos, até se alcangar a solugao de um determinado problema. Além do uso de fluxogramas, so apresentadas ainda duas outras formas conhecidas para a representacdo de algoritmos: diagramas de Nassi-Schneidermann e 0 pseudocd- digo baseado na lingua portuguesa, o Portugol. Os diagramas de Nassi-Schneidermann, empregam uma representago em “‘caixas” aninhadas, em que cada uma € relacionada a ‘um determinado tipo de comando ou estrutura de programacao. Jé o Portugol usa uma descrigéo textual e estruturada da solugo de um problema tia qual 0s comandos s40 descritos por palavras-chave reservadas ¢ extrafdas da lingua portuguesa Descrigiio dos capitulos ‘No Capitulo 1 sto apresentados os conceitos bésicos sobre modelagem de problemas em Engenharia e como organizar suas solugdes utilizando passos elementares. Faz-se aqui um prelidio ao estudo dos algoritmos, com uma descricfo de métodos para auxiliar 0 ‘estudante no processo de identificacdo ¢ resolugdo de problemas, bem como a proposicéo de problemas de légica com solugao livre para ambientar o estudante nesse processo. [No Capitulo 2 sio discutidos os conceitos de computagao ¢ computadores. Inicia-se com a discussfo da origem da palavra computacao, seu significado caplicagées. A seguir slo discutidos os conceitos basicos sobre a organizagdo de computadores utilizando a __Prefécio _ xxi arquitetura de Von Neumann. Um computador hipotético com instrugées simplificadas ¢ apresentado de forma a proporcionar ao estudante simulagGes de como as instrugdes € ‘0s dados so realmente processados Os conceitos de algoritmo ¢ fluxograma sio formalizados no Capitulo 3. Sao dis- ccutidos 0 conceito ¢ as propriedades de um algoritmo, a representagao de algoritmos por fluxogramas, como criar um fluxograma utilizando os simbolos bésicos da norma TSO 5807/1985, bem como convengdes para os tipos de dados, os nomes de variaveis ¢ operadores. Jé no Capitulo 4 formalizam-se as estruturas de programacéo, Séo apresentados os nomes ¢ as topologias das estruturas tipicas de um programa: as estruturas sequenciais, de decisto ¢ de repetic&o, Apresentam-se ainda nesse capitulo duas outras formas de re- presentacdo de algoritmos: os diagramas de Nassi-Schneidermann ¢ a pseudolinguagemn Portugol. E apresentado, no Capftulo 5, 0 conceito de varisveis indexadas ¢ seu uso. As varié- ‘eis indexadas so aquelas que referenciam de forma ordenada uma sequencia de dados homogéneos. Separam-se aqui, para melhor compreensio, 0 conceito e 2 utilizagao de variével indexada unidimensional (ou vetor) do conceito de vatidvel indexada bidi- ‘mensional ¢ multidimensional. Com essa separacio, espera-se que o estudante consiga estender 05 conceitos e operacdes relacionados a varidveis indexadas unidimensionais para dimenstes maiores. Por fin, no Capftulo 6 so discutidas as técnicas para a soluggo de problemas, mais especificamente as técnicas para modularizar a soluc3o utlizando sub-rotinas. $0 apon- tados os dois tipos basicos de sub-rotinas (funcio e procedimento) e como empregé-los e acordo com a técnica rop-down de modularizagzo. A Figura da pagina xxii exibe a organizagio dos capitulos deste livro. Convencies tipogréficas ‘Algumas convengdes tipogréficas foram utilizadas neste livro para tomar mais clara a sua compreenséo: ‘© Negrito ¢ empregado para destacar os conceitos importantes, « Iiélico € wilizado para enfatizar os conceitos essenciais ¢ para palavras estrangei- ra. xxii__Algoritmos ¢ Logica de Programagao ap 3 Algorimos © FBoxogrames een ‘epi 4 Etanras do Propamsgte ae ee opi varie deuadas a ‘Caps Twins parse “Soe ae Prosi ‘Nos exercfcios existent simbolos para identificar aqueles que so bésicos, de re- soluggo imediata; médios, nos quais o estudante deve pensar um pouco mais na solugao; e desafios, a fimn de empenhar-se mais na sua soludo: %k exercicio fécil Sexercicio médio SG? exercfcio desafiador + Exercicios que possuem solugéo no final do respective capitulo so anotados ainda com © simbolo a seguir: ‘a exercicio com solugio Prefécio xxiii Agradecimentos : ‘Agradecemos a todos os nossos colegas professores envolvidos na disciplina Algoritmos ¢ Programagao do Ciclo Basico da Escola de Engenharia Mau, cujas observagdes © cxiticas foram fundamentais: Douglas Lauria, Daniela Caio André, Jorge Kawamura, Lincoln César Zamboni, Paulo Guilherme Seifer, Ricardo Aurélio Roverso Abra, Vitor Alex Oliveira Alves, Wilson Inacio Pereira e, em especial, Roberto Scalco, pelo auxilio ‘na confecgao de algumas figuras deste livro. Capitulo 1 Introducao Um programa de computador é um produto resultante da atividade intelectual de um programador. Essa atividade, por sua vez, depende de um treinamento prévio em abs- tragdo e modelagem de problemas, bem como o uso da légica na verificagdo das so- lugées. Neste capitulo sdo apresentados os conceitos introdut6rios sobre a tarefa de ‘programar computadores, a necessidade do uso de Idgica na programacdo, a importén- ‘cia de se abstrair e modelar os problemas antes de partir para as solugdes, Por fim, so apresentadas algumas dicas tteis que podem ser utilizadas na soluedo de problemas em geral, 1.1 O desenvolvimento de um software Um programa de computador ou simplesmente software ¢ representado pelas ins- trugdes ¢ dados que algum ser humano definiu ¢ que ao serem executados por alguma ‘maquina cumprem algum objetivo. A maquina a que este texto se refere € um compu- tador digital’. Os computadores digitais so méquinas eletrOnicas contendo processadores ¢ circui- tos digitais adequados, operando com sinais elétricos em dois nfveis ou bindrios (a ser detalhados no Capitulo 2). (0s dados so organizados em um computador de acordo com sua representacio bi- nia, isto €, sequéncias de Os ¢ 1s. O objetivo de se utilizar um computador é extrair as informagées resultantes de computagées, isto 6, o resultado das execugdes das instru- ges de algum programa. Deve-se observar a diferenga entre informagéo e dado: o dado "Bristem também compatadoresanal6gicos. 2 Algoritmos ¢ Logica de Programagao por si s6 € um valor qualquer armazenado em um computador enquanto a informagéo representa a interpretagao desse dado, ou seja, qual o seu significado, Parte dos dados processados durante a execugdo de um software é fomecida pelo ser humano (ou outra maquina) e denominada dados de entrada. Por outro lado, os dados de saida sio aqueles fomecidos ao ser humano (ou outra maquina) apés o processamento dos dados de entrada. De qualquer forma, é importante notar que o objetivo do software € que motiva sua construgio, Este pode ser definido como alguma necessidade humana, por exemplo, ‘um programa para simular 0 funcionamento de um circuito digital, um programa para comandar um robé em uma linha de montagem, um sistema de gerenciamento de in- formagées em uma empresa, somente para citar algumas. A Figura 1.1 descreve uma simplificagdo do processo de desenvolvimento de um software. Definite de requlstos Desenvolvimento Entege Figura 1.1 Simplificago do processo de construgdo de um software, Nessa figura, o cliente especifica exatamente o que o software deve conter. Ele sabe ‘o que 0 software deve conter e realizar, mas regra geral nao sabe como. Ele indica o que co software deve contemplar e executar por meio de especificagdes chamadas requisites. Entende-se por cliente a entidade que contrata os servigos para a criago de um software, podendo ser uma empresa, pessoa ou ainda uma empresa que, por iniciativa prépria, produza e venda seu software livremente (por exemplo, a Microsoft. No desenvolvimento, os requisitos do cliente so traduzidos em especificagdes téc- nicas de software pelos analistas de sistema ou engenheiros de software. O desenvol- vimento de um software € tipicamente dividido nas seguintes etapas: ‘ Anilise: criam-se especificagdes que detalham como o software vai funcionar, «# Projeto: criam-se especificagtes que detalham o resultado da anilise em termos mais préximos da implementagao do software; Capitulo 1~Introdugéo 3 Implementagéo: utilizando-se uma linguagem de programagao ¢ as gspecifica- Ges de projeto, o software ¢ construfdo; + Testes: apés a construgio do software, sto realizados testes para conferir sua confortnidade com os requisitos iniciais, O software deve satisfazer a todas espe- cificagaes do cliente, Por fim, apés os testes o software & implantado na empresa. A implantagio pode variar desde uma simples instalag4o, que dure alguns minutos, até a instalacko e testes, de integragao de diversos softwares, que pode levar semanas. De qualquer forma, 0 fato de o software estar finalizado ¢ testado nao significa que esteja totalmente livre de erros, também denominados bugs. Assim, deve-se voltar e tentar identificar a causa dos erros. Pior que erros de programacio, € 0 caso em que pode acontecer de o software funcio- nar corretamente, nfo apresentar erros, mas ndo realizar o que o cliente esperava. Nesse caso, deve-se retomar & etapa inicial, verificando os requisitos e refazendo todo o ciclo de desenvolvimento novamente, E um fato que grande parte do investimento feito em um software € gesta na comesao de exros do que propriamente na sua elaboracdo. Daf, surge a necessidade de enxergar © software como o produto de uin proceso bem-definido e controlado, que atue sobre as suas etapas de desenvolvimento, em outras palavras, um processo de engenharia de software. 1.2 Algoritmos e légica de programacao ‘Como foi brevemente apresentado na Segdo 1.1, 0 software deve ser encarado como um produto de um processo bem-definido ¢ controlado de engenharia, O intuito deste livro ‘do é entrar em detalhes sobre engenharia de software e sim concentrar-se na dissemina- ‘gdo de conceitos basicos que viabilizem a especificagdo comreta de softwares, uma etapa imediatamente anterior a sua implementacdo ou programacéo, estudo de algoritmos ¢ de logica de programagao & essencial no contexto do proceso de criagio de um software. Ele esté diretamente relacionado com a etapa de rojeto de um software em que, mesmo sem saber qual seré a linguagem de programago a ser utilizada, se especifica completamente o software a ponto de na implementagao ser possivel traduzir diretamente essas especificagGes em linhas de cédigo em alguma lin- guagem de programago como Pascal, C, Java e outras Essa tarefa permite verificar, em um nivel maior de abstracao, se 0 software esta correto ou nao. Permite, inclusive, averiguar se o software atenders as especificagdes 4 Algoritmos e Légica de Programagio originalmente propostas. Assim, evita-se partir diretamente para a etapa de implementa- ‘:4o, o que poderé ocasionar mais exros no produto final. 1.2.1 O significadode um algoritmo ‘Um algoritmo representa um conjunto de regras para a solugo de um problema. Essa é ‘uma definigdo geral, podendo ser aplicada a qualquer circunstincia que exija a descriga0 dda solugdo, Dessa forma, uma receita de bolo é um exemplo de um algoritmo?, pois descreve as regras necessérias para a conclusdo de seu objetivo: a preparacio de um bolo. Em um bolo, descrevem-se quais sero os ingredientes e as suas quantidades. Depois, quais so as regras para o seu preparo, como a sequéncia de incluséio dos in- sgredientes para bater as gemas; cozimento ¢ assim por diante, conforme a Figura 1.2. inerRuGbeS INGREDIENTES ‘A Figura 1.2 Uma receita de bolo ¢ um algoritmo. A comreta execucio das instrugées contidas na receita de bolo leva & sua prepara Ho. No entanto, se essas instrugdes tiverem sua ordem trocada ou a quantidade dos ingredientes alterada, 0 resultado vai divergir do original. Existe, ainda, 0 perigo de 0 autor da receita nfo a ter testado previamente, o que poderd gerar, novamente, resultados indesejaveis® Da mesma forma, em programacao, 0 algoritmo especifica com clareza e de forma ccorreta as instrugdes que um software deveré conter para que, ao ser executado, forneca, resultados esperados (veja a Figura 1.3), 2h ealidade, um algoritmo informal e impreciso. *Se ofogso estiver desregulado, também vai gerat problemas Capitulo 1 Introdugio 5 Cena on SRD ax coweso00) PROBLEMA eos nciote. 7 ‘Figura 1.3 A tarefa de especificar um algoritmo, Em primeiro lugar, deve-se saber qual é o problema a ser resolvido pelo software - 0 seu objetivo. Daf, deve-se extrair todas as informagdes a respeito desse problema (dados «© operagées), relacioné-las com conhecimento atual que se tem do assunto, buscando eventualmente informacées de outras fontes. Essa fase representa a modelagem do problema em questo e vai ser detalhada na Segao 1.4.2. A modelagem do problema € resultante de um processo mental de abstrago, o qual seré discutido na Segao 1.4 Depois, sabendo como resolver o problema, a tarefa consiste em descrever clara- ‘mente 0s passos para se chegar 8 sua solugo. Os pasos por si s6 nao resolvem 0 ‘problema; necessério colocé-Ios em uma sequéncia légica (veja Segdo 1.4.3), que, a0 ser seguida, de fato 0 solucionaré. ‘Além disso, € importante que essa descrigao possua algum tipo de convenedio para que todas as pessoas envolvidas na definigao do algoritmo possam entendé-lo (veja a Seco 1.3). Chega-se, entdo, na especificacio do algoritmo, 1.2.2 Exemplo de algoritmo Considere © problema das Torres de Hanoi. A proposigo do problema é a seguinte: inicialmente tém-se trés hastes, A, B e C’,e na haste A repousam trés anéis de diémetros diferentes, em ordem decrescente por didmetro (veja a Figura 1.4), Algoritmos ¢ Logica de Programacio Introdugaio A 2 c a 8 c a 8 c A 5 c Swagio wo ‘tua tral Figura 1.4 0 problema das Torres de Hanoi. 0 objetivo é transferir os trés anéis da haste A para B, usando C’ se necessério. As Inicio ° regras de movimento sdo: a 8 ig A + deve-se mover um tinico anel por vez; ‘+ um anel de diémetro gpior nunca pode repousar sobre algum outro de difmetro = Passo 2 Passo 3 a e © A 8 c As tinicas informagSes para se resolver esse problema so as configuracées inicial ¢ final dos anéis eas regras de movimento. Uma solugo poderia sera seguinte sequéncia de operagdes (veja 0 Algoritmo 1.1 ¢ a Figura 1.5). ee oo Passo 4 Passo 5 Algoritmo 1.1 Algoritmo para resolver o problema das Torres de Hanoi. 7 7 c A B c Algoritmo 1-1 Algoritmo para resolver 0 problema das Torres de Hanoi, Inicio 1, Mover um anel da haste A para a haste B Mover um anel da haste A para a haste C. Moyer um anel da haste B para a haste C. ‘Mover um anel da haste A para a haste B. coe Passo 7 - Solugdo 2. 3 4 5. Mover um anel da haste C para a haste A. 6. Mover um anel da haste C para a haste B. Figura 1.5 Solugdo do problema das Torres de Hanoi, 7. Mover um anel da haste A para a haste B. Fim oe 8___Algoritmos e Légica de Programagéo Como se obteve essa solugdo? Primeiro, € importante entender 0 enunciado do pro- blema e as regras que foram impostas. Dessa forma, nao € possivel especificar os mo- ‘vimentos nos quais uma pega que esteja abaixo de outra seja movida ¢ nem mover mais de uma peca por vew Segundo, é importante verificar a cada passo definido se a solucsio esté se aproximando do objetivo final. © Algoritmo 1.2 define outra sequéncia de operacdes para se solucionar o problema, ‘Algoritmo 1.2 Outro algoritmo para as Torres de Hanoi. Inicio 1, Mover um anel da haste A para a haste C. ‘Mover um anel da haste A para a haste B. ‘Mover um anel da haste C’ para a haste B. ‘Mover um anel da haste A para a haste C. Mover um anel da haste B para a haste C. Mover um anel da haste B para a haste A. Mover um anel da haste C' para a haste A. Mover um anel da haf C' para a haste B. ‘Mover um anel da haste A para a haste C. 10. Mover um anel da haste A para a haste B. 11. Mover um anel da haste C para a haste B. Fim Deve-se observar que essa solucdo € vélida também resolve 0 caso das Torres de Hanoi. No entanto, leva-se mais tempo para chegar & solugdo (onze passos contra sete dda solugto anterior). Esse exemplo demonstra que uma mesma solugao pode ser melhor ou pior que outra. Isso ¢ um conceito importante quando se trata de um programa, pois, dependendo do problema, determinar uma solugo mais eficiente pode economizar até horas de processamento. Outras solugbes vilidas também podem ser propostas, mas nfo terdio menos que sete movimentos. Agora, e se for considerado 0 mesmo problema, porém, com n anéis postados ini- cialmente na haste A? Como isso afetaré a solugao? E interessante estudar diversos casos particulares antes de elaborar uma soluggo genérica Capitulo 1—Inerodugao 9 ‘A Tabela 1.1 demonstra alguns resultados do problema das Torres de Hanoi quando se varia n (considere que X + Y representa a operagdo “mover uma peca da haste X para Y”). ‘Tabela 1.1 Alguns resultados para o problema das Torres de Handi Wamero de . Movimentos movimentos o H T 2 3 3 7 as8 4>C ASB OSE As BAS BS OASBR OSA C4B ASB A> GASBOSBASOBSA BIO;A3C;:A9BC4BC+A BOA,C > BAGO; AGBCSB A> B ASG ESO ASB CSA CAB AS BAGO BIC BA CAA BSC A+BAVOB SC; AGBC FA C+ BASE C+ A BAG BIA C+AC4B ASB, AZO BIC ADBC3A CB, AaB 4 15 E possfvel notar pela Tabela 1.1 que existe uma relagdo matematica entre n 0 nt- mero de anéis do problema com o nimero de movimentos executados, sendo a relagio ‘m(n) = 2" — 1, em que m representa os mimeros de movimentos Assim, se n for igual a 20, 0 niimero de movimentos que deverdo ser descritos seré igual a 1.048.575 (haja lépis e papel!). Portanto, a generalizacdo do algoritmo desse problema, na forma em que esté sendo descrito, € impraticavel para grandes valores de nn. E necessério determinar formas mais sintéticas para expressar a solugto desse estudo de caso, Um modo de expressar a solugio geral desse problema de forma mais sintética € cenxergé-lo de outra maneira. Considere que as trés hastes esto dispostas em um citculo, conforme ilustrado na Figura 1.6. 10 _Algoritmos e Logica de Programacéo Figura 1.6 Preparacao para o uso do algoritmo geral para as Torres de Hanoi, Um algoritmo que proporciona uma solugio geral para o problema das Torres de Hanoi é descrito pelo Algoritmo 1.3. Esse algoritmo ndo impde qual deve ser a haste destino. Observa-se que pga os valores de n impar, os anéis serdo transferidos para 1 primeira haste que estivP apés a haste de inicio, no sentido horério. Se n for par, (8 anéis sero transferidos para a primeira haste que estiver apés aquela de infcio, no sentido anti-horéro. ‘Algoritmo 1.3 Algoritmo geral para as Torres de Hanoi Inicio 1, Repita (repetir a execugdo das duas linhas abaixo até que a condigéo na parte até seja atendida.} 2. Movao menor anel de sua haste atual para a préxima, no sentido horétio, 3. Execute 0 nico movimento possivel com um anel que nao seja o menor de todos. 44. Até que todos os discos tenham sido transferidos para outra haste. Fim Capitulo 1 — Inteodugdo 1 |A Figura 1.7 mostra a aplicagio desse algoritmo para n valendo 3 7m 0004 vee Figura 1.7 Uso do algoritmo geral para o problema das Torres de Hanoi, Essa solugdo funciona para qualquer valor de n tal que n > 1. Apesar de haver um algoritmo geral que resolve todos os casos para o problema das Torres de Hanoi, ainda existem algumas dificuldades na sua forma de descrig&o: ‘* Existe um tratamento informal dos comandos: 0 que significa repita e até. E necessério formalizar os comandos do algoritmo. 4 As operagées descritas pelo algoritmo sto uteis para uma pessoa interpretar, mas nfo para uma méquina. E necessério modelar melhor © problema de forma que este seja facilmente traduzido para uma méquina. Esté implicito, por exemplo, que nao deve ser realizado nenhum movimento no passo 3 se néo exist nenhuma contra pega que possa ser movida além do menor anel. 12__Algoritmos e Logica de Programacio A necessidade de se formalizar um algoritmo € discutida na Segao 1.3 ¢ os topicos de modelagem de problemas séo apresentados na Segao 1.4.2. 13 A formalfzagaio de um algoritmo ‘A tarefa de especificar os algoritmos para representar um programa consiste em detalhar ‘08 dados que serio processados pelo programa e as instrugGes que vao operar sobre esses dados. Essa especificagdo pode ser feita livremente como visto na Segdo 1.2.2, mas importante formalizar a descticao dos algoritmos segundo alguma convengiio, para que todas as pessoas envolvidas na sua criacio possam entendé-to da mesma forma. Em primeiro lugar, é necessério definir um conjunto de regras que regulem a escrita, do algoritmo, isto é, regras de sintaxe. Em segundo, € preciso estabelecer as regras que permitam interpretar um algoritmo, que sto as regras seminticas. Apesar de essa formalizagao ser assunto para os Capitulos 3 € 4, nesta segdo so resumidos os conceitos importantes sobre a formalizagdo de algoritmos com o intuito de jé ambientar o leitor esse t6pico, s 13.1 A sintaxe de um algoritmo A sintaxe de um algoritmo resume-se nas regras para escrevé-lo corretamente. Em com- putago, essas regras indicam quais sfo os tipos de comandos que podem ser utilizados, ¢ também como neles escrever expressies. As expresses de um comando em um algo- ritmo realizam algum tipo de operaco com os dados envolvidos, isto é, operam com valores ¢ resultam em outros valores que sto usados pelo algoritmo. s tipos de comandos de um algoritmo so também denominados estruturas de rogramagéo. Existem apenas trés tipos de estruturas que podem ser utilizadas para escrever qualquer programa: estruturas sequenciais, de decisiio ¢ de repeticéo. Por exemplo, o Algoritmo 1.1 emprega apenas as estruturas sequenciais, pois sua execucéo 6 direta, imperative, nfo havendo nenhum tipo de condigo a ser verificada e nenhum desvio em seu caminho. Jé 0 Algoritmo 1.3 usa uma estrutura de repetigo, que possui ‘uma condigio que, se for verdadeira, terminard sua execugdo. Enfatiza-se novamente @ vantagem de se ter utilizado essa estrutura, uma vez que ela evita que se tenha de escrever todos os 2" — 1 comandos de movimentago dos anéis para um problema da ‘Tome de Hanoi com n > 1 As expressOes que sio escritas em estruturas de programa¢o envolvem a utiizagao de dados. Antecipando o que seré visto no Capitulo 2, os dados em um computador sio ‘mimeros bindrios, isto é, sequéncias de 0s e 1s, ¢ sto armazenados em sua meméria. Capitulo 1-Introdugao 13 | io € prético trabalhar diretamente com essa representagio e entio convegcionou-se que 08 dados manipulados por um programa sfo categorizados em tipos de dados, que foma simples seu uso para 0 programador, mas qué na realidade, para a méquina, so traduzidos em valores binérios. Assim é possivel manipular diversos tipos de dados em tum algoritmo: mimeros inteiros e reais, valores l6gicos, textos etc, ‘A manipulagio desses dados ¢ feita por meio de varidveis e valores constantes, ue representam no texto do algoritmo os dados que serdo armazenados na meméria do computador. O significado de varidvel é similar aquele empregado na matemiatica: representar um valor, poréin com umn significado fisico por trés; esse valor seré armaze- nado na meméria de um computador. Um valor constante representa um valor que néo pode ser alterado, como o miimero 25, 0 nome ‘Marcio’ ¢ assim por diante ‘Uma varidvel pode ser manipulada de muitas formas. Os valores constantes ou resul- tados de expressGes envolvendo as variéveis podem ser atribufdos a estas. Para escrever as expresses corretamente, & necesséria também uma sintaxe. Essa sintaxe depende do tipo de variéveis envolvidas e determina quais sd0 0s operadores que podem ser aplicados. Além dos operadores propriamente ditos, especificam-se algumas fungdes ¢ procedimentos predefinidos titeis, que simplificam algumas tarefas corriqueiras em ‘computagao, como ler os dados digitados por um usuétio, escrever resultados na tela do computador, calcular o seno de um nimero etc. 13.2. Exemplo de sintaxe de um algoritmo Deseja-se especificar um algoritmo para calcular ¢ exibir na tela a érea de um trigngulo de base be altura h, em que os valores de be de h s8o fornecidos pelo usuério via teclado. Antes de mais nada, a solugo desse problema ¢ imediata, pois sabe-se que a érea s de tum tringulo de base b ¢ altura h é dada por s = S54. ‘Um algoritmo para se resolver esse problema pode ser definido de maneira informal, como ilustrado pelo Algoritmo 1.4. Observe que essa descrigéo esté cm portugues € nfo é conveniente que seja traduzida para uma linguagem de computador. ‘Algoritmo 1.4 Algoritmo informal para calcular a érea de um wiangulo, Inicio 1. Pedir para o usurio digitar os valores de be de h. 2. Caloular a rea ¢ usando a formula s = 2 3. Exibir o valor de s na tela Fim 14__Algoritmos ¢ Logica de Programagao ‘Agora, a tarefa € descrever esse mesmo algoritmo, utiizando alguma representago ‘mais formal. Primeiro, sera considerada a representaco por fluxograma (veja Capi tulo 3) cujo resultado € apresentado na Figura 1.8 “ se(ormiz Figura 1.8 Fluxograma para calcular a érea de um tridngulo. ‘Nessa representacdo, a sintaxe para a escrita de um algoritmo ¢ dada pelos simbolos do fluxograma e pelas regras para a escrita das expresses. A regra geral de um fiuxo- sgrama estabelece que este deva ser escrito com seus s{mbolos bisicos,interligados por linhas com ou sem setas que indicam a diregdo em que os comands devem ser exe- ‘cutados. Sua interpretagdo deve comegar em um simbolo de inicio ¢ terminar em um s{mbolo de fir. O inicio e fim do algoritmo so representados por dois retangulos de ‘cantos arredondados, que so sempre os mesmos para qualquer fluxograma. Os dados do problema ~ a base, a altura e a étea — sdo representados pelas varidveis, b, hes, O simbolo do trapézio representa um comando que possibilita a0 usuério digitar ‘0g valores que serio atribuidos as variéveis b e h, O simbolo do retangulo representa um comando a ser executado de forma imperativa Por sua vez, o comando representado pela flecha esquerda (+) permite copiar para a variével s 0 valor da expressio (b+ h)/2. Observe que existe uma regra para se es- crever essa expresso: « significa multiplicagao e /, diviso. Por fim, o simbolo de um retingulo de cantos arredondados mais achatado & esquerda significa exibir o valor da varidvel sna tela. Capitulo 1—Introdugio 15 Agora serd considerado esse mesmo algoritmo, utilizando-se uma represgptagao em pseudocédigo denominado Portugol (veja 0 Capitulo 4), apresentado pelo Algoritmo 1.5. Algoritmo 1.5 Algoritmo em Portugol para calcular a area de um tangulo, Inicio 1 Lela(b, h) 2 8 (bah)/2. 3. Exiba(s). Fim esse caso, a sintaxe é dada pelos comandos dessa pseudolinguagem. A regra geral para se escrever um algoritmo nessa representacdo determina que este deva ser delimi- tado pelas palavras infcio e fim e os comandos, logo apés o simbolo de inicio, devem ser executados sequencialmente, de cima pata baixo. comando leia corresponde a um procedimento que automaticamente pede para o usudrio digitar dois valores ¢ estes sto copiados para as varidveis b e h. A expresstio do célculo de s tem o mesmo significado que no caso do fluxograma, ¢ 0 comando exiba mostra na tela do computador o valor da varidvel 6 1.3.3 A seméntica de um algoritmo ‘Como jé foi exposto, a seméantica de um algoritmo estabelece regras para sua interpre tago. Os simbolos ou comandos de um algoritmo por si s6 nao tém um significado, a menos que este seja bem-definido. Por exemplo, no caso de um fluxograma, o simbolo de retingulo representa umn comando que deve ser executado de forma imperativa, isto é, sem condicao alguma. E definido geralmente como um simbolo e, no seu interior, figura uma expressio que deve ser avaliada, podendo ser qualquer uma desde que seja valida para esse sfmbolo. No exemplo do fluxograma da Figura 1.8, a expressio utilizada no interior do retin- gulo és + (b+ h)/2, caracterizando-se por ser valida, pois usa os sfmbolos definidos para um fluxograma, ¢ sua semantica € multiplicar o valor de b pelo valor deh, dividir esse resultado por 2 ¢ copid-lo para a varidvel s, essa forma, a seméntica de um algoritmo sempre acompanha a sua sintaxe, forne- cendo um significado. A importincia da formalizacao de um algoritmo, sua sintaxe ¢ semintica podem ser resumidos assim: 16 __Algoritmos ¢ Légica de Programaca0 Evitar ambiguidades, pois definem regras sintaticas e semfnticas que sempre sao interpretadas da mesma forma ‘¢ Impedir a criagio de simbolos ou comandos desnecessérios na criagfio de um al- goritmo: repréentam um conjunto minimo de regras que pode ser utilizado em qualquer algoritmo. « Permitir uma aproximagéo com as regras de uma linguagem de programaga0, fa- zendo, assim, uma fécil tadugdo de um algoritmo para sua implementagéo no ‘computador. 1.4 Como resolver problemas ‘A criagéo de um algoritmo é uma tarefa essencialmente intelectual, A partit do cenuneiado de um problema, deseja-se obter um algoritmo que o resolva. Pode-se afirmar que a tarefa de escrever algoritmos ¢, portanto, uma tarefa de resolver problemas, 1.4.1 A anilise ea sintese de um problema A resolugo de um problema envolve duas grandes fases: a andlise e a sintese da solu- eo. Na fase de andlise, o problema ¢ entendido de forma que se descubra o que deve ser solucionado, quais séo os dados necessdtios ¢ as condigdes para resolvé-lo se esses dados © essas condigdes sfio necessérios, insuficientes ou redundantes ou ainda contraditorios ¢, entZo, parte-se para a sua modelagem, podendo ser enriquecida com 0 auxilio de ‘equagtes, desenhos ou gréficos. Como resultado dessa fase, tem-se a elaboragio de um plano de agiio, no qual a experiéncia em problemas similares vistos anteriormente é utilizada e, também, pode ser necesséria a utilizagao de problemas auxiliares. Nessa fase, faz-se so direto de processes de abstragio, o que significa elaborar modelos mentais, do problema em questi e do encaminhamento de sua solugo ‘Naetapa de sintese, executa-se o plano definido na fase de andlise, representando os ppassos por meio de um algoritmo. Aqui, emprega-se uma representagao formal, como Visto na Segao 1.3. B importante que a solugdo seja verificada c comprovada corre- tamente, por meio da execugéo do algoritmo. Essa execugao é¢ feita percorrendo-se 0 algoritmo do seu inicio até o seu final, ¢ verificando, a cada passo, se o resultado espe- ado foi obtido. Caso tenha sido encontrada alguma discrepancia, deve-se procurar saber ual foi sua causa e eventualmente analisar novamente o problema, repetindo-se assim ‘esse ciclo até que a solugo tenha sido obtida os Capitulo 1—Introdugéo 17 1.4.2 Modelagem de problemas A ‘A modelagem (geralmente desprezada) é a principal responsével pela facilidade ou di- ficuldade da resolugo de um problema, Na Matemética ¢ na Engenharia, por exemplo, ‘0 uso da linguagem matematica é fundamental, principalmente pela elimninagéo de du- plos sentidos que acontecem nessa prética. ‘© mesmo ocore na computacio, com o emprego de linguagens de descricio de algoritmos (como fluxogramas) e de linguagens de programagio (como a linguagem Pascal), Como um exemplo de modelagem, considere 0 seguinte problema: Compraram-se 30 canetas iguais, que foram pagas com uma nota de RS 100,00, obtendo-se R$ 67,00 como troco. Quanto custou cada caneta? ste é um problema bem simples, cuja solugao pode até ser feita “de cabega”; porém, como pode ser mostrada a solucéo? Uma possfvel resposta: Se eu tinha R$ 100,00 e recebi como troco RB 67,00, 0 custo do total de ccanetas é a diferenca entre os R$ 100,00 que eu finka e os R$.67,00 do troco. Ora, isto vale R$ 33,00; portanto, esse valor foi o total pago pelas canetas. Para saber quanto custou cada caneta, basta dividir os R$ 33,00 por 30, resultando no preco de cada caneta. Assim, cada caneta custou 0 equivalente a R$ 1,10. Esse raciocinio € matematicamente demonstrado por: seja « 0 custo de cada caneta, entio quantogastei = 30, Como quantogastei + troco = R$ 100, 00, tem-se: 302+ 67 = 100 30r = 100-67 30r = 33 = 2 = 30 e=llo0 De uma forma mais curta ¢ universalmente entendida, pode-se também dizer que ‘caminho pode ser obtido por um algoritmo como 0 Algoritmo 1.6, 18 __Algoritmos e Logica de Programasio Algoritmo 1.6 Algoritmo inicial para solucionar o problema das canetas Inicio : 1. Pegar os valores 30, 100 ¢ 67. 2, Subtrair 67 de 1@0 e dividir o resultado por 30. 3. Mostrar o resultado final. Fim Deve-se observar que esse algoritmo resolve apenas uma instncia particular do problema das canetas. E para solucionar um caso geral, tem-se 0 seguinte: Compraram-se N canetas iguais, que foram pagas com uma nota de Z reais, obtendo-se Y reais como troco. Quanto custou cada caneta? Na solugéo desse problema mais geral, utiliza-se a experiéncia que foi adquirida xno problema particular e sintetizada pelo Algoritmo 1.6. Nesse caso, basta que sejam fomecidos os valores das ygridveis IV, Ze ¥ que a solugao do problema é a mesma que a anterior e seu algoritmoffbde ser descrito como no Algoritmo 1.7. ‘Algoritmo 1.7 Algoritmo geral para solucionar o problema das canetas, Inicio 1. Ler os valores de NY e Z. 2. Suburair ¥ de Z e dividir o resultado por N. 3. Mostrar o resultado final. Fim No entanto, a proposta apresentada tem uma série de restrigBes: 0 que aconteceré se alguém pensar em comprar zero canetas? Ou —3 canetas, faz algum sentido? Para alguém que néio possua a forma de interpretar os resultados, isto € possivel. Suponha que alguém execute 0 Algoritmo 1.7 com os seguintes valores: N = 10, Z=10e Y = 15, (0 valor de cada caneta seré dle —RS 0.50. Isto faz algum sentido? Entdo € necessério que, para a solug4o geral apresentada pelo Algoritmo 1.7 ser realmente consistente, seja levada em consideragao a precondico do problema em que © valor pago pelas canetas seja sempre maior que o troco recebido, que o valor pago € a quantidade de canetas seja sempre maior que zero ¢ que o troco seja maior ou igual a zero. Em termos matemiéticos, podem-se expressar essas condigdes como Z > Y,N > 0, Z > Ve 2 0. Se essas condicdes forem todas verdadeiras, entfo, aplica-se a formula ‘conhecida e obtém-se o resultado. Caso contrério, o algoritmo deve terminar sinalizando, Capftulo 1 —Introduedo 19 de alguma forma, a razao de seu fracasso. O algoritmo correto para a solugdg geral das canetas estéapresentado pelo Algoritmo 1.8 ‘Algoritmo 1.8 Algoritmo geral e corvefo para solucionar o problema das canetas Inicio 1 Ler os valores de N, ¥ e Z. 2 SeZ>YeN >0eY 2 0eZ > 0Entio 3. Subtrair ¥ de Z e dividir o resultado por NV. 4. Mostrar o resultado final 5. Senzo 6. _ Exibir a mensagem: “Erro: os valores sdo inconsistentes!”. +. Fim Se Fim sa slug pode ser agora formalizada. Utiizando-se a notagHo de fuxogramas, ela podera ser represeatada como exposta na Figura 19. E possvel descobrir qual & fungdo de todos os simbolos desse fluxograma ao compar4-lo com o Algoritmo 1.87 1.4.3 O papel da légica em programagio Légica € uma area da Matematica cujo objetivo ¢ investigar a veracidade de suas propo- sig6es. Considere, por exemplo, o caso etn que temos as seguintes proposigées: 1. Seestiver chovendo, eu pegarei meu guarda-chuva, 2. Bsté chovendo, © que se conclu dessas duas proposigdes? Parece que a conclusto dbvia é: “eu pegarei meu guarda-chuva”. Essa conclusio seguiu o fato de que existe uma implicardo légica na primeira propo- sigo, a qual afirma que “se estiver chovendo” implica “eu pegarei meu guarda-chuva”’ Essa implicago age como uma “regra”, que conduz a deducao do fato. Continuando, e se as proposigdes fossem: 1. Seestiver chovendo, eu pegarei meu guarda-chuva 2. Bu peguei meu guarda-chuva, ‘O que se conclui? A conclusdo poderia ser: “é plausivel que esteja chovendo™ "Nose pode afirmar com preciso que esi chovendo 86 porque voc® pegou seu guards-chuval 20 __Algoritmos ¢ Légica de Programacao Gy) « t90) 2 Verdadeico (>=0) 8 (0) ae enyn ‘ <= Figura 1.9 Fluxograma para resolver o problema das canetas. Esses dois exemplos fornecem uma ideia, embora simplificada, do que a logica se preocupa em estudar. Toda légica proposta também deve ser formalizada em elementos sintdticos (especificam como escrever suas proposigées) e elementos semdnticos (ava- liam o significado das proposigées ~ suas interpretagdes). No caso da l6gica cléssica, © resultado da avaliago de suas proposigdes pode ser somente um entre dois valores: ‘VERDADEIRO ou FALSO. Néo se entraré em mais detalhes sobre essa formalizacao, pois esse assunto esté além do escopo deste livro. papel da l6gica em programagio de computadores esté relacionado com a correta sequéncia de instrugdes que devem ser definidas para que o programa atinja seu objetivo. Serve como instrumento para a verificaggo do programa escrito, provando se este esté correto ou no. Em um algoritmo em execugdo, o valor das suas variéveis a cada instante representa seu estado. Com a execucio dessas instrugdes, esse estado vai sendo alterado. Um algoritmo eorreto é aquele que, a partir de um estado inicial de suas variveis, consegue, com a execugao de suas instrugdes, chegar a um estado final, no qual os valores das varidveis esto de acordo com a solugio esperada. ‘Voltando-se ao algoritmo geral para a solugo do problema das canetas, podemos cconferir sua solugo analisando a légica empregada em cada passo. Isso pode ser confe- Capitulo 1 ~ Introdugéo 21 rido pelo Algoritmo 1.9, que possui alguns comentérios nas instrugies. ‘Algoritmo 1.9 Algoritmo coneto, comentado, para solucionar o problema das canetas. Inicio 1. Ler os valores de N, Y e Z. (Nesse ponto temos trés valores quaisquer de N, Y € Z4 2. SeZ>YeN >0eY >0eZ > 0 Entio (Nesse ponto, garante-se que Z > Y, N>0Y¥20eZ>0} 3. Subtrair ¥ de Z e dividir 0 resultado por N. {Como Z>¥,¥ 20eZ>0 entdo Z—~Y > Oe sendo N > 0, 0 resultado existe e é maior que zero.) 4. Mostrar o resultado final. (F exibido o resultado, que existe ¢ é maior que zero.) 5. Sento 6, Exibir a mensagem: “Erro: os valores so inconsistentes!”. {Nesse ponto, pelo ‘menos uma das condicdes do problema ndo foi atendida. } 1. Fim Se Fim No Algoritmo 1.9 provou-se, portanto, que a sua légica esté comreta ¢ que leva a resultados esperados. Se forem digitados os valores que atendam as condigdes do algo- ritmo, serd caleulado um valor. Caso contrétio, seré exibida uma mensagem de erro. Este €, por conseguinte, o papel da lgica na programacdo: provar que um algoritmo {que foi elaborado esté correto. Juntamente com a simulagéo do algoritmo, que con- siste em executé-lo com dados reais, é possivel saber se estd comreto e se leva a valores consistentes. 1.5 Como se portar em um curso de computaco ( grande problema apresentado pelos estudantes em um primeiro curso de computagio nfo so as linguagens de programacdo ou de descrigdo de algoritmos propriamente ditas, ‘mas sim a dificuldade em abstraire descrever as solugdes de problemas contando apenas ‘com poucas e simples estruturas, 0 que deve ser percebido € que 0 sucesso em um curso ou carreira de computago exige uma predisposigio em se envolver com tarefas diretamente intelectuais. Um novo problema de computagao pode ser gerado a partir de um jé existente, alterando-se apenas poucos elementos de seu enunciado. Isso ¢ facilmente percebido pelos exemplos do problema das Torres de Hanoi (Seco 1.2.2) pelo problema das canetas (Sega0 1.4.2) essa forma, é um erro decorar as solugdes em computagio, pois podem nao servir 22__Algoritmos ¢ Légice de Programagdo para outros problemas, que com certeza serdo diferentes. © que deve ser procurado é ‘© entendimento de como foi obtida uma solucao, ammazené-la na meméria’ entio utilizar essa experiéncia adaptando-a a outras situagdes, por analogia, generalizacio ‘ou especializagio. @ grande dica ¢ que um problema pode ser diferente de outro, mas consegue-se aproveitar grande parte da experiéncia obtida em problemas passados em novos desafios. Nao existe em computagio uma “formula mégica” para resolver problemas. De qualquer forma, apresenta-se a seguir um conjunto de dicas que podem ser utilizadas, durante © processo de raciocinio empregado na resolugao de problemas: 1. Ao se deparar com um problema novo, tente entendé-lo. Pata auxiliar, pense no seguinte: + aque se deve descobrir ou caleular? Qual & 0 objetivo? + Quais sdo os dados dispontveis? Sdo suficientes? * Quais as condigoes necesséiase suficientes para resolver o problema? « Faca um esbogMinformal de como ligar os dados com as condig6es, + Se possivel, modele o problema de forma matemética, 2. Crie um plano com a solusao: ‘ Consulte sua meméria ¢ verifique se vocé jé resolveu algum problema simi- lar, A sua solugto pode ser aproveitada por analogia, quando o enunciado for diferente, mas a estrutura em si guarda similatidades; por generalizacdo, ‘quando se tem uma solugdo particular € deseja uma solugo geral; por es- pecializagao, quando se conhece alguma solugio geral que serve como base ‘para uma em particular ou ainda uma mistura das trés técnicas anteriores. ‘* Verifique se € necessério introduzir algum elemento novo no problema, como ‘um problema auxiliar, * Seo problema for muito complicado, tente quebré-lo em partes menores € solucionar essas partes. + E possivel enxergar o problema de outra forma, de modo que seu entendi- ‘mento se torne mais simples? 3. Formalize a solugao: * Crie um algoritmo informal com passos que resolvam o problema. TA sua ao ado computador. | Capitulo 1 Introdugéo__ 23 + Verifique se cada passo desse algoritmo esté correto. « Exereva um algortmo formalizado por meio de um fuxograma ou outa té- nica de representacéo. 4, Exame dos resultados: ‘* Teste 0 algoritmo com diversos dados de entrada € verifique os resultados (teste de mesa), «# Se o algoritmo nao gerou resultado algum, o problema esté na sua sintaxe € ‘nos comandos utilizados. Volte e tente encontrar 0 erro + Seo algoritmo gerou resultados, estes esto corretos? Analise sua consistén- cia, 's Se no estdo corretos, alguuma condiefo, operagéo ou ordem das operagdes esté incoreta. Volte ¢ tente encontrar 0 e170. 5. Otimizagao da solugao: « E possivel melhorar o algoritmo? + E possivel reduzir 0 nimero de passos ou dados? ‘« E possfvel conseguir uma solucdo étima’ Finalizando este capitulo, os problemas de computagao séo verdadeiros projetos de Engenharia, Aqui se tem a oportunidade de analisar um problema, definir uma estratégia de solugio e, por fim, criar um produto, que € © programa em si 0s programas de computador obtidos nfo devem ser vistos como objetos isolados do mundo e sim como ferramentas que so empregedas para auxiliar diversas éreas da atividade humana. Dessa forma, este livro utiliza uma abordagem multidisciplinar, na qual os conceitos de outras disciplinas da Engenharia como célculo, geometria analitica, fisica etc.,sd0 usados nos enunciados dos exercicios, e 0 objetivo € resolver problemas pertinentes & Engenharia, utilizando 0 computador como sua ferramenta de trabalho. 24 _Algoritmos ¢ Logica de Programagio 1.6 Exercicios ‘Segue um conjunto de exerocios de l6gica que necessitam apenas de raciocinio e bom senso para serem regplvidos. Tente resolvé-los & sua maneira, lembrando-se do que foi discutido neste capitulo. O modo de resolugao é livre, mas podem ser utilizadas equagdes ‘ou frases em portugués, Faca do seu jet. 1.1. 3£Descreva como descobrir a moeda falsa em um grupo de cinco moedas, fazendo uso de uma balanea analitica (sabe-se que a moeda falsa é mais leve que as outras), com ‘o-menor ntimero de pesagens possfvel. Lembre-se de que sua descrigo deve resolver 0 problema para qualquer situacio. Dica: & possivel resolver com apenas duas pesagens. 1.2, GS Tdem ao anterior, porém s6 se sabe que a moeda falsa tem massa diferente. Para descobrir se ela é mais leve ou mais pesada que as outras, muda-se alguma coisa? 1.3. CS Idem ao Exercicigi.1, porém com nove moedas, 1.4, CS Tem-se trés garrafas, com formatos diferentes, uma cheia até a boca, com capacidade de oito litros ¢ as outras duas vazias com capacidades de cinco e trés litros, respectivamente, Deseja-se separar 0 contetido da primeira garrafa em duas quantidades iguais. Elabore uma rotina que consiga realizar a tarefa, sem que se possa fazer medidas. 15. 7 Um caramujo esté na parede de um pogo a cinco metros de sua borda. Tentando stir do pogo, ele sobe trés metros durante 0 dia, porém desce escorregando dois metros arante a noite. Quantos dias levaré para 0 caramujo conseguir sair do pogo? 1.6. 3x€ Um tjolo “pesa” um quilo mais meio tijolo. Quantos quilos “pesam” um tijolo emeio? 1.7, & Voce esté em uma margem de um rio, com tts animais: uma galinha, um cachorro ¢ uma raposa. Somente pode atravessar com um animal por vez ¢ nunca dei- ‘Xara raposa € © cachorro sozinhos nem a raposa e a galinha. Descreva uma forma de conseguir atravessar os trés animais, obedecendo a essas condigdes 1.8. & Voce dispée de uma balanca precisa e dez sacos cheios de moedas idénticas na aparéncia, das quais todas as moedas de um dos sacos sto falsas e de massa 1 g menor que as verdadeiras. Qual o menor nimero de pesagens necessérias para se descobrir 0 saco de moedas falsas? Capitulo 1 - Introductio 25 1,9. & A prova de que 2 = 1. Considere a=6 ab = ab-a = Ba? a(b-a) = (6+a)(b-a) (b+.0)(6~a) oe a = ba 1=20 A matemética que vocé estudou até agora é vélida? Entio, onde esté 0 ero na deducio anterior? 1.10. G5 Considere 0 Algoritmo 1.10. ‘Algoritmo 1.10 Algoritmo para o Bxercicio 1.10. Inicio 1. Ler os valores de Ae B 260 3. Enquanto A > B Faga 4. Subtraia B de A, cologue o resultado em A e some 1 em C 5. Fim Enquanto 6. Mostre 0s valores finais de C'e de A Execute essas instrugdes para os seguintes pares de nimeros: 10 ¢ 2, 6 € 2, 15 € 3. © que significa o valor final de C? Eo valor final de A? 1.11. $9? Dois amigos se encontraram em uma rua. Eles no se viam hé alguns anos. Um dos amigos, aproveitando que outro é um professor de Matemiética, inicia o seguinte didlogo: — "Ta que voce € um professor de Matemética, vou the dar uma charada, Hoje meus trésfilhos celebram seus aniversérios eeu gostaria que voc® adivinhasse suas idades”, ~“Ok", respondeu o professor. “Mas vocé precisa me dizer algo sobre eles!”. ~“Bem, a primeira dica € que o produto de suas idades 36”.

You might also like