Escreva um algoritmo que imprima a raiz quadrada portugol silab

Thank you for using our services. We are a non-profit group that run this service to share documents. We need your help to maintenance and improve this website.

Escreva um algoritmo que imprima a raiz quadrada portugol silab

To keep our site running, we need your help to cover our server cost (about $500/m), a small donation will help us a lot.

Please help us to share our service with your friends.

Pedro Kantek Algoritmos Unicenp Jul/07, dez/07 Curitiba vers˜ ao de 10 de fevereiro de 2008 1 ©88-08, Pedro Kantek ©88-08, Pedro Kantek 2 vers˜ ao de 10 de fevereiro de 2008 ´ SUMARIO Sum´ ario 1 Contrato Pedag´ ogico 13 2 Ciˆ encia da Computa¸ c˜ ao 2.1 Representa¸ca˜o do conhecimento . . . . . 2.2 Algoritmo . . . . . . . . . . . . . . . . . 2.2.1 Qualidades de um bom algoritmo 2.2.2 Como se escreve um algoritmo . 2.3 Portugol . . . . . . . . . . . . . . . . . . 2.4 Programa¸ca˜o Estruturada . . . . . . . . 2.5 A m´aquina de Turing . . . . . . . . . . 2.6 Linguagens de programa¸ca˜o . . . . . . . 2.6.1 Assembler . . . . . . . . . . . . . 2.6.2 Fortran . . . . . . . . . . . . . . 2.6.3 Lisp . . . . . . . . . . . . . . . . 2.6.4 Prolog . . . . . . . . . . . . . . . 2.6.5 Cobol . . . . . . . . . . . . . . . 2.6.6 APL . . . . . . . . . . . . . . . . 2.6.7 Basic . . . . . . . . . . . . . . . . 2.6.8 Clipper . . . . . . . . . . . . . . 2.6.9 Natural . . . . . . . . . . . . . . 2.6.10 Pascal . . . . . . . . . . . . . . . 2.6.11 C . . . . . . . . . . . . . . . . . . 2.6.12 Java . . . . . . . . . . . . . . . . 2.6.13 PHP . . . . . . . . . . . . . . . . 2.6.14 J . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 27 31 32 34 34 39 40 42 42 43 44 45 46 47 48 49 50 50 51 52 53 54 3 Escrevendo algoritmos 3.1 Nome . . . . . . . . . . . . 3.2 Vari´ aveis . . . . . . . . . . . 3.2.1 Tipos de vari´ aveis . 3.2.2 C´ odigo de caracteres 3.3 Comando de atribui¸ca˜o . . 3.4 Express˜oes . . . . . . . . . . 3.4.1 Aritm´eticas . . . . . 3.4.2 Relacionais . . . . . 3.4.3 L´ ogicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 55 57 57 58 61 62 62 68 68 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Comandos 4.1 Vis˜ao Top down e Bottom up . . . . . . . . . . . . 4.2 Seq¨ uˆencia de execu¸ca˜o . . . . . . . . . . . . . . . . 4.3 Entrada/Sa´ıda . . . . . . . . . . . . . . . . . . . . 4.3.1 Comando de Entrada . . . . . . . . . . . . 4.3.2 Comando de Sa´ıda . . . . . . . . . . . . . . 4.4 O comando alternativo . . . . . . . . . . . . . . . . 4.4.1 Alternativa simples . . . . . . . . . . . . . . 4.4.2 Alternativa composta . . . . . . . . . . . . 4.4.3 Alternativas aninhadas . . . . . . . . . . . . 4.5 Estruturas de repeti¸ca˜o . . . . . . . . . . . . . . . 4.5.1 Repeti¸ca˜o com condi¸ca˜o no in´ıcio: enquanto 4.5.2 Repeti¸ca˜o com vari´ avel de controle: para . 4.5.3 Repeti¸ca˜o com condi¸ca˜o no final: repita . . 4.5.4 Comando de m´ ultipla escolha: Escolha . . . 4.5.5 Abandono de itera¸ca˜o: abandone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 75 75 76 76 77 77 77 78 78 83 83 84 86 96 97 5 Nassi-Schneiderman 105 5.1 Chines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 6 Visualg 6.1 Regras de Visualg . . . . . . . . . . . . . . . 6.2 Exemplos de Visualg . . . . . . . . . . . . . . 6.2.1 Criando uma raiz quadrada . . . . . . 6.2.2 Achando ra´ızes por Newton-Raphson . 6.2.3 Depura¸ca˜o de algoritmos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 . 109 . 114 . 116 . 117 . 118 7 Modulariza¸ c˜ ao: fun¸ co ˜es 119 7.1 Fun¸co˜es . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 7.1.1 Vari´ aveis globais e locais . . . . . . . . . . . . . . . . . . . . . . . . 120 8 Vetores e Matrizes 8.1 Defini¸ca˜o de Vetor . . . . . . . . . . . . 8.1.1 Origem dos ´ındices . . . . . . . . 8.2 Opera¸co˜es B´asicas . . . . . . . . . . . . 8.3 Ordena¸ca˜o . . . . . . . . . . . . . . . . . 8.4 Opera¸co˜es fundamentais na Inform´ atica 8.5 Tabelas . . . . . . . . . . . . . . . . . . 8.6 Merge (intercala¸ca˜o) de dois vetores . . 8.7 Pesquisa seq¨ uencial . . . . . . . . . . . . 8.8 Matriz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 . 123 . 124 . 125 . 129 . 130 . 133 . 135 . 137 . 149 9 Registros 157 9.1 Defini¸ca˜o de registros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 9.2 Processamento de Textos . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 9.2.1 Calend´ arios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176 10 Exerc´ıcios pr´ aticos: 003 -Raiz quadrada 10.1 Exemplo de um algoritmo: raiz quadrada 10.2 Exerc´ıcio 1 . . . . . . . . . . . . . . . . . 10.3 Exerc´ıcio 2 . . . . . . . . . . . . . . . . . 10.4 Exerc´ıcio 3 . . . . . . . . . . . . . . . . . 10.5 Exerc´ıcio 4 . . . . . . . . . . . . . . . . . ©88-08, Pedro Kantek 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181 . 181 . 184 . 184 . 184 . 185 vers˜ ao de 10 de fevereiro de 2008 ´ SUMARIO ´ SUMARIO 10.6 Respostas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 11 Exerc´ıcios Pr´ aticos: 004-Introdu¸ c˜ ao 11.1 Algoritmos . . . . . . . . . . . . . . . . . . . 11.1.1 M´ aximo Divisor Comum . . . . . . . . 11.1.2 Algoritmo do M´ aximo Divisor Comum 11.1.3 Algoritmos no dia a dia . . . . . . . . 11.1.4 Exerc´ıcio 1 . . . . . . . . . . . . . . . 11.1.5 Exerc´ıcio 2 . . . . . . . . . . . . . . . 11.1.6 Exerc´ıcio 3 . . . . . . . . . . . . . . . 11.1.7 Exerc´ıcio 4 . . . . . . . . . . . . . . . 11.1.8 Exerc´ıcio 5 . . . . . . . . . . . . . . . 11.1.9 Exerc´ıcio 6 . . . . . . . . . . . . . . . 11.1.10 Exerc´ıcio 7 . . . . . . . . . . . . . . . 11.1.11 Exerc´ıcio 8 . . . . . . . . . . . . . . . 11.1.12 Exerc´ıcio 9 . . . . . . . . . . . . . . . 11.1.13 Exerc´ıcio 10 . . . . . . . . . . . . . . . 11.1.14 Respostas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187 . 187 . 188 . 188 . 189 . 189 . 189 . 190 . 190 . 190 . 190 . 190 . 190 . 191 . 191 . 191 12 Exerc´ıcio pr´ atico: 006-Jogo 12.1 O jogo da vida . . . . . . 12.2 Exerc´ıcio 1 . . . . . . . . 12.3 Exerc´ıcio 2 . . . . . . . . 12.4 Exerc´ıcio 3 . . . . . . . . 12.5 Exerc´ıcio 4 . . . . . . . . 12.6 Respostas . . . . . . . . . da . . . . . . . . . . . . Vida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 . 193 . 195 . 196 . 196 . 197 . 197 13 Exerc´ıcio Pr´ atico:007-GPS 13.1 GPS . . . . . . . . . . . . 13.1.1 Problemas . . . . . 13.2 Dois amigos . . . . . . . . 13.2.1 Exemplo . . . . . . 13.2.2 Como fazer . . . . 13.2.3 Problema 1 . . . . 13.2.4 Problema 2 . . . . 13.2.5 Problema 3 . . . . 13.2.6 Problema 4 . . . . 13.2.7 Problema 5 . . . . 13.2.8 Problema 6 . . . . 13.2.9 Problema 7 . . . . 13.2.10 Problema 8 . . . . 13.2.11 Problema 9 . . . . 13.2.12 Problema 10 . . . 13.2.13 Respostas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199 . 201 . 202 . 202 . 203 . 203 . 203 . 204 . 204 . 204 . 205 . 205 . 205 . 205 . 206 . 206 . 206 14 Exerc´ıcio Pr´ atico: 008 - Problemas 14.1 Resolva os exerc´ıcios a seguir . . . 14.1.1 Problema 1 . . . . . . . . . 14.1.2 Problema 2 . . . . . . . . . 14.1.3 Problema 3 . . . . . . . . . 14.1.4 Problema 4 . . . . . . . . . 14.1.5 Problema 5 . . . . . . . . . 14.1.6 Problema 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 . 207 . 207 . 208 . 208 . 208 . 208 . 209 vers˜ ao de 10 de fevereiro de 2008 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 ©88-08, Pedro Kantek 14.1.7 Problema 7 . 14.1.8 Problema 8 . 14.1.9 Problema 9 . 14.1.10 Problema 10 14.1.11 Respostas . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 Exerc´ıcio pr´ atico: 009-Achar o 15.1 Qual o n´ umero que falta ? . . 15.2 Exerc´ıcio 1 . . . . . . . . . . 15.3 Exerc´ıcio 2 . . . . . . . . . . 15.4 Exerc´ıcio 3 . . . . . . . . . . 15.5 Exerc´ıcio 4 . . . . . . . . . . 15.6 Respostas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 . 209 . 209 . 209 . 209 falta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 . 211 . 212 . 213 . 214 . 215 . 215 L´ ogica B´ asicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 . 217 . 217 . 217 . 218 . 218 . 218 . 219 . 219 . 219 . 220 . 220 . 220 . 220 . 221 . 221 . 222 . 222 . 222 . 223 . 223 . 223 . 224 . 224 e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 . 225 . 226 . 226 . 226 . 227 . 227 . 228 . 228 . 228 . 229 . 229 . 229 . 230 n´ umero que . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 Exerc´ıcios Pr´ aticos: 011 - Matem´ atica 16.1 Exerc´ıcio 1 . . . . . . . . . . . . . . . 16.1.1 Exerc´ıcio 1.1 . . . . . . . . . . 16.1.2 Exerc´ıcio 1.2 . . . . . . . . . . 16.1.3 Exerc´ıcio 1.3 . . . . . . . . . . 16.1.4 Exerc´ıcio 1.4 . . . . . . . . . . 16.1.5 Exerc´ıcio 1.5 . . . . . . . . . . 16.1.6 Exerc´ıcio 1.6 . . . . . . . . . . 16.1.7 Exerc´ıcio 1.7 . . . . . . . . . . 16.1.8 Exerc´ıcio 1.8 . . . . . . . . . . 16.1.9 Exerc´ıcio 1.9 . . . . . . . . . . 16.1.10 Exerc´ıcio 1.10 . . . . . . . . . . 16.2 Exerc´ıcio 2 . . . . . . . . . . . . . . . 16.2.1 Exerc´ıcio 2.1 . . . . . . . . . . 16.2.2 Exerc´ıcio 2.2 . . . . . . . . . . 16.2.3 Exerc´ıcio 2.3 . . . . . . . . . . 16.2.4 Exerc´ıcio 2.4 . . . . . . . . . . 16.2.5 Exerc´ıcio 2.5 . . . . . . . . . . 16.2.6 Exerc´ıcio 2.6 . . . . . . . . . . 16.2.7 Exerc´ıcio 2.7 . . . . . . . . . . 16.2.8 Exerc´ıcio 2.8 . . . . . . . . . . 16.2.9 Exerc´ıcio 2.9 . . . . . . . . . . 16.2.10 Exerc´ıcio 2.10 . . . . . . . . . . 16.2.11 Respostas . . . . . . . . . . . . e . . . . . . . . . . . . . . . . . . . . . . . 17 Exerc´ıcios Pr´ aticos: 017-SEs compostos 17.1 SEs compostos e encadeados . . . . . . . 17.1.1 Exerc´ıcio 1.1 . . . . . . . . . . . 17.1.2 Exerc´ıcio 1.2 . . . . . . . . . . . 17.1.3 Exerc´ıcio 1.3 . . . . . . . . . . . 17.1.4 Exerc´ıcio 1.4 . . . . . . . . . . . 17.1.5 Exerc´ıcio 1.5 . . . . . . . . . . . 17.1.6 Exerc´ıcio 1.6 . . . . . . . . . . . 17.2 Exerc´ıcio 2 . . . . . . . . . . . . . . . . 17.2.1 Exerc´ıcio 2.1 . . . . . . . . . . . 17.2.2 Exerc´ıcio 2.2 . . . . . . . . . . . 17.2.3 Exerc´ıcio 2.3 . . . . . . . . . . . 17.2.4 Exerc´ıcio 2.4 . . . . . . . . . . . 17.2.5 Exerc´ıcio 2.5 . . . . . . . . . . . ©88-08, Pedro Kantek . . . . . 6 . . . . . . . . . . . . . . . encadeados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vers˜ ao de 10 de fevereiro de 2008 ´ SUMARIO ´ SUMARIO 17.2.6 Exerc´ıcio 2.6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230 17.2.7 Respostas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 18 Exerc´ıcios Pr´ aticos: 018-FLuxogramas 18.1 Exerc´ıcios de Fluxos e Pseudoc´ odigo . 18.1.1 Exerc´ıcio 1 . . . . . . . . . . . 18.1.2 Exerc´ıcio 2 . . . . . . . . . . . 18.1.3 Respostas . . . . . . . . . . . . 19 Exerc´ıcios 19.0.4 19.0.5 19.0.6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 . 233 . 233 . 239 . 245 Pr´ aticos: 018 - Nassi 247 Exerc´ıcio 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 Exerc´ıcio 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252 Respostas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257 20 Exerc´ıcios pr´ aticos: 021 - 5 fun¸ co ˜es 20.1 Fun¸co˜es num´ericas . . . . . . . . . 20.1.1 Exerc´ıcio 1 . . . . . . . . . 20.1.2 Exerc´ıcio 2 . . . . . . . . . 20.1.3 Respostas . . . . . . . . . . simples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259 . 259 . 259 . 262 . 266 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267 . 267 . 271 . 271 . 272 . 272 . 273 . 275 n˜ ao decimal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277 . 277 . 279 . 282 . 283 . 283 . 284 23 Exerc´ıcios Pr´ aticos: 031 - Manipula¸ c˜ ao de datas 23.1 Algoritmos de Calend´ ario . . . . . . . . . . . . . . 23.1.1 C´ alculo do dia da semana . . . . . . . . . . 23.1.2 C´ alculo dos feriados m´oveis . . . . . . . . . 23.1.3 Bissexto . . . . . . . . . . . . . . . . . . . . 23.2 Exerc´ıcio 1 . . . . . . . . . . . . . . . . . . . . . . 23.3 Exerc´ıcio 2 . . . . . . . . . . . . . . . . . . . . . . 23.4 Exerc´ıcio 3 . . . . . . . . . . . . . . . . . . . . . . 23.5 Exerc´ıcio 4 . . . . . . . . . . . . . . . . . . . . . . 23.6 Exerc´ıcio 5 . . . . . . . . . . . . . . . . . . . . . . 23.7 Exerc´ıcio 6 . . . . . . . . . . . . . . . . . . . . . . 23.8 Exerc´ıcio 7 . . . . . . . . . . . . . . . . . . . . . . 23.9 Exerc´ıcio 8 . . . . . . . . . . . . . . . . . . . . . . 23.10Exerc´ıcio 9 . . . . . . . . . . . . . . . . . . . . . . 23.11Exerc´ıcio 10 . . . . . . . . . . . . . . . . . . . . . . 23.12Respostas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285 . 285 . 285 . 286 . 286 . 287 . 287 . 288 . 288 . 288 . 288 . 288 . 288 . 289 . 289 . 289 21 Exerc´ıcios Pr´ aticos: 024 -DVs 21.1 D´ıgitos Verificadores . . . . . . . . . . . . 21.1.1 M´ odulo 10 . . . . . . . . . . . . . . 21.1.2 M´ odulo 11 . . . . . . . . . . . . . . 21.1.3 CPF (Cadastro de Pessoas F´ısicas) 21.1.4 CNPJ (antigo CGC) . . . . . . . . 21.2 Exerc´ıcio 1 . . . . . . . . . . . . . . . . . 21.2.1 Respostas . . . . . . . . . . . . . . 22 Exerc´ıcios Pr´ aticos: 027 - aritm´ etica 22.1 Aritm´etica n˜ao decimal . . . . . . . 22.1.1 Programa VISUALG . . . . . 22.2 Exerc´ıcio 1 . . . . . . . . . . . . . . 22.3 Exerc´ıcio 2 . . . . . . . . . . . . . . 22.4 Exerc´ıcio 3 . . . . . . . . . . . . . . 22.4.1 Respostas . . . . . . . . . . . vers˜ ao de 10 de fevereiro de 2008 7 . . . . . . . . . . . . . . ©88-08, Pedro Kantek 24 Exerc´ıcios Pr´ aticos: 035 - Localiza¸ c˜ ao de oleoduto 24.1 Localiza¸ca˜o de oleoduto . . . . . . . . . . . . . . . . 24.2 Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . . 24.3 Exerc´ıcio 1 . . . . . . . . . . . . . . . . . . . . . . . 24.4 Exerc´ıcio 2 . . . . . . . . . . . . . . . . . . . . . . . 24.5 Exerc´ıcio 3 . . . . . . . . . . . . . . . . . . . . . . . 24.6 Respostas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291 . 291 . 292 . 292 . 293 . 293 . 294 25 Exerc´ıcios Pr´ aticos: 054 - Kumon de 25.1 Treinamento b´asico em Algoritmos . 25.2 Exerc´ıcio 1 . . . . . . . . . . . . . . 25.3 Exerc´ıcio 2 . . . . . . . . . . . . . . 25.4 Exerc´ıcio 3 . . . . . . . . . . . . . . 25.5 Respostas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295 . 295 . 295 . 298 . 302 . 305 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307 . 307 . 307 . 310 . 312 . 315 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317 . 317 . 318 . 320 . 322 . 324 repita . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327 . 327 . 330 . 334 . 338 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339 . 339 . 341 . 343 . 346 . 348 termo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349 . 349 . 352 . 353 . 353 . 354 . 354 26 Exerc´ıcios Pr´ aticos: 26.1 Por exemplo . . . 26.2 Exerc´ıcio 1 . . . 26.3 Exerc´ıcio 2 . . . 26.4 Exerc´ıcio 3 . . . 26.5 Respostas . . . . algoritmos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 057 - Continuar seq¨ uˆ encias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 Exerc´ıcios Pr´ aticos: 062 - Engenharia reversa 27.1 Engenharia Reversa de algoritmos . . . . . . . 27.2 Exerc´ıcio 1 . . . . . . . . . . . . . . . . . . . . 27.3 Exerc´ıcio 2 . . . . . . . . . . . . . . . . . . . . 27.4 Exerc´ıcio 3 . . . . . . . . . . . . . . . . . . . . 27.5 Respostas . . . . . . . . . . . . . . . . . . . . . 28 Exerc´ıcios Pr´ aticos: 28.1 Exerc´ıcio 1 . . . 28.2 Exerc´ıcio 2 . . . 28.3 Exerc´ıcio 3 . . . 28.4 Respostas . . . . 065 - Se, . . . . . . . . . . . . . . . . . . . . . . . . 29 Exerc´ıcios Pr´ aticos: 29.1 Exerc´ıcio 1 . . . 29.2 Exerc´ıcio 2 . . . 29.3 Exerc´ıcio 3 . . . 29.4 Exerc´ıcio 4 . . . 29.5 Respostas . . . . 069 - 4 . . . . . . . . . . . . . . . . . . . . . . . . . 30 Exerc´ıcios Pr´ aticos: 30.1 Exemplos . . . . 30.2 Exerc´ıcio 1 . . . 30.3 Exerc´ıcio 2 . . . 30.4 Exerc´ıcio 3 . . . 30.5 Exerc´ıcio 4 . . . 30.6 Respostas . . . . 073 - achar o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©88-08, Pedro Kantek enquanto, . . . . . . . . . . . . . . . . . . . . . . . . . . . . algoritmos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . d´ ecimo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 . . . . . . . . . . . . . . . . . . . . vers˜ ao de 10 de fevereiro de 2008 ´ SUMARIO ´ SUMARIO 31 Exerc´ıcios Pr´ aticos: 31.1 Exerc´ıcio 1 . . . 31.1.1 Algoritmo 31.1.2 Algoritmo 31.1.3 Algoritmo 31.2 Exerc´ıcio 2 . . . 31.2.1 Algoritmo 31.2.2 Algoritmo 31.2.3 Algoritmo 31.2.4 Algoritmo 31.3 Exerc´ıcio 3 . . . 31.3.1 Algoritmo 31.3.2 Algoritmo 31.3.3 Algoritmo 077 - Algoritmos . . . . . . . . . . . . 1 . . . . . . . . . . . 2 . . . . . . . . . . . 3 . . . . . . . . . . . . . . . . . . . . . . . 1 . . . . . . . . . . . 2 . . . . . . . . . . . 3 . . . . . . . . . . . 4 . . . . . . . . . . . . . . . . . . . . . . . 1 . . . . . . . . . . . 2 . . . . . . . . . . . 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355 355 355 355 356 357 357 358 358 359 359 359 360 360 32 Exerc´ıcio Pr´ atico: 084 Balance LIne 363 32.1 Respostas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367 33 Exerc´ıcios Pr´ aticos: 33.1 Exerc´ıcio 1 . . . 33.2 Exerc´ıcio 2 . . . 33.3 Exerc´ıcio 3 . . . 33.4 Respostas . . . . 110 - indexa¸ c˜ ao e indire¸ c˜ ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369 . 370 . 372 . 374 . 376 34 Exerc´ıcios Pr´ aticos: 116 - manuseio de tabelas 34.1 Manuseio de tabelas . . . . . . . . . . . . . . . . 34.2 Exerc´ıcio 1 . . . . . . . . . . . . . . . . . . . . . 34.3 Exerc´ıcio 2 . . . . . . . . . . . . . . . . . . . . . 34.4 Exerc´ıcio 3 . . . . . . . . . . . . . . . . . . . . . 34.5 Respostas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377 . 377 . 380 . 380 . 380 . 381 119 - Manuseio de Tabelas II . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 Exerc´ıcios Pr´ aticos: 36.1 Exerc´ıcio 1 . . . 36.2 Exerc´ıcio 2 . . . 36.3 Exerc´ıcio 3 . . . 36.4 Exerc´ıcio 4 . . . 36.5 Respostas . . . . 125a - Corre¸ c˜ ao de algoritmos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389 . 389 . 393 . 396 . 400 . 404 37 Exerc´ıcios Pr´ aticos: 37.1 Exerc´ıcio 1 . . . 37.2 Exerc´ıcio 2 . . . 37.3 Exerc´ıcio 3 . . . 37.4 Exerc´ıcio 4 . . . 37.5 Respostas . . . . 125b - Corre¸ c˜ ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405 . 405 . 409 . 412 . 416 . 419 35 Exerc´ıcio Pr´ atico: 35.1 Exerc´ıcio 1 . . 35.2 Exerc´ıcio 2 . . 35.3 Exerc´ıcio 3 . . 35.4 Exerc´ıcio 4 . . vers˜ ao de 10 de fevereiro de 2008 9 de . . . . . . . . . . algoritmos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383 386 386 386 387 ©88-08, Pedro Kantek 38 Exerc´ıcios Pr´ aticos: 38.1 Exerc´ıcio 1 . . . 38.2 Exerc´ıcio 2 . . . 38.3 Exerc´ıcio 3 . . . 38.4 Exerc´ıcio 4 . . . 38.5 Respostas . . . . 125c - Corre¸ c˜ ao de algoritmos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 Exerc´ıcios Pr´ aticos 125d 39.1 Exerc´ıcio 1 . . . . . . 39.2 Exerc´ıcio 2 . . . . . . 39.3 Exerc´ıcio 2 . . . . . . 39.4 Exerc´ıcio 3 . . . . . . 39.5 Respostas . . . . . . . . . . . . Corre¸ c˜ ao de Algoritmos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 Exerc´ıcios Pr´ aticos: 40.1 Exerc´ıcio 1 . . . 40.2 Exerc´ıcio 2 . . . 40.3 Exerc´ıcio 3 . . . 40.4 Exerc´ıcio 4 . . . 40.5 Respostas . . . . 128 - Matrizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 Exerc´ıcios pr´ aticos: 41.1 Exerc´ıcio 1 . . . 41.2 Exerc´ıcio 3 . . . 41.3 Exerc´ıcio 4 . . . 135 - O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421 . 421 . 425 . 429 . 433 . 437 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439 . 439 . 442 . 446 . 449 . 452 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453 . 456 . 456 . 457 . 457 . 457 cubo RUBIK 459 . . . . . . . . . . . . . . . . . . . . . . . . . . . 462 . . . . . . . . . . . . . . . . . . . . . . . . . . . 463 . . . . . . . . . . . . . . . . . . . . . . . . . . . 464 42 Exerc´ıcios pr´ aticos: 139 - Ostras 42.1 A fazenda de ostras de Zing Zhu . . . . . 42.1.1 Resolvendo... . . . . . . . . . . . . 42.1.2 Truques usados na implementa¸ca˜o 42.2 Exerc´ıcio 1 . . . . . . . . . . . . . . . . . 42.3 Exerc´ıcio 2 . . . . . . . . . . . . . . . . . 42.4 Exerc´ıcio 3 . . . . . . . . . . . . . . . . . 42.5 Exerc´ıcio 4 . . . . . . . . . . . . . . . . . 42.6 Respostas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 467 . 467 . 468 . 468 . 469 . 469 . 470 . 470 . 471 43 Exerc´ıcios pr´ aticos: 144 - romanos 43.0.1 Convers˜ao de romano para ar´ abico 43.0.2 Convers˜ao de ar´ abico para romano 43.1 Exerc´ıcio 1 . . . . . . . . . . . . . . . . . 43.2 Exerc´ıcio 2 . . . . . . . . . . . . . . . . . 43.3 Exerc´ıcio 3 . . . . . . . . . . . . . . . . . 43.4 Respostas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473 . 474 . 474 . 476 . 476 . 477 . 477 44 Exerc´ıcios Pr´ aticos: 148 - diversos 44.1 Universidade de Pinguinhos / cubos 44.2 Exerc´ıcio 1 . . . . . . . . . . . . . . 44.2.1 Cubos Coloridos . . . . . . . 44.3 Exerc´ıcio 1a . . . . . . . . . . . . . . 44.4 Exerc´ıcio 2 . . . . . . . . . . . . . . 44.5 Exerc´ıcio 2a . . . . . . . . . . . . . . 44.6 Exerc´ıcio 3 . . . . . . . . . . . . . . 44.7 Exerc´ıcio 3a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 479 . 479 . 480 . 481 . 482 . 482 . 483 . 483 . 484 ©88-08, Pedro Kantek 10 . . . . . . . . . . . . . . . . . . . . . . . . vers˜ ao de 10 de fevereiro de 2008 ´ SUMARIO ´ SUMARIO 44.8 Respostas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 484 45 Exerc´ıcios Pr´ aticos: 45.1 A Piscina . . . . 45.2 Exerc´ıcio 1 . . . 45.3 M´ agico . . . . . . 45.4 Exerc´ıcio 1a . . . 45.5 Exerc´ıcio 2 . . . 45.6 Exerc´ıcio 2a . . . 45.7 Exerc´ıcio 3 . . . 45.8 Exerc´ıcio 3a . . . 45.9 Respostas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485 . 485 . 486 . 487 . 488 . 488 . 489 . 489 . 489 . 490 46 Exerc´ıcios Pr´ aticos: 152 - Regata de cientistas e Luzes da Festa 46.1 Exerc´ıcio 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46.2 Regata de cientistas . . . . . . . . . . . . . . . . . . . . . . . . . . . 46.3 Ilumina¸ca˜o da festa . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46.4 Exerc´ıcio 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46.5 Exerc´ıcio 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46.6 Exerc´ıcio 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46.7 Respostas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491 . 491 . 491 . 492 . 493 . 494 . 494 . 495 47 Exerc´ıcios pr´ aticos: 153a - Jogo do Retˆ angulo 47.1 Jogo do retˆ angulo . . . . . . . . . . . . . . . . . 47.2 Exerc´ıcio 1 . . . . . . . . . . . . . . . . . . . . 47.3 Exerc´ıcio 2 . . . . . . . . . . . . . . . . . . . . 47.4 Exerc´ıcio 3 . . . . . . . . . . . . . . . . . . . . 47.5 Exerc´ıcio 4 . . . . . . . . . . . . . . . . . . . . 47.6 Respostas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 497 . 497 . 499 . 500 . 500 . 500 . 501 48 Exerc´ıcios Pr´ aticos: 48.1 Exerc´ıcio 1 . . . 48.2 Exerc´ıcio 2 . . . 48.3 Exerc´ıcio 3 . . . 48.4 Exerc´ıcio 4 . . . 48.5 Respostas . . . . 151 - diversos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155a - Caminhos no tabuleiro e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Descarga . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . do vulc˜ ao503 . . . . . 503 . . . . . 506 . . . . . 507 . . . . . 508 . . . . . 509 49 Exerc´ıcio pr´ atico: 156 - Genoma e Palavras Cruzadas 49.1 Projeto Genoma . . . . . . . . . . . . . . . . . . . . . . 49.2 Palavras Cruzadas . . . . . . . . . . . . . . . . . . . . . 49.3 Exerc´ıcio 1 . . . . . . . . . . . . . . . . . . . . . . . . . 49.4 Exerc´ıcio 2 . . . . . . . . . . . . . . . . . . . . . . . . . 49.5 Exerc´ıcio 3 . . . . . . . . . . . . . . . . . . . . . . . . . 49.6 Exerc´ıcio 4 . . . . . . . . . . . . . . . . . . . . . . . . . 49.7 Respostas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 511 . 511 . 512 . 514 . 514 . 515 . 515 . 516 50 Exerc´ıcio pr´ atico 157 50.1 Trem ou Caminh˜ao? 50.2 RoboCoffee . . . . . 50.3 Restaurante . . . . . 50.4 Exerc´ıcio 1 . . . . . 50.5 Exerc´ıcio 2 . . . . . 50.6 Exerc´ıcio 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 517 . 517 . 518 . 519 . 519 . 520 . 521 vers˜ ao de 10 de fevereiro de 2008 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ©88-08, Pedro Kantek 50.7 Exerc´ıcio 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 521 50.8 Respostas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 522 51 Exerc´ıcio pr´ atico 51.1 Seq¨ uˆencias . . 51.2 Carga Pesada 51.3 Rede o´tica . . 51.4 Exerc´ıcio 1 . 51.5 Exerc´ıcio 2 . 51.6 Exerc´ıcio 3 . 51.7 Exerc´ıcio 4 . 51.8 Respostas . . 158 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 523 . 523 . 523 . 524 . 525 . 526 . 527 . 527 . 528 52 Exerc´ıcio pr´ atico 52.1 Quermesse . . 52.2 Bits Trocados 52.3 Saldo de gols 52.4 Exerc´ıcio 1 . 52.5 Exerc´ıcio 2 . 52.6 Exerc´ıcio 3 . 52.7 Exerc´ıcio 4 . 52.8 Respostas . . . . . . . . . . 159 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 529 . 529 . 530 . 530 . 531 . 532 . 532 . 533 . 534 53 Exerc´ıcio pr´ atico 53.1 Macaco-prego 53.2 MASP . . . . 53.3 Exerc´ıcio 1 . 53.4 Exerc´ıcio 2 . 53.5 Exerc´ıcio 3 . 53.6 Exerc´ıcio 4 . 53.7 Respostas . . . . . . . . . 160 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 535 . 535 . 536 . 537 . 538 . 539 . 540 . 540 54 Exerc´ıcio pr´ atico - 161 54.1 An´eis quadrados . . 54.2 Balaio . . . . . . . . 54.3 Meteoros . . . . . . 54.4 Exerc´ıcio 1 . . . . . 54.5 Exerc´ıcio 2 . . . . . 54.6 Exerc´ıcio 3 . . . . . 54.7 Exerc´ıcio 4 . . . . . 54.8 Respostas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 541 . 541 . 542 . 543 . 543 . 545 . 546 . 547 . 548 55 Exerc´ıcios pr´ aticos - 162 55.1 Domin´ o . . . . . . . . 55.2 Sorvete . . . . . . . . 55.3 Pirˆ amide . . . . . . . . 55.4 Exerc´ıcio 1 . . . . . . 55.5 Exerc´ıcio 2 . . . . . . 55.6 Exerc´ıcio 3 . . . . . . 55.7 Exerc´ıcio 4 . . . . . . 55.8 Respostas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 549 . 549 . 550 . 550 . 551 . 552 . 552 . 553 . 553 ©88-08, Pedro Kantek 12 vers˜ ao de 10 de fevereiro de 2008 ´ CAP´ITULO 1. CONTRATO PEDAGOGICO Apresenta os conceitos de divis˜ ao inteira e resto e a seguir pede para analisar o algoritmo de mdc (m´ aximo divisor comum) devido a Euclides (aprox 400aC). Al´em disso, o exerc´ıcio pede um algoritmo de uma tarefa trivial do dia a dia do aluno. Jogo da vida Cap´ıtulo 1 Contrato Pedag´ ogico c´ odigo: 6 finalizado em 23/10/07 Um exercicio simples, no qual o Jogo da Vida (Conway, 1970) ´e apresentado e s˜ao feitos coment´arios sobre a sua importˆancia na Ciˆencia da Computa¸ca˜o. As 4 regras do jogo s˜ao apresentadas e depois ´e dado um tabuleiro 10 × 10. Pede-se ao aluno que simule 4 gera¸co˜es e informe depois como ficaram 4 c´elulas do tabuleiro especialmente escolhidas. O objetivo do exerc´ıcio ´e divertir e depois trabalhar ainda informalmente os conceitos de: matriz, algoritmo, itera¸ca˜o, entre outros. Regras da disciplina Uma aula dupla tem 100 minutos, que ser˜ao – em princ´ıpio – assim divididos: 10 minutos para os bons dias, 30 minutos de teoria, 30 de apresenta¸ca˜o do exerc´ıcio pr´atico e mais 30 minutos para os alunos fazerem o seu exerc´ıcio. Cada aluno vai receber um exerc´ıcio individual e u ´ nico. O exerc´ıcio dever´a ser devolvido feito at´e a data escrita na pr´opria folha do exerc´ıcio. Se entregue atrasado pagar´ a 50% da nota de multa. Em outras palavras, a nota do exerc´ıcio ser´a dividida por 2. N˜ ao haver´a segunda chamada de exerc´ıcios perdidos. N˜ ao ser˜ao aceitos xerox, fax ou e-mail de exerc´ıcios. Apenas o exerc´ıcio original que contiver o nome do aluno ser´a aceito. Se o aluno quiser (alguns querem), tire c´ opia xerox do exerc´ıcio para guardar a cole¸ca˜o deles. Entretanto, todo exerc´ıcio entregue ao professor ser´a corrigido e devolvido ao aluno. A nota bimestral ser´a obtida fazendo a m´edia aritm´etica dos exerc´ıcios do bimestre, com peso de 60% e a prova bimestral, esta com peso 40%. As provas tamb´em s˜ao individuais e diferentes para cada aluno. GPS: Global Positioning System c´ odigo: 7 finalizado em 02/01/06 Este exerc´ıcio come¸ca descrevendo o acidente do avi˜ao VARIG 254 que se perdeu no Mato Grosso achando estar no Par´ a. A seguir o princ´ıpio de funcionamento dos sistemas GPSs ´e mostrado. Uma simula¸ca˜o em 2D ´e pedida ao aluno, usando-se caracter´ısticas da f´ısica e opera¸co˜es da geometria anal´ıtica. Problemas introdut´ orios c´ odigo: 8 finalizado em 29/08/06 Apresenta 2 quest˜ oes comuns sobre regras de nomes de vari´ aveis e tipos de vari´ avel a usar em determinados algoritmos. Depois gera uma cole¸ca˜o de 10 exerc´ıcios matem´aticos individuais sobre racioc´ınio. A resposta ´e sempre um n´ umero. Exerc´ıcios Individuais Cada exerc´ıcio tem um identificador u ´ nico, chamado seq¨ uˆencia com as seguintes informa¸co˜es: aaLGM101, que deve ser assim interpretada: [aa] Ano atual;[LG] disciplina de Algoritmos; [M ou N] Turno;[1] 1o bimestre do ano letivo [01] Primeiro exerc´ıcio deste bimestre; Algoritmo da raiz quadrada c´ odigo: 3 finalizado em 12/11/07 Implementa o algoritmo (antigamente aprendido no inicio do ciclo fundamental, hoje ´ um processo razoavelmente n˜ao mais) que permite calcular ` a m˜ao a raiz quadrada. E complexo e ele permite vivenciar exatamente o que um algoritmo faz. Achar um n´ umero em uma sequencia c´ odigo: 9 finalizado em 12/12/07 S˜ao mostradas 30 sequencias de 11 n´ umeros cada. A lei de forma¸ca˜o n˜ao est´ a explicitada e deve ser descoberta pelo aluno. Um dos 11 n´ umeros est´ a faltando e o aluno precisa descobrir qual ´e. Os n´ umeros buscados s˜ao somados de 3 em 3 para facilitar a corre¸ca˜o. Este exerc´ıcio nasceu de uma inspira¸ca˜o obtida olhando os exerc´ıcios da Olimp´ıada Brasileira de Inform´ atica. Matem´ atica e l´ ogica b´ asicas c´ odigo: 11 finalizado em 01/09/06 60 exerc´ıcios (30 de matem´atica e 30 de l´ogica) s˜ao apresentados ao aluno. Ele deve achar 10 respostas (cada grupo de 6 exerc´ıcios tem suas respostas somadas. Isto facilita a corre¸ca˜o). Introdu¸ c˜ ao a algoritmos c´ odigo: 4 finalizado em 20/12/05 13 ©88-08, Pedro Kantek 14 vers˜ ao de 10 de fevereiro de 2008 ´ CAP´ITULO 1. CONTRATO PEDAGOGICO ´ CAP´ITULO 1. CONTRATO PEDAGOGICO SEs compostos e encadeados C´ alculo de calend´ arios c´ odigo: 17 finalizado em 28/01/06 6 exerc´ıcios (fun¸co˜es) nos quais 6 valores num´ericos aleat´orios s˜ao fornecidos no in´ıcio. A seguir uma s´erie de comandos alternativos (SE) tanto compostos como encadeados, usando os conectivos ∧ (e), ∨ (ou) e ∼ (n˜ ao). Depois pede-se o resultado da soma de 5 vari´ aveis. c´ odigo: 31 finalizado em 25/02/02 Mostra o algoritmo de Aloysius Lilius e Cristopher Clavius do s´eculo XVI para calcular o Domingo da P´ascoa, do qual decorrem todos os feriados m´oveis de nosso calend´ ario: Carnaval, Sexta da Paix˜ ao e Corpus Christi. Al´em de mostrar a distribui¸ca˜o de bissextos, o exerc´ıcio mostra o c´ alculo de qualquer dia da semana. Finalmente, o exerc´ıcio sugere um ano hipot´etico (entre 1600 e 2400) e pede que o aluno calcule o dia da semana de um dia qualquer e os 3 feriados m´oveis deste ano Pseudoc´ odigo X Fluxograma c´ odigo: 18 finalizado em 05/05/07 8 trechos de programa s˜ao apresentados atrav´es de um fluxograma e atrav´es do pseudoc´ odigo equivalente. Entretanto, em alguns desses 8 trechos ambos s˜ao equivalentes e em alguns outros trechos houve uma sutil altera¸ca˜o ou no fluxograma ou no pseudoc´ odigo de maneira que ambos deixaram de ser equivalentes. O aluno deve investigar quais dos 8 trechos s˜ao efetivamente equivalentes. c´ odigo: 35 finalizado em 27/12/02 9 po¸cos de petr´ oleo s˜ao dispostos sobre uma grade de 100m × 100m. Pede-se que o aluno calcule de que maneira lig´ a-los atrav´es de tubos de maneira a minimizar a quantidade de tubos usados. Exerc´ıcio extra´ıdo do livro do Cormen, p´ ag 155 da edi¸ca˜o brasileira. Pseudoc´ odigo X Diagramas de Nassi-Schneidermann Kumon de algoritmos c´ odigo: 18 finalizado em 05/05/07 8 trechos de programa s˜ao apresentados atrav´es de um diagrama de Nassi-Schneidermann e atrav´es do pseudoc´ odigo equivalente. Entretanto, em alguns desses 8 trechos ambos s˜ao equivalentes e em alguns outros trechos houve uma sutil altera¸ca˜o ou no diagrama ou no pseudoc´ odigo de maneira que ambos deixaram de ser equivalentes. O aluno deve investigar quais dos 8 trechos s˜ao efetivamente equivalentes. c´ odigo: 54 finalizado em 23/06/06 Esta folha ´e para treinar os comandos b´asicos de algoritmos (se, enquanto, repita e para). S˜ao 17 exerc´ıcios simples, de apenas um u ´ nico comando cada um deles. Chines de fun¸ c˜ oes simples c´ odigo: 21 finalizado em 03/04/06 S˜ao apresentadas 5 fun¸co˜es de mesma estrutura com at´e 3 n´ıveis de IF’s encadeados. N˜ ao h´a ainda estruturas de repeti¸ca˜o. As fun¸co˜es inicializam as vari´ aveis A, B e C no come¸co, e ao final, o exerc´ıcio pergunta qual o valor de uma delas (que seguramente mudou de valor durante o processamento). D´ıgitos verificadores c´ odigo: 24 finalizado em 04/02/01 Mostra-se a importˆancia dos DVs e depois mostra-se os algoritmos de c´ alculo do CPF e do CNPJ. O aluno deve calcular os DVs de 2 CPFs e de 2 CNPJs. Gera¸c˜ ao de seq¨ uˆ encias c´ odigo: 57 finalizado em 30/12/05 Neste exerc´ıcio s˜ao apresentadas 8 fun¸co˜es que cont´em la¸cos (loops). Na parte final de cada la¸co h´a a impress˜ao de uma vari´ avel. O exerc´ıcio mostra os primeiros 4 valores ´ impressos e pede que o aluno ache o oitavo elemento impresso. Otimo exerc´ıcio para ser implementado. Engenharia reversa de algoritmos c´ odigo: 62 finalizado em 31/01/06 Este exerc´ıcio mostra 4 fun¸co˜es. Em cada uma h´a 3 vari´ aveis, cujos valores s˜ao inicializados no come¸co. Mas, apenas 2 destes valores s˜ao mostrados ao aluno, cabendo a ele, descobrir qual a inicializa¸ca˜o da terceira vari´ avel a partir do comportamento da fun¸ca˜o e dos resultados que ela gera ao ser executada. Fun¸ c˜ oes envolvendo se, enquanto e repita Aritm´ etica n˜ ao decimal c´ odigo: 27 finalizado em 28/11/01 ´ mostrada uma generaliza¸ca˜o da aritm´etica para bases n˜ E ao decimais, variando entre base = 3 e base = 33, excetuando-se as bases 2, 10 e 16. Convers˜oes, somas e subtra¸co˜es nestas bases s˜ao pedidas. vers˜ ao de 10 de fevereiro de 2008 Localiza¸ c˜ ao de um oleoduto 15 ©88-08, Pedro Kantek c´ odigo: 65 finalizado em 20/04/06 Este exerc´ıcio gera 4 fun¸co˜es razoavelmente complexas, nas quais se misturam comandos se, enquanto e repita, al´em de um conjunto de cerca de 15 vari´ aveis em cada fun¸ca˜o. ´ um O aluno deve seguir o fluxo e informar ao final qual o valor que ser´a impresso. E convite a` implementa¸ca˜o. ©88-08, Pedro Kantek 16 vers˜ ao de 10 de fevereiro de 2008 ´ CAP´ITULO 1. CONTRATO PEDAGOGICO ´ CAP´ITULO 1. CONTRATO PEDAGOGICO Chines de algoritmos II Indexa¸ c˜ ao e indire¸c˜ ao c´ odigo: 69 finalizado em 29/02/00 4 fun¸co˜es geradas aleatoriamente, mas que garantidamente executam em tempo finito s˜ao mostradas. Cada fun¸ca˜o recebe 5 valores mostrados. Pede-se que o aluno calcule e informe, ao final da execu¸ca˜o de cada fun¸ca˜o, o valor da soma das 5 vari´ aveis originais. c´ odigo: 110 finalizado em 18/02/01 Dados 3 vetores de 16 valores num´ericos cada e dadas 5 vari´ aveis num´ericas globais, o exerc´ıcio pede que o aluno ache o resultado de 48 opera¸co˜es de indexa¸ca˜o e de indire¸ca˜o. Busca simples em tabela Gen´ erico de constru¸ c˜ ao de algoritmos c´ odigo: 70 finalizado em 02/01/06 Este exerc´ıcio comporta uma base de dados de exerc´ıcios para uso em muitas aulas de algoritmos. Para cada uma das aulas, a base cont´em cerca de 10 exerc´ıcios distintos. Ao gerar as folhas para os alunos, cada um deles receber´a 4 (5 ou 6, depende da aula) de exerc´ıcios distintos. Todos eles exigem implementa¸c˜ao nas aulas de laborat´ orio. Achar o 10 termo de uma seq¨ uˆ encia o c´ odigo: 73 finalizado em 04/06/06 Este exerc´ıcio mostra 20 seq¨ uˆencias de 7 n´ umeros cada. Cada uma ´e resultado de um ciclo para no qual est˜ ao envolvidas 1, 2 ou 3 vari´ aveis, cujo valor ´e desconhecido. Ao aluno cabe: c´ odigo: 116 finalizado em 07/08/06 Este exerc´ıcio descreve o mecanismo das tabelas, suas opera¸co˜es de inclus˜ ao e exclusao. Na parte de busca, apresenta e compara 3 t´ecnicas (busca linear, busca linear ordenada e busca linear com sentinela). O aluno deve implementar os 3 algoritmos e inferir o desempenho deles nas 3 t´ecnicas. Manuseio de tabelas II c´ odigo: 119 finalizado em 10/08/06 S˜ao mostrados 5 algoritmos: inclus˜ ao em tabelas desordenadas, exclus˜ ao puxando os sobrantes, exclus˜ ao preenchendo com um indicador de exclus˜ ao, busca bin´aria e inclus˜ ao em tabela ordenada. Por enquanto, a folha pede apenas o preenchimento de algumas complexidades. As folhas s˜ao todas iguais entre si. Certifica¸c˜ ao de algoritmos b´ asicos ˆ sugerir valores para x, y e z c´ odigo: 125 finalizado em 11/07/07 Neste exerc´ıcio s˜ao apresentados 5 algoritmos b´asicos (um n´ umero ´e primo ?, soma dos divisores de um n´ umero, achar a potˆencia de um n´ umero, validar uma data e alocar bolas de brinquedo). Os algoritmos podem ou n˜ao conter um pequeno erro. O aluno deve descobrir quais est˜ ao errados e quais est˜ ao certos. ˆ verificar se os valores sugeridos geram a seq¨ uˆencia dada ˆ corrigir – se necess´ ario – e voltar a testar ˆ ap´ os o acerto, gerar e responder o 10o termo. Chines de algoritmos Certifica¸c˜ ao de algoritmos de vetor c´ odigo: 77 finalizado em 21/02/00 4 fun¸co˜es usuais na inform´atica s˜ao mostradas: busca em cadeias, m´edias em um vetor num´erico, ordena¸ca˜o por inser¸ca˜o e soma de colunas em uma matriz. Dados de entrada s˜ao fornecidos, junto com o c´ odigo de cada fun¸ca˜o pedindo-se ao aluno que infira os resultados que ser˜ao produzidos. c´ odigo: 125 finalizado em 11/07/07 Neste exerc´ıcio s˜ao apresentados 5 algoritmos de vetor (achar o maior elemento, onde est´ a uma determinada chave, quantas vezes um elemento existe no vetor, calcular a m´edia, moda e mediana e responder se o vetor est´ a em ordem). Os algoritmos podem ou n˜ao conter um pequeno erro. O aluno deve descobrir quais est˜ ao errados e quais est˜ ao certos. Balance Line Certifica¸c˜ ao de algoritmos de vetor c´ odigo: 84 finalizado em 02/03/00 O algoritmo de balance line ´e mostrado e ´e discutida a sua importˆancia para atualiza¸ca˜o em lote de grandes volumes de dados. O exerc´ıcio oferece dois arquivos de 30 registros cada (o arquivo de cadastro antigo e o arquivo de movimenta¸co˜es), pedindo-se ao aluno que gere o novo cadastro atualizado bem como o relat´orio de incompatibilidades da atualiza¸ca˜o. Perguntas s˜ao feitas sobre o conte´ udo dessas duas sa´ıdas c´ odigo: 125 finalizado em 11/07/07 Neste exerc´ıcio s˜ao apresentados 5 algoritmos de vetor (ver se uma frase ´e pal´ındromo, incluir uma chave em um vetor, achar o n´ umero da maior palavra em uma frase, exclus˜ ao de todos os valores k no vetor V e achar a amplitude de um vetor). Os algoritmos podem ou n˜ao conter um pequeno erro. O aluno deve descobrir quais est˜ ao errados e quais est˜ ao certos. vers˜ ao de 10 de fevereiro de 2008 17 ©88-08, Pedro Kantek ©88-08, Pedro Kantek 18 vers˜ ao de 10 de fevereiro de 2008 ´ CAP´ITULO 1. CONTRATO PEDAGOGICO ´ CAP´ITULO 1. CONTRATO PEDAGOGICO Certifica¸c˜ ao de algoritmos de matriz Universidade Pinguinhos c´ odigo: 125 finalizado em 11/07/07 Neste exerc´ıcio s˜ao apresentados 5 algoritmos de matriz (achar o vetor soma na vertical, calcular uma m´edia ad-hoc na matriz, achar o vetor menor na horizontal, calcular o produto de duas matrizes e dada uma matriz com dados eleitorais, tesponder quem ganhou a elei¸ca˜o). Os algoritmos podem ou n˜ao conter um pequeno erro. O aluno deve descobrir quais est˜ ao errados e quais est˜ ao certos. c´ odigo: 148 finalizado em 07/10/06 Problema retirado da Maratona de Programa¸ca˜o de 2005 da ACM. D´ a-se um curso universit´ ario composto de cerca de 15 mat´erias com diversas rela¸co˜es de pr´e-requisitos. Estabelecida a prioridade das mat´erias, e a quantidade m´axima de mat´erias por semestre, pede-se que o aluno monte a grade proposta. Piscina/M´ agico Matrizes c´ odigo: 128 finalizado em 22/08/06 Apresenta 5 algoritmos de matrizes. Uma totaliza¸ca˜o nos dois sentidos, o c´ alculo da matriz transposta, uma matriz com elementos abaixo da diagonal principal zerados (um grafo n˜ao dirigido ?), depois a multiplica¸ca˜o de 2 matrizes e finalmente a solu¸ca˜o de um sistema de equa¸co˜es lineares. O algoritmo ´e mostrado e um exemplo completo est´ a descrito na folha. Finalmente, o aluno ´e convidado a resolver (a m˜ao ou usando o computador, a escolha ´e dele) um sistema com 8 equa¸co˜es e 8 inc´ognitas. Manipula¸ c˜ oes no cubo Rubik c´ odigo: 135 finalizado em 21/09/06 O cubo Rubik ´e apresentado e ´e sugerida uma estrutura de dados que suporte manipula¸co˜es sobre ele. Depois uma lista de 9 operadores ´e tamb´em mostrada, aplicada `a estrutura de dados rec´em definida. O aluno ´e convidado a aplicar dois operadores sobre 2 cubos aleat´orios e depois ¨ıdeve resolver uma instˆ ancia trivial do cubo (apenas 2 movimentos). c´ odigo: 151 finalizado em 28/10/06 Dois exerc´ıcios retirados da maratona de Programa¸ca˜o da ACM dos anos de 2005 e 2004 respectivamente. O primeiro, d´a um estoque de azulejos de tamanho pequeno m´edio e grande respectivamente e pede a disposi¸ca˜o de custo m´ınimo para azulejar uma piscina de dimens˜ oes dadas. O segundo descreve um truque de adivinha¸ca˜o de cartas e pede que o aluno resolva 3 instˆ ancias desse truque. Regata e Luzes da festa c´ odigo: 152 finalizado em 03/08/07 O primeiro exerc´ıcio ´e da olimp´ıada ACM de 2005 e o segundo da IOI de 1998. A regata apresenta as coordenadas de um ponto de origem e de um ponto de destino, al´em de diversos obst´aculos (dados pelas coordenadas de suas extremidades). O aluno deve calcular qual o menor caminho da origem ao destino. O exerc´ıcio das luzes, sugere N lˆampadas inicialmente acesas, que podem ser controladas atrav´es de 4 bot˜ oes (1=chaveia todas, 2=s´o as impares, 3=s´o as pares 4=1,4,7...) O exerc´ıcio informa algumas lˆampadas que devem ficar acesas e outras apagadas, e pergunta como ficaram todas as N lˆampadas, ap´ os a aplica¸ca˜o dos bot˜ oes de controle. Fazenda de ostras de Zing Zhu Jogo do Retˆ angulo c´ odigo: 139 finalizado em 24/09/06 Este problema foi retirado da Maratona de Programa¸ca˜o da ACM do ano de 2004. Ele apresenta uma quase-solu¸ca˜o, j´ a que resolve apenas algumas instˆ ancias (e n˜ao outras). O objetivo do exerc´ıcio ´e exatamente discutir a freq¨ uˆencia com o profissional encontra esta situa¸ca˜o no mundo real, quando nem sempre h´a um algoritmo conhecido e correto. Existe uma ilha rasa e o seu propriet´ ario estabelece uma s´erie de cercas. Dada uma certa altura da mar´e, pergunta-se quanto de ´area da ilha permanece seco. c´ odigo: 153 finalizado em 09/11/07 Este exerc´ıcio extra´ıdo da Olimp´ıada Internacional de Inform´ atica de 2005, ocorrido na Polˆ onia, oferece um retˆ angulo de dimens˜ oes inteiras. Cada jogador pode fazer 1 corte (vertical ou horizontal) sempre em unidades inteiras. Feito o corte, o menor peda¸co ´e desprezado e segue o jogo. Quem ficar com o retˆ angulo 1×1 perde. S˜ao dados os m´etodo de solu¸ca˜o e os algoritmos. Dadas 3 instˆ ancias (2 vencedoras e 1 perdedora) pede-se que o aluno identifique a perdedora e ofere¸ca o lance ganhador nas outras 2. N´ umeros romanos Caminho e Vulc˜ ao c´ odigo: 144 finalizado em 16/09/06 Apresenta o sistema romano de numera¸ca˜o. Os algoritmos de convers˜ao de ar´ abico para romano e vice-versa s˜ao apresentados. H´ a 6 convers˜oes em cada sentido para o aluno fazer. Deve-se alertar o fato de que na convers˜ao de ar´ abico → romano h´a v´arias respostas poss´ıveis (todas corretas) devendo o aluno fazer aquela que ´e dada pelo algoritmo estudado. Isto atrapalha o uso de conversores livremente dispon´ıveis para resolver o problema proposto. c´ odigo: 155 finalizado em 11/08/07 Dois exerc´ıcios baseados em similares pedidos na Olimp´ıada Espanhola de Inform´ atica. No primeiro, uma matriz de letras ´e estabelecida e pede-se o caminho que estabelece uma palavra dada. Note-se que a matriz tem as extremidades ligadas, o que torna mais complexa a busca. No segundo, um vulc˜ ao descrito pelas altitudes de seus platˆos, derrama lava e o problema pede que o aluno descubra para onde vai a lava nos diversos instantes discretos de tempo vers˜ ao de 10 de fevereiro de 2008 19 ©88-08, Pedro Kantek ©88-08, Pedro Kantek 20 vers˜ ao de 10 de fevereiro de 2008 ´ CAP´ITULO 1. CONTRATO PEDAGOGICO ´ CAP´ITULO 1. CONTRATO PEDAGOGICO Genoma e Palavras cruzadas An´ eis quadrados, Balaios e Meteoros c´ odigo: 156 finalizado em 31/12/07 2 problemas baseados na prova da OBI de 1999. No primeiro problema s˜ao dadas duas cadeias de DNA e o aluno deve localizar as correspondˆencias da cadeia original e de sua complementar. No segundo problema, um tabuleiro de palavras cruzadas de dimens˜ ao conhecida ´e dado e s˜ao dadas as localiza¸co˜es das casas pretas. O aluno deve numerar o tabuleiro e informar os endere¸cos das palavras na horizontal e na vertical. c´ odigo: 161 finalizado em 08/01/08 3 problemas baseados na prova da OBI. No primeiro problema pede-se qual a configura¸ca˜o quando v´arios an´eis quadrados s˜ao vistos de cima. O segundo pede determinar qual a seq¨ uˆencia de produ¸ca˜o de balaios que minimiza a multa por atraso e o terceiro determina uma fazenda e diversos locais de queda de meteoritos, perguntando quantos ca´ıram dentro da fazenda. Trem/caminh˜ ao, robo e restaurante Domin´ o, sorvete e pirˆ amide de caixas c´ odigo: 157 finalizado em 03/01/08 3 problemas baseados na prova da OBI. No primeiro problema s˜ ao dadas informa¸co˜es sobre frete e o aluno deve escolher o transporte por trem ou por caminh˜ao. No segundo o caminho de um robot ´e dado por suas coordenadas e pergunta-se quantas voltas (giros) sobre si mesmo o robot d´a. No terceiro, dados de entrada e saida de pessoas em um restaurante s˜ao dados e pergunta-se: qual o maior n´ umero de pessoas que estiveram em um dado momento dentro do recinto ? c´ odigo: 162 finalizado em 09/01/08 3 problemas baseados na prova da OBI. No primeiro problema pergunta-se se um dado conjunto de pedras de domin´o podem ou n˜ao formar um jogo. No segundo, d˜ao-se diversos trajetos de sorveteiros e pergunta-se qual a parte da praia que ficar´ a atendida por pelo menos um sorveteiro, e no terceiro, d˜ao-se diversas caixas de diversas dimens˜ oes e pergunta-se qual a altura da maior pilha poss´ıvel, desde que uma caixa nao ultrapasse nenhuma dimens˜ ao da caixa que est´ a abaixo Seq.H, carga pesada e rede ´ otica Tesouro, Aeroporto e Ped´ agio na Cor´ eia c´ odigo: 158 finalizado em 04/01/08 3 problemas baseados na prova da OBI. No primeiro problema ´e definido um crit´erio definidor de uma seq¨ uˆencia bin´aria. 4 seq¨ uˆencias d˜ao dadas e pergunta-se se elas atendem ou n˜ao ao crit´erio (recursivo). No segundo um mapa de estradas com alturas m´aximas s˜ao dadas e pede-se qual a carga mais alta que pode ser levada de uma cidade a outra. Finalmente, no terceiro problema, da-se uma rede ´otica com seus custos por ramo e pede-se o menor custo de liga¸ca˜o (´arvore de cobertura m´ınima). c´ odigo: 163 finalizado em 17/01/08 3 problemas baseados na prova da OBI. No primeiro problema d˜ ao-se 2 valores (de Jo˜ ao e de Jos´e) e o conte´ udo de uma arca do tesouro. A pergunta ´e se ´e poss´ıvel ambos terem o mesmo valor. O segundo pergunta qual aeroporto ficar´ a mais congestionado, e o terceiro pergunta quais cidades uma pessoa pode alcan¸car gastando no m´aximo P ped´agios. Finlˆ andia, Supermercado e N´ umero de Erdos Quermesse, troca de notas e saldo de gols c´ odigo: 159 finalizado em 04/01/08 3 problemas baseados na prova da OBI. No primeiro problema pede-se quem ganhou um concurso (f´acil). No segundo problema, usando notas de 50, 10, 5 e 1, deve-se informar quantas e quais notas comp˜ oe um valor (f´acil). No terceiro, deve-se escolher qual o per´ıodo em que um certo grande time teve o maior saldo de gols (n˜ ao t˜ao f´ acil). c´ odigo: 164 finalizado em 18/01/08 3 problemas baseados na prova da OBI. No primeiro problema pede-se quantas cidades um ciclista pode visitar na Finlˆ andia, desde que n˜ao tenha que subir nada. No segundo, pede-se a melhor localiza¸ca˜o para um centro de distribui¸ca˜o de uma rede de supermercados. No terceiro, d˜ao-se diversos artigos com seus autores, e pede-se o n´ umero de Erdos de 3 deles. Macaco prego e visita ao MASP Furos, Senha banc´ aria e Orkut c´ odigo: 160 finalizado em 08/01/08 2 problemas baseados na prova da OBI. No primeiro problema pede-se qual a delimita¸ca˜o de uma reserva florestal que congregue o maior n´ umero poss´ıvel de macacos prego a partir dos dados parciais de suas apari¸co˜es. No segundo, o roteiro de uma visita `as obras do MASPdeve ser estabelecido minimizando o esfor¸co e priorizando as obras mais importantes. Trata-se de um problema de minimiza¸ca˜o. c´ odigo: 165 finalizado em 22/01/08 3 problemas baseados na prova da OBI. No primeiro problema pede-se qual o menor diˆametro de uma chapa redonda que cobre todos os furos cujos centros s˜ao dados. No segundo s˜ao dadas 2, 3 ou 4 digita¸co˜es de senhas em um banco eletrˆ onico, pedindo-se ao aluno que deduza a senha original correta e no terceiro pede-se que o aluno indique se ´e ou n˜ao ´e poss´ıvel criar uma comunidade Orkut com as regras que l´a s˜ao dadas. vers˜ ao de 10 de fevereiro de 2008 21 ©88-08, Pedro Kantek ©88-08, Pedro Kantek 22 vers˜ ao de 10 de fevereiro de 2008 ´ CAP´ITULO 1. CONTRATO PEDAGOGICO ´ CAP´ITULO 1. CONTRATO PEDAGOGICO Colheita de minhocas, furos e frota de taxis c´ odigo: 166 finalizado em 22/01/08 3 problemas baseados na prova da OBI. No primeiro problema pde-se determinar o valor da colheita usando a trajet´oria otimizada de uma m´aquina de colheita de minhocas. No segundo, definem-se os buracos de minhoca como liga¸co˜es entre partes do universo e a partir do mapa delas, pergunta-se se todos os planetas desse universo podem ser acessados. Finalmente, no terceiro o aluno deve decidir se abastece uma frota com ´alcool ou com gasolina. 10 problemas a base de papel e l´ apis c´ odigo: 170 finalizado em 17/12/07 10 problemas baseados na prova da OBI de 2003. S˜ao da fase introdut´ oria (para alunos de 2.grau) e portanto n˜ao exigem nenhum conhecimento especializado de programa¸ca˜o. Apenas de solu¸ca˜o de problemas. 5 problemas a base de papel e l´ apis-a c´ odigo: 171 finalizado em 18/12/07 5 problemas baseados na prova da OBI de 2004. S˜ao da fase introdut´ oria (para alunos de 2.grau) e portanto n˜ao exigem nenhum conhecimento especializado de programa¸ca˜o. Apenas de solu¸ca˜o de problemas. S˜ao eles: supermercado(2), maionese(1) e mapas da prefeitura(2) 5 problemas a base de papel e l´ apis-k c´ odigo: 171 finalizado em 18/12/07 10 problemas baseados na prova da OBI de 2004. S˜ao da fase introdut´ oria (para alunos de 2.grau) e portanto n˜ao exigem nenhum conhecimento especializado de programa¸ca˜o. Apenas de solu¸ca˜o de problemas. S˜ao eles: Atendimento ao consumidor(2), Clara e Luiz (1) e Economia do transporte(2). c´ odigo: 172 finalizado em 19/12/07 10 problemas baseados na prova da OBI de 2005. S˜ao da fase introdut´ oria (para alunos de 2.grau) e portanto n˜ao exigem nenhum conhecimento especializado de programa¸ca˜o. Apenas de solu¸ca˜o de problemas. S˜ao eles: Equipe de software (2), Flores (2), Pane seca (1) Linguagem de programa¸ca˜o (2), Semana de provas (1) e Futebol(2). 7 problemas a base de papel e l´ apis-a c´ odigo: 173 finalizado em 22/12/07 7 problemas baseados na prova da OBI de 2006. S˜ao da fase introdut´ oria (para alunos de 2.grau) e portanto n˜ao exigem nenhum conhecimento especializado de programa¸ca˜o. 23 6 problemas a base de papel e l´ apis-b c´ odigo: 173 finalizado em 22/12/07 6 problemas baseados na prova da OBI de 2006. S˜ao da fase introdut´ oria (para alunos de 2.grau) e portanto n˜ao exigem nenhum conhecimento especializado de programa¸ca˜o. Apenas de solu¸ca˜o de problemas. S˜ao eles: Pantanal (2), Torneio de tenis (2), hidrologia (1) e Tornado (1). 6 problemas a base de papel e l´ apis-c c´ odigo: 173 finalizado em 22/12/07 6 problemas baseados na prova da OBI de 2006. S˜ao da fase introdut´ oria (para alunos de 2.grau) e portanto n˜ao exigem nenhum conhecimento especializado de programa¸ca˜o. Apenas de solu¸ca˜o de problemas. S˜ao eles: Ciclo de palestras (2), Analista (2), Casa mal afamada (1) e Nota¸ca˜o p´os-fixa (1). 7 problemas a base de papel e l´ apis-d c´ odigo: 173 finalizado em 22/12/07 7 problemas baseados na prova da OBI de 2006. S˜ao da fase introdut´ oria (para alunos de 2.grau) e portanto n˜ao exigem nenhum conhecimento especializado de programa¸ca˜o. Apenas de solu¸ca˜o de problemas. S˜ao eles: Mapas a colorir (2), MP3 (3), Horta da Maria (1) e Sanduiche do Jo˜ ao (1). N˜ ao est˜ ao neste material e ser˜ao aplicados diretamente em sala de aula. Bibliografia para Algoritmos ¨ FOR05 FORBELLONE, A. L. V. e EBERSPACHER, H. F. - L´ ogica de Programa¸ca˜o. FAR85 FARRER, Harry et all. Algoritmos estruturados. Rio de Janeiro, Guanabara, 1985. 241p. (Programa¸ca˜o estruturada de computadores). FOR72 FORSYTHE, Alexandra I. et all. Ciˆencia de Computadores - 1. curso. Volume 1. Rio de Janeiro, Ao Livro T´ecnico. 1972. 234p. 10 problemas a base de papel e l´ apis vers˜ ao de 10 de fevereiro de 2008 Apenas de solu¸ca˜o de problemas. S˜ao eles: Excurs˜ao dos alunos(2), Conjunto de rock (2), azulejos (1) e transporte de alunos (2). ©88-08, Pedro Kantek FOR72b FORSYTHE, Alexandra I. et all. Ciˆencia de Computadores - 1. curso. Volume 2. Rio de Janeiro, Ao Livro T´ecnico. 1972. 560p. ˜ ˆ GUI75 GUIMARAES, Angelo de Moura & LAGES, Newton Alberto de Castilho. Algoritmos e estruturas de dados. Rio de Janeiro, LTC, 1975. 216p. KNU71 KNUTH, Donald E. The Art of Computer Programming. Volumes 1 e 2. Reading, Massachussets, Addisonb Wesley Publishing Company, 1971, 624p. SIL90 SILVA PINTO, Wilson. Introdu¸ca˜o ao desenvolvimento de algoritmos e estru´ turas de dados. S˜ao Paulo, ERICA, 1990, 201p. WIR89 WIRTH, Niklaus. Algoritmos e estruturas de dados. Rio de Janeiro, PrenticeHall do Brasil, 1989, 245p. ©88-08, Pedro Kantek 24 vers˜ ao de 10 de fevereiro de 2008 ´ CAP´ITULO 1. CONTRATO PEDAGOGICO ´ CAP´ITULO 1. CONTRATO PEDAGOGICO O autor, pelo autor Meu nome ´e Pedro Luis Kantek Garcia Navarro, conhecido como Kantek, ou Pedro Kantek. Nasci em Curitiba h´a mais de 50 anos. Sou portanto brasileiro, curitibano e coxa-branca com muito orgulho, mas sendo filho de espanh´ois (meus 7 irm˜ aos nasceram l´a), tenho tamb´em a nacionalidade espanhola. Aprendi a falar em castellano, o portuguˆes ´e portanto meu segundo idioma. Estudei no Col´egio Bom Jesus e quando chegou a hora de escolher a profiss˜ ao, l´a por 1972, fui para a engenharia civil, mas sem muita convic¸ca˜o. Durante a copa do mundo de futebol de 1974 na Alemanha, ao folhear a Gazeta do Povo, achei um pequeno an´ uncio sobre um est´ agio na ´area de processamento de dados (os nomes inform´atica e computa¸ca˜o ainda n˜ao existiam). L´ a fui eu para um est´ agio na CELEPAR, que hoje, mais de 30 anos ap´ os, ainda n˜ ao acabou. Na CELEPAR j´ a fui de tudo: programador, analista, suporte a BD (banco de dados), suporte a TP (teleprocessamento), coordenador de auto-servi¸co, coordenador de atendimento, ... Atualmente estou na ´ area de governo eletrˆ onico. Desde cedo encasquetei que uma boa maneira de me obrigar a continuar estudando a vida toda era virar professor. Comecei essa desafiante carreira em 1976, dando aula num lugar chamado UUTT, que n˜ao existe mais. Passei por FAE, PUC e cheguei ` as Faculdades Positivo em 1988. Sou o decano do curso de inform´atica e um dos mais antigos professores da casa. Na d´ecada de 80, virei instrutor itinerante de uma empresa chamada CTIS de Bras´ılia, e dei um monte de cursos por este Brasil afora (Manaus, Recife, Bras´ılia, Rio, S˜ao Paulo, Fortaleza, Floripa, ...). Em 90, resolvi voltar a estudar e fui fazer o mestrado em inform´atica industrial no CEFET. Ainda peguei a u ´ ltima leva dos professores franceses que iniciaram o curso. Em 93 virei mestre, e a minha disserta¸ca˜o foi publicada em livro pela editora Campus (Downsizing de sistemas de Informa¸ca˜o. Rio de Janeiro: Campus, 1994. 240p, ISBN:85-7001-926-2). O primeiro cheque dos direitos autorais me manteve um mˆes em Nova Iorque, estudando inglˆes. Ali´as, foi o quarto livro de minha carreira de escritor, antes j´ a havia 3 outros (MS WORD - Guia do Usu´ario Brasileiro. Rio de Janeiro: Campus, 1987. 250p, ISBN:85-7001-507-0, Centro de Informa¸co˜es. Rio de Janeiro: Campus, 1985. 103p, ISBN:85-7001-383-3 e APL - Uma linguagem de programa¸ca˜o. Curitiba. CELEPAR, 1982. 222p). Depois vieram outros. Terminando o mestrado, rapidamente para n˜ao perder o fˆ olego, engatei o doutorado em engenharia el´etrica. Ele se iniciou em 1994 na UFSC em Florian´opolis. S´o terminou em 2000, foram 6 anos inesquec´ıveis, at´e porque nesse meio tive que aprender o francˆes - mais um mˆes em Paris aprendendo-o. Finalmente virei engenheiro, 25 anos depois de ter iniciado a engenharia civil. Esqueci de dizer que no meio do curso de Civil desist´ı (c´a pra n´os o assunto era meio chato...) em favor de algo muito mais emocionante: matem´atica. Nessa ´epoca ainda n˜ao havia cursos superiores de inform´atica. Formei-me em matem´atica na PUC/Pr em 1981. Em 2003, habilitei-me a avaliador de cursos para o MEC. Para minha surpresa, fui selecionado e virei delegado do INEP (Instituto Nacional de Pesquisas Educacionais) do Governo Brasileiro. De novo, visitei lugares deste Brasilz˜ao que sequer imaginava existirem (por exemplo, Rondon´opolis, Luiziˆ ania, Rio Grande, entre outros), sempre avaliando os cursos na ´area de inform´atica: sistemas de informa¸ca˜o, engenharia e ciˆencia da computa¸ca˜o. Atualmente estou licenciado da PUC e no UNICENP respondo por 4 cadeiras: Algoritmos (1. ano de sistemas de informa¸ca˜o), Estrutura de Dados (2.ano, idem) e T´opicos Avan¸cados em Sistemas de Informa¸ca˜o (4.ano, idem), al´em de Inteligˆencia Artificial (´ ultimo ano de Engenharia da Computa¸ca˜o). J´a fiz um bocado de coisas na vida, mas acho que um dos meus sonhos ´e um dia ser professor de matem´atica para crian¸cas: tentar despert´ a-las para este mundo fant´astico, do qual – lastimavelmente – boa parte delas nunca chega sequer perto ao longo de sua vida. vers˜ ao de 10 de fevereiro de 2008 25 ©88-08, Pedro Kantek O autor, h´a muitos anos, quando ainda tinha abundante cabeleira ©88-08, Pedro Kantek 26 vers˜ ao de 10 de fevereiro de 2008 ˆ ˜ CAP´ITULO 2. CIENCIA DA COMPUTAC ¸ AO 5. Com a fala, os dois sujeitos tem que estar tˆete-` a-tˆete. A seguir, surge a escrita. Agora a comunica¸ca˜o ´e poss´ıvel na modalidade um-muitos (Antes era um-um) e mesmo um c´erebro morto pode se comunicar pela escrita. 6. Enquanto a escrita ´e manuscrita, est´ a naturalmente limitada. A pr´oxima novidade ´e a imprensa que ao automatizar a produ¸ca˜o de textos, amplia significativamente o acesso e a dissemina¸ca˜o de informa¸co˜es. Cap´ıtulo 2 Ciˆ encia da Computa¸ c˜ ao Programas de qualquer tamanho est˜ ao sujeitos a conterem ”bugs”(erros). Alguns deles acabam custando caro. Em 22/jul/62 um foguete foi lan¸cado com a miss˜ ao de chegar a Venus. Esta foi a primeira tentativa de explorar qualquer planeta. O foguete desviou-se do curso e foi destruido. Investiga¸co˜es posteriores revelaram que o respons´ avel pelo problema foi um erro de programa¸ca˜o dos computadores. Apesar de testes e depura¸co˜es extensas, a omiss˜ao de um simples h´ıfen num dos comandos de um programa n˜ao foi detectada. Este erro causou a falha da miss˜ ao inteira a um custo de US$ 18,5 milh˜ oes. Trecho do livro ”Software Testing Techniques”de Boris Beizer. Se o construtores constru´ıssem edif´ıcios da mesma forma que os programadores escrevem programas, o primeiro pica-pau poderia destruir a civiliza¸ca˜o. Gerald Weinberg, citado por James Martin, em ”O manifesto”. Se alguma coisa pode dar errada, dar´ a errada. 2.1 Lei de Murphy Representa¸c˜ ao do conhecimento Se olharmos a hist´ oria deste nosso pequeno planeta e abstrairmos a hip´otese Teol´ ogica (j´a que cientificamente ela n˜ao tem comprova¸ca˜o) veremos uma hist´ oria mais ou menos assim: 1. H´ a uns 3.000.000.000 de anos, surgem os primeiros seres vivos, capazes de – entre outras coisas – se reproduzirem por c´ opia de si mesmos. Aparece aqui o DNA (´acido desoxi-ribonucleico) o elemento comunicador da heran¸ca. Foi o primeiro e at´e hoje bem importante local onde se armazenou o conhecimento. 2. Mais tarde, surge o sexo. Ele tem enorme importˆancia nesta hist´ oria ao permitir que os filhos herdem um poco do DNA do pai e um pouco da m˜ae, acelerando a evolu¸ca˜o. 3. Um bocado de tempo depois, surgem os animais superiores e nestes o c´erebro passa a ser respons´ avel pelo local onde o conhecimento ´e produzido e armazenado. Denomina-se esta fase ` a do conhecimento extragen´etico. 4. Enquanto limitado ao conhecimento localmente produzido, o c´erebro pode armazenar pouco. O pr´oximo est´ agio de amplia¸ca˜o ´e quando surge a fala. Agora o conte´ udo de um c´erebro pode ser repassado a outro, com resultados melhores e crescentes. O nome ´e conhecimento extrassom´ atico 27 7. Finalmente, o u ´ ltimo est´ agio da amplia¸ca˜o do conhecimento reside no software. Hoje, 23 milh˜ oes de brasileiros sabem declarar seu IR, sem precisar fazer um exaustivo aprendizado sobre as regras da declara¸ca˜o, gra¸cas a um... software. O nome ´e inteligˆencia extrassom´ atica. Durante o s´eculo XX a maior ind´ ustria foi a do petr´ oleo. Depois, a do autom´ ovel e finalmente no final do s´eculo, a ind´ ustria de computadores passou a ser a maior. A tendˆencia para o futuro ´e de que ela suplante todas as demais. Hoje o homem mais rico do mundo construiu a sua fortuna vendendo um software. O computador nasce na cabe¸ca de um cientista inglˆes (Alan Matheson Turing em 1937) e ´e constru´ıdo para a guerra pelos ingleses em 1942. A seq¨ uˆencia de escopo do computador ´e guerra a id´eia aqui ´e usar o computador como otimizador dos recursos b´elicos, criptografia, pesquisa operacional, tabelas bal´ısticas...→ aritm´ etica o computador se transforma em super-calculadora. A matem´atica passa a ser a linguagem da inform´atica, por excelˆencia. O FORTRAN ´e dessa ´epoca... → neg´ ocios em plena sociedade capitalista, os neg´ ocios passam a ser otimizados pelo computador. Dessa ´epoca ´e o COBOL a linguagem representante... → aldeia global Neg´ocios, governos, universidades e organiza¸co˜es sociais passam a compartilhar o ciberespa¸co. Surge e se robustece a Internet... → lazer o computador vira um eletrodom´estico. As casas de classe m´edia passam a contar com um (ou mais de um) computador. Jogos, m´ usica, filmes, e-mule, mp3, ... → ... → realidade virtual N˜ ao se sabe direito o que vir´ a por aqui. As t´ecnicas de simula¸ca˜o levadas ao paroxismo permitir˜ao criar realidades virtuais, com toda a contradi¸ca˜o exposta no t´ıtulo. Talvez retornemos a` d´ uvida de Plat˜ao (o universo existe ou ´e apenas uma sensa¸ca ˜o que eu tenho? ). O computador se diferencia de qualquer outra m´aquina pela sua generalidade. No texto original de Turing isto fica claro pela conceitua¸ca˜o de uma m´aquina universal. Assim, diferentemente de um liquidificador (que s´o serve para picar comida e tem apenas um bot˜ ao de liga-desliga), um computador precisa – antes de qualquer coisa – ser programado para fazer algo. De fato, se comprar um computador vazio e lig´ a-lo, ele n˜ao vai fazer nada. Tecnicamente, chama-se a parte f´ısica do computador de hardware significando ferragem, duro (hard), componente f´ısico, etc. J´a a programa¸ca˜o recebe o nome de software significando mole (soft em oposi¸ca˜o a hard), componente l´ ogico, n˜ao f´ısico, programa de computador. A fabrica¸ca˜o de hardware ´e engenharia. Sua produ¸ca˜o pode ser planejada e otimizada e isso de fato ´e feito. A fabrica¸ca˜o de software, a despeito de ser chamada de engenharia, c´ a entre n´os, n˜ao o ´e muito. Est´ a mais para arte do que para engenharia. ©88-08, Pedro Kantek 28 vers˜ ao de 10 de fevereiro de 2008 ˆ ˜ CAP´ITULO 2. CIENCIA DA COMPUTAC ¸ AO ˆ ˜ CAP´ITULO 2. CIENCIA DA COMPUTAC ¸ AO Talvez, como seres humanos, devamos dar gra¸cas aos c´eus por esta situa¸ca˜o. Pois enquanto a produ¸ca˜o de hardware ´e (ou pode ser) em grande parte robotizada, a produ¸ca˜o de software ainda exige um bom c´erebro cinzento por tr´ as. As restri¸co˜es que ainda existem sobre o software e que talvez nunca deixem de existir, impedem a programa¸ca˜o dos computadores em linguagem natural. Hoje ainda n˜ao ´e poss´ıvel dialogar com um computador como se fala com uma pessoa medianamente inteligente. Os computadores ainda n˜ao conseguem tal proeza. Para programar um computador necessitamos uma linguagem. O hardware s´o entende uma linguagem de pulsos el´etricos (chamada de linguagem de m´aquina). Para facilitar a nossa vida (j´a que ´e muito dificil para o homem programar nela), criaram-se programas tradutores que recebem comandos e dados em uma linguagem artificial e a convertem em linguagem de m´aquina. A maioria desses tradutores recebeu o mesmo nome da linguagem que eles traduzem. Assim, temos o Java, o Cobol, Pascal, Apl, Clipper, Dbase, Basic, Natural, Fortran, C, Php, Lisp, Prolog, Modula, entre outras. Veja no s´ıtio www.tiobe.com o ´ındice TPC que mensalmente lista as 100 linguagens mais usadas no mundo. Quando os primeiros computadores foram construidos, a u ´ nica linguagem por eles entendida era a bin´aria. Seq¨ uˆencias intermin´aveis de uns e zeros, algo assim como 0 0 1 0 1 0 0 0 1 0 1 0 1 0 1 1 1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 1 0 0 0 1 0 1 0 1. Era um autˆentico samba do crioulo doido. Chamou-se a isto, mais tarde, linguagem de primeira gera¸ca˜o. A seguir, o primeiro melhoramento: o assembler (ou montador), programa que era capaz de entender instru¸co˜es escritas em uma linguagem um pouco mais humana, e traduzir cada uma destas instru¸co˜es em sua express˜ao bin´aria equivalente. Junto com este programa criou-se a primeira linguagem digna deste nome: o assembler, at´e hoje usado, se bem que muito raramente. Programar em assembler ainda exige muito talento e paciˆencia. A m´aquina precisa ser conhecida em in´ umeros detalhes de constru¸ca˜o, os programas s˜ao longos e dif´ıceis (principalmente sua manuten¸ca˜o). Entretanto esta ´e a linguagem mais eficiente do ponto de vista dos consumo dos recursos da m´aquina, isto ´e, ela gera programas velozes e pequenos. Depois, vieram as linguagens de terceira gera¸ca˜o: a primeira foi o FORTRAN, depois COBOL, PL/I, PASCAL, C, C++, Java, LISP, Prolog e outras menos votadas: BASIC, ADA, APL. H´ a um distanciamento do programador em rela¸ca˜o `a m´aquina, e uma aproxima¸ca˜o do mesmo em rela¸ca˜o ao problema a resolver. Estas linguagens s˜ao mais f´ aceis de aprender e embora gerem programas maiores e mais lentos, aumentam em muito a produtividade humana de escrever c´ odigo de programa¸ca˜o. Um exemplo diferente para mostrar todos estes conceitos de linguagens poderia ser o seguinte: Suponha um engenheiro brasileiro, que s´o conhece o idioma portuguˆes. Ele precisa transmitir certas ordens de fabrica¸ca˜o para um colega sovi´etico, que s´o conhece o idioma russo, com escrita cir´ılica. Os dois podem tentar conversar quanto quiserem, ´ necess´aria a presen¸ca mas provavelmente n˜ao haver nenhum resultado pr´atico u ´ til. E de um tradutor, algu´em que ouvindo o portuguˆes consiga transformar as ordens em suas equivalentes russas. Finalmente, o engenheiro brasileiro ver´a se as ordens foram corretamente traduzidas e executadas analisando o resultado final do trabalho. Neste exemplo, o engenheiro brasileiro ´e o programador. O colega sovi´etico ´e a m´aquina (que ao inv´es de russo, s´o entende a linguagem el´etrica). O tradutor ´e a linguagem de programa¸ca˜o. Podemos ainda estabelecer dois n´ıveis para linguagens de programa¸ca˜o: baixo e alto. Linguagem de baixo n´ıvel ´e aquela que requer a especifica¸ca˜o completa do problema nos seus m´ınimos detalhes. No nosso exemplo, equivaleria ao engenheiro brasileiro descrevendo tin-tin por tin-tin todos os passos para montar uma engenhoca qualquer. J´a as linguagens de alto n´ıvel, pressup˜oe uma tradu¸ca˜o ”inteligente”, o que libera o engenvers˜ ao de 10 de fevereiro de 2008 29 ©88-08, Pedro Kantek heiro brasileiro de informar todas as etapas. Ele diz o que deve ser feito, sem precisar estabelecer como isto vai ser realizado. Todas as linguagens compartilham uma estrutura parecida, j´ a que rodam todas no mesmo computador que ´e constru´ıdo usando a chamada Arquitetura de Von Neumann. Bem resumido, essa arquitetura prevˆe a existˆencia da mem´oria, de uma unidade aritm´etico l´ogica, canais e o elemento ativo: a unidade de controle. Essa estrutura comporta os seguintes tipos de comandos (ordens): entrada-sa´ıda de dados, aritm´etica, movimenta¸ca˜o em mem´oria, condicional e desvio. Com apenas essas 5 ordens, s˜ao constru´ıdos todos os programas que existem ou que existir˜ao em nosso mundo usando este tipo de computador. Uma pergunta que se pode fazer aqui, ´e se ´e melhor aprender tudo de uma linguagem e se tornar um especialista nela, ou se ´e melhor conhecer v´arias, ainda que n˜ao chegando a muita profundidade em nenhuma. N˜ ao h´a resposta f´ acil, mas apostar todas as suas fichas em uma u ´ nica pode ser perigoso. A tecnologia tem substitu´ıdo a linguagem “da vez” mais ou menos a cada 8, 10 anos. Pior, ao se fixar em uma linguagem, corre-se o risco de misturar quest˜ oes do problema (do algoritmo) com quest˜ oes do programa (da linguagem). Como na vida real, parece ser melhor buscar ser poliglota, ainda que obviamente haja uma linguagem preferida. Neste caso, todo o esfor¸co deve ser no n´ ucleo mais ou menos comum a todas as linguagens e deixar em segundo plano o aprendizado das idiossincrasias de cada uma. Exerc´ıcio 1 Lembrando que existe muita semelhan¸ca entre seguir um programa de computador e uma receita culin´aria, prepare um fluxograma da seguinte receita: Bolo de nozes da Dona Filustreca Ingredientes: 250g de chocolate em p´o, 250g de passas, 3 x´ıcaras de a¸cucar, meia x´ıcara de leite condensado, meia x´ıcara de o´leo, 1 colher de ch´a de baunilha, 250g de manteiga e 1 colher de ch´a de sal. Modo de fazer: ponha o leite, o o´leo, o a¸cucar, o chocolate e o sal em uma panela e leve ao fogo, mexendo at´e a fervura. Reduza o fogo e continue a fervura at´e o ponto de caramelo. Retire do fogo e deixe esfriar por 10 min. Em seguida, bata com a manteiga e a baunilha at´e a mistura ficar homogˆenea. Distribua as passas no fundo de uma forma grande untada de manteiga. Derrame a massa sobre as passas. Deixe esfriar por 10 minutos, corte em peda¸cos e o bolo est´a pronto para ser comido. Exerc´ıcio 2 Seja agora um exemplo num´erico. Eis aqui a seq¨uˆencia de Fibonacci 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, ... Escreva um procedimento que informe a soma dos primeiros 1000 n´ umeros da seq¨ uˆencia de Fibonacci. Fica claro por estes dois exemplos, que programar um computador ´e “emprestar inteligˆencia ao computador”. Ou seja, para programar a solu¸ca˜o de um problema, h´a que saber resolver esse problema. E, n˜ao apenas resolver em tese, mas descrever detalhadamente todas as etapas da solu¸ca˜o. De fato, a programa¸ca˜o ´e detalhista ao extremo. Como se disse acima, o computador surge em 1937, descrito em um artigo denominado “on a computable numbers”. Este artigo era t˜ao in´edito que quase n˜ao ´e publicado: faltavam revisores que o atestassem. O conceito matem´atico de computador est´ a l´a, quase 10 anos de existir algo f´ısico que lembrasse o conceito. ©88-08, Pedro Kantek 30 vers˜ ao de 10 de fevereiro de 2008 ˆ ˜ CAP´ITULO 2. CIENCIA DA COMPUTAC ¸ AO ˆ ˜ CAP´ITULO 2. CIENCIA DA COMPUTAC ¸ AO Ao mesmo tempo, o ex´ercito nazista alem˜ ao come¸ca a usar um esquema criptogr´afico muito inteligente atrav´es de uma m´aquina denominada ENIGMA, a qual, tinham eles certeza, era inexpugn´ avel. Mal sabiam que do outro lado do canal da Mancha estava Turing. Ele criou um computador, batizado COLOSSUS, que quebrava o c´ odigo ENIGMA em poucas horas. Foi o primeiro computador constru´ıdo pelo homem. O ENIAC de que os americanos se gabam tanto, veio depois. No meio da guerra, Turing foi enviado aos Estados Unidos e l´a teve contacto com Von Neumann. Este ´e o autor da assim chamada arquitetura de Von Neumann, que ´e a que usamos at´e hoje em qualquer computador. 2.2 Algoritmo Algorithms are the most important, durable, and original part of computer science because they can be studied in a language – and machine – independent way. This means that we need techniques that enable us to compare algorithms without implementing them. Skiena, Steven - The Algorithm Design Manual. Segundo mestre Aur´elio, algoritmo ´e “Processo de c´ alculo, ou de resolu¸ca˜o de um grupo de problemas semelhantes, em que se estipula, com generalidade e sem restri¸co˜es, regras formais para a obten¸ca˜o do resultado ou da solu¸ca˜o do problema”. ´ a “coisa” Algoritmo ´e a id´eia que est´ a por tr´ as de um programa de computador. E que permanece igual ainda que esteja em um programa Java para rodar num PC em Curitiba, ou esteja em um programa PASCAL rodando em um Cray em Valladolid na Espanha. Do ponto de vista da inform´atica, algoritmo ´e a regra de solu¸ca˜o de um problema, isto ´e, surgida uma necessidade buscar-se-´ a uma solu¸ca˜o, ou construir-se-´a um algoritmo capaz de solucionar o problema. J´a um programa de computador, (segundo Wirth) “´e uma formula¸ca˜o concreta de algoritmos abstratos, baseados em representa¸co˜es e estruturas espec´ıficas de dados”e devidamente traduzido em uma linguagem de programa¸ca˜o. Outra defini¸ca˜o de algoritmo, esta dos autores Angelo Guimar˜ aes e Newton Lages: Algoritmo ´e a descri¸ca˜o de um padr˜ao de comportamento, expressado em termos de um repert´ orio bem definido e finito de a¸co˜es ”primitivas”, das quais damos por certo que elas podem ser executadas”. Para encerrar, e tomando alguma liberdade, podemos considerar um algoritmo como sendo uma receita de bolo. O conceito de algoritmo deve ser entendido, para sua correta compreens˜ao, em seus dois aspectos, a quem chamaremos est´ atico e temporal. Na sua vis˜ ao est´ atica, um algoritmo ´e um conjunto de ordens, condi¸co˜es, testes e verifica¸co˜es. No seu aspecto temporal, o algoritmo passa a ser algo vivo, pois atua sobre um conjunto de dados de entrada, para gerar os correspondentes dados de sa´ıda. Tais caracter´ısticas n˜ao podem ser separadas, elas est˜ ao instrinsicamente ligadas. A dificuldade em fazer bons algoritmos, ´e ter em mente, enquanto se escreve o algoritmo (aspecto est´ atico) o que ele vai fazer com seus dados (aspecto temporal). Vamos exemplificar esta discuss˜ao, comentando sobre o algoritmo de solu¸ca˜o de uma equa¸ca˜o do segundo grau. Dada a equa¸ca˜o Ax2 + Bx + C = 0, para encontrar as duas raizes, segundo a inesquec´ıvel f´ ormula de Bhaskara, procedemos da seguinte forma: ˆ Calculamos DELTA, que ´e B ao quadrado, menos o produto de 4,A e C. ˆ Se DELTA < 0, as raizes n˜ ao existem no campo dos n´ umeros reais vers˜ ao de 10 de fevereiro de 2008 31 ©88-08, Pedro Kantek ˆ Se DELTA = 0, as raizes s˜ ao iguais √ ˆ A primeira raiz ´e (-B) + DELT A dividido por 2A √ ˆ A segunda raiz ´e (-B) - DELT A dividido por 2A. No seu aspecto dinˆamico, ter´ıamos que gerar uma s´erie de dados de entrada (triplas A,B,C), seguir o algoritmo, e verificar se os resultados que ele gera s˜ao aqueles esperados de antem˜ ao. Dado um problema, para o qual temos que escrever um algoritmo, usualmente n˜ao h´a solu¸ca˜o u ´ nica. Quanto mais complexo o problema a resolver, maior a quantidade de poss´ıveis algoritmos corretos. Cada um certamente ter´a as suas qualidades e os seus defeitos. Alguns s˜ao muito bons, e outros muito ruins, mas entre um e outro existem in´ umeras varia¸co˜es, que nem sempre s˜ao facilmente reconhecidas. Pode-se dizer que um algoritmo ´e um programa de computador do qual se faz a abstra¸ca˜o da linguagem de programa¸ca˜o. Neste sentido o algoritmo independe de qual ser´a sua implementa¸ca˜o posterior. Quando pensamos em algoritmos, n˜ao nos preocupamos com a linguagem. Estamos querendo resolver o aspecto “conte´ udo”. Mais tarde, quando programarmos, a linguagem passa a ser importante, e agora a preocupa¸ca˜o ´e com a “forma”. 2.2.1 Qualidades de um bom algoritmo “Se um programa ´e f´ acil de ler, ele ´e provavelmente um bom programa; se ele ´e dif´ıcil de ler, provavelmente ele n˜ao ´e bom.”(Kernighan e Plauger) Clareza O algoritmo ´e uma ferramenta de entendimento e solu¸ca˜o de um problema. Deve portanto, ser o mais claro poss´ıvel. Ao fazer o algoritmo seu autor deve se preocupar constantemente em se o que est´ a pensando est´ a vis´ıvel no que est´ a escrevendo. “Nunca sacrificar clareza por eficiˆencia; nunca sacrificar clareza pela oportunidade de revelar sua inteligˆencia.”Jean Paul Tremblay. Impessoalidade Nem sempre quem vai examinar, depurar, corrigir, alterar etc , um algoritmo ´e seu autor. Portanto, nada de usar macetes, regras pessoais, nomes que s´o tem sentido para o autor etc. Neste ponto ´e de muita ajuda a existˆencia de um bem organizado conjunto de normas de codifica¸ca˜o e de elabora¸ca˜o de algoritmos para a organiza¸ca˜o. As melhores e mais bem organizadas empresas de inform´atica dedicam parcela significativa de seus esfor¸cos a esta atividade. Simplicidade Poucos programadores resistem a` tenta¸ca˜o de elaborar uma genial sa´ıda para um problema. Nada contra isso, desde que essa sa´ıda n˜ao fira os princ´ıpios de simplicidade que todo algoritmo deve procurar satisfazer. Nem sempre ´e f´ acil fazer algoritmos descomplicados, principalmente porque em geral os problemas que enfrentamos n˜ao s˜ao simples. Transformar algo complicado em solu¸co˜es singelas, parece ser a diferen¸ca entre programadores comuns e grandes programadores. Reaproveitamento Existe in´ umera bibliografia sobre algoritmos. Grandes instala¸co˜es de inform´atica costumam criar o conceito de “biblioteca de algoritmos”. Muitos softwares tamb´em est˜ ao partindo para esta sa´ıda. O programador n˜ao deve se esquecer nunca de que um algoritmo novo, custa muito caro para ser feito, e custa muito mais caro ainda para ser depurado. Se j´ a existir um pronto e testado, tanto melhor. ©88-08, Pedro Kantek 32 vers˜ ao de 10 de fevereiro de 2008 ˆ ˜ CAP´ITULO 2. CIENCIA DA COMPUTAC ¸ AO ˆ ˜ CAP´ITULO 2. CIENCIA DA COMPUTAC ¸ AO Capricho Tenha sempre em mente que a principal fun¸ca˜o de um algoritmo ´e transmitir a solu¸ca˜o de um problema a outrem. Desta maneira, um m´ınimo de capricho ´e indispens´avel a fim de n˜ao assustar o leitor. Letra clara, identa¸ca˜o correta, nomes bem atribu´ıdos, tudo isto em papel limpo e sem borr˜oes. Como o leitor j´ a pode estar imaginando, esta caracter´ıstica ´e fundamental em provas, avalia¸co˜es e trabalhos. A primeira conseq¨ uˆencia pr´atica desta regra ´e: fa¸ca seus algoritmos a l´apis. Documenta¸ c˜ ao Nem sempre o texto que descreve o algoritmo ´e muito claro. Al´em do que, ele informa o que ´e feito, mas n˜ao porque ´e feito, ou quando ´e feito. Assim, o programador pode e deve lan¸car m˜ao de coment´arios sempre que sentir necessidade de clarificar um ponto. “Bons coment´arios n˜ao podem melhorar uma m´a codifica¸ca˜o, mas maus coment´arios podem comprometer seriamente uma boa codifica¸ca˜o”. Jean Paul Tremblay. Corre¸ c˜ ao (ou integridade ou ainda robustez) Um algor´ıtmo ´ıntegro ´e aquele onde os c´ alculos est˜ ao satisfatoriamente colocados, e atuam corretamente para todos os dados poss´ıveis de entrada. N˜ ao adianta um algoritmo sofisticado e cheio de estruturas de controle, se suas opera¸co˜es aritm´eticas elementares n˜ao estiverem ´ mais comum (e perigoso) o algoritmo que funciona em 95% dos casos, corretas. E mas falha em 5% deles. H´ a dois tipos de coment´arios aqui: aqueles encerrados entre chaves e aqueles colocados depois de uma dupla barra. {Isto ´ e um coment´ ario, que s´ o ser´ a encerrado quando se encontrar o fecha chave, ainda que ele ocupe mais de uma linha } // isto tamb´ em ´ e um coment´ ario, desde a dupla barra at´ e o fim da linha 2.2.2 Como se escreve um algoritmo A quest˜ ao agora ´e: “como se escreve um algoritmo?” Usando uma ferramenta adequada para comunicar algum tipo de computa¸ca˜o que o algoritmo execute. Qualquer linguagem poderia ser adequada, mas ´e melhor inventar uma sublinguagem derivada do portuguˆes (ou do inglˆes em livros nesse idioma) que ajude a treinar o pensamento criativo em algoritmos. A id´eia ´e que a ferramenta ajude a fazer a tarefa. Por analogia, experimente aparafusar algo pequeno usando um p´e de cabra. O nome da sublinguagem que usaremos ´e “portuguˆes estruturado”, tamb´em conhecida como “portugol”. 2.3 Portugol Eficiˆ encia Esta caracter´ıstica tem a ver com economia de processamento, de mem´oria, de comandos, de vari´ aveis etc. Infelizmente, quase sempre ´e uma caracter´ıstica oposta `a da clareza e da simplicidade, sendo estas mais importantes do que a eficiˆencia. Entretanto, em alguns casos, (principalmente na programa¸ca˜o real - dentro das empresas), a eficiˆencia pode ser fundamental. Neste caso, perde-se facilidade, para se ter economia. O bom programador ´e aquele que alia a simplicidade ao m´aximo de eficiˆencia poss´ıvel. Generalidade Dentro do poss´ıvel, um algoritmo deve ser o mais gen´erico que puder. Isto significa que vale a pena um esfor¸co no sentido de deixar nossos algoritmos capazes de resolver n˜ao apenas o problema proposto, mas toda a classe de problemas semelhantes que aparecerem. Usualmente o esfor¸co gasto para deixar um algoritmo gen´erico ´e pequeno em rela¸ca˜o aos benef´ıcios que se obt´em desta preocupa¸ca˜o. Figura 2.1: Qual a melhor linguagem ? Modularidade Algoritmos grandes dificilmente ficam bons se usarmos uma abordagem ´ praticamente imposs´ıvel garantir clareza, impessoalidade, documenta¸ca˜o linear. E etc, quando se resolve um algoritmo de cima a baixo. Uma conveniente divis˜ ao em m´odulos (isto ´e, em sub-algoritmos), para que cada um possa ser resolvido a seu tempo. N˜ ao podemos esquecer que a regra ´aurea da programa¸ca˜o estruturada ´e “dividir para conquistar”. Coment´ arios Permitem a agrega¸ca˜o de informa¸co˜es destinadas ao leitor humano do algoritmo. Seu conte´ udo n˜ao ´e levado em considera¸ca˜o na an´ alise da integridade e corre¸ca˜o do algoritmo. Tem finalidade apenas explicativa e informativa. Mas isso n˜ao significa que eles sejam desprez´ıveis. Pelo contr´ ario, coment´arios s˜ao importantes em algoritmos de um modo geral. Os coment´arios s˜ao delimitados por um ”abre-chave”({) e um ”fecha-chave”(}). Eles podem ser colocados em qualquer ponto do algoritmo e tudo o que estiver entre chaves ´e desconsiderado no momento de seguir o algoritmo. Exemplo {Isto ´e um coment´ario} vers˜ ao de 10 de fevereiro de 2008 33 ©88-08, Pedro Kantek Figura 2.2: Como se entender com ele ? Como vimos, portuguˆes estruturado ´e uma linguagem inventada aqui para simplificar a tarefa de aprender a construir, depurar e documentar algoritmos estruturados. Existem ´ importante salientar que a in´ umeras vers˜oes, cada professor de l´ogica tem a sua. E ©88-08, Pedro Kantek 34 vers˜ ao de 10 de fevereiro de 2008 ˆ ˜ CAP´ITULO 2. CIENCIA DA COMPUTAC ¸ AO ˆ ˜ CAP´ITULO 2. CIENCIA DA COMPUTAC ¸ AO s´ıntaxe e a constru¸ca˜o de portuguˆes estruturado s˜ao arbitrados por algu´em, segundo seus crit´erios, mas uma vez estabelecido um padr˜ao, pele precisa ser seguido. Esta restri¸ca˜o tem duas vertentes. A primeira, ´e que h´a que haver um m´ınimo de concordˆancia para que outras pessoas possam ler e entender o que escrevemos. A segunda, ´e que uma das principais caracter´ısticas do bom programador ´e a disciplina intelectual. Nada mais apropriado que come¸carmos a exercitar esta dif´ıcil qualidade desde j´ a. ˆ ? Portuguˆes (como qualquer idioma Por que PORTUGOL e n˜ ao PORTUGUES natural) tem in´ umeras desvantagens: ˆ N˜ ao ´e entendido pela m´aquina (exige tradu¸ca˜o complex´ıssima) Os programas em PORTUGOL v˜ao deixar de lado in´ umeras chatea¸co˜es, (que s˜ao imprescind´ıveis para o programa rodar em um computador real) tais como: instru¸co˜es de ambienta¸ca˜o na compila¸ca˜o de programas, descri¸co˜es de opera¸co˜es de entrada/sa´ıda complexas, pouca ou nenhuma prepara¸ca˜o de controles etc. ´ claro, que anexo a esta disciplina, existe outra de laborat´ E orio de programa¸ca˜o, onde vai se aprender o Java. Nessa hora, os algoritmos j´ a devem estar consolidados, e a preocupa¸ca˜o passa a ser a m´aquina e seu ambiente. Na nossa cadeira de algoritmos, devemos esquecer a m´aquina e nos concentramos no problema e na sua solu¸ca˜o. Portuguˆ es estruturado Cada autor tem a sua vis˜ ao do que seja o ideal em termos de linguagem de especifica¸ca˜o de algoritmos. Veja, por exemplo, o quadro ´ amb´ıguo ˆ E ´ muito extenso ˆ E Vejamos por exemplo, uma orienta¸ca˜o extra´ıda do manual de organiza¸ca˜o de uma Empresa. ˆ ”O funcion´ ario far´ a jus ao PREMIO PRODUTIVIDADE se estiver trabalhando h´a mais de 6 meses da ´epoca de distribui¸ca˜o (fevereiro de cada ano), e trabalhar na ´ area de vendas, ou ent˜ao se tiver sido especialmente citado como tendo tido alta produtividade. Perdem o direito, funcion´ arios que tiverem mais de 2 faltas e mais de 5 atrasos, ou que tiverem fruido licen¸ca sa´ ude do INSS no per´ıodo aquisitivo”. Parece claro, n˜ao ´e ? Agora tentemos responder: ˆ Jo˜ ao tem 3 meses de casa e foi citado como de ”alta produtividade”. Ganha ou n˜ao? ˆ Maria teve 3 faltas. Perde ou n˜ ao ? Outro exemplo, “minha tia tem uma gatinha e ela ´e muito bonita”. Quem ´e bonita, a tia ou a gatinha ? O linguajar acima, n˜ao ´e adequado para expressarmos algoritmos pois ´e inexato, d´ ubio, e deixa muita margem de interpreta¸ca˜o, usa verbos e comandos proibidos, isto ´e, que o computador n˜ao saber´a executar. Devemos lembrar sempre que a margem de interpreta¸ca˜o do computador, qualquer computador, ´e sempre ZERO, e os computadores tem a p´essima mania de fazer o que mandamos eles fazerem, e n˜ao o que queremos que eles fa¸cam. Por que PORTUGOL e n˜ ao uma linguagem qualquer como Java? ou qualquer outra linguagem de programa¸ca˜o? Uma linguagem de programa¸ca˜o, ainda que de alto n´ıvel, caso do Java, exige um conhecimento da m´aquina que ainda n˜ao temos. Tamb´em ´e importante salientar que idealmente falando, n˜ao ´e boa pol´ıtica enfrentar dois problemas interligados ao mesmo tempo. Isto ´e, n˜ao conv´em misturar dificuldades de l´ogica, (advindas do problema que se quer resolver) com dificuldades da linguagem (advindas do ambiente tecnol´ ogico onde o programa vai rodar), pois ambas somadas podem ser demais para a cabe¸ca do autor. J´a dizia Dijkstra “deve-se reconhecer que tem-se uma cabe¸ca pequena, e que ´e melhor tratar de conviver com ela e respeitar suas limita¸co˜es”. Aproveitando a cita¸ca˜o, mais de uma do mesmo autor: ”A regra ´ aurea da programa¸ca˜o estruturada ´e dividir para reinar”. vers˜ ao de 10 de fevereiro de 2008 35 ©88-08, Pedro Kantek O que um computador entende Baseado na arquitetura de Von Neumann, (um processador, uma unidade de controle, uma ULA, mem´oria e registradores), todo computador constru´ıdo neste paradigma ´e capaz de obedecer, l´a no n´ıvel mais baixo, a um pequeno conjunto de ordens. Note-se como ele ´e restrito. Entrada/Sa´ıda Este tipo de ordem, ´e para orientar o computador no sentido de adquirir um dado externo (entrada), ou para divulgar alguma coisa que ele calculou (sa´ıda). Aritm´ etica Estas ordens s˜ao similares aquelas que aprendemos no primeiro grau, e destinam-se a informar ao computador como ele deve efetuar algum c´ alculo. Estas ordens s˜ao: adi¸ca˜o, subtra¸ca˜o, multiplica¸ca˜o, divis˜ ao, potencia¸ca˜o, fun¸co˜es trigonom´etricas etc. N˜ ao se esque¸ca que a linguagem universal dos computadores ©88-08, Pedro Kantek 36 vers˜ ao de 10 de fevereiro de 2008 ˆ ˜ CAP´ITULO 2. CIENCIA DA COMPUTAC ¸ AO ˆ ˜ CAP´ITULO 2. CIENCIA DA COMPUTAC ¸ AO ´e a matem´atica. Escrever um programa de computador correto ´e como demonstrar um teorema. ´ talvez a ordem mais importante no universo da computa¸ca˜o. E ´ ela que Alternativa E d´a ao computador condi¸co˜es de “ser inteligente” e decidir qual de dois caminhos deve se seguido. Sempre tem a forma de uma pergunta, seguida por duas ordens distintas. Se a pergunta for respondida afirmativamente, a primeira ordem ser´a executada, e se a pergunta for negada, a segunda ordem ser´a executada. Desvio Esta ordem ´e para dar ao computador habilidade de saltar algumas ordens e executar outras. Um programa de computador nem sempre ´e obrigado a seguir as instru¸co˜es seq¨ uencialmente come¸cando no come¸co e terminando no fim. O desvio ´e potencialmente perigoso quando usado sem crit´erio, e por isso veremos em seguida que uma das regras da programa¸ca˜o estruturada ´e o estabelecimento de r´ıgidos controles sobre os desvios. Movimenta¸ c˜ ao na mem´ oria Embora pare¸ca estranho, esta ´e ordem mais comum em um programa. Considerando o tamanho das mem´orias de computador e a quantidade de coisas que s˜ao l´a colocadas, ´e imprescind´ıvel que os programas tenham a habilidade de manusear todas estas coisas. Fazendo uma figura de linguagem, suponha que a mem´oria do computador ´e um grande supermercado. Se os artigos n˜ao puderem se mexer de lugar, bem poucas coisas acontecer˜ao. Outra observa¸ca˜o, ´e que o verbo “mover”, quando usado em manipula¸co˜es dentro da mem´oria ´e usado por raz˜ oes hist´ oricas, e certamente cont´em um equ´ıvoco. O correto seria usar o verbo “copiar”, j´ a que quando um conte´ udo ´e levado de um lado a outro, sua instˆ ancia anterior n˜ao desaparece. Usa-se aqui uma regra jocosa, mas que sempre ´e verdadeira. computador n˜ ao usa apagador. ciclo de vida Qual a hist´ oria de vida de um programa de computador ? Isto ´e como nasce, cresce e morre um programa ? Grosso modo, pode se dizer que as principais etapas s˜ao: ˆ estudo do problema: Espera-se que haja algum problema ou dificuldade esperando ´ pr´e-requisito antes de tentar a ser resolvido pelo programa de computador. E solu¸ca˜o de qualquer quest˜ao, estud´ a-la, compreender o entorno, as limita¸co˜es, os balizadores, os recursos dispon´ıveis. Uma boa maneira de estudar e compreender um problema ´e fazer hip´oteses, estudar comportamentos, projetar simula¸co˜es. S´o se pode passar adiante se boa parte do entorno do problema for entendida. Note-se que nem sempre ´e poss´ıvel aguardar at´e ter 100% do conhecimento antes de seguir ` vezes n˜ao d´a tempo, mas o percal¸co principal nem ´e esse: ´e que muitas adiante. As vezes o conhecimento n˜ao existe e s´o vai aparecer quando se cutucar o problema. Como se diz em espanhol los caminos se hacen al caminar. Quando isto ocorrer, e ocorre muitas vezes, n˜ao tem jeito: anda-se para frente e para tr´ as, e a cada passada o conhecimento ´e maior. ˆ bolar ou procurar o algoritmo. Agora ´e hora de converter a solu¸ca ˜o encontrada em algo pr´oximo a um algoritmo. Isto ´e, algo formal, com condi¸co˜es iniciais, resultado final, e manipula¸co˜es entre o que entra e o que sai. Usam-se os comandos permitidos em algoritmos e s´o estes. Usualmente, h´a aqui o que se chama de aprofundamento interativo. Come¸ca-se com uma declara¸ca˜o gen´erica que vai sendo detalhada e especificada at´e chegar ao n´ıvel b´asico, no qual os comandos algor´ıtmicos (entrada/sa´ıda, aritm´eticos, alternativos, movimenta¸ca˜o e de repeti¸ca˜o) vers˜ ao de 10 de fevereiro de 2008 37 ©88-08, Pedro Kantek podem ser usados. Note que pode-se copiar ou aproveitar um algoritmo j´ a existente. Entretanto este re-uso dificilmente ´e imediato. Sempre h´a que estudar e eventualmente modificar um algoritmo j´ a existente, a menos que quando este foi feito seu autor j´ a tinha a preocupa¸ca˜o com o reuso. ´ hora de escolher um computador, um ambiente operacional e ˆ transcrever em LP. E sobretudo uma linguagem de programa¸ca˜o que esteja dispon´ıvel e seja conhecida. Dessas 3 op¸co˜es (computador, ambiente e linguagem) surge a plataforma definitiva: agora ´e poss´ıvel escrever, testar, depurar e implementar o programa de computador. ˆ depurar. Usualmente h´ a uma seq¨ uˆencia de testes: – compila¸ca˜o correta: nenhum erro apresentado pelo compilador – testes imediatos sem erro: testes ad hoc para este programa (e s´o para ele) d˜ao os resultados esperados. – teste alfa: um esfor¸co completo de testes, inclusive integrando este programa aos seus antecessores e sucessores. Usualmente o teste ´e feito pelo(s) autor(es) do programa. – teste beta: um teste completo feito por terceiros. H´ a uma regra aqui de que quem faz (programador) n˜ao deve ser quem testa (testador). ˆ implementar e rodar. Com o programa testado e liberado ´e hora de rod´ a-lo em produ¸ca˜o. Nesta hora ocorre o que tem sido chamado de deploy (dizem as m´as l´ınguas que sempre associado a seu irm˜ ao gˆemeo, o delay). Dependendo do porte da instala¸ca˜o e do sistema, a`s vezes esta passagem ´e complexa e trabalhosa. ˆ manuten¸ca ˜o. Seria muito bom se a hist´ oria acabasse na etapa anterior. N˜ ao ´e o que ocorre, j´ a que o mundo muda e os programas precisam mudar com ele. Se a manuten¸ca˜o ´e pequena, usualmente pode-se fazˆe-la sem muito transtorno, mas caso n˜ao seja, este ciclo recome¸ca. Note-se que ap´ os algumas manuten¸co˜es grandes o programa come¸ca a dar mostrar de instabilidade –a popular colcha de retalhos – e ´e hora de come¸car tudo de novo, na nova vers˜ao do programa. Como se aprende algoritmos? N˜ ao ´e f´ acil aprender algoritmos. No que tˆem de engenharia, ´e mais f´ acil. H´ a f´ ormulas, procedimentos, pr´aticas consagradas prontas a serem usadas. Mas, no que s˜ao arte, tais ´ mais ou menos como tentar ensinar algu´em a desenhar (outra receitas desaparecem. E arte) ou a compor m´ usica (outra ainda). Olhando como se aprende a desenhar, ´e poss´ıvel ter alguns insights. Aprendizes de desenho copiam desenhos e partes de desenho extensivamente. Pode-se tentar algo parecido aqui. Em resumo, estas seriam as indica¸co˜es ˆ Estudando algoritmos prontos. Pegue bons livros de algoritmos, e estude as implementa¸co˜es que l´a aparecem. Transcreva tais algoritmos em um simulador (tipo visualg) ou mesmo em uma linguagem de programa¸ca˜o. Execute os algoritmos. Busque entender o que cada parte do mesmo faz. Sugira hip´oteses sobre o funcionamento e provoque pequenas mudan¸cas no c´ odigo para confirmar (ou rejeitar) suas hip´oteses. ˆ Tenha intimidade com algum ambiente de compila¸ca ˜o e testes. Esta proposta ´e importante para poder testar algoritmos. Se ficar embatucado diante de uma simples implementa¸ca˜o, vocˆe ter´ a grandes dificuldades de escrever algoritmos. ©88-08, Pedro Kantek 38 vers˜ ao de 10 de fevereiro de 2008 ˆ ˜ CAP´ITULO 2. CIENCIA DA COMPUTAC ¸ AO ˆ ˜ CAP´ITULO 2. CIENCIA DA COMPUTAC ¸ AO ˆ Escreva pequenos algoritmos. Tente fazer os exerc´ıcios (come¸cando sempre pelos mais simples) de qualquer bom livro de algoritmos. ˆ Treine a interpreta¸ca ˜o dos enunciados. Enquanto n˜ao entender o que deve ser feito, n˜ao adianta olhar para o algoritmo, pois o motivador das a¸co˜es que ele toma estar´a ausente. Nunca se deve come¸car a estudar ou a construir um algoritmo se n˜ao houver um claro entendimento do que o algoritmo deve fazer. 2.4 Programa¸ c˜ ao Estruturada O termo programa¸ca˜o estruturada veio `a luz pela primeira vez, nos fins da d´ecada de 60, quando Edsger Dijkstra (Lˆe-se como Dikster ) escreveu um artigo, publicado em Communications of the ACM, cujo t´ıtulo ´e “O comando GO TO ´e prejudicial”. Viv´ıamos a ´epoca de ouro do COBOL, e o comando GO TO ´e a instru¸ca˜o de desvio desta linguagem. Dijkstra observou que a qualidade dos programadores decai em fun¸ca˜o do n´ umero de GO TOs usados em seus programas. Segundo ele, “Comandos GO TO tendem a criar caminhos de l´ogica confusos e programas pouco claros”. A sua recomenda¸ca˜o foi de que o comando em quest˜ao fosse banido das linguagens de alto n´ıvel. Nessa ´epoca tamb´em (1966) dois professores italianos, Giuseppi Jacopini e Corrado Bohm, provaram matematicamente que qualquer l´ogica de programa¸ca˜o poderia ser derivada de trˆes tipos b´asicos de procedimentos, a saber: seq¨ uˆencia, alternativa e repeti¸ca˜o. Chegou-se ent˜ao ao ˆ amago da programa¸ca˜o estruturada, que ´e trocar a instru¸ca˜o de desvio pelas instru¸co˜es de repeti¸ca˜o. Ao fazer isto, todos os componentes de um programa passam a ter uma entrada e sa´ıda u ´ nicas. Atente-se que ao usar uma instru¸ca˜o de desvio, essa regra de uma entrada e uma sa´ıda ´e violada: o conjunto passa a ter no m´ınimo duas sa´ıdas. Seq¨ uˆ encia simples Trata-se de um conjunto de comandos simples, que seguem um ao outro e que s˜ao executados na ordem em que aparecem. Exemplo A ← 10 B←A + 5 X←1 + 2 Dentro de uma seq¨ uˆencia simples de comandos a entrada sempre ´e pelo primeiro comando e a sa´ıda sempre ´e pelo u ´ ltimo. Gra¸cas ao princ´ıpio da programa¸ca˜o estruturada (uma entrada e uma sa´ıda), uma seq¨ uˆencia simples pode ser substitu´ıda por um bloco com entrada e sa´ıda u ´ nicas. ´ um comando que permite dois caminhos alternativos, da´ı o nome, a Alternativa E depender de alguma condi¸ca˜o. Na matem´atica convencional isto j´ a existe, por exemplo na f´ ormula de Bhaskhara. No momento de calcular a raiz quadrada de ∇, h´a que se tomar uma decis˜ao. Se ∇ < 0 os c´ alculos cessam e a resposta de ra´ızes imagin´ arias deve ser dada. Se ∇ ≥ 0, a raiz pode ser extra´ıda e um ou dois valores de ra´ızes emergem. O ponto importante aqui ´e que em algum lugar os dois ramos se juntam novamente, e a regra de ouro da programa¸ca˜o estruturada (entrada u ´ nica e sa´ıda u ´ nica tamb´em) continua verdadeira. Tal como na seq¨ uˆencia, um comando alternativo, por mais complexo que seja, pode ser substitu´ıdo por u ´ nica caixa. vers˜ ao de 10 de fevereiro de 2008 39 ©88-08, Pedro Kantek Repeti¸ c˜ ao O terceiro bloco da programa¸ca˜o estruturada ´e a resposta a` necessidade de usar o comando de desvio. Perceba-se que aqui existe um desvio impl´ıcito, j´ a que ao se terminar o bloco, h´a que se desviar para o in´ıcio do mesmo, que ´e o que caracteriza uma repeti¸ca˜o. A restri¸ca˜o a obedecer n˜ao ´e a ausˆencia de desvio – de resto, imposs´ıvel de obedecer – mas sim a regra da entrada e sa´ıda u ´ nicas. Em outras palavras n˜ao ´e proibido usar o desvio, desde que ele esteja contido em limites bem determinados. Tal como na seq¨ uˆencia e na alternativa, um comando de repeti¸ca˜o, por maior ou mais complexo que seja, pode ser substitu´ıdo por u ´ nica caixa. A importˆancia desta descoberta para o software teve tanto impacto quanto a de que qualquer forma l´ogica de hardware pode ser construida pelas combina¸co˜es de portas AND, OR e NOT. A grande vantagem dos trˆes elementos da programa¸ca˜o estruturada ´e que possuem a caracter´ıstica de pacote ou caixa preta, uma vez que todos tem uma u ´ nica entrada e uma u ´ nica sa´ıda. Isto significa que partes de programas construidos com estas estruturas podem ser tamb´em considerados pacotes, sempre com entradas e saidas u ´ nicas. Esta ´e a melhor qualidade da programa¸ca˜o estruturada, e ´e por esta caracter´ıstica que o GOTO deve ser desprezado na constru¸ca˜o de bons algoritmos. Tanto isto ´e verdadeiro, que as linguagens mais modernas, n˜ao tem mais a instru¸ca˜o de desvio, banida por perniciosa e desnecess´ aria. 2.5 A m´ aquina de Turing Embora a humanidade use o conceito de algoritmo h´a milˆenios (O de MDC ´e devido a Euclides), e o pr´oprio nome algoritmo derive do autor a´rabe de um tratado de a´lgebra escrito por volta de 800 dC, a defini¸ca˜o precisa do que seja um algoritmo geral ´e apenas de 1930. Ela ´e devida a Turing, atrav´es do seu conceito de M´ aquina de Turing. Esta n˜ao ´e uma m´aquina real, sendo apenas uma abstra¸ca˜o matem´atica, da´ı o seu poder de encanto. Em 1900, o matem´atico alem˜ ao Hilbert apresentou em um congresso uma lista de problemas que segundo ele estariam ocupando as mentes matem´ aticas no s´eculo que ora se iniciava. O d´ecimo problema de Hilbert, dizia: ...haver´ a algum procedimento mecˆ anico geral que possa em princ´ıpio resolver todos os problemas 1 da matem´ atica ? Em 1937, Turing respondeu a esta pergunta atrav´es do conceito de M´ aquina de Turing. Ela ´e composta por um n´ umero finito de estados, ainda que possa ser muito grande. Deve tratar um input infinito. Tem um espa¸co exterior de armazenagem tamb´em infinito. Turing imaginou o espa¸co exterior para dados e armazenamento como sendo uma fita, que pode mover-se para frente e para tr´ as. Al´em disso a m´aquina pode ler e escrever nesta fita. A fita est´ a composta por quadrados (ou seja, o nosso ambiente ´e discreto). Apenas 2 s´ımbolos podem ser escritos nos quadrados da fita, digamos 0 significando quadrado em branco e 1 (quadrado preenchido), ou vice-versa. Isto posto, lembremos que: 1. os estados internos do aparelho s˜ao finitos em n´ umero 2. o comportamento da m´aquina ´e totalmente determinado pelo seu estado interior e pelo input. 1 Eis o problema original, como proposto por Hilbert: Determination of the solvability of a diophantine equation: Given a diophantine equation with any number of unkown quantities and with rational numerical coefficients: to devise a process according to which it can be determined by a finite number of operations whether the equation is solvable in rational integers ©88-08, Pedro Kantek 40 vers˜ ao de 10 de fevereiro de 2008 ˆ ˜ CAP´ITULO 2. CIENCIA DA COMPUTAC ¸ AO ˆ ˜ CAP´ITULO 2. CIENCIA DA COMPUTAC ¸ AO Ou seja, dado o estado inicial e um s´ımbolo de input, o aparelho deve ser determin´ıstico 2 . Logo ele, ˆ muda seu estado interno para outro, e/ou ˆ Muda o simbolo que foi lido pelo mesmo ou por outro, e/ou ˆ movimenta-se para a direita ou para a esquerda, 1 quadrado, e/ou ˆ Decide se continua ou interrompe e para. Defini¸ c˜ ao de uma m´ aquina de Turing Para especificarmos nossa m´aquina de Turing, ter´ıamos que escrever algo do tipo Estado Sinal faz Vai para Escreve Anda atual lido o que estado para onde 0 0 → 0 0 D 0 1 → 13 1 E 1 0 → 65 1 D 1 1 → 1 0 D 2 0 → 0 1 D.PARE 2 1 → 66 1 E Esta defini¸ca˜o acima, ´e adequada para a tarefa de numera¸ca˜o das M´ aquinas de Turing, fenˆomeno esse que ´e central na teoria. Entretanto, para operar com esta m´aquina, talvez seja mais adequado escrever uma tabela como estado chega escreve? anda vai para 0 0 D 0 0 1 E 13 1 0 1 D 65 1 1 0 D 1 2 0 1 PARE 2 1 E 66 As diversas m´ aquinas de Turing Para ver isso funcionando, precisa-se numerar as m´aquinas de Turing. Necessita-se um pouco de esperteza aqui. Primeiro, converte-se D, E, PARE, → e v´ırgula como os n´ umeros 2, 3, 4, 5 e 6. Ou usando um sistema un´ario, 110, 1110, 11110, 111110 e 1111110. Zero ser´a 0, e 1 ser´a 10, como j´ a se viu. As colunas 4 e 5 nas tabelas n˜ao precisam separa¸ca˜o, j´ a que o conte´ udo da coluna 5 ´e apenas 1 ou zero e sempre ocupa 1 caracter. Pode-se dar ao luxo de n˜ao codificar nenhuma seta, nem nada do que as antecede (colunas 1, 2 e 3) desde que se organize os comandos em rigorosa ordem crescente (e tomando cuidado para preencher comandos que no modo tradicional n˜ao seriam escritas por nunca ocorrerem na m´aquina). Fazendo tudo isso, e escrevendo toda a programa¸ca˜o da m´aquina que soma 1 a um n´ umero un´ario, ela fica: 101011011010010110101001110100101101011110100001110100101011 10100010111010100011010010110110101010101101010101101010100. Convertendo este n´ umero bin´ario para decimal chegamos a 450813704461563958982113775643437908 O que significa que a m´aquina que soma 1 em un´ario ´e a 450.813.704.461.563.958.982.113.775.643.437.908a 2 um fenˆ omeno ´ e deterministico quando gera sempre o mesmo resultado a partir das mesmas condi¸co ˜es iniciais. Por exemplo, soltar um corpo em queda livre. Ao contr´ ario um fenˆ omeno probabil´ıstico (ou randˆ omico ou estoc´ astico) ´ e o fenˆ omeno no qual dadas as mesmas condi¸co ˜es iniciais o resultado ´ e imprevis´ıvel. Por exemplo, lan¸car um dado vers˜ ao de 10 de fevereiro de 2008 41 ©88-08, Pedro Kantek m´aquina de Turing. Naturalmente, mudando-se (otimizando-se) alguma coisa na programa¸ca˜o, esta m´aquina muda de n´ umero. A m´aquina que soma 1 em un´ario ´e a 177.642a m´aquina. A que multiplica 2 em bin´ario expandido ´e 10.389.728.107a m´aquina e a que multiplica por 2 um n´ umero un´ario ´e a 1.492.923.420.919.872.026.917.547.669 a m´aquina. E assim vai. A T7 , ´e n˜ao corretamente especificada, j´ a que existem uma seq¨ uˆencia de 5 uns, e ela emperra ao processar tal seq¨ uˆencia. M´ aquina Universal de Turing Teremos uma m´aquina U, que antes de mais nada ler´a as informa¸co˜es na fita de entrada para que ela passe a se comportar como a m´aquina T. Depois disso vem os dados de input que seriam processados pela m´aquina T, mas que ser˜ao pela U, operando como se fosse a T. Dizendo que quando a n-´esima m´aquina de Turing atua sobre o n´ umero m produz o n´ umero p, podemos escrever Tn (m) = p. Podemos pensar nesta rela¸ca˜o como sendo uma fun¸ca˜o de 2 parˆ ametros (n e m) que leva a p. Esta fun¸ca˜o, pelo que vimos ´e totalmente algoritmica. Logo, ela pode ser realizada por uma m´aquina de Turing, a quem chamaremos de U . Ent˜ao, fornecendo o par (n, m) a U , obtemos como resposta p. Podemos escrever U (n, m) = Tn (m) A m´aquina U quando alimentada primeiro com o n´ umero n, passa a se comportar como a Tn Como U ´e uma m´aquina de Turing, ela ´e uma Talguma−coisa . Quanto ´e essa alguma coisa ? ´ mais ou menos 7.24 × 101688 , ou seja o n´ E umero 724 seguido de 1686 zeros. Todos os computadores modernos, desde um humilde Z80 at´e um Cray multi-vetorial s˜ao m´aquinas de Turing. Acabamos de ser apresentados a um moderno computador: em U (n, m) = p, U ´e o hardware, n ´e o software (ou programa), m s˜ao os dados de entrada e finalmente p ´e o resultado esperado. Para efeito de entender a MT, pode-se desenhar algo como segue: Usar como modelo a MT que multiplica por 2 em un´ario Construir o modelo acima no quadro e depois testar as sequencias 000010000, 00001100000 e 00001110000. Todas v˜ao funcionar. 2.6 2.6.1 Linguagens de programa¸c˜ ao Assembler ´ apenas um tradutor de c´ O assembler n˜ao ´e uma linguagem de alto nivel. E odigos e portanto est´ a muito pr´oximo da linguagem de m´aquina. Utiliz´a-lo ´e um autˆentico calv´ ario, j´ a que todas as opera¸co˜es que o computador precisa realizar ficam por conta do programador. A produtividade ´e muito baixa, e a u ´ nica vantagem que se consegue ´e a eficiˆencia: os programas voam. Por outro lado, tamanha aderˆencia a`s entranhas da m´aquina cobra seu pre¸co: na mudan¸ca de plataforma tecnol´ ogica um monte de coisas precisa ser reestudado e reciclado. N˜ ao ´e uma boa id´eia programar profissionalmente em assembler. Mas, quem domina esta t´ecnica, ´e bastante valorizado no mercado. Mesmo que trabalhando em outras linguagens, quem conhece o assembler, conhece o interior da m´aquina. Sem d´ uvida alguma, isto tem o seu valor. A seguir um trecho pequeno de um programa em assembler para plataforma Intel. L100: MOV AH,2AH ;pega a data ©88-08, Pedro Kantek 42 vers˜ ao de 10 de fevereiro de 2008 ˆ ˜ CAP´ITULO 2. CIENCIA DA COMPUTAC ¸ AO ˆ ˜ CAP´ITULO 2. CIENCIA DA COMPUTAC ¸ AO ´ ou pelo menos era, uma linguagem franciscana de t˜ao pobre FORmula TRANslation. E, em recursos. Foi a u ´ nica linguagem ensinada em escolas de engenharia at´e a d´ecada de 80. O primeiro compilador de FORTRAN foi desenvolvido para o IBM 704 em 1954-57 por uma equipe da IBM chefiada por John W. Backus. A inclus˜ ao de um tipo de dados de n´ umero complexo na linguagem tornou a linguagem Fortran particularmente apta para a computa¸ca˜o cient´ıfica. As principais revis˜ ao s˜ao a Fortran 66, 77, 90 e 95. A mais famosa e usada ´e a Fortran 90. Sua principal vantagem ´e a eficiˆencia em calculo num´erico pesado. A seguir, um exemplo de FORTRAN C 1 2 3 4 5 6 C2345678901234567890123456789012345678901234567890123456789012345 PROGRAM BASKHARA C REAL A,B,C, DELTA, X1,X2, RE, IM C PRINT *, "Este programa resolve uma equa¸ c~ ao de 2o.grau" PRINT *, "do tipo: a*x**2 + b*x + c = 0" C PRINT 10, "Digite a,b,c: " 10 FORMAT(A,1X,$) 20 READ(*,*,ERR=20) A,B,C C DELTA=B*B-4.*A*C C IF (DELTA.GT.0) THEN ! (DUAS RAIZES REAIS) X1=(-B-SQRT(DELTA))/(2.*A) X2=(-B+SQRT(DELTA))/(2.*A) PRINT *, "RAIZES: X1=",X1 PRINT *, " X2=",X2 ELSE IF (DELTA.EQ.0) THEN ! (DUAS RAIZES REAIS IGUAIS) X1=-B/(2.*A) X2=X1 PRINT *, "RAIZES: X1=X2=",X1 ELSE ! (DUAS RAIZES COMPLEXAS) RE=-B/(2.*A) IM=SQRT(-DELTA)/(2.*A) PRINT *, "RAIZES COMPLEXAS: X1=",RE," -",IM,"i" PRINT *, " X2=",RE," +",IM,"i" ENDIF C END INT 21H PUSH AX ;DEPOIS VOU DAR POR EXTENSO MOV BX,10 MOV DI,OFFSET DIA MOV AH,0 MOV AL,DL DIV BL OR AX,3030H STOSW MOV AL," " STOSB MOV AH,0 MOV AL,DH PUSH AX ;DEPOIS VOU DAR POR EXTENSO DIV BL OR AX,3030H STOSW MOV AL," " STOSB 2.6.2 2.6.3 Fortran Fortran ´e uma linguagem muito antiga, originalmente sugerida pela IBM na d´ecada de 50. Seu texto se assemelha a uma descri¸ca˜o matem´atica e de fato, FORTRAN significa vers˜ ao de 10 de fevereiro de 2008 43 ©88-08, Pedro Kantek Lisp LISP ´e a segunda linguagem de alto nivel mais antiga. O LISP nasce como filho da comunidade de Inteligˆencia Artificial. Na origem, 4 grupos de pessoas se inseriram na comunidade de IA: os ling¨ uistas (na busca de um tradutor universal), os psic´ologos (na tentativa de entender e estudar processos cerebrais humanos), matem´aticos (a mecaniza¸ca˜o de aspectos da matem´atica, por exemplo a demonstra¸ca˜o de teoremas) e os inform´aticos (que buscavam expandir os limites da ciˆencia). ©88-08, Pedro Kantek 44 vers˜ ao de 10 de fevereiro de 2008 ˆ ˜ CAP´ITULO 2. CIENCIA DA COMPUTAC ¸ AO ˆ ˜ CAP´ITULO 2. CIENCIA DA COMPUTAC ¸ AO O marco inicial ´e o encontro no Dartmouth College em 1956, que trouxe duas conseq¨ uˆencias importantes: a atribui¸ca˜o do nome IA e a possibilidade dos diferentes pesquisadores se conhecerem e terem suas pesquisas beneficiadas por uma interfecunda¸ca˜o intelectual. A primeira constata¸ca˜o foi a de que linguagens existentes privilegiavam dados num´ericos na forma de arrays. Assim, a busca foi a cria¸ca˜o de ambientes que processassem s´ımbolos na forma de listas. A primeira proposta foi IPL (Information Processing Language I, por Newel e Simon em 1956). Era um assembl˜ao com suporte a listas. A IBM engajou-se no esfor¸co, mas tendo gasto muito no projeto FORTRAN decidiu agregar-lhe capacidade de listas, ao inv´es de criar nova linguagem. Nasceu a FLPL (Fortran List Processing Language). Em 1958, McCarthy come¸cou a pesquisar requisitos para uma linguagem simb´olica. Foram eles: recurs˜ ao, express˜oes condicionais, aloca¸ca˜o dinˆamica de listas, desaloca¸ca˜o autom´ atica. O FORTRAN n˜ao tinha a menor possibilidade de atendˆe-las e assim McCarthy junto com M. Minsky desenvolveu o LISP. Buscava-se uma fun¸ca˜o Lisp Universal (como uma m´aquina de Turing Universal). A primeira vers˜ao (chamada LISP pura) era completamente funcional. Mais tarde, LISP foi sofrendo modifica¸co˜es e melhoramentos visando eliminar ineficiˆencias e dificuldades de uso. Acabou por se tornar uma linguagem 100% adequada a qualquer tipo de resolu¸ca˜o de problema. Por exemplo, o editor EMACS que ´e um padr˜ao no mundo UNIX est´ a feito em LISP. In´ umeros dialetos LISP apareceram, cada um queria apresentar a sua vers˜ao como sendo a melhor. Por exemplo, FranzLisp, ZetaLisp, LeLisp, MacLisp, Interlisp, Scheme, T, Nil, Xlisp, Autolisp etc. Finalmente, como maneira de facilitar a comunica¸ca˜o entre todos estes (e outros) ambientes, trabalhou-se na cria¸ca˜o de um padr˜ao que foi denominado Common Lisp. Como resultado o Common Lisp ficou grande e um tanto quanto heterogˆeneo, mas ele herda as melhores pr´aticas de cada um de seus antecessores. Seja agora um exemplo de uma fun¸ca˜o lisp: > (defun li (L1 L2) ; pergunta se duas listas s~ ao iguais (cond ((null L1) (null L2)) ((null L2) nil) ((not (eql (car L1) (car L2))) nil) (t (li (cdr L1) (cdr L2))))) LI 2.6.4 Prolog O nome Prolog para a linguagem concreta foi escolhido por Philippe Roussel como uma abrevia¸ca˜o de PROgrammation LOGique. Foi criada em meados de 1972 por Alain Colmerauer e Philippe Roussel, baseados no conceito de Robert Kowalski da interpreta¸ca˜o procedimental das cl´ ausulas de Horn. A motiva¸ca˜o para isso veio em parte da vontade de reconciliar o uso da l´ogica como uma linguagem declarativa de representa¸ca˜o do conhecimento com a representa¸ca˜o procedimental do conhecimento. *Hist´orico ˆ Precursores: Newell, Shaw e Simon, com sua Logic Theory Machine, que buscava a prova autom´ atica de teoremas, em 1956. ˆ Robinson, 65, no artigo A machine oriented logic based on the resolution principle. Propunha o uso da f´ ormula clausal, do uso de resolu¸ca˜o e principalmente do algoritmo de unifica¸ca˜o. vers˜ ao de 10 de fevereiro de 2008 45 ©88-08, Pedro Kantek ˆ Green em 1969, escreveu o Question Answer System, que respondia perguntas sobre um dado dom´ınio. Na mesma ´epoca, Winograd escreveu o software Planner. ˆ Todos estes tinham problemas de eficiˆencia, por causa, entre outras coisas, da explos˜ao combinat´oria. ˆ Em 1970, em Edinbourg, Kowalski bolou o seguinte esquema: – Limitou a expressividade a`s cl´ ausulas de Horn – Criou uma estrat´egia de resolu¸ca˜o, n˜ao completa, mas muito eficiente ˆ Em 72, em Edinbourg e Marselha, surgiu a linguagem PROLOG. ˆ Em 77, Waren escreve o primeiro compilador de PROLOG. Come¸ca o sucesso de PROLOG na Europa. Nos EUA, sempre deu-se maior aten¸ca˜o ao LISP. ˆ Foi a base para o computador de 5a gera¸ca ˜o do Jap˜ao. A seguir, um pequeno trecho de uma sess˜ ao PROLOG: parent(maria,jorge):-true. parent(joao,jorge):-true. parent(jorge,ana):-true. ... parent(cris,paulo):-true. Da´ı: podemos perguntar: ? parent(joao,jorge) YES ? parent(celia,cris) NO ? parent(cris,carlos) NO ? parent(X,jorge) X=maria X=joao no (significando acabou) ? parent(X,Y) X=maria Y=jorge X=joao Y=jorge ... ? parent(X,Y),parent(Y,paulo) [ler esta v´ ırgula como OU] X=jorge Y=cris 2.6.5 Cobol O nome vem da sigla de COmmon Business Oriented Language (Linguagem Comum Orientada aos Neg´ocios), que define seu objetivo principal em sistemas comerciais, financeiros e administrativos para empresas e governos. O COBOL foi criado em 1959 pelo Comitˆe de Curto Prazo, um dos trˆes comitˆes propostos numa reuni˜ ao no Pent´agono em Maio de 1959, organizado por Charles Phillips ©88-08, Pedro Kantek 46 vers˜ ao de 10 de fevereiro de 2008 ˆ ˜ CAP´ITULO 2. CIENCIA DA COMPUTAC ¸ AO ˆ ˜ CAP´ITULO 2. CIENCIA DA COMPUTAC ¸ AO do Departamento de Defesa dos Estados Unidos. O Comitˆe de Curto Prazo foi formado para recomendar as diretrizes de uma linguagem para neg´ ocios. Foi constitu´ıdo por membros representantes de seis fabricantes de computadores e trˆes ´org˜aos governamentais, a saber: Burroughs Corporation, IBM, Minneapolis-Honeywell (Honeywell Labs), RCA, Sperry Rand, e Sylvania Electric Products, e a For¸ca A´erea dos Estados Unidos, o David Taylor Model Basin e a Agˆencia Nacional de Padr˜ oes (National Bureau of Standards ou NBS). Este comitˆe foi presidido por um membro do NBS. Um comitˆe de M´edio Prazo e outro de Longo Prazo foram tamb´em propostos na reuni˜ ao do Pent´agono. Entretanto, embora tenha sido formado, o Comitˆe de M´edio Prazo nunca chegou a funcionar; e o Comitˆe de Longo Prazo nem chegou a ser formado. Por fim, um subcomitˆe do Comitˆe de Curto Prazo desenvolveu as especifica¸co˜es da linguagem COBOL. As especifica¸co˜es foram aprovadas pelo Comitˆe de Curto Prazo. A partir da´ı foram aprovadas pelo Comitˆe Executivo em Janeiro de 1960, e enviadas `a gr´ afica do governo, que as editou e imprimiu com o nome de Cobol 60. O COBOL foi desenvolvido num per´ıodo de seis meses, e continua ainda em uso depois de mais de 40 anos. O COBOL foi definido na especifica¸ca˜o original, possuia excelentes capacidades de autodocumenta¸ca˜o, bons m´etodos de manuseio de arquivos, e excepcional modelagem de dados para a ´epoca, gra¸cas ao uso da cl´ ausula PICTURE para especifica¸co˜es detalhadas de campos. Entretanto, segundo os padr˜oes modernos de defini¸ca˜o de linguagens de programa¸ca˜o, tinha s´erias deficiˆencias, notadamente sintaxe prolixa e falta de suporte da vari´ aveis locais, recorrˆencia, aloca¸ca˜o dinˆamica de mem´oria e programa¸ca˜o estruturada. A falta de suporte ` a linguagem orientada a objeto ´e compreens´ıvel, j´ a que o conceito era desconhecido naquela ´epoca. Segue o esqueleto de um programa fonte COBOL. IDENTIFICATION DIVISION. PROGRAM-ID. HELLO-WORLD. * ENVIRONMENT DIVISION. * DATA DIVISION. * PROCEDURE DIVISION. PARA-1. DISPLAY "Al^ o, Mundo.". * STOP RUN. 2.6.6 APL Ela nasceu do trabalho de um professor de matem´atica canadense de nome Keneth Iverson. Sua proposta original era a de produzir uma nova nota¸ca˜o matem´atica, menos sujeita `as ambig¨ uidades da nota¸ca˜o convencional. Na d´ecada de 60, trabalhando na IBM em conjunto com Adin Falcoff, ambos produziram a primeira vers˜ao de APL, quando um interpretador da linguagem ficou dispon´ıvel. A principal caracter´ıstica de APL ´e o uso de um conjunto especial de caracteres que incluem algumas letras gregas (rho, iota...), s´ımbolos matem´aticos convencionais (o sinal de vezes, o de dividido...) e alguns s´ımbolos especialmente inventados. Este fato sempre limitou a dissemina¸ca˜o da linguagem. At´e o advento das interfaces gr´ aficas, como o windows, por exemplo, exigia-se um hardware especial para poder programar em APL. Programas em APL em geral sempre s˜ao muito pequenos, embora poderosos. A linguagem est´ a preparada para tratar arranjos de grandes dimens˜ oes. Por exemplo, quando em APL se escreve A+B, se A e B forem escalares (isto ´e um n´ umero u ´ nico), vers˜ ao de 10 de fevereiro de 2008 47 ©88-08, Pedro Kantek a resposta tamb´em o ser´a. Se A e B s˜ao vetores de 100 n´ umeros, a resposta tamb´em o ser´a. Idem para matrizes e at´e arrays-nd. Em algumas vers˜oes de APL este n chega a 256 dimens˜ oes. Este ´e um comando EDIT (troca algo, de... para...) 2.6.7 Basic A linguagem BASIC (acrˆ onimo para Beginners All-purpose Symbolic Instruction Code), foi criada, com fins did´aticos, pelos professores John G. Kemeny e T. Kurtz em 1963 no Dartmouth College. BASIC tamb´em ´e o nome gen´erico dado a uma grande fam´ılia de linguagens de programa¸ca˜o derivadas do Basic original. Provavelmente existem mais varia¸co˜es de Basic do que de qualquer outra linguagem de programa¸ca˜o. Basic ´e uma linguagem imperativa de alto n´ıvel, pertencente a` terceira gera¸ca˜o, que ´e normalmente interpretada e, originalmente, n˜ao estruturada, por ter sido fortemente baseada em FORTRAN II. Um programa em Basic tradicional tem suas linhas numeradas, sendo que ´e quase que padr˜ao usar n´ umeros de 10 em 10 (o que facilita a coloca¸ca˜o de linhas intermedi´ arias). Os comandos s˜ao poucos, simples e facilmente compreens´ıveis na l´ıngua inglesa (LET, IF, ...). Um programa em Basic, que calcula a f´ ormula de Bhaskara ficaria como: 10 20 25 30 40 50 60 70 80 90 100 200 410 420 430 440 490 500 REM RESOLVE EQUACAO DO SEGUNDO GRAU READ A,B,C IF A=0 THEN GOTO 410 LET D=B*B-4*A*C IF D b) then { Se A ´ e maior que B ent~ ao } writeln (’A ´ e maior que B’) else { Sen~ ao... } writeln (’B ´ e maior que A’); end 2.6.11 char nome[51]; /*vector de 51 chars para o nome*/ unsigned long bi; }; /*estrutura declarada*/ int main(void) { struct pessoa Sousa={16,"Diogo Sousa",123456789}; /*declaracao de uma variavel tipo struct pessoa com o nome Sousa*/ printf("Idade: %d\n",(int)Sousa.idade); /* "%d" espera um int */ printf("Nome: %s\n",Sousa.nome); printf("BI: %lu\n",Sousa.bi); return 0; } C Java Java ´e uma linguagem de programa¸ca˜o orientada a objeto desenvolvida na d´ecada de 90 pelo programador James Gosling, na empresa Sun Microsystems. Diferentemente das linguagens convencionais, que s˜ao compiladas para c´ odigo nativo, a linguagem Java ´e compilada para um ”bytecode” que ´e executado por uma m´aquina virtual. Desde seu lan¸camento, em maio de 1995, a plataforma Java foi adotada mais rapidamente do que qualquer outra linguagem de programa¸ca˜o na hist´ oria da computa¸ca˜o. Em 2003 Java atingiu a marca de 4 milh˜ oes de desenvolvedores em todo mundo. Java continuou crescendo e hoje ´e uma referˆencia no mercado de desenvolvimento de software. Java tornou-se popular pelo seu uso na Internet e hoje possui seu ambiente de execu¸ca˜o presente em web browsers, mainframes, SOs, celulares, palmtops e cart˜ oes inteligentes, entre outros. Principais Caracter´ısticas da Linguagem Java A linguagem Java foi projetada tendo em vista os seguintes objetivos: Orienta¸ca˜o a objeto - Baseado no modelo de Smalltalk e Simula67 Portabilidade - Independˆencia de plataforma - “write once run anywhere” Recursos de Rede - Possui extensa biblioteca de rotinas que facilitam a coopera¸ca˜o com protocolos TCP/IP, como HTTP e FTP Seguran¸ca - Pode executar programas via rede com restri¸c˜oes de execu¸ca˜o Sintaxe similar a Linguagem C/C++ Facilidades de Internacionaliza¸ca˜o - Suporta nativamente caracteres Unicode Simplicidade na especifica¸ca˜o, tanto da linguagem como do ”ambiente”de execu¸ca˜o (JVM) ´ distribu´ıda com um vasto conjunto de bibliotecas (ou APIs) E Possui facilidades para cria¸ca˜o de programas distribu´ıdos e multitarefa (m´ ultiplas linhas de execu¸ca˜o num mesmo programa) Desaloca¸ca˜o de mem´oria autom´ atica por processo de coletor de lixo (garbage collector) Carga Dinˆ amica de C´ odigo - Programas em Java s˜ao formados por uma cole¸ca˜o de classes armazenadas independentemente e que podem ser carregadas no momento de utiliza¸ca˜o. C ´e uma linguagem de programa¸ca˜o estruturada e padronizada criada na d´ecada de 1970 por Dennis Ritchie e Ken Thompson para ser usada no sistema operacional UNIX. Desde ent˜ao espalhou-se por muitos outros sistemas operacionais, e tornou-se uma das linguagens de programa¸ca˜o mais usadas. C tem como ponto-forte a sua eficiˆencia e ´e a linguagem de programa¸ca˜o de preferˆencia para o desenvolvimento de software b´asico, apesar de tamb´em ser usada para ´ tamb´em muito usada no ensino de ciˆencias da computa¸ca˜o, desenvolver aplica¸co˜es. E mesmo n˜ao tendo sido projetada para estudantes e apresentando algumas dificuldades no seu uso. Outra caracter´ıstica importante de C ´e sua proximidade com a linguagem de m´aquina, que permite que um projetista seja capaz de fazer algumas previs˜oes de como o software ir´a se comportar ao ser executado. C tem como ponto fraco a falta de prote¸ca˜o que d´a ao programador. Praticamente tudo que se expressa em um programa em C pode ser executado, como por exemplo pedir o vig´esimo membro de um vetor com apenas dez membros. Os resultados muitas vezes totalmente inesperados e os erros s˜ao dif´ıceis de encontrar. Muitas linguagens de programa¸ca˜o foram influenciadas por C, sendo que a mais utilizada atualmente ´e C++, que por sua vez foi uma das inspira¸co˜es para Java. O exemplo: public abstract class Animal { public abstract void fazerBarulho(); } #include struct pessoa { unsigned short idade; public class Cachorro extends Animal { public void fazerBarulho() { System.out.println("AuAu!"); } vers˜ ao de 10 de fevereiro de 2008 51 ©88-08, Pedro Kantek Eis um exemplo: ©88-08, Pedro Kantek 52 vers˜ ao de 10 de fevereiro de 2008 ˆ ˜ CAP´ITULO 2. CIENCIA DA COMPUTAC ¸ AO ˆ ˜ CAP´ITULO 2. CIENCIA DA COMPUTAC ¸ AO 2.6.14 } public class Gato extends Animal { public void fazerBarulho() { System.out.println("Miau!"); } } 2.6.13 PHP PHP (um acrˆ onimo recursivo para “PHP: Hypertext Preprocessor”) uma linguagem de programa¸ca˜o de computadores interpretada, livre e muito utilizada para gerar conte´ udo dinˆamico na Web. A linguagem surgiu por volta de 1994, como um subconjunto de scripts Perl criados por Rasmus Lerdof, com o nome Personal Home Page Tools. Mais tarde, em 1997, foi lan¸cado o novo pacote da linguagem com o nome de PHP/FI, trazendo a ferramenta Forms Interpreter, que era na verdade um interpretador de comandos SQL. Trata-se de uma linguagem modularizada, o que a torna ideal para instala¸ca˜o e uso em servidores web. Diversos m´odulos s˜ao criados no reposit´orio de extens˜ oes PECL (PHP Extension Community Library) e alguns destes m´odulos s˜ao introduzidos como padr˜ao em novas vers˜oes da linguagem. Muito parecida, em tipos de dados, sintaxe e mesmo fun¸co˜es, com a linguagem C e com a C++. Pode ser, dependendo da configura¸ca˜o do servidor, embutida no c´ odigo HTML. Existem vers˜oes do PHP dispon´ıveis para os seguintes sistemas operacionais: Windows, Linux, FreeBSD, Mac OS, OS/2, AS/400, Novell Netware, RISC OS, IRIX e Solaris Construir uma p´agina dinˆamica baseada em bases de dados ´e simples, com PHP. Este provˆe suporte a um grande n´ umero de bases de dados: Oracle, Sybase, PostgreSQL, InterBase, MySQL, SQLite, MSSQL, Firebird etc, podendo abstrair o banco com a biblioteca ADOdb, entre outras. PHP tem suporte aos protocolos: IMAP, SNMP, NNTP, POP3, HTTP, LDAP, XML´ poss´ıvel abrir sockets e interagir com outros protocolos. E as bibliotecas RPC, SOAP. E de terceiros expandem ainda mais estas funcionalidades. Veja um exemplo de PHP vers˜ ao de 10 de fevereiro de 2008 53 ©88-08, Pedro Kantek J Para os que acharam APL uma linguagem meio sem p´es nem cabe¸ca, eis aqui J. Olhando para o J, o APL passa a ser t˜ao comportada quanto um COBOL da d´ecada de 70. Para entender o J, precisamos estudar a vida do cara que inventou o APL, o canadense Ken Iverson. Na minha opini˜ ao, o sujeito foi um gˆenio. Coloco-o sem nenhum medo de errar na galeria dos grandes matem´aticos da humanidade, talvez o primeiro (junto com Mandelbroot) que tenha realmente conseguido casar com sucesso a matem´atica e a computa¸ca˜o. Depois de propor o APL como uma nota¸ca˜o matem´atica (d´ecada de 50), de liderar o grupo que converteu o APL em linguagem de programa¸ca˜o (d´ecada de 60 na IBM) e de liderar a populariza¸ca˜o da linguagem (anos 70 e come¸cos dos 80), em meados dos 80, ele chegou a algumas conclus˜ oes: ˆ o uso de um alfabeto n˜ ao usual (para ser educado), restringia o uso do APL (lembremos que ainda n˜ao havia o windows e portanto para usar APL havia que comprar hardware especializado - e caro). ˆ o desenvolvimento continuado por 30 anos da linguagem apontou algumas inconsistˆencias te´oricas no modelo. N˜ ao esque¸camos que o Iverson era um matem´atico da pesada ˆ o custo que o APL sempre teve inviabilizava seu uso pelos menos aquinhoados Dessas elocubra¸co˜es nasceu a linguagem J. O nome n˜ao tem explica¸ca˜o, exceto a dada por um de seus autores (”Why ’J’ ? It is easy to type.”). H´ a quem diga que J segue ”I”no alfabeto, sendo este ”I”a nota¸ca˜o Iverson. Seja como for, J n˜ao tem nada a ver com Java. Para maiores detalhes veja www.jsoftware.com. Eis a seguir um programa J: gerasima =: 3 : 0 r=.(2$y)$(1+?200$2 2 2 2 2 3 3 3 4 4 4 5 6)*2+- ? dec 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 carac @ A B C D E F G H I J K L M N O dec 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 CAP´ITULO 3. ESCREVENDO ALGORITMOS carac P Q R S T U V W X Y Z [ & ] ^ dec 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 carac a b c d e f g h i j k l m n o dec 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 carac p q r s t u v w x y z { | } Esta seq¨ uˆencia ASCII, ´e muito importante pois permite estabelecer o atributo de ordem no universo dos caracteres. Olhando para ela, podemos afirmar, por exemplo, que o caractere ”a”´e menor do que o caractere ”b”. Da mesma maneira, o ”a”min´ usculo ´e maior do que o ”A”mai´ usculo (ali´as, isto vale para todas as letras), e qualquer d´ıgito num´erico ´e menor do que qualquer letra. Um especial cuidado deve ser tomado, pois esta n˜ao ´e a u ´ nica seq¨ uˆencia poss´ıvel, e nem sequer a melhor. Cada m´aquina e cada implementa¸ca˜o pode ter a sua. Alguns outros c´ odigos: BRASCII (C´odigo padr˜ao BRASILEIRO para intercˆambio de informa¸co˜es), EBCDIC (Extended binary-coded decimal interchange coded), Z-Code etc. Outra observa¸ca˜o ´e que na tabela ASCII n˜ao existem caracteres acentuados. Duas conseq¨ uˆencias adv´em deste fato: nem sempre se podem usar tais caracteres e se eles forem usados, n˜ao se sabe qual a sua ordem no conjunto. Trocando em mi´ udos, se se ˆ solicitar a ordena¸ca˜o de uma lista de palavras contendo AMORA, ANCORA BROA, CAFE, ARROZ, CEREAL, n˜ao ser´a nenhuma surpresa se a resposta for AMORA, ˆ ARROZ, BROA, CAFE, CEREAL e ANCORA. Exerc´ıcio 3 Uma salada de frutas, produzida industrialmente leva ma¸c˜a, banana, abacaxi e a¸cu ´car nas propor¸co˜es de 1 Kg : 2 Kg : 0,5 Kg : 0,5 Kg respectivamente. Definir algoritmo que leia 4 quantidades representando os pesos dispon´ıveis dos quatro ingredientes, calcule e escreva a quantidade de salada que poder ser construida, desprezando-se as quantiSe for lido s´o ser˜ao usadas logo total 10,10,10,10 5,10,2.5,2.5 20Kg dades que ultrapassam a propor¸c˜ao. Exemplos: 10,20,10,10 10,20,5,5 40Kg 10,10,1,1 2,4,1,1 8Kg Exerc´ıcio 4 Imagine que vocˆe tem uma entrada com um par de n´umeros reais. Eles representam as dimens˜ oes x e y medidas em metros, de um retˆangulo. Escreva o algoritmo que leia esse par de n´ umeros e escreva x, y e a ´area do retˆangulo de lados x e y, apenas se o per´ımetro deste mesmo retˆangulo for superior a 12.0 m. Exerc´ıcio 5 Defina e escreva uma fun¸c˜ao que receba trˆes n´umeros reais, encontre e devolva o maior deles. vers˜ ao de 10 de fevereiro de 2008 59 ©88-08, Pedro Kantek Exerc´ıcio 6 Defina um algoritmo capaz de comparar dois n´umeros inteiros e positivos e imprimir a mensagem IGUAIS ou DIFERENTES em fun¸c˜ao dos valores de tais n´ umeros. Eles ser˜ao considerados IGUAIS quando sua diferen¸ca for menor a 10% do maior n´ umero. Ser˜ao considerados diferentes quando sua diferen¸ca for maior ou igual a 10% do valor do maior. O algoritmo termina quando for lido um n´ umero negativo. Exerc´ıcio 7 Defina e escreva um algoritmo que leia um n´umero e determine se ele ´e divis´ıvel por 3. Se for o algoritmo deve imprimir a mensagem ”E DIVIS´IVEL”, e se n˜ao for ˜ E ´ DIVIS´IVEL”. deve imprimir ”NAO Exerc´ıcio 8 Escrever um algoritmo que leia um conjunto de trˆes vari´aveis que indicam respectivamente: Nome do funcion´ario (cadeia-30), n´ umero de horas (inteiro) e valor da hora trabalhada (real). Se o n´ umero de horas ´e maior que 40, calcule o valor a pagar, sabendo que as horas extras s˜ao remuneradas a base de 1,5 x a hora normal. Se o sal´ario for maior que R$ 650,00 retire 10% do sal´ario para o governo (imposto). escreva nome, horas, valor da hora, valor a receber e valor do imposto. Dados terminam quando for lido um n´ umero de horas igual a zero. Por exemplo, Lido Impresso Jo˜ao,50,100 Jo˜ao,50,100,4950,550 Maria,30,10 Maria,30,10,300,0 XXX,0,0 fim. Exerc´ıcio 9 O departamento de pessoal de uma empresa solicitou o desenvolvimento de um programa de computador capaz de calcular o desconto devido para a previdˆencia. Assim, escreva um algoritmo capaz de calcular o desconto para o INSS, sujeito `as seguintes regras: ˆ Inicialmente o programa deve ler o valor do sal´ario de referˆencia ˆ Depois deve ler uma s´erie de dados compostos por RG e sal´ario bruto. ˆ A s´erie termina quando for lido um RG = 0. ˆ Para um sal´ario bruto at´e 10 S.R. o desconto ´e 8% do sal´ario bruto ˆ Para um sal´ario entre 10,01 S.R. e 20 S.R. desconto ´e 9% do sal´ario bruto ˆ Acima de 20 S.R. o desconto ´e de 10% do sal´ario bruto. ˆ Ao final, imprimir o RG, o sal´ario bruto, o desconto e o sal´ario l´ıquido. Exerc´ıcio 10 Pretende-se informatizar um estacionamento. Nele existem 3 tipos de pre¸cos: 2 R $ por hora ou fra¸c˜ao para carros pequenos, 2,50 R$/hora para carros m´edios e 3 R$/hora para carros grandes. Definir algoritmo que leia uma serie de informa¸co˜es formadas por: Tipo do carro: caracter; hora-entrada: inteiro, minuto-entrada: inteiro; hora-saida: inteiro, minuto-saida: inteiro. Para cada conjunto de informa¸co˜es lidas, o algoritmo deve imprimir a quantidade de dinheiro devida. ©88-08, Pedro Kantek 60 vers˜ ao de 10 de fevereiro de 2008 CAP´ITULO 3. ESCREVENDO ALGORITMOS 3.3 CAP´ITULO 3. ESCREVENDO ALGORITMOS Comando de atribui¸c˜ ao Comando de atribui¸ca˜o ´e aquele que permite colocar/alterar valores de conte´ udo em vari´ aveis. Para tanto usaremos o s´ımbolo ←. 2 Quando dizemos express˜ao, podemos estar querendo dizer “valor” (que ´e a forma mais simples de express˜ao), ou simplesmente um conjunto de valores e operadores (que ´e a defini¸ca˜o de express˜ao). Exemplos: A ← 1 (aqui, a express˜ao ´e apenas um valor) B ← 1 + 2 (neste caso, a express˜ao ´e um conjunto de 2 valores e uma opera¸ca˜o, no caso, a adi¸ca˜o) ´ importante notar, que a express˜ao que se encontra do lado direito da flecha de E atribui¸ca˜o (←) deve ser compat´ıvel com o tipo de vari´ avel que foi definida. Em outras palavras, no comando A ← 1+1, a express˜ao 1+1 tem que ser compat´ıvel com a vari´ avel A, ou seja A dever´a ter sido definida como inteira ou real, mas n˜ao como caracter, cadeia ou l´ogica. Na atribui¸ca˜o de vari´ aveis do tipo inteira, a express˜ao dever´a ser uma express˜ao inteira, isto ´e, sem parte fracion´aria. Para vari´ aveis do tipo real, a express˜ao dever´a ser num´erica sem nenhuma outra restri¸ca˜o. Esta ´e a u ´ nica exce¸ca˜o `a regra acima, pois podemos colocar um valor inteiro em uma vari´ avel real. Na atribui¸ca˜o de vari´ aveis cadeia, o valor dever´a estar envolvido entre aspas simples (’). Ele n˜ao dever´a ter um tamanho maior do que aquele estabelecido para a vari´ avel. Se isto acontecer, o valor ser´a truncado. Entretanto, n˜ao ´e boa norma de programa¸ca˜o usar esta facilidade (ou caracter´ıstica) pois ela dificulta a compreens˜ao do algoritmo. Finalmente, nas vari´ aveis l´ogicas, deveremos usar as palavras VERDADEIRO e FALSO, ou quando n˜ao houver risco de confus˜ ao, podemos usar as abreviaturas F ou V. Exemplos de atribui¸co˜es: vari´ aveis inteiras vari´ aveis reais vari´ aveis cadeia vari´ aveis l´ ogicas X←1 XAC ← 1 + 1 + 1 DEV ← 2000 × 23 N ← -1 ˆ A ← ’1’ A ´e vari´ avel num´erica ou caracter ? ˆ B ← ’V’ B ´e vari´ avel l´ogica ou cadeia ? Como regra geral, sempre que houver mistura entre elementos inteiros e reais, nas opera¸co˜es +, − e × o resultado ser´a real. Exemplos de uso de operadores em express˜oes num´ericas A ← 1 × 1,78 ÷ 3 B ← trunc(3.1416) C ← abs (-6 + trunc (3.4)) D ← 1 + 10 + 100 - 1000 etc Uma observa¸ca˜o final e bem importante ´e que dentro de um mesmo algoritmo uma vari´ avel pode ter diversos (isto ´e, mais de um) comandos de assinalamento. Isto n˜ao ´e erro, e ao contr´ ario ´e bem freq¨ uente. Nestes casos, a vari´ avel ter´ a o valor que foi nela colocado por u ´ ltimo. Por exemplo, em 1: A ← 1 2: ... 3: A ← 10 4: ... 5: escreva (A) 6: ... Se nos comandos representados com ... n˜ao houver nenhuma altera¸ca˜o na vari´ avel A, o resultado impresso ao final ser´a 10 (e n˜ao 1). 3.4 B ← 1.89 XAD ← 1 ÷ 3 N ← -1.0009 ALF ← 1000900 X←1 Express˜ oes Express˜oes s˜ao conjuntos de vari´ aveis, valores, opera¸co˜es e eventualmente parˆenteses, que demandam algum tipo de computa¸ca˜o determinada na express˜ao e produzem um resultado. As express˜oes se classificam em geral devido ao tipo de opera¸co˜es que existem dentro da express˜ao, podendo ser aritm´eticas, condicionais, l´ogicas e de caracteres. NOME ← ’ALFREDO’ COD ← ’ABCDEabcde’ ALFA ← ’abcde12345’ 3.4.1 2 A quest˜ ao do s´ımbolo da atribui¸ca ˜o ´ e bem complicada. Poucos ambientes (como o APL) disp˜ oe do s´ımbolo nativo ←. Os outros improvisam, com os s´ımbolos := do Pascal, ou simplesmente = do C e Java. No primeiro caso, s˜ ao 2 s´ımbolos, ao inv´ es de um u ´nico, e no segundo surge a confus˜ ao entre A=1 (significando A recebe 1) e A=1 (significando a pergunta: A ´ e igual a 1 ?). Da´ı o C e o Java fazerem a pergunta com ==. N˜ ao h´ a uma sa´ıda f´ acil. 61 Aritm´ eticas As express˜oes aritm´eticas s˜ao aquelas que envolvem vari´ aveis num´ericas, valores idem e as opera¸co˜es aritm´eticas, dando como resultado um n´ umero (que obviamente pode ser real ou inteiro). SIM ← VERDADEIRO ˜ ← FALSO NAO VARLOG ← V VARLOG2 ← F vers˜ ao de 10 de fevereiro de 2008 NOME ← ’A’ XUNXO ← ’X’ NUM ← ’1’ AST ← ’*’ Duas perguntas a responder: vari´ aveis caracter ©88-08, Pedro Kantek Nota¸ c˜ ao Exponencial Para os casos em que seja necess´ario representar n´ umeros muito grandes ou muito pequenos, pode-se lan¸car m˜ao da nota¸ca˜o exponencial, que ser´a escrita de acordo com a seguinte regra: A primeira parte do n´ umero ser´a escrita como um n´ umero convencional, podendo ter o ponto decimal (constante ponto flutuante) ou n˜ao (constante inteira). Depois, vem a letra mai´ uscula ”E”, indicando ”elevado a”. Um segundo n´ umero inteiro, positivo ou negativo indicando a potˆencia de 10 a` qual a primeira parte do n´ umero est´ a elevada. ©88-08, Pedro Kantek 62 vers˜ ao de 10 de fevereiro de 2008 CAP´ITULO 3. ESCREVENDO ALGORITMOS CAP´ITULO 3. ESCREVENDO ALGORITMOS Por exemplo: o n´ umero deve ser entendido como 3E4 3 × 104 ou 3 × 10000 ou 30000 6.3E-2 6.3 × 10−2 ou 6.3 × 0.01 ou 0.063 -4.22E6 −4.22 × 106 ou −4.22 × 1000000 ou -4220000 Opera¸ co ˜es usuais Fun¸ca˜o Formato Objetivo Adi¸ca˜o A+B Adicionar A e B Subtra¸ca˜o A-B Subtrair B de A Multiplica¸ca˜oA × B Divis˜ ao real Potˆencia A÷B Absoluto abs(A) A B O produto de A eB O quociente de A por B A elevado a` B O valor absoluto de A Seno Sin(A) seno de A radianos Cosseno cos(A) cosseno de A radianos Inteiro trunc(A) A parte inteira de A Fracion´ario frac(A) A parte fracion´ aria de A Exponencial exp(A) E (2.718...) elevado a A Log Nat- log(A) Logaritmo natuural ral de A Arredondamento round(A)Arredonda A para o inteiro mais pr´oximo Raiz sqrt(A) Raiz quadrada quadrada de A vers˜ ao de 10 de fevereiro de 2008 63 ©88-08, Pedro Kantek Quadrado sqr(A) Somar 1 A++ ©88-08, Pedro Kantek O quadrado de A A vari´ avel A ´e incrementada de 1 unidade Tipos operandos inteiro ou real inteiro real inteiro real inteiro real inteiro real inteiro real inteiro real inteiro real real Exemplo ou Tipo do resultado Se A e B s˜ao inteiros, A+B ´e inteiro. Se pelo menos um dos dois ´e real, o resultado ´e real idem ao anterior idem ao anterior real ou real 25 ´e 32 ou abs(4) ´e 4 ou O mesmo tipo de A real ou real ou ou inteiro real, mas 0 inteiro real inteira real 64 5 - 2 ´e 3 3×12 ´e 36 10÷2 ´e 5 inteiro sin(3.14...) ´e 1 cos(3.14...) ´e 0 trunc(2.5)´e 2 real frac(2.5) ´e .5 ou real ou real exp(1) 2.718 log(1) ´e 0 real inteiro real inteiro real real 3 + 7 ´e 10 ou A( ou ou ´e inteiro round(3.6) ´e 4 real sqrt(4) ´e 2 O mesmo de A O mesmo de A sqr(4) ´e 16 Se A ´e 10, A++ coloca 11 em A. vers˜ ao de 10 de fevereiro de 2008 CAP´ITULO 3. ESCREVENDO ALGORITMOS Subtrair 1 A−− Divis˜ ao inteira A div B Resto A mod B A vari´ avel A ´e decrementada de 1 unidade o quociente inteiro da divis˜ ao de A por B O resto da divis˜ ao inteira de A por B inteira real CAP´ITULO 3. ESCREVENDO ALGORITMOS ou O mesmo de A inteiros inteiro Se A ´e 10, A−− coloca 9 em A. 4 div 3 ´e 1 inteiros inteiro 10 mod 7 ´e 3 Prioridades Na execu¸ca˜o de um comando complexo, podemos encontrar duas ou mais opera¸co˜es num´ericas uma ao lado da outra, e neste caso, pode surgir a pergunta: Qual realizar antes ? Exemplo: 2 + 3 × 4 ´e igual a 14 ou 20 ? Afinal, 2 + (3 × 4) ´e 14, e(2 + 3) × 4 ´e 20. Embora na matem´atica tradicional j´ a se tenha uma lista de prioridades que deve ser obedecida, aqui no portuguˆes estruturado tamb´em h´a uma lista, que se resume a: 1. Primeira Prioridade: Parˆenteses 2. Prioridade: Fun¸co˜es Duas considera¸co˜es finais: ˆ Podemos considerar a existˆencia no portuguˆes estruturado de uma constante chamada MAXINT, contendo sempre o MAIOR valor poss´ıvel de ser representado em uma vari´ avel inteira. Em outras palavras, desde que A seja inteira, quando compararmos A com MAXINT, A ser´a menor ou no m´aximo igual a MAXINT, nunca maior. Para todos os efeitos pr´aticos esse ´e o nosso infinito (∞). ˆ Podem ser introduzidos pela pessoa que est´ a escrevendo o algoritmo quaisquer novos operadores matem´aticos, desde que estes n˜ao sejam amb´ıguos e sejam facilmente entend´ıveis, a fim de poderem ser seguidos mais tarde. Div e Mod 3. Prioridade: Menos un´ario (oposto) 4. Prioridade: Potencia¸ca˜o 5. Prioridade: Multiplica¸ca˜o e divis˜ ao 6. Prioridade: Adi¸ca˜o e subtra¸ca˜o 7. Prioridade: Compara¸co˜es (>, succ(’9’) ´e ’:’ e succ(9) ´e 10. Uma aplica¸ca˜o interessante para esta fun¸ca˜o ´e a substitui¸ca˜o do incremento de vari´aveis. Por exemplo, em vez de fazer: I ← I + 1; podemos fazer I ← suc(I); vers˜ ao de 10 de fevereiro de 2008 67 ©88-08, Pedro Kantek Pred Esta fun¸ca˜o devolve o predecessor, e tamb´em s´o se aplica a ordinais pr´e-definidos. Tamb´em (tal como no suc) o tipo da resposta ´e o mesmo tipo do operando. Exemplos: pred(’b’) ´e ”a” pred(FALSO) ´e VERDADEIRO pred(23) ´e 22, e assim por diante. 3.4.2 Relacionais As express˜oes relacionais s˜ao as que envolvem os operadores =, 6=, >, ≥, < e ≤. Este ´ comum operadores visam a estabelecer se uma dada proposi¸ca˜o ´e falsa ou verdadeira. E em qualquer linguagem de programa¸ca˜o, comparar-se 2 valores, perguntando, por exemplo, se o primeiro ´e maior do que o segundo. A resposta, na forma l´ogica, dir´ a se a afirma¸ca˜o ´e ou n˜ao ´e verdade. S˜ao eles: igual (=), diferente (6=), maior (>), maior ou igual (≥), menor ( 5?, a resposta ser´a “falso”. Note que n˜ao ´e permitido (ou seja gera-se um erro), misturar valores de tipos distintos. Ent˜ao, a compara¸ca˜o ’A’ 6= 3, embora logicamente pudesse estar correta (ou seja a letra A n˜ao ´e igual ao n´ umero 3), d´a erro em qualquer linguagem de programa¸ca˜o e portanto est´ a proibida de ser usada na constru¸ca˜o de algoritmos. A exce¸ca˜o a` regra acima ´e quando se comparam dois n´ umeros, sendo um deles do tipo inteiro e outro do tipo real. Embora de tipos diferentes (inteiro e real), a matem´atica permite fazer essa compara¸ca˜o, j´ a que ambos s˜ao n´ umeros. Tem-se ent˜ao que os operandos poder˜ao ser de qualquer tipo, desde que compat´ıveis, mas a resposta sempre ser´a do tipo l´ogico. Fun¸ca˜o Formato Objetivo Operando Resultado Exemplo Igual A = B Comparar o ambos .V. se A = B 3 = 4 ´e .F., conte´ udo de A e inteiros, e .F. se A 6= 66.0 = 66 ´e .V., de B reals ou al- B. ”AB”= ”ab”´e .F. fanum´ericos Diferente A 6= B igual ao anterior igual ao an- .V. se A 6= B 3 6= 4 ´e .V., 66.0 terior e .F. se A = 6= 66 ´e .F. B. ”AB”6= ”AB”´e .F. Maior A > B igual ao anterior ambos in- .V. se A > B 5 > 2 ´e .V. teiros ou e .F. se A ≤ 2 > 5 ´e .F. reais B. Maior ou A ≥ B igual ao anterior igual ao an- .V. se A ≥ B 5 ≥ 2 ´e .V. igual terior e .F. se A < 2 ≥ 2 ´e .V. B. Menor A < B igual ao anterior igual ao an- .V. se A < B 5 < 2 ´e .F. terior e .F. se A ≥ 2 < 5 ´e .V. B. Menor ou A ≤ B igual ao anterior igual ao an- .V. se A ≤ B 2 ≤ 5 ´e .V. igual terior e .F. se A > 2 ≤ 2 ´e .V. B. 3.4.3 L´ ogicas As express˜oes l´ogicas envolvem valores l´ogicos (verdadeiro e falso) conectados por op˜ eradores l´ogicos, que s˜ao 3: “E” (∧), “OU” (∨) e “NAO” (¬ ou ∼). Estes operadores ©88-08, Pedro Kantek 68 vers˜ ao de 10 de fevereiro de 2008 CAP´ITULO 3. ESCREVENDO ALGORITMOS CAP´ITULO 3. ESCREVENDO ALGORITMOS destinam-se as opera¸co˜es l´ogicas entre operandos. Eles atuam sobre os valores V (verdade) e F (falso). Acompanhe a seguir as tabelas verdade: Em termos verbais a express˜ao A ∧ B ser´a verdadeira quando A e B forem verdadeiros e ser´a falsa sen˜ao. Vendo na tabela a seguir: ∧ verdadeiro falso verdadeiro verdadeiro falso verdadeiro verdadeiro verdadeiro ser´a verdadeira quando... A e C forem verdadeira ou B e C forem verdadeiras D for falsa E e F forem verdadeiras ou ent˜ao se G for verdadeiro Exerc´ıcio 11 Suponha que vocˆe vai escrever um algoritmo em portugol para resolver as raizes de ax2 +bx+c = 0. Quais vari´aveis seriam necess´arias e como elas seriam definidas ? falso falso falso A express˜ao A ∨ B ser´a verdadeira quando A for verdadeiro ou B for verdadeiro ou ainda quando ambos forem verdadeiros. A express˜ao s´o ser´ a falsa quando A e B forem falsos. Veja: ∨ verdadeiro falso express˜ao l´ogica (A ∨ B) ∧ C ∼D (E ∧ F) ∨ G falso verdadeiro falso Exerc´ıcio 12 Quando crian¸ca Gauss resolveu a somat´oria 1 + 2 + 3 + ... + 4998 + 4999 + 5000, de uma forma brilhante, intuindo toda a teoria de progress˜ oes. Se vocˆe tivesse que resolver o problema de Gauss, quais vari´aveis definiria, e como elas seriam definidas ? Exerc´ıcio 13 Para cada uma das f´ormulas a seguir, supor que ser´a criado um algoritmo, no qual vocˆe dever´a dizer quais vari´aveis ser˜ao necess´arias e como ser˜ao definidas: 1. per´ımetro de um retˆangulo 2. c´alculo do terceiro ˆangulo de um triˆangulo, dados 2 ˆangulos. ˜ A), devolve o valor l´ogico oposto ao de Finalmente, a express˜ao ∼ A (lida como NAO A. Ent˜ao ∼ verdadeiro ´e falso e ∼ falso ´e verdadeiro. ∼ ou ¬ verdadeiro falso falso verdadeiro 3. c´alculo da quantidade de azulejos a serem colocados em um banheiro. 4. Volume de uma lata de leite 5. Pre¸co a pagar pelo estacionamento de um ve´ıculo. Exerc´ıcio 14 Informe qual o resultado esperado para a vari´avel VAR1 Fun¸ca˜o E-l´ogico Formato Objetivo A ∧ B Realizar a opera¸ca˜o E-l´ogico Operando ambos l´ogicos OUl´ogico A∨B Realizar a opera¸ca˜o OU-l´ogico ambos cos ˜ NAOl´ogico ∼A ou ¬A Nega logicamente A l´ogico l´ogi- Resultado .V. se A e B s˜ao .V., .F. em caso contr´ ario .V. se A ou B s˜ao .V., .F. em caso contr´ ario .V. se A ´e .F. .F. se A ´e .V. Exemplo .V. ∧ .V. ´e .V. .V. ∧ .F. ´e .F. .F. ∧ .V. ´e .F. .F. ∧ .F. ´e .F. .V. ∨ .V. ´e .V. .V. ∨ .F. ´e .V. .F. ∨ .V. ´e .V. .F. ∨ .F. ´e .F. ∼ .F. ´e .V. ∼ .V. ´e .F. As palavras“verdadeiro”e “falso” bem como os s´ımbolos ”V”e ”F” podem ser considerados constantes l´ogicas tamb´em chamadas booleanas e podem ser empregados livremente na constru¸ca˜o dos algoritmos. As duas constantes, formam um conjunto ordenado, e podemos dizer que o F (falso) precede o V (verdadeiro). Como uma ajuda, podemos associar o Falso ao zero, e o Verdadeiro ao 1. Com isto todas as rela¸co˜es num´ericas entre 0 e 1 continuam verdadeiras entre FALSO e VERDADEIRO. A grande importˆancia dos valores l´ogicos em portugol, decorre do fato de que qualquer compara¸ca˜o usando os operadores relacionais sempre devolve um l´ ogico. A importˆancia das express˜oes l´ogicas ´e que elas permitem conectar duas ou mais express˜oes relacionais, formando uma nova e maior express˜ao relacional. Veja-se nos exemplos: vers˜ ao de 10 de fevereiro de 2008 69 ©88-08, Pedro Kantek VAR1 VAR1 VAR1 VAR1 VAR1 VAR1 VAR1 ← ← ← ← ← ← ← (1 + (2 × (3 + 1) ÷ 2)) - 2 sqr(3) 2 × trunc(1.999) abs(-(3 - 4)) trunc(1.5) - frac(1.5) sen(3.1415÷4) ÷ cos(3.1415÷4) 2 ÷ (2 × 3) Exerc´ıcio 15 Nos exerc´ıcios a seguir, o aluno deve: ˆ Achar o resultado da express˜ao ˆ Descobrir-lhe o tipo ˆ Definir uma vari´avel para conter este resultado. Exemplo: 1 + 1 + 2, ter´a como resposta: 4, inteiro, SOM:inteiro; SOM ← 4 1. 1 ÷ 2 2. 1 + 3 ÷ 1 3. trunc (3.5 + 2) 4. sen (1) 5. sen (0.33333) + cos (0.33333) 6. 1 × 2 × 3 × 4 × 5 × -6 ©88-08, Pedro Kantek 70 vers˜ ao de 10 de fevereiro de 2008 CAP´ITULO 3. ESCREVENDO ALGORITMOS CAP´ITULO 3. ESCREVENDO ALGORITMOS Exerc´ıcio 17 Quanto ´e 400 mod 51 7. 2 > 3 8. 1 + 3 < 4 9. 5 = 4 + 1 Exerc´ıcio 16 Na s´erie de exerc´ıcios a seguir, considere o seguinte conjunto de vari´aveis: X ← 5 (inteiro) Y ← 1 (inteiro) AA ← 0.5 (real) BB ← 4.9 (real) CC ← 3 (real) Para cada express˜ao pedida, calcule o resultado e determine o tipo (inteiro ou real) do resultado. 1. (AA - X) ÷ CC 2. CC + abs(trunc(BB)) 3. frac(AA) - AA Exerc´ıcio 18 Informe qual o valor final para VAR3 VAR3 ← (3 ≥ 2) ∨ (1 = 3) VAR3 ← (1 + 1) = (3 - 1) VAR3 ← (trunc(1.5 × 4) > 6) ∧ (1 6= 2) 4. X + Y + CC 5. sqrt(trunc(BB-AA)) Exerc´ıcio 19 Informe qual o valor da vari´avel VAR2 6. (round(AA+BB)) mod CC VAR2 VAR2 VAR2 VAR2 VAR2 VAR2 VAR2 VAR2 VAR2 VAR2 VAR2 7. 1 + sqr(X - Y) 8. 1 + sqr(X) - Y 9. 5 × X × round(BB) 10. AA - abs(BB) 11. abs (AA - BB) 12. abs (AA) - abs (BB) 13. frac (int (BB)) ← ← ← ← ← ← ← ← ← ← ← VERDADEIRO ∼ FALSO ∼ ∼ VERDADEIRO (”...Eu n˜ao disse que nunca viajaria...”) FALSO ∨ FALSO VERDADEIRO ∧ (∼ VERDADEIRO) (∼ FALSO) ∨ (∼ VERDADEIRO) (FALSO OU VERDADEIRO) ∧ (∼ VERDADEIRO) FALSO ∧ FALSO FALSO ∨ FALSO VERDADEIRO ∧ (∼ VERDADEIRO) VERDADEIRO ∧ VERDADEIRO Exerc´ıcio 20 Informe qual o valor para a vari´avel VAR4. 14. (X + Y) ÷ AA VAR4 VAR4 VAR4 VAR4 VAR4 VAR4 VAR4 VAR4 VAR4 VAR4 VAR4 VAR4 VAR4 VAR4 VAR4 15. trunc (Y + AA) 16. X + Y + AA + CC 17. X + CC 18. X + Y 19. cos (int(AA)) 20. round (AA) 21. round (BB + AA) 22. trunc (AA - BB) vers˜ ao de 10 de fevereiro de 2008 30 mod 7 (5 mod 4) + (22 div 10) + (3 mod 2) 4376 mod 10 4376 mod 100 4376 mod 1000 4376 mod 10000 10 mod 4 10 div 4 cos (9 div 11) trunc (abs (round (6 div 6))) (1 + 5) mod 3 1 + (5 mod 3) (2 × 4) mod 2 2 × (4 mod 2) 10000 mod 1 5 div 0 71 ©88-08, Pedro Kantek ← ← ← ← ← ← ← ← ← ← ← ← ← ← ← ((frac(0.999) - 1) > 0 1=2 1+2=2 0.5 ≥ 2.5 - trunc(2.9000) 3>1+1 1+3×4 2 × sqr(3 × 2 + 1) 1×2×3×4×0+1 ((2 × 2) + 2) × 3 33 > (32 + trunc(2.45) - frac(0.5)) 0.20 - 0.5 2×3×4+2×3×4 (4 × (2 ÷ 2 × 2) ≥ 3.5) ∧ (1 = 3 × 0) (trunc (sen (3.14/2)) = 1) ∧ VERDADEIRO FALSO ∨ ((1 + 2) > (6 div 3)) ©88-08, Pedro Kantek 72 vers˜ ao de 10 de fevereiro de 2008 CAP´ITULO 3. ESCREVENDO ALGORITMOS VAR4 VAR4 VAR4 VAR4 VAR4 VAR4 VAR4 ← ← ← ← ← ← ← CAP´ITULO 3. ESCREVENDO ALGORITMOS (5 div 2) > (trunc (3.5) + frac(3.5)) 7÷2+2>0 5+5-5 (10 + frac(0) + trunc(0) - 10) > 5 5 > 6 div 3 + 2 mod 1 + 0 mod 6 2×8÷4÷2 (1 + trunc (13.5) × 2) × (1 ÷ (2 + 1)) vers˜ ao de 10 de fevereiro de 2008 73 ©88-08, Pedro Kantek ©88-08, Pedro Kantek 74 vers˜ ao de 10 de fevereiro de 2008 CAP´ITULO 4. COMANDOS Pode-se afirmar com certeza que primeiro ser´a executado o comando 1. Depois dele ´e que ser´a executado o comando 2, e a´ı o valor da vari´ avel A j´ a estar´a estabelecido corretamente. 4.3 Cap´ıtulo 4 Comandos 4.1 Vis˜ ao Top down e Bottom up Estes termos, consagrados no jarg˜ao da inform´atica, significam maneiras de atacar e resolver um problema em computador. A maneira top down, que pode ser traduzido como ”de cima para baixo”, pressup˜oe estudar o problema como um todo, e depois ir realizando a montagem do esquema completo, atrav´es da execu¸ca˜o das partes, mas sem nunca esquecer o modelo completo. A vis˜ ao bottom up, parte da constru¸ca˜o individual de todos os elementos, que poste´ poss´ıvel fazer sistemas de computador usando as riormente s˜ao juntados e testados. E duas t´ecnicas. Fazendo uma analogia (meio mambembe, mas v´a l´a) com a montagem de um carro, na vis˜ ao top down a primeira coisa a fazer seria juntar a carroceria e as rodas, de maneira que o carro conseguisse se mover. Depois, os diversos sistemas e componentes iriam sendo instalados pe¸ca a pe¸ca no carro e a cada etapa o carro continuaria a andar em suas pr´oprias rodas. A montagem terminaria quando o carro andasse sozinho. J´a na vis˜ ao bottom up cada um dos sistemas (motor, bancos, instrumenta¸ca˜o, ...) seria montado isoladamente, testado e em caso de sucesso levado aonde o carro est´ a sendo constru´ıdo e a´ı posto em conex˜ ao com os outros sistemas do carro. O processo tamb´em termina quando o carro sair andando. O exemplo n˜ao ´e dos melhores, porque um carro ´e diferente de um programa de computador. L´ a se lida com coisas f´ısicas que ocupam espa¸co e pesam para ser carregadas. Aqui se fala de entidades abstratas (dados e programas). Outro exemplo, este talvez algo melhor ´e a proposta de escrever um livro. Antes de tudo h´a que se ter o plano completo da obra, mas depois ´e poss´ıvel visualizar a constru¸ca˜o top down e a constru¸ca˜o bottom up. 4.2 Sequ encia de execu¸ c˜ ao ¨ˆ Vale lembrar que a menos que o comando em quest˜ao determine outro caminho, os comandos dentro de um algoritmo v˜ao sendo executado seq¨ uencialmente, come¸cando no primeiro e terminando no u ´ ltimo, e sempre esperando terminar este para come¸car o pr´oximo. Diz-se nestes casos que o fluxo cai por decanta¸ca˜o. Assim, por exemplo, na seq¨ uˆencia 1: A ← 1 2: B ← 2 + A 75 Entrada/Sa´ıda A maioria dos algoritmos necessitar´ a receber dados externos, e em algum momento do seu processamento precisar´a comunicar respostas. Para resolver estes dois problemas ´ atrav´es deles que o algoritmo se existem os chamados comandos de entrada/sa´ıda. E comunica com o mundo externo. Desprezando as complexidades inerentes a um processo de transferˆencia de dados em um computador real – eis a´ı a principal vantagem do portugol –, os comandos que se usar˜ao s˜ao dois: leia e escreva. O verbo ou comando “leia” significar´ a uma entrada de dados externos para dentro do algoritmo. A forma desta entrada, isto ´e se os dados v˜ao entrar pelo teclado, v˜ao ser lidos do disco ou vir˜ ao por uma linha telefˆonica ´e quest˜ ao que n˜ao interessa agora. Nos pr´oximos anos do curso, haver´a muitas horas de aula sobre estas quest˜ oes. Agora s´o interessa o fato de que o dado entra para o algoritmo e pronto. Da mesma forma, para a sa´ıda dos dados, usar-se-´ a o comando escreva, que tamb´em n˜ao significa obrigatoriamente impress˜ao em papel. Estes dados podem estar saindo no v´ıdeo, em um plotter, em um disco, linha telefˆonica etc. O formato destes comandos ´e: leia (nome1, [nome2, ...]) Ao lado do verbo leia, e entre parˆenteses, deve-se escrever as vari´ aveis que dever˜ao ter seus valores fornecidos neste comando. Os identificadores citados j´ a dever˜ao ter sido definidos anteriormente no programa. Em geral (regra heur´ıstica) dados que v˜ao ser lidos n˜ao precisam ser inicializados antes. O comando de impress˜ao ´e: escreva ([mensagem] nome1) ´ Este comando externa um resultado dispon´ıvel a quem est´ a operando o algoritmo. E claro que os valores a imprimir ter˜ ao que ter sido inicializados e/ou calculados antes da impress˜ao. As vari´ aveis a escrever tem seu nome citado entre parˆenteses. Exemplos de leitura: VALOR1, VALOR2: inteiro leia (VALOR1, VALOR2) De impress˜ao VALOR1: inteiro VALOR1 ← .... escreva (“O valor obtido ´e ”, VALOR1) Na impress˜ao ´e comum se colocar constantes alfanum´ericas, mensagens ou textos explicativos antes ou depois dos dados para clarear e facilitar a leitura humana posterior. Por exemplo, ao calcular uma raiz na vari´ avel RZ, ´e muito melhor escrever “escreva (’A raiz e’,RZ)”, do que simplesmente “escreva (RZ)”. Neste u ´ ltimo caso, o dado ficaria perdido (no v´ıdeo, no papel, ...) sem que o operador soubesse o que era aquilo. Identicamente, para imprimir uma a´rea, ´e melhor fazer “escreva (AR,’m2’)”, do que fazer s´o “escreva(AR)”. 4.3.1 Comando de Entrada Permite a introdu¸ca˜o de valores para vari´ aveis previamente definidas. ©88-08, Pedro Kantek 76 vers˜ ao de 10 de fevereiro de 2008 CAP´ITULO 4. COMANDOS CAP´ITULO 4. COMANDOS leia ( [,,...]) in´ıcio Por exemplo, 1: A, B : inteiro 2: RAIZ : real 3: leia (A, B, RAIZ) 1: 2: 3: 4: 5: 4.3.2 Comando de Sa´ıda 6: 7: Permite a gera¸ca˜o de resultados por parte do algoritmo. Permite mesclar vari´ aveis e express˜oes. Em geral, as express˜oes alfanum´ericas inclu´ıdas no comando servem para auxiliar na interpreta¸ca˜o dos resultados gerados. escreva ( | [, | ...]) 1: Por exemplo, escreva (”a raiz procurada e ”, RAIZ) 4.4 O comando alternativo Como j´ a se disse este ´e o comando que permite versatilidade e generalidade aos algoritmos. Ao permitir-se modificar caminhos tendo em vista certas condi¸co˜es ´e que o algoritmo habilita o computador a “pensar” (as aspas, por favor). 4.4.1 8: 9: se condi¸ca˜o ent˜ ao c1 c2 ... sen˜ ao c10 c11 ... fimse 4.4.2 condi¸ ca ˜o v c1 c2 ... c10 c11 ... fim Alternativa composta ´ uma extens˜ E ao da alternativa simples. Neste caso podemos determinar o que fazer se a condi¸ca˜o verdadeira, e o que fazer se a condi¸ca˜o for falsa. O formato deste comando ´e (`a esquerda em linguagem algor´ıtmica, portugol, e a` direita em fluxograma. Se a condi¸ca˜o estabelecida ´e verdadeira, s˜ao executados os comandos c1, c2, ... e n˜ao s˜ao executados os comandos c10, c11.... Se a condi¸ca˜o ´e falsa, s˜ao executados os comandos c10, c11, ..., mas n˜ao os primeiros. Neste caso a identa¸ca˜o tamb´em ´e importante. Os comandos “se”, “sen˜ ao” e “fimse” come¸cam na margem corrente. Todos os demais comandos internos a este deixam uma identa¸ca˜o de 3 caracteres. Exemplo: Alternativa simples in´ıcio Existem oportunidades em que um determinado comando dentro de um algoritmo s´o deve ser executado se certas condi¸co˜es o permitirem. Por exemplo, ao olhar se uma pessoa est´ a quites com as suas obriga¸co˜es militares, isto deve ser feito apenas se o sexo da pessoa ´e masculino. Em nosso pa´ıs, mulheres est˜ ao desobrigadas de tais tratativas. O comando que identifica uma a¸ca˜o condicional ´e o comando ”SE”, que tem o seguinte formato: se ent~ ao a¸ c~ ao fimse A condi¸ca˜o ´e uma express˜ao cujo resultado final ´e do tipo l´ogico, isto ´e VERDADEIRO ou FALSO. A a¸ca˜o pode ser um comando simples ou uma seq¨ uˆencia de comandos. Exemplo: 1: se DELTA < 0 ent˜ ao 2: escreva (”n˜ao ´e poss´ıvel extrair esta raiz”); 3: fimse Para efeito de clareza na leitura de um algoritmo, costuma-se identar os comandos subordinados a uma condi¸ca˜o. Esta ´e a raz˜ ao pela qual se deixou 3 espa¸cos em banco ao in´ıcio do comando escreva no exemplo acima. A margem deve ser trazida ao que era antes do comando “se”, apenas quando se escrever o fimse correspondente. vers˜ ao de 10 de fevereiro de 2008 77 ©88-08, Pedro Kantek DELTA ← 4 ×A×Csqr(B) DELTA < 0 1: v 2: 3: escreva (”raizes imagin´ arias”) DELTA ← 4 × A × C - sqr(B) se DELTA < 0 ent˜ ao escreva (”raizes imagin´ arias”) 4: sen˜ ao 5: X ← sqrt(DELTA) 6: fimse 4.4.3 X← sqrt(DELTA) fim Alternativas aninhadas Nada impede que exista uma condi¸ca˜o dentro de outra, (regra da programa¸ca˜o estruturada) e assim por diante. Nestes momentos a identa¸ca˜o ´e mais importante ainda. Repare no exemplo a seguir: Para ver a vantagem da identa¸ca˜o analisar-se-´ a exatamente o mesmo c´ odigo, por´em escrito sem este recurso: ©88-08, Pedro Kantek 78 vers˜ ao de 10 de fevereiro de 2008 CAP´ITULO 4. COMANDOS CAP´ITULO 4. COMANDOS ... valor OK ... sen˜ ao 4: ... valor ERRADO ... 5: fimse 2: in´ıcio 3: A 6= 0 v 1: B←0 2: 3: 4: C 6= 0 v D←0 1: 2: 3: 4: 5: 6: 7: 8: 1: 2: 3: 4: 5: 6: 7: 8: se A 6= 0 ent˜ ao B←0 se C 6= 0 ent˜ ao D←0 F←3 fimse G ← 77 fimse F←3 G ← 77 fim se A 6= 0 B←0 C 6= 0 D←0 F←3 fimse G ← 77 fimse Exerc´ıcio 21 Reescreva as condi¸co˜es acima usando a condi¸c˜ao de igual. Cada se tem que ter um fimse correspondente. Ao percorrer o fluxo, encontrando um fimse encerra-se o u ´ ltimo se aberto. Esta regra ´e importante para determinar o fim de SE’s aninhados. Ao examinar um comando se, deve-se agir da seguinte forma: Se a condi¸ca˜o que acompanha o se for verdadeira, os comandos internos ao se devem ser executados. Se, ao contr´ ario, a condi¸ca˜o n˜ao for verdadeira, ent˜ao, todos os comandos seguintes devem ser pulados at´e ser encontrado o comando fimse correspondente. Agora ´e hora de voltar um pouco na teoria e relembrar o conceito das opera¸co˜es com operadores l´ogicos (VERDADEIRO e FALSO). Tais opera¸co˜es eram: ∧, ∨ e ∼. Usando-as, em conjunto com o comando se simples ou composto, podemos criar trechos de algoritmo muito ricos. Veja-se alguns exemplos: Definir se um valor esta compreendido entre 10 e 35, inclusive: 1: se VALOR > 9 ∧ VALOR < 36 ent˜ ao vers˜ ao de 10 de fevereiro de 2008 79 ©88-08, Pedro Kantek 5: Definir se um valor num´erico representativo de um mˆes, est´ a correto se MES > 0 ∧ MES < 13 ent˜ ao ... mes OK ... sen˜ ao ... mes ERRADO ... fimse Um certo c´ odigo pode assumir os seguintes valores: 10, 15, 17, 18 e 30. Testar se ele est´ a ou n˜ao correto. 1: se COD = 10 ∨ COD = 15 ∨ COD = 17 ∨ COD = 18 ∨ COD = 30 ent˜ ao 2: ... c´ odigo OK ... 3: sen˜ ao 4: ... c´ odigo ERRADO ... 5: fimse ˜ e n˜ao do ENTAO, ˜ As vezes ´e mais f´ acil organizar a sa´ıda correta atrav´es do SENAO o que inverte o comando. Vejamos um exemplo. Um indicador estar errado, se assumir os valores: 1, 4, 5, 6, 7, ou 9. Organizar o comando: 1: se IND = 1 ∨ IND = 4 ∨ IND = 5 ∨ IND = 6 ∨ IND = 7 ∨ IND = 9 ent˜ ao 2: ... indicador ERRADO ... 3: sen˜ ao 4: ... indicador CERTO ... 5: fimse Se entretanto, quis´essemos n˜ao inverter as saidas, precisar´ıamos negar as condi¸co˜es. Atente-se a que a nega¸ca˜o de um conjunto de OUs ´e um conjunto de Es. 1: se IND 6= 1 ∧ IND 6= 4 ∧ IND 6= 5 ∧ IND 6= 6 ∧ IND 6= 7 ∧ IND 6= 9 ent˜ ao 2: ... indicador CERTO ... 3: sen˜ ao 4: ... indicador ERRADO ... 5: fimse 1: 2: 3: 4: 5: 1: 2: 3: 4: 5: Outra maneira de escrever o comando acima, seria: se (IND = 1) ∨ (IND > 3 ∧ IND < 8) ∨ (IND = 9) ent˜ ao ... indicador ERRADO ... sen˜ ao ... indicador CERTO ... fimse Finalmente, se quis´essemos manter as saidas sem invers˜ao: se (IND 6= 1) ∧ (IND ≤ 3 ou IND ≥ 8) ∧ (IND 6= 9) ent˜ ao ... indicador CERTO ... sen˜ ao ... indicador ERRADO ... fimse ©88-08, Pedro Kantek 80 vers˜ ao de 10 de fevereiro de 2008 CAP´ITULO 4. COMANDOS Em resumo, a nega¸ c˜ ao de CAP´ITULO 4. COMANDOS IGUAL DIFERENTE MAIOR MENOR MENOR OU IGUAL MAIOR OU IGUAL E OU misturarando tudo Funciona, embora n˜ao seja uma boa id´eia. 1: se MD ≥ 7 ∧ AA ≥ 45 ent˜ ao 2: ...APROVADO 3: sen˜ ao 4: se AA ≥ 45 ent˜ ao ´ 5: ...REPROVADO POR MEDIA 6: sen˜ ao 7: se MD ≥ 7 ent˜ ao ¨ 8: ...REPROVADO POR FREQUENCIA 9: sen˜ ao ´ 10: ...REPROVADO NOS 2 CRITERIOS 11: fimse 12: fimse 13: fimse ´e DIFERENTE IGUAL MENOR OU IGUAL MAIOR OU IGUAL MAIOR MENOR OU E Outro Exemplo: Suponhamos o seguinte trecho de l´ogica: Um aluno estar´a aprovado se: ˆ Tiver m´edia maior ou igual a 7,00 E ˆ Tiver assistido a 45 ou mais aulas Na programa¸ca˜o, o demˆonio se esconde nos detalhes, Niklaus Wirth Supondo que a m´edia ´e a vari´ avel M, e que o n´ umero de aulas assistidas ´e a vari´ avel AA, poderia ficar Exerc´ıcio 22 Defina um algoritmo que receba s´eries de 3 valores reais indicativos de usando SEs aninhados lados de um triˆangulo, medidos em cent´ımetros. Para cada tripla, o programa deve responder as seguintes perguntas: Veja na figura 4.4.3 1. Tais lados podem formar um triˆangulo ? 2. Este triˆangulo ´e retˆangulo ? in´ıcio 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: se MD ≥ 7 ent˜ ao se AA ≥ 45 ent˜ ao ...APROVADO sen˜ ao ˆ ¨ ENCIA ...REPR. FREQU fimse sen˜ ao se AA≥ 45 ent˜ ao ´ ...REPR. MEDIA sen˜ ao ...REPR. NOS 2 fimse fimse 3. Este triˆangulo ´e equil´atero ? MD ≥ 7 4. Este triˆangulo ´e is´ osceles ? v 5. Este triˆangulo ´e escaleno ? AA ≥ 45 AA≥ 45 v ...APROVADO 6. Este triˆangulo ´e acutˆangulo ? 7. Este triˆangulo ´e obtusˆangulo ? v ...REPR. ˆ ¨ ENFREQU CIA ...REPR. ´ MEDIA ...REPR. NOS 2 fim usando SEs compostos 1: se MD ≥ 7 ∧ AA ≥ 45 ent˜ ao 2: ...APROVADO 3: fimse 4: se MD ≥ 7 ∧ AA < 45 ent˜ ao ¨ 5: ...REPROVADO POR FREQUENCIA 6: fimse 7: se MD < 7 ∧ AA ≥ 45 ent˜ ao ´ 8: ...REPROVADO POR MEDIA 9: fimse 10: se MD < 7 ∧ AA < 45 ent˜ ao ´ 11: ...REPROVADO NOS 2 CRITERIOS 12: fimse vers˜ ao de 10 de fevereiro de 2008 81 Condi¸co˜es do problema ´e triangulo ? maior < A+B retangulo maior2 = A2 + B2 equilatero A=B=C is´ osceles (A = B) ou (B = C) ou (A = C) escaleno (A 6= B) e (A 6= C) acutˆangulo maior2 < A2 + B2 obtusˆangulo maior2 > A2 + B2 Por exemplo se for lido dever´a ser impresso 3,4,5 sim, retˆangulo, escaleno 3,3,3 sim, equil´atero, acutˆangulo 1,2,7 n˜ao 10,18,10 sim, is´ osceles, acutˆangulo Exerc´ıcio 23 Um c´odigo est´a certo se for maior que 100, ou igual a 50. Escrever um algoritmo portugol que receba este valor e some 1 no c´ odigo se ele estiver errado. Exerc´ıcio 24 Uma data vem acompanhada de um campo chamado DIASEM, cujo valor ´e 1 para domingo, 2 para segunda, ... , 7 para s´abado. Escrever um algoritmo portugol que receba DIASEM e verifique se o dia corresponde a um dia u ´til. (semana inglesa). ©88-08, Pedro Kantek ©88-08, Pedro Kantek 82 vers˜ ao de 10 de fevereiro de 2008 CAP´ITULO 4. COMANDOS CAP´ITULO 4. COMANDOS Exerc´ıcio 25 Escrever um algoritmo portugol que receba (n˜ao importa como) trˆes valores num´ericos (chamados A,B e C), e devolva a informa¸c˜ao ”OK”quando se satisfizerem as seguintes condi¸co˜es: (A deve ser maior que 10 e menor do que 100) OU (B deve ser diferente de C E C deve ser maior que 50). Se a condi¸c˜ao n˜ao for satisfeita, o algoritmo deve devolver a mensagem ”ERRO” 4.5 in´ıcio SOMA:real NUMERO:inteiro SOMA ← 0 NUMERO ← 1 Estruturas de repeti¸ c˜ ao NUMERO < 101 Para obedecer `a terceira estrutura da programa¸ca˜o estruturada e visando o reaproveitamento de c´ odigo, ver-se-˜ ao agora as possibilidades de repetir partes do algoritmo. Estas estruturas cont´em impl´ıcito um comando de desvio (go to) e nas linguagens mais modernas ´e o u ´ nico desvio que ´e aceito. Os trechos de programas que s˜ao repetidos ao se usar as estruturas de repeti¸ca˜o s˜ao conhecidos genericamente com o nome de loops ou em portuguˆes “la¸cos”. Assim, um erro de programa¸ca˜o bastante comum ´e o chamado loop infinito, quando inadvertidamente a condi¸ca˜o de sa´ıda ´e tal, que nunca ´e alcan¸cada. v SOMA ← SOMA + NUMERO NUMERO ← NUMERO + 1 1: 4.5.1 Repeti¸ c˜ ao com condi¸c˜ ao no in´ıcio: enquanto Parece razo´avel que um algoritmo deve ser criado para a execu¸ca˜o de um u ´ nico conjunto de valores fornecidos como entrada. Por exemplo, ao escrever o algoritmo de aprova¸ca˜o de alunos na cadeira de algoritmos do Unicenp, o programador s´o precisa se preocupar com um u ´ nico aluno, pois a regra de um vale para todos. N˜ ao teria sentido descrever os mesmos procedimentos para todos os alunos, isto seria intermin´avel, al´em de deixar o algoritmo espec´ıfico para um determinado n´ umero de alunos. Falando em termos mais gen´ericos, ao escrever um programa de computador que calcule o sal´ ario de um empregado, deve-se imaginar apenas um empregado e n˜ao os milhares que o computador processar´a. A chave para este problema est´ a no reaproveitamento de instru¸co˜es do algoritmo. Em outras palavras, uma vez escrito o caminho principal do algoritmo (o chamado caminho das pedras), n´os vamos fazer todos os funcion´ arios (ou alunos) passarem por este caminho. Uma das chaves para este procedimento ´e o comando chamado ENQUANTO. Seu formato: enquanto fa¸ ca c1 c2 ... fimenquanto 3: 4: 5: 6: 7: 8: 9: NUMERO < 101 SOMA:real NUMERO:inteiro SOMA ← 0 NUMERO ← 1 enquanto NUMERO < 101 fa¸ ca SOMA ← SOMA + NUMERO NUMERO ← NUMERO + 1 fimenquanto escreva (SOMA) v escreva (SOMA) fim Comandos internos ao comando “enquanto” devem estar identados de 3 espa¸cos, para clareza. enquanto fa¸ ca ... fimenquanto Por exemplo: leia A enquanto A < 11 fa¸ ca 3: escreva A 4: A←A+1 5: fimenquanto 1: 2: Este comando deve ser assim interpretado. A condi¸ca˜o ´e avaliada. Se ela for falsa, o algoritmo deve saltar todos os comandos subordinados e continuar a execu¸ca˜o ap´ os o comando fimenquanto. Entretanto, se a condi¸ca˜o for verdadeira, os comandos subordinados s˜ao executados, at´e se encontrar o comando fimenquanto. Neste momento, h´a um desvio na seq¨ uˆencia de processamento e um retorno ao comando enquanto. A condi¸ca˜o ´e novamente avaliada. Se falsa, pulam-se os comandos subordinados. Se verdadeira, os comandos s˜ao novamente executados, e assim por diante. Se a condi¸ca˜o for uma ”verdade eterna”, isto ´e, algo como 1 = 1, tem-se um la¸co infinito, pois os comandos nunca deixar˜ao de ser executados. Por outro lado se a condi¸ca˜o for uma tautologia (sempre falsa), ent˜ao os comandos subordinados nunca ser˜ao executados. Exemplo Calcular a soma dos n´ umeros inteiros at´e 100. vers˜ ao de 10 de fevereiro de 2008 2: 83 ©88-08, Pedro Kantek 4.5.2 Repeti¸ c˜ ao com vari´ avel de controle: para O segundo comando que se usa para controlar la¸cos, atende pelo nome de para. Ele pressup˜oe a existˆencia de uma vari´ avel de controle que ir´a (como o nome diz) controlar o in´ıcio e o fim do la¸co. O formato do comando para ´e para vari´ avel DE valor-1 AT´ E valor-2 [PASSO valor-3] fa¸ ca comando 1 comando 2 ©88-08, Pedro Kantek 84 vers˜ ao de 10 de fevereiro de 2008 CAP´ITULO 4. COMANDOS CAP´ITULO 4. COMANDOS 4.5.3 ... comando n fimpara A regra de funcionamento do para ´e: ˆ Antes de come¸car o trecho inclu´ıdo no para, a vari´ avel mencionada no comando ´e inicializada com o valor-1. ˆ Se este valor for menor ou igual ao valor-2 o trecho subalterno ´e executado. ˆ Ao chegar ao final dos comandos, a vari´ avel ´e incrementada com o valor-3 (ou com 1 se nada for referenciado) ˆ H´ a um desvio incondicional, ao in´ıcio do comando para, e o teste definido no passo acima ´e refeito, com idˆenticas sa´ıdas. ˆ Dentro dos comandos subalternos ao para, a vari´ avel de controle n˜ao pode ser alterada pelos comandos escritos pelo usu´ ario. ˆ Os valores 1, 2 e 3 podem ser valores auto-declarados (caso mais comum) ou podem ser quaisquer vari´ aveis num´ericas. Neste caso, elas tamb´em n˜ao podem ser alteradas dentro do para. ˆ Por conven¸ca ˜o, quando o valor do passo for 1, toda a cl´ausula pode ser omitida. Exemplo: o comando PARA K DE 1 ATE 10 equivale ao comando PARA K DE 1 ATE 10 PASSO 1. Uma especial observa¸ca˜o deve ser feita quando o valor-3 (o incremento) for negativo. Nestes casos h´a v´arias invers˜oes no comando, a saber: ˆ O valor 1 deve ser maior do que o valor 2, j´ a que a vari´ avel de controle vai diminuir ao inv´es de aumentar. ˆ O teste de saida ´e para maior ou igual, por idˆentica raz˜ ao. 85 Al´em da instru¸ca˜o enquanto, a maioria das linguagens de alto n´ıvel oferece outras formas de repetir uma parte do programa. A rigor, com uma u ´ nica estrutura poder-seia resolver todos os problemas (como, demonstraram aqueles dois professores italianos). Entretanto, criar um programa n˜ao ´e um exerc´ıcio acadˆemico, ou n˜ao ´e s´o isso. Na universidade, n˜ao h´a pressa, e o rigor cient´ıfico ´e o que importa. Na vida pr´atica h´a pressa, e o rigor ´e importante na medida em que garante qualidade, ele n˜ao ´e um fim em s´ı mesmo. Portanto, visando facilitar, acelerar e simplificar, tem-se aqui um outro comandos de repeti¸ca˜o: repita comando 1 comando 2 ... comando n at´ e Os comandos internos ao repita s˜ao executados enquanto a condi¸ca˜o contida na cl´ ausula at´ e n˜ao for satisfeita. Isto ´e, quando o fluxo chega ao at´ e, a condi¸ca˜o ´e avaliada. Se for verdadeira, o fluxo segue ap´ os o at´ e. Se for falsa, o fluxo retorna ao comando imediatamente seguinte ao repita. Embora parecido com o enquanto, o repita tem algumas diferen¸cas, a saber ˆ Os comandos internos ao repita s˜ ao executados sempre ao menos uma vez, independente da condi¸ca˜o. J´a no enquanto, tais comandos podem n˜ao ser executados nem uma vez. ˆ O la¸co do enquanto ser´ a realizado se a condi¸ca˜o for VERDADEIRA. J´a o la¸co do repita ser´a realizado se a condi¸ca˜o for FALSA. ˆ A estrutura enquanto testa e faz. A estrutura repita faz e testa. Veja-se dois exemplos para ajudar a entender e a guardar estas quest˜oes: 1: para J de 1 at´ e 9 passo 2 fa¸ ca 2: escreva J 3: fimpara Aqui ser˜ao impressos os valores 1, 3, 5, 7 e 9. J´a em 1: para J de 9 at´ e 1 passo -2 fa¸ ca 2: escreva J 3: fimpara Ser˜ao impressos os valores 9, 7, 5, 3 e 1. Devemos lembrar que todo comando para pode ser convertido em seu equivalente enquanto. D´ a mais trabalho (s˜ ao 3 comandos) mas sempre ´e poss´ıvel. J´a a rec´ıproca nem sempre ´e verdadeira. S´o ´e poss´ıvel transformar um enquanto em um para equivalente, quando se souber o n´ umero exato de itera¸co˜es que o enquanto faria. Quando isto for desconhecido a convers˜ao n˜ao ´e poss´ıvel. Exemplos: usando para equivalente usando enquanto para I de 1 at´ e 10 passo 2 I ← 1 escreva I enquanto (I ≤ 10) fimpara escreva I I←I + 2 fimenquanto vers˜ ao de 10 de fevereiro de 2008 Repeti¸ c˜ ao com condi¸c˜ ao no final: repita ©88-08, Pedro Kantek Em geral tudo o que se faz com um deles se pode fazer com o outro. A vantagem ´e que para determinadas situa¸co˜es (que s˜ao espec´ıficas de cada algoritmo) um ou outro pode ser mais indicado, isto ´e pode resolver o problema com menos l´ogica adicional (o chamado ”overhead”) tais como contadores, chaves, testes etc. Uma observa¸ca˜o meio extemporˆ anea, mas ainda assim importante aos java-parlantes ou aos C-parlantes: Nestas duas linguagens o comando de repeti¸ca˜o com condi¸ca˜o no in´ıcio e no final ´e o mesmo. Trata-se do comando while. Muda apenas o local da condi¸ca˜o. Por esta raz˜ ao, n˜ao existe a invers˜ao l´ogica de sa´ıda explicitada acima. Em Java e em C, a sa´ıda quando a condi¸ca˜o aparece depois do bloco ´e quando a condi¸ca˜o ´e ´ o contr´ FALSA. E ario do comando repita acima descrito. Veja-se em exemplos: No portugol acima descrito tem-se Neste trecho ser˜ao impressos os valores 4, 7, 10, 13, 16, 19 e 1000. J´a em Java o trecho ficaria 1: J = 4 2: while { 3: system.out.println (J) // ´ e assim mesmo ? 4: J = J + 3 5: J > 20 6: system.out.println (1000) } Ser´a impresso pelo Java: 4, 1000. ©88-08, Pedro Kantek 86 vers˜ ao de 10 de fevereiro de 2008 CAP´ITULO 4. COMANDOS CAP´ITULO 4. COMANDOS 2. foram pares; in´ıcio J←4 escreva J J←J+3 J > 20 1: 2: 3: 4: 5: 6: 4. foram negativos; Exerc´ıcio Resolvido 1 Escreva um algoritmo que leia uma s´erie de notas (que se encerram quando for lido um n´ umero negativo) e ao final escreva as duas maiores notas que apareceram. Por exemplo, se as notas lidas forem 8, 3, 2, 1, 10, 7, 8, 9, 5, 4 e 3, o algoritmo deve imprimir 10, 9 Como o exerc´ıcio ´e um pouco mais complexo, vamos ver diversas estrat´egias para a sua solu¸c˜ao: v J←4 repita escreva J J←J+3 at´ e J > 20 escreva 1000 escreva 1000 fim tipos de algoritmos (algo jocoso) Uma categoriza¸ca˜o com algo de chacota, mas que ajuda a entender os algoritmos: Le e imprime o algoritmo recebe um dado e a partir dele gera resultados (90% dos algoritmos pertencem a esta classe) Le e esquece o algoritmo recebe um dado, mas n˜ao gera resultado nenhum externo ao computador. (Por exemplo, um programa que atualize o rel´ogio da m´aquina) Inventa e imprima o algoritmo n˜ao recebe nada, mas ao ser acionado gera um resultado (Por exemplo, o algoritmo que estabelece “letra pequena” na impressora matricial. Inventa e esquece ??? Exerc´ıcio 26 Definir algoritmo que escreva a soma dos primeiros 100 n´umeros inteiros (1, 2, 3, ... , 100).. Exerc´ıcio 27 Definir algoritmo que escreva a soma dos primeiros 100 n´umeros pares inteiros (2, 4, 6, ... , 200). Exerc´ıcio 28 Definir algoritmo que some todos os m´ultiplos de 7 compreendidos entre 100 e 10000, e informe ao final, quantos foram os m´ ultiplos e quanto resultou sua soma. Exerc´ıcio 29 Escreva um algoritmo que leia dois n´umeros inteiros n e m e: ˆ Teste se m > n, se n˜ao for dar uma mensagem de erro e terminar o processamento ˆ Somar todos os m´ ultiplos de 13 que estiverem compreendidos entre n e m, inclusive ˆ Imprimir a soma ao final Exerc´ıcio 30 Definir algoritmo que leia 17.000 n´umeros reais e informe, quantos: 1. foram maiores do que 100; vers˜ ao de 10 de fevereiro de 2008 3. foram inteiros; 87 ©88-08, Pedro Kantek 1. primeira estrat´egia 1: enquanto ... fa¸ ca 2: leia(N) 3: se N > P ent˜ ao 4: P←N 5: fimse 6: se N > S ent˜ ao 7: S←N 8: fimse 9: fimenquanto DEFEITO: ao final, P e S ter˜ao o mesmo valor (o maior) 2. segunda abordagem 1: enquanto ... fa¸ ca 2: leia(N) 3: se N > P ent˜ ao 4: P←N 5: fimse 6: se N > S ent˜ ao 7: se N 6= P ent˜ ao 8: S←N 9: fimse 10: fimse 11: fimenquanto DEFEITO: Com a s´erie 1, 10, 2, 8, 5 → funciona Com a s´erie 1, 8, 7, 2, 9 → n˜ao funciona 3. terceira abordagem 1: inteiro NUM, NOT, PNU, PNO, SNU, SNO, X 2: X ← 1 3: PNO ← 0 4: SNO ← 0 5: enquanto X < 100 fa¸ ca 6: leia (NUM, NOT) 7: se NOT > PNO ent˜ ao 8: se PNO > SNO ent˜ ao 9: SNO ← PNO 10: SNU ← PNU ©88-08, Pedro Kantek 88 vers˜ ao de 10 de fevereiro de 2008 CAP´ITULO 4. COMANDOS 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: CAP´ITULO 4. COMANDOS Exerc´ıcio 35 Dados o seguinte trecho de l´ogica escritos usando o enquanto, escrever fimse PNO ← NOT SNO ← NUM fimse se NOT > SNO ent˜ ao se NOT 6= PNO ent˜ ao SNO ← NOT SNU ← NUM fimse fimse fimenquanto escreva (PNO,PNU) escreva (SNO,SNU) trecho equivalente usando o repita 1: Z ← 10 2: enquanto Z > 0 fa¸ ca 3: Z←Z-3 4: escreva (Z) 5: fimenquanto Exerc´ıcio 36 Dado o seguinte algoritmo que utiliza o comando repita escrever comandos equivalentes usando o comando enquanto. 1: GH ← 5 2: repita 3: escreva (ABC) 4: at´ e GH 6= 5 Eis a lista de vari´aveis usada acima NUM = n´ umero do aluno atual NOT = nota do aluno atual PNU = n´ umero do aluno com a melhor nota at´e agora PNO = melhor nota at´e agora SNU = n´ umero do aluno com a segunda melhor nota at´e agora SNO = segunda melhor nota at´e agora X = contador at´e 100 Exerc´ıcio 37 Escreva o trecho a seguir, usando 1. o comando Enquanto e 2. o comando Repita para J de 2 at´e -10 passo -3 fa¸ca K ← sqr(J) escreva K 4: fimpara 1: 2: 3: Exerc´ıcio 31 Definir algoritmo capaz de jogar com o operador o“JOGO DO PALITO”, e de vencer, sempre que poss´ıvel. Este jogo tem a seguinte regra. ˆ S˜ao dois jogadores, a quem chamaremos: m´aquina (programa) e humano. ˆ O humano escolhe um n´ umero de palitos qualquer entre 20 e 30. ˆ A m´aquina retira 1, 2 ou 3 palitos. ˆ O humano tamb´em retira 1, 2 ou 3 palitos, e a seq¨ uˆencia prossegue, at´e que reste apenas um palito. Exerc´ıcio 38 Escrever um algoritmo que leia um u´nico n´umero (que por defini¸c˜ao ´e ˜ PRIMO”se ele for divis´ıvel. Por maior que 3), e escreva ”PRIMO”se ele for primo, ou ”NAO ˜ PRIMO”, e se for lido 11, dever dizer exemplo, se for lido 10, o programa dever dizer ”NAO ”PRIMO”. Exerc´ıcio 39 Definir algoritmo que leia uma seq¨uˆencia de valores num´ericos inteiros e determine, ao final se eles estavam em ordem ascendente ou n˜ao. Se estiverem, deve imprimir ”EM ORDEM”, e se n˜ao estiverem, deve imprimir ”FORA DE ORDEM”. ˆ Quem tirar o u ´ltimo palito perde. Exerc´ıcio 40 Defina algoritmo que calcule e escreva o somat´orio expresso pela seguinte ˆ O programa deve atentar para impedir retiradas diferentes de 1 2 ou 3. s´erie. O n´ umero de termos deve ser lido a priori. 1 1 1 1 S = 1 + 2 + 3 + ... + n 2 3 4 n+1 Dica: Estrat´egia vencedora: deixar o advers´ario sempre com 1, 5, 9, 13, 17, 21, 25 ou 29 Exerc´ıcio 32 Defina algoritmo que calcule e escreva o somat´orio expresso pela seguinte s´erie: S= 20 500 480 460 + + + ... + 2 3 4 26 S= Exerc´ıcio 33 Escreva um algoritmo que leia uma seq¨uˆencia de n´umeros positivos (a condi¸c˜ao de fim ´e a leitura do n´ umero -1) e escreva ao final, qual o n´ umero mais pr´ oximo de 100 que foi lido. DESAFIO: escreva o n´ umero par mais pr´ oximo a 100. Exerc´ıcio 34 Escreva um algoritmo que leia uma seq¨uˆencia de n´umeros positivos (a condi¸c˜ao de fim ´e a leitura do n´ umero -1) e escreva ao final, qual o u ´ltimo n´ umero que foi lido. DESAFIO: escreva o ante-pen´ ultimo, ou -1 se n˜ao houver ante-pen´ ultimo vers˜ ao de 10 de fevereiro de 2008 89 Exerc´ıcio 41 Escreva o algoritmo que leia N e escreva S, onde ©88-08, Pedro Kantek 1 2 3 N + + + ... + 2 3 4 N +1 Exerc´ıcio 42 Dados o seguinte trecho de l´ogica escritos usando o enquanto, escrever trecho equivalente usando o repita. 1: A ← 10 2: B ← 20 3: enquanto (A + B) < 50 fa¸ ca 4: A←A+5 5: B ← B + 10 6: escreva (A+B) ©88-08, Pedro Kantek 90 vers˜ ao de 10 de fevereiro de 2008 CAP´ITULO 4. COMANDOS 7: CAP´ITULO 4. COMANDOS fimenquanto Exerc´ıcio 43 Dados o seguinte trecho de l´ogica escritos usando o enquanto, escrever trecho equivalente usando o repita. 1: K ← 5 2: enquanto K < 10 fa¸ ca 3: K ← K + 1.5 4: escreva (K) 5: fimenquanto 2. o comando Repita para T de 1 at´e 2 passo 2 fa¸ca escreva T fimpara Exerc´ıcio 49 Definir um algoritmo que leia uma s´erie indeterminada de valores posi- Exerc´ıcio 46 Dado o seguinte algoritmo que utiliza o comando repita escrever comandos equivalentes usando o comando enquanto. a) 1: A ← 10 2: repita 3: A←A+1 4: at´ e (A > 10) b) 1: GH ← 5 2: repita 3: escreva (ABC) 4: at´ e (GH 6= 5) c) 1: T ← 0 2: repita 3: T ← T + 0.5 4: escreva (T * 2) 5: at´ e (T > 10) Exerc´ıcio 47 Um comercial de r´adio tem seu custo em fun¸c˜ao de 2 vari´aveis, a saber: dura¸c˜ao e hora de irradia¸c˜ao, segundo a tabela: At´e 10 segundos De 11 a 30 segs Acima de 30 segs de 0 a 5h59min 5 US$ 12 US$ 16 US$ vers˜ ao de 10 de fevereiro de 2008 Exerc´ıcio 48 Escreva um algoritmo capaz de determinar o valor da seguinte s´erie: S= 1. o comando Enquanto e Dura¸c˜ao Os dados terminam quando for lida uma dupla com dura¸c˜ao igual a zero. Valores v´alidos: 0 ≤ Dura¸c˜ao ≤ 60, 0 ≤ Hora ≤ 23 Por exemplo, se o d´olar estiver cotado a R$ 2,20 e forem lidos dever ser impresso 10,4 26,40 R$ 20,23 37,40 R$ 10,23 17,60 R$ 0,0 fim... 2 3 4 5 6 − + − + + ... 1 4 9 16 25 O n´ umero de termos da s´erie deve ser lido, e nunca ser´a maior que 25. Ao final do processamento, o algoritmo deve imprimir o valor da s´erie. Exerc´ıcio 45 Escreva o trecho a seguir, usando 2: 3: 1. leia o valor da cota¸c˜ao do d´olar naquele dia 2. leia s´erie de duplas (dura¸c˜ao,hora) escreva a dupla e o valor a ser cobrado em reais. A dura¸c˜ao est´a dada em segundos. Exerc´ıcio 44 Dado o seguinte algoritmo que utiliza o comando repita escrever comandos equivalentes usando o comando enquanto. 1: T ← 0 2: repita 3: T ← T + 0.5 4: escreva (T × 2) 5: at´ e T > 10 1: ˜ ´e por segundo de comercial. Obs: o pre¸co acima ´e para o comercial inteiro, ou seja, NAO Definir algoritmo que: Hor´ario de 6 a 20h59min 12 US$ 21 US$ 26 US$ 91 tivos, sendo que a marca de fim ´e a leitura do n´ umero -1. O algoritmo deve imprimir qual o u ´ltimo n´ umero lido, imediatamente antes do n´ umero -1. Por exemplo, se for lida a s´erie 3, 7, 21, 4, -1, o algoritmo deve imprimir 4. Exerc´ıcio 50 Defina e escreva um algoritmo para imprimir todos os n´umeros perfeitos entre 1 e 500. Um n´ umero perfeito ´e aquele que ´e igual a soma de todos os seus fatores. O primeiro n´ umero perfeito ´e o 6 (6=1+2+3), logo por defini¸c˜ao o n´ umero 1 n˜ao ´e perfeito. Usar uma fun¸c˜ao para determinar se um n´ umero ´e ou n˜ao ´e perfeito. Outros n´ umeros s˜ao: 28, 496. Depois disso, descobrir qual o pr´ oximo n´ umero perfeito, maior que 500. Exerc´ıcio 51 Defina um algoritmo que calcule e escreva a soma da s´erie a seguir, considerando 50 termos: S= 100 2 4 6 + + + ... + 3 5 7 101 Exerc´ıcio 52 Definir algoritmo que receba uma s´erie de triplas de n´umeros inteiros. Para cada tripla deve ser gerada uma progress˜ao aritm´etica supondo que: ˆ O primeiro elemento da tripla ´e o termo inicial ˆ O segundo elemento da tripla ´e a raz˜ao ˆ O terceiro elemento da tripla ´e o n´ umero de termos Os elementos da PA dever˜ao ser impressos. O processo termina quando for lido um n´ umero de termos igual a zero. de 21 a 24h 8 US$ 17 US$ 22 US$ ©88-08, Pedro Kantek Exerc´ıcio 53 Escreva um algoritmo que leia uma s´erie de n´umeros inteiros e positivos e ao final do processamento escreva qual o maior deles. O processamento se encerra quando for lido qualquer n´ umero negativo que n˜ao deve ser considerado para efeitos de compara¸c˜ao. ©88-08, Pedro Kantek 92 vers˜ ao de 10 de fevereiro de 2008 CAP´ITULO 4. COMANDOS CAP´ITULO 4. COMANDOS Exerc´ıcio 54 Escrever um algoritmo, que receba conjuntos de 3 notas de um aluno. Exerc´ıcio 56 Interprete o seguinte trecho de algoritmo, informando (em portuguˆes) o O primeiro valor corresponde a m´edia do primeiro semestre. O segundo valor ´e m´edia do segundo semestre, e o terceiro valor correspondendo a nota final. Existe uma vari´avel no algoritmo (pr´e-definida) chamada QTD-APROV. Para cada aluno aprovado, o algoritmo deve somar 1 em QTD-APROV. Regra de aprova¸c˜ao: que faz ou para que serve o algoritmo analisado. Estude e informe a condi¸c˜ao de fim. Se necess´ario, realize um ”chinˆes”sobre os dados. 1: inteiro CA,CE 2: leia(CA,CE) 3: enquanto CA 6= CE fa¸ ca 4: se CA < CE ent˜ ao 5: escreva(CA) 6: fimse 7: escreva(CE) 8: leia(CA,CE) 9: fimenquanto (N1 × 3 + N2 × 3 + N3 × 4) ÷ 10 ≥ 7 Os dados terminam quando o primeiro valor da s´erie for negativo. Por exemplo, se QTDAPROV tiver o valor 0, e forem lidas as triplas (5,7,2), (8,8,6), (1,10,5) e (-1,0,0) o resultado final de QTD-APROV ser´a 1. Exerc´ıcio 55 Definir um algoritmo que leia uma s´erie de pares de valores inteiros que representam COMPRIMENTO e LARGURA de um retˆangulo. Calcular e imprimir a ´area do retˆangulo se o per´ımetro do mesmo for superior a 25. Os dados se encerram quando for lida a dupla zero,zero. Por exemplo, se forem lidas as duplas (2,2), (10,8), (10,1) e (0,0) s´o ser´a impressa a ´area 80, equivalente `a dupla (10,8). Exerc´ıcio Resolvido 2 Imagine um rel´ogio anal´ogico de ponteiros. N˜ao existe o ponteiro de segundos, e os ponteiros realizam movimentos discretos, isto ´e, eles s´o se movem a cada 60 segundos. Escreva um algoritmo que leia diversos conjuntos de hora e minuto, e para cada conjunto lido, informe qual o menor ˆangulo que os dois ponteiros fazem entre si ao representar a hora informada. O algoritmo termina quando for lida a dupla 0,0. Os valores permitidos para hora est˜ao entre 0 e 11 e para minuto os valores v´alidos est˜ao entre 0 e 59. A sa´ıda do resultado pode ser em graus e d´ecimos de grau, ou se o aluno preferir em graus e minutos. 1: algoritmo ponteiro 2: inteiro h m 3: real ah am qtm angulo 4: leia (h,m) 5: enquanto h 6= 99 fa¸ ca 6: qtm ← (h * 60) + m 7: ah ← qtm * 0,5 8: am ← qtm * 6 9: enquanto ah ≥ 360 fa¸ca 10: ah ← ah - 360 11: fimenquanto 12: enquanto am ≥ 360 fa¸ca 13: am ← am - 360 14: fimenquanto 15: se se ah > am ent˜ ao 16: angulo ← ah - am 17: sen˜ ao 18: angulo ← am - ah 19: fimse 20: se se angulo > 180 ent˜ ao 21: angulo ← 360 - angulo 22: fimse 23: escreva (angulo) 24: leia(h,m) 25: fimenquanto 26: fim{algoritmo} vers˜ ao de 10 de fevereiro de 2008 93 ©88-08, Pedro Kantek Exerc´ıcio 57 Interprete o seguinte trecho de algoritmo, informando o que faz ou para que serve o algoritmo analisado. Estude e informe a condi¸c˜ao de fim. Se necess´ario, realize um ”chinˆes”sobre os dados. 1: inteiro A,B,C 2: real X } 3: {A ´ e 4: {B ´ e } 5: {C ´ e } } 6: {X ´ e 7: leia(A) 8: B ← 0 9: enquanto A 6= 0 fa¸ ca 10: se A < B ent˜ ao 11: B←A 12: fimse 13: leia(A) 14: fimenquanto 15: escreva (B/2) Exerc´ıcio 58 Interprete o seguinte trecho de algoritmo, informando o que faz ou para que serve o algoritmo analisado. Estude e informe a condi¸c˜ao de fim. Se necess´ario, realize um ”chinˆes”sobre os dados. 1: real PI,R,C 2: {R ´ e } 3: {C ´ e } 4: PI ← 3.141592 5: leia(R,C) 6: enquanto (R 6= 0) ∨ (C 6= 0) fa¸ ca 7: se R = 0 ent˜ ao 8: C ← 2 × PI × R 9: sen˜ ao 10: R ← C ÷ (2 × PI) 11: fimse 12: escreva(R,C) 13: leia(R,C) 14: fimenquanto Exerc´ıcio 59 Siga o seguinte algoritmo, e informe quais os valores de A, B, C e D que s˜ao impressos ao final. ©88-08, Pedro Kantek 94 vers˜ ao de 10 de fevereiro de 2008 CAP´ITULO 4. COMANDOS 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: CAP´ITULO 4. COMANDOS inteiro A, B, C, D A←0 B ← 10 C←B×3 D←B+C+A enquanto D < 0 fa¸ca A←A+1 D←D+1 fimenquanto se A > 0 ent˜ ao D←D×2 sen˜ ao B←B×2 fimse escreva (A,B,C,D) sen˜ao escreva (I,J,K) 15: K ← K + (*3) 16: v´ apara L1 17: fimse 18: fimse 19: fimse 20: L3: J ← J + (*4) 21: K ← 5 22: v´ apara L1 23: L2: I++ 24: J ← (*5) 25: K ← 5 26: v´ apara L1 27: fimalgoritmo Os valores propostos para (*1) (*2) (*3) (*4) e (*5) para que os dois trechos sejam equivalentes s˜ao 13: 14: A:__________ B:__________ C:__________ D:__________ Exerc´ıcio 60 Brinquedos“PIRRALHOS ENDIABRADOS”´e um grande distribuidor de presentes em todo o pa´ıs. Recentemente, a empresa teve a oportunidade de comprar 15.000 pequenos brinquedos, todos embalados em caixas retangulares. O objetivo da compra, foi colocar cada brinquedo em uma esfera colorida, para revendˆe-los como surpresa, mais ou menos como o Kinder ovo. Existem esferas de raios 10, 20 e 30 cm. Cada brinquedo, tem um n´ umero de ordem, e as suas 3 dimens˜ oes A, B e C, medidas em cent´ımetros. Definir um algoritmo que leia 15.000 qu´adruplas (ordem,A,B,C) e para cada uma delas escreva a ordem do brinquedo e o raio da esfera necess´ario. Todos os brinquedos caber˜ao em uma das esferas. Exerc´ıcio 61 Supondo um trecho de c´odigo escrito em pseudo-c´odigo: para I de 1 at´e 100 fa¸ca para J de 3 at´e 11 passo 2 fa¸ca para K de 5 at´e 25 passo 5 fa¸ca 4: escreva (I,J,K) 5: fimpara 6: fimpara 7: fimpara Imagine que vocˆe precisa re-escrever este c´ odigo e a sua nova linguagem n˜ao ´e estruturada, o que significa que n˜ao existem as estruturas para ... fimpara, enquanto ... fimenquanto e nem repita ... at´e. Vocˆe s´o conta com labels, testes e desvios. Eis como ficaria: 1: algoritmo qualquer 2: I ← 1 3: J ← 3 4: K ← (*1) 5: L1: se (I > 100) 6: v´ apara FIM 7: sen˜ ao 8: se (J > 11) 9: v´ apara L2 10: sen˜ ao 11: se (K > (*2)) 12: vapara L3 1: 2: 3: vers˜ ao de 10 de fevereiro de 2008 95 ©88-08, Pedro Kantek a) b) c) d) e) 5, 5, 5, 1, 1, 25, 5, 25, 25, 25, 5, 5, 5, 1, 1, 2, 2 2, 11 2, 11 1, 2 2, 1 Resposta certa: letra (a) 4.5.4 Comando de m´ ultipla escolha: Escolha Nos casos em que h´a m´ ultiplas sa´ıdas para um determinado teste, n´os podemos usar a estrutura de alternativas simples e compostas, devidamente encadeadas. Tal uso (de acordo com os dois mestres italianos) sempre ´e suficiente para a solu¸ca˜o de qualquer problema. Entretanto, para simplificar a poss´ıvel solu¸ca˜o, in´ umeras linguagens tem o comando de teste m´ ultiplo (COBOL tem o GOTO depending ON, PASCAL tem o comando CASE, dbase tem o CASE, APL tem o desvio para um vetor etc). Aqui, usar-se-´ ao seguinte formato: escolha caso valor-1 [: valor-2 caso valor-a [: valor-b ... sen~ ao : comando-z fimescolha ...] : comando-1 ...] : comando-a O funcionamento deste comando ´e simples: A express˜ao que aparece ao lado do comando Escolha ´e avaliada, e deve gerar um resultado determinado. Este resultado ser´a comparado com os valores colocados ao lado direito das palavras caso. Quando um valor igual for encontrado, o comando colocado o seu lado ser´a executado. Finalmente, se nenhum valor for igual, e existir a cl´ ausula sen˜ao, esta ser´a executada. Exemplo 1: ESCOLHA (A + 1) 2: CASO 1 : comando-1; 3: CASO 2 : 3 : 4 : comando-2; ˜ omando-3; 4: SENAO: 5: FIMESCOLHA ©88-08, Pedro Kantek 96 vers˜ ao de 10 de fevereiro de 2008 CAP´ITULO 4. COMANDOS CAP´ITULO 4. COMANDOS Aqui, se A for zero, ser´a executado o comando-1. Se A for 1, 2 ou 3, ser´a executado o comando-2. Se A tiver qualquer valor diferente de 0, 1, 2 ou 3, ser´a executado o comando-3. 4.5.5 Abandono de itera¸c˜ ao: abandone Este comando exige uma sa´ıda incondicional de cada uma das estruturas de repeti¸ca˜o (enquanto, repita ou para), independente de condi¸co˜es. Geralmente, este comando ´e colocado dentro de um ”se”. O desvio sempre se d´a para o comando seguinte ao fim da estrutura que est´ a sendo usada. Eis o formato do comando abandone Este comando s´o tem sentido quando emitido dentro de um la¸co de processamento (dentro de um enquanto, repita ou para). Ele ´e utilizado quando se deseja - a partir de uma determinada condi¸ca˜o - abandonar o processo iterativo em curso. Seu funcionamento ´e simples: ao ser executado, este comando provoca um desvio incondicional para o comando subseq¨ uente ao fim do la¸co. Exemplo 1: enquanto A > 10 fa¸ ca 2: comando 1... 3: comando 2... 4: se B 6= 5 ent˜ ao 5: abandone 6: fimse 7: comando 10... 8: fimenquanto 9: comando 20... 10: ... Neste caso, quando abandone for executado, independente do estado da vari´ avel A (e do teste (A > 10), ser´a executado o comando 20. Assim, quando abandone ´e executado dentro de um para, desvia-se para o comando seguinte ao fimpara. Da mesma forma, quando dentro de um repita executa-se o seguinte a at´ e ... . Se existirem dois ou mais la¸cos (um dentro do outro), e for emitido um abandone, ele vale para o la¸co mais interno. Exemplo 1: enquanto (X = 10) fa¸ ca 2: comando 1 ... 3: enquanto (Y > 20) fa¸ ca 4: comando 10 ... 5: se (Z = 8) ent˜ ao 6: abandone 7: fimse 8: comando 30 ... 9: fimenquanto 10: comando 40... 11: fimenquanto 12: comando 50... Neste caso, ao ser executado o abandone, ser´a executado o comando 40 e n˜ao o comando 50 como poderia parecer a primeira vista. Exerc´ıcio 62 Dados o seguinte trecho de l´ogica escritos usando o enquanto, escrever trecho equivalente usando o repita. vers˜ ao de 10 de fevereiro de 2008 97 ©88-08, Pedro Kantek A←0 enquanto A 6= 3 fa¸ca 3: A←A+1 4: escreva (A) 5: fimenquanto 1: 2: Exerc´ıcio 63 Dado o seguinte algoritmo que utiliza o comando repita escrever comandos equivalentes usando o comando enquanto. 1: A ← 10 2: repita 3: A←A+1 4: at´ e A > 10 Exerc´ıcio 64 Dado o trecho a seguir, escrito usando o comando para, reescreve-lo usando o comando enquanto 1: para J de 1 at´ e 20 fa¸ca 2: X←J÷3 3: escreva (X) 4: fimpara Exerc´ıcio 65 Dado o trecho a seguir, escrito usando o comando para, reescreve-lo usando o comando enquanto 1: para SEMENTE de 0 at´ e 100 passo 2 fa¸ca 2: SEM1 ← SEMENTE × 2 3: SEM2 ← SEMENTE + 1.5 × ABC 4: MEDIA ← (SEM1 + SEM2) ÷ 2 5: escreva MEDIA 6: fimpara Exerc´ıcio 66 Escreva o trecho a seguir, usando 1. o comando Enquanto e 2. o comando Repita para K de 5 at´e 25 passo 3 fa¸ca escreva K+1 3: fimpara 1: 2: Exerc´ıcio Resolvido 3 Dois n´umeros s˜ao considerados ”amigos”quando um n´umero ´e igual a soma dos fatores do outro n´ umero. Por exemplo, 220 e 284 s˜ao ”amigos”, pois 220 ´e igual a soma dos fatores de 284 (142,71,4,2,1) e 284 ´e a soma dos fatores de 220 (110 55 44 22 20 11 10 5 4 2 1). Definir algoritmo que escreva os pares de n´ umeros amigos existentes entre 1 e 500. 1: inteiro i,j,k,l,m,n 2: inteiro fun¸ c˜ao somf (inteiro a) 3: inteiro var ind,som 4: som ← 0 5: para ind ← 1 to a-1 fa¸ ca 6: se a mod ind = 0 ent˜ ao 7: som ← som + i 8: fimse 9: fimpara ©88-08, Pedro Kantek 98 vers˜ ao de 10 de fevereiro de 2008 CAP´ITULO 4. COMANDOS 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: CAP´ITULO 4. COMANDOS retorne som fim{fun¸c˜ao} para i ← 1 to 500 fa¸ca escreva i para j← i to 500 fa¸ca m ← somf(i) n ← somf(j) se (m = j) ∧ (n = i) ent˜ ao escreva (i,j) fimse fimpara fimpara Exerc´ıcio Resolvido 4 Escreva uma fun¸c˜ao que receba um n´umero inteiro positivo k, calcule e devolva o pr´ oximo n´ umero primo x, onde k ≤ x. Solu¸ c˜ ao Para resolver este exerc´ıcio, consideraremos definida e operante a fun¸c˜ao EPRIMO, com o seguinte cabe¸calho l´ ogico fun¸ c~ ao EPRIMO (inteiro x), que devolve VERDADEIRO quando x ´e primo e FALSO sen˜ao. Eis a resposta 1: inteiro fun¸ c˜ ao PROXPRIM (inteiro K) 2: enquanto 1=1 fa¸ ca 3: se EPRIMO(K) ent˜ ao 4: retorne K 5: abandone 6: fimse 7: K++ 8: fimenquanto 9: fimfun¸ c˜ ao Atente para a condi¸c˜ao terminadora do enquanto. J´a que a sa´ıda se dar´a atrav´es do abandone, qualquer condi¸c˜ao sempre verdadeira pode ser colocada a´ı. Exerc´ıcio Resolvido 5 Vocˆe tem uma cole¸c˜ao seq¨uencial de 10.000.000 de apostas na sena. Para cada apostador, existem os 6 n´ umeros em que ele jogou e mais o n´ umero da aposta, que posteriormente identificar´a o apostador. Suponha uma fun¸c˜ao l´ ogico ganhou (inteiro a1, a2, a3, a4, a5, a6) que devolve VERDADEIRO se esta aposta ´e vencedora e FALSO sen˜ao. Suponha tamb´em que a condi¸c˜ao de fim de dados ´e a leitura de a1 negativo. Solu¸ c˜ ao Para resolver este exerc´ıcio, duas hip´oteses podem ser consideradas: a primeira faz uma dupla leitura (uma fora e outra dentro do loop). 1: algoritmo SENA 2: inteiro a1, a2, a3, a4, a5, a6, apostador 3: leia (a1, a2, a3, a4, a5, a6, apostador) 4: enquanto a1 > 0 fa¸ ca 5: se ganhou (a1, a2, a3, a4, a5, a6) ent˜ ao 6: escreva apostador 7: fimse 8: leia (a1, a2, a3, a4, a5, a6, apostador) 9: fimenquanto 10: fim{algoritmo} vers˜ ao de 10 de fevereiro de 2008 99 ©88-08, Pedro Kantek A segunda abordagem, faz apenas uma leitura, mas a fun¸c˜ao ´e nitidamente menos limpa e clara: 1: algoritmo SENA2 2: inteiro a1, a2, a3, a4, a5, a6, apostador 3: a1 ← 1 {poderia ser qualquer valor maior que zero} 4: enquanto a1 > 0 fa¸ ca 5: leia (a1, a2, a3, a4, a5, a6, apostador) 6: se a1 > 0 ent˜ ao {pode ter chegado o negativo} 7: se ganhou (a1, a2, a3, a4, a5, a6) ent˜ ao 8: escreva apostador 9: fimse 10: fimse 11: fimenquanto 12: fim{algoritmo} Exerc´ıcio Resolvido 6 Seja agora a tarefa, muito comum em programa¸c˜ao, de obter n´ umeros constru´ıdos segundo uma certa lei de forma¸c˜ao, a princ´ıpio desconhecida. S´o se conhecem os primeiros n´ umeros de uma seq¨ uˆencia deles, e o que ´e pedido, ´e o resto dos n´ umeros. Por exemplo, se a seq¨ uˆencia for 1,2,3,4,5,6 e for pedido o pr´ oximo n´ umero, a resposta ´e 7, por que a lei de forma¸c˜ao ´e a dos n´ umeros naturais. Entretanto, outras seq¨ uˆencias podem ser menos evidentes e conseq¨ uentemente mais trabalhosas. Vejamos alguns exemplos: 5 1 4 8 5 4 16 512 36 8 7 9 11 13 15 17 4 9 16 25 36 49 7 12 19 28 39 52 14 24 38 56 78 104 8 13 20 29 40 53 11 30 67 128 219 346 25 36 49 64 81 100 729 1000 1331 1728 2197 2744 144 324 576 900 1296 1764 64 216 512 1000 1728 2744 ... 19 ... 64 ... 67 ... 134 ... 68 ... 515 ... 121 ... 3375 ... 2304 ... 4096 Uma estrat´egia ´e pesquisar os poss´ıveis valores de x, y e z, usando intui¸c˜ao, pistas, experiˆencias passadas, ao estilo de Sherlock Holmes. Uma segunda estrat´egia ´e usar da informa¸c˜ao de que 2 ≥ x, y, z, ≤ 7 e adotar a for¸ca bruta, fazendo 1: para X de 2 at´ e 7 fa¸ca 2: para Y de 2 at´e 7 fa¸ca 3: para Z de 2 at´e 7 fa¸ca 4: para I de 1 at´e 10 fa¸ca 5: escreva ... 6: fimpara 7: escreva ... 8: fimpara 9: fimpara 10: fimpara Exerc´ıcio 67 Escrever um algoritmo que leia uma s´erie indeterminada de n´umeros positivos. A leitura deve prosseguir at´e ser lido o n´ umero 1203, quando o programa dar a mensagem “1203 ENCONTRADO” e terminar o processamento. Se este n´ umero n˜ao for encontrado, ao final dos dados (quando for lido um n´ umero negativo) o programa deve ©88-08, Pedro Kantek 100 vers˜ ao de 10 de fevereiro de 2008 CAP´ITULO 4. COMANDOS CAP´ITULO 4. COMANDOS ´ imprimir o n´ umero lido mais pr´ oximo de 1203, com a mensagem ”xxx MAIS PROXIMO”, onde xxx ´e o n´ umero em quest˜ao. Exerc´ıcio 68 Defina um algoritmo capaz de somar os primeiros 50 n´umeros m´ultiplos de 4, come¸cando no 4 (isto ´e: 4, 8, 12, ...400). O algoritmo deve imprimir o resultado ao final. Exerc´ıcio 69 Escreva um algoritmo capaz de calcular e imprimir o valor da somat´oria dada pela s´erie a seguir. O n´ umero de termos ´e lido ao in´ıcio do algoritmo. Para resolver este tipo de exerc´ıcio, deve-se buscar a f´ ormula do termo gen´erico. Sem esta f´ ormula ´e dif´ıcil programar a solu¸c˜ao. Fica: 12 + (n − 1) × 10 Tn = 2 × (n − 1) S= n X S= ˆ Resistˆencia `a tra¸c˜ao maior que 600 Kgf Se o diamante passa nos trˆes testes, ele ganha o grau 50. Se passa em dois, ganha o grau 40, se passa apenas em um teste, ganha 30, e se n˜ao passa em nenhum ganha o grau 15. Escrever um algoritmo que leia um conjunto de vari´aveis formado por N´ umero da partida (inteiro), dureza (real), percentagem de impurezas (real), resistˆencia (real); e escreva o n´ umero da partida e a nota do diamante. Os dados terminam quando for lida a partida n´ umero zero. A nota do diamante deve ser calculada por uma fun¸c˜ao. Exerc´ıcio 76 Escreva algoritmo capaz de criar e imprimir uma tabela de ˆangulos, senos e cossenos, para todos os ˆangulos de 0 a 90 graus. Exemplo ˆ ANGULO SENO COSSENO 0o 0 1 1o 0.01745240644 0.9998476952 2o 0.0348994967 0.999390827 o 3 0.05233595624 0.9986295348 o 4 0.06975647374 0.9975640503 5o 0.08715574275 0.9961946981 o 6 0.1045284633 0.9945218954 7o 0.1218693434 0.9925461516 ... n X 12 + (n − 1) × 10 i=1 ˆ Dureza maior do que 12 Tn i=1 ou Exerc´ıcio 75 Diamantes s˜ao classificados atrav´es de 3 testes distintos, como segue: ˆ Percentagem de impurezas menor que 45 12 22 32 + + + ... S= 1 2 4 e sobretudo Exerc´ıcio 74 Dois inteiros positivos a e b s˜ao relativamente primos se n˜ao tiverem fatores comuns exceto 1. Por exemplo, 4 e 25 s˜ao relativamente primos, apesar de nenhum deles o ser. Escreva uma fun¸c˜ao que receba X e Y e devolva .V. se eles forem primos relativos e .F. sen˜ao. A prop´ osito, os n´ umeros 17.773 e 14.973 s˜ao relativamente primos ? 2 × (n − 1) Exerc´ıcio 70 Suponha X←2 Y←5 enquanto (X < 5) ∧ (Y < 3) fa¸ca 4: X++ 5: Y- 6: fimenquanto 1: 2: 3: ˆ Ao se encerrar este algoritmo quais os valores de X e Y ? Exerc´ıcio 77 Definir um algoritmo que escreva a diferen¸ca entre o 21. n´umero primo e o 13. n´ umero primo. ˆ O que acontece se se tirar o ”E”colocando em seu lugar ”OU” Exerc´ıcio 71 Seja 1: 2: 3: 4: 5: 6: Exerc´ıcio 78 Resolver o seguinte problema usando o comando ESCOLHA. Numa or- A ← 56 B ← 10 enquanto (A+B) mod 14 6= 0 fa¸ca A ← A + 10 B←A+2 fimenquanto ganiza¸c˜ao, o n´ umero de dependentes limita a quantidade de dias que um empregado pode faltar anualmente. Assim, empregados com menos de 3 dependentes podem faltar 5 dias. Quem tem 4, 5 ou 6 dependentes pode faltar 8 dias, e quem tem mais de 6 dependentes pode faltar 11 dias. Escrever algoritmo que leia o n´ umero de dependentes e escreva a quantidade de dias que podem ser fruidos anualmente para cada caso. Exerc´ıcio 79 Um concurso de vendas ´e realizado dentro de uma empresa. Por raz˜oes ˆ quais os valores de A e B ao final ? ˆ Se A come¸car com 52, o que acontece com o algoritmo ? Exerc´ıcio 72 Qual ´e o 30º n´umero primo ? Exerc´ıcio 73 Escreva o algoritmo de uma fun¸c˜ao que receba um n´umero inteiro positivo X e devolva o pr´ oximo primo maior ou igual a X. vers˜ ao de 10 de fevereiro de 2008 101 ©88-08, Pedro Kantek territoriais, cada venda unit´aria, d´a direito a um bˆonus cujo valor depende do estado em que foi feita a venda, segundo a tabela: PR e SC d˜ao direito a 5 bˆonus RS, SP e RJ 4 bˆonus MG, GO, MS e TO 3 bˆonus BA e PE 2 bˆonus demais estados n˜ao citados 1 bˆonus ©88-08, Pedro Kantek 102 vers˜ ao de 10 de fevereiro de 2008 CAP´ITULO 4. COMANDOS CAP´ITULO 4. COMANDOS Definir algoritmo que receba uma s´erie de vendas no formato (valor, estado) e para cada uma informe a quantidade de bˆonus de direito. Os dados terminam quando for lido um estado igual a ’XX’ ou um valor de vendas negativo. Exerc´ıcio 80 Definir um algoritmo que leia uma s´erie de n´umeros inteiros e positivos (condi¸c˜ao de fim: leitura de um negativo). O algoritmo deve calcular e imprimir a m´edia dos n´ umeros lidos EXCLU´IDOS os zeros. Exerc´ıcio 85 Calcular a soma total e o produto total de uma s´erie de n´umeros inteiros e positivos que ser˜ao fornecidos. A s´erie termina quando for lido o n´ umero -1. Exerc´ıcio 86 Escreva um algoritmo capaz de move atribu´ıdas a atletas de gin´astica ol´ımpica. Tal como na pr´atica, este algoritmo deve eliminar a maior e a menor notas, e a seguir calcular e imprimir a m´edia entre as duas notas restantes. Exerc´ıcio 81 Existe um conjunto de muitos n´umeros inteiros e positivos, agrupados trˆes a trˆes. Deve-se escrever um algoritmo capaz de: ˆ Ler os trˆes n´ umeros ˆ Identificar o maior deles, e rejeit´a-lo ˆ Calcular a m´edia entre os dois n´ umeros restantes ˆ Imprimir os dois n´ umeros selecionados e a m´edia. A pesquisa termina quando o primeiro n´ umero dos trˆes lidos, for negativo. Exerc´ıcio 82 Dados conjunto de 20 pares de n´umeros, realizar sobre eles o seguinte processamento: ˆ Se ambos forem pares, eles devem ser somados ˆ Se ambos forem ´ımpares, devem ser multiplicados ˆ Se um for par e outro ´ımpar, deve-se imprimir zero. Para cada conjunto lido, deve-se imprimir os dois n´ umeros e o resultado obtido segundo as regras acima. Exerc´ıcio 83 Uma elei¸c˜ao ´e anulada se a somat´oria de votos brancos e nulos ´e superior `a metade dos votos totais. Suponha que numa elei¸c˜ao existem 3 candidatos e para apur´a-la, deveremos ler um conjunto indeterminado de votos (n´ umeros inteiros), usando a regra: ˆ 1 = voto no candidato n´ umero 1 ˆ 2 = voto no candidato n´ umero 2 ˆ 3 = voto no candidato n´ umero 3 ˆ 8 = voto em branco ˆ 9 = voto nulo. A entrada de dados termina quando for lido um voto igual a zero. Caso ocorra um empate, dever ser vencedor o candidato mais velho. As idades s˜ao: 1=55 anos, 2=58 anos e 3=47 anos. Escrever um algoritmo que: 1. Verifique se a elei¸c˜ao foi v´alida 2. Se foi, quem a venceu. Exerc´ıcio 84 Escreva um algoritmo que leia uma sequ¨encia de n´umeros positivos (a leitura ´e um depois do outro, por restri¸c˜ao do problema n˜ao se pode usar um vetor) com condi¸c˜ao de fim igual a leitura de um n´ umero negativo e escreva o u ´ltimo n´ umero lidos que tenha sido maior que 100. vers˜ ao de 10 de fevereiro de 2008 103 ©88-08, Pedro Kantek ©88-08, Pedro Kantek 104 vers˜ ao de 10 de fevereiro de 2008 CAP´ITULO 5. NASSI-SCHNEIDERMAN Outra possibilidade de representa¸ca˜o ´e atrav´es dos diagramas de NASSI & SHNEIDERMAN, tamb´em conhecidos como mapas de CHAPIN ou estructogramas. Alguns autores negam importˆancia a este trabalho, afirmando tratar-se de pseudo-c´ odigo (no caso, PORTUGOL), apenas escrito de outra maneira. Outros, reconhecem for¸ca e inova¸ca˜o nesta id´eia. A id´eia destes diagramas ´e formatar em um retˆ angulo todas as informa¸co˜es do processamento usando marcas que identifiquem as diversas opera¸co˜es permitidas. Tem a vantagem sobre os fluxogramas de n˜ao permitirem o desvio. Os s´ımbolos usados s˜ao: Cap´ıtulo 5 nome da estrutura — objetivo Nassi-Schneiderman comando inicial objetivo (nome do procedimento) Fluxos e Nassi-Schneiderman nome da entrada Al´em da maneira pela qual descreveremos nossos algoritmos (que ´e atrav´es do Portugol), existem outras formas de representar algoritmos. Falaremos de mais duas: a primeira ´e a linguagem dos fluxogramas. Tem importˆancia hist´ orica na inform´atica, pois foi a primeira (e durante muito tempo u ´ nica) representa¸ca˜o de programas e similares. A seguir uma lista dos principais s´ımbolos usados em fluxogramas caminho cr´ıtico condi¸ ca ˜o a testar Y N verdadeiro, a¸ ca ˜o 1 falso, a¸ ca ˜o verdadeiro, a¸ ca ˜o 2 Iniciador/terminador comando a repetir condi¸ ca ˜o de fim Processo condi¸ ca ˜o Alternativa comando a executar item do caso Conector condi¸ ca ˜o 1 condi¸ ca ˜o 2 condi¸ ca ˜o 3 comando a executar comando 1 a executar comando a executar Entrada/saída comando 2 a executar sele¸ ca ˜o Fluxo de processamento caso 1 Fluxogramas perderam sua condi¸ca˜o de u ´ nicas ferramentas, entre outras raz˜ oes, pelas a seguir expostas: ˆ Prestam-se mal ` a programa¸ca˜o estruturada, pois permitem a constru¸ca˜o de algoritmos n˜ao estruturados. ˆ Exigem capricho, dando muito trabalho para serem feitos e mantidos. ˆ S˜ ao necess´arias quantidades enormes de papel, pois h´a um overhead muito grande, isto ´e, s´o se escreve dentro dos quadrinhos, e boa parte do papel se perde. ˆ Embora hoje j´ a existam programas para fazer e guardar fluxos em computador (como por exemplo o FLOWCHART e o AUTOFLOW), eles n˜ao s˜ao muito pr´aticos para este trabalho. Assim para seguir a tendˆencia moderna (que ´e guardar matriz da documenta¸ca˜o em computador e n˜ao em papel) o fluxograma resulta incˆomodo. 105 nome entrada 1 comando a executar nome entrada 2 comando cr´ıtico a executar ao atraso de 10seg sen˜ a¸ co ˜es do sen˜ ao comando n˜ ao cr´ıtico a executar A seguir, alguns exemplos de algoritmos feitos em um e noutro esquema Seja o seguinte algoritmo Algoritmo Calcular {a soma dos n´ umeros inteiros at´ e 100} real SOMA inteiro NUMERO SOMA ← 0 NUMERO ← 1 enquanto {NUMERO < 101} ©88-08, Pedro Kantek 106 vers˜ ao de 10 de fevereiro de 2008 CAP´ITULO 5. NASSI-SCHNEIDERMAN CAP´ITULO 5. NASSI-SCHNEIDERMAN SOMA ← SOMA + NUMERO NUMERO ← NUMERO + 1 fim{enquanto} imprima SOMA fim{algoritmo} raciocinar, a ponta da lapiseira fica sobre o ponto de interrup¸ca˜o. A tabela de valores das vari´ aveis vai sendo lida (consultada) e escrita (alterada) durante o chines Decis˜ ao Quando o algoritmo e o chines terminam, um resultado ´e obtido. Ent˜ao, ele ´e comparado com o resultado esperado, acima calculado. Se for diferente, um erro aconteceu. Raras vezes ´e no processo manual de obten¸ca˜o do resultado, mas quando isso ocorre o algoritmo pode estar certo e ´e o resultado obtido que est´ a errado. Mas, na ´ hora de procurar o erro e refazer maioria das vezes, ´e o algoritmo que est´ a errado. E todo o ciclo. Se ambos s˜ao iguais, o algoritmo funcionou para este caso de teste. Quanto deste funcionamento adequado pode ser generalizado para qualquer caso de testes fica em aberto. calcular — soma os 100 primeiros n´ umeros real SOMA inteiro NUMERO SOMA ← 0 Exerc´ıcio 87 Fa¸ca um chines com o algoritmo a seguir: NUMERO ← 1 inteiro fun¸c˜ao CALCU (inteiro A, B) se A ≥ B ent˜ ao devolva A 4: sen˜ ao 5: devolva B 6: fimse 1: NUMERO < 101 2: 3: SOMA ← SOMA + NUMERO NUMERO ← NUMERO + 1 imprima SOMA 5.1 Chines Tamb´em conhecido como teste de mesa, o chines ´e a execu¸ca˜o manual, passo a passo, de um algoritmo pelo programador. Em geral, ´e atrav´es do chines que o autor do algoritmo se certifica de que ele funciona. Infelizmente, o chines costuma apontar onde e quando o algoritmo falha, mas n˜ao garante de que o algoritmo esteja 100% correto, pois o caminho eventualmente errado pode n˜ao ter sido seguido durante o chines. As regras a seguir para um proveitoso chines, s˜ao: Obter uma massa de dados significativa O conjunto a testar n˜ao deve ser extenso, mas precisa ser abrangente e incluir as condi¸co˜es que est˜ao sendo testadas. Escolher bem os dados a testar ´e uma arte. Se mal escolhidos n˜ao v˜ao certificar nada e s´o v˜ao dar trabalho. Obter o resultado correto Com os dados de entrada em m˜aos, o programador precisa obter o resultado esperado que estes dados v˜ao gerar. Como fazer isto, varia de caso a caso, mas ´e imprescind´ıvel que antes de come¸car o chines, se saiba qual resultado esperar. Listar os parˆ ametros e vari´ aveis Deve-se providenciar no alto de uma folha de papel, o nome de todos os parˆ ametros e vari´ aveis que o algoritmo manuseia. Deve haver bastante espa¸co abaixo dos nomes, a fim de que os valores que ir˜ao sendo lan¸cados, caibam. Seguir o algoritmo Em geral, com a ponta cega de uma lapiseira, o programador segue cada um dos comandos escritos. Se houver a necessidade de uma pausa para vers˜ ao de 10 de fevereiro de 2008 107 ©88-08, Pedro Kantek ©88-08, Pedro Kantek 108 vers˜ ao de 10 de fevereiro de 2008 CAP´ITULO 6. VISUALG Fun¸ c˜ ao A fun¸ca˜o ´e uma unidade n˜ao autˆ onoma de programa¸ca˜o. Ela sempre precisa receber seus dados (atrav´es de uma lista de parˆ ametros) e devolver um resultado a quem a chamou. Em Visualg s˜ao colocadas imediatamente antes da palavra inicio do bloco a que se referem. Formato 1: funcao ( ) : 2: var aveis locais 3: vari´ 4: inicio 5: comandos 6: ... retorne ... 7: fimfuncao Cap´ıtulo 6 Visualg O VISUALG ´e um programa que auxilia o aprendizado de algoritmos na medida em que permite a entrada e execu¸ca˜o de um algoritmo escrito em portugol, conforme aqui descrito. Escrito pela empresa Apoio, pode ser obtido em www.apoioinformatica.com.br. 6.1 Regras de Visualg Em visualg, valem as regras: ˆ cada comando de visualg deve estar em uma linha ˆ n˜ ao h´a separadores (;), nem blocos (como { e {) nem goto ˆ todas as palavras reservadas n˜ ao tem acentos ou cedilha ˆ n˜ ao h´a separa¸ca˜o entre mai´ usculas e min´ usculas nos comandos ou vari´ aveis ˆ o limite de vari´ aveis ´e de 500 (cada item de vetor conta como 1 vari´ avel) ˆ o ponto decimal ´e o ponto ˆ valores caractere est˜ ao entre aspas duplas ˆ O s´ımbolo de atribui¸ca ˜o ´e B devolve VERDADEIRO se 3>4 ´e FALSO A ´e maior do que B Menor (>) Em A < B devolve VERDADEIRO se 3=) Em A >= B devolve VERDADEIRO 3>=3 ´e VERDADEIRO se A ´e maior ou igual do que B Menor ou igual ( 0) ∧ (P[k+1] 6= P[q]) fa¸ ca 6: k ← tabelaPREFIXOS [k] 7: fimenquanto 8: se P[k+1] = P[q] ent˜ ao 9: k++ 10: fimse 11: tabelaPREFIXOS [q] ← k 12: fimpara 13: retorne tabelaPREFIXOS 14: fim algoritmo No exemplo do teste ’o galo o gato e a gata gaguejaram’ para o padr˜ao P=’gato’ aqui, o n´ umero de testes ´e de apenas 10. Compare com os 38 da FORCA ¸ BRUTA. Vejamos um exemplo: 1: 2: T=FOLGA MORRENDO PORQUE ALEM PORVUE DOS ANDES P=PORQUE F O L G A M R E N D P Q U V S 0 2 0 0 0 0 0 3 6 0 0 1 4 5 0 0 ©88-08, Pedro Kantek ©88-08, Pedro Kantek 172 P O R Q U E 6 6 6 6 6 1 vers˜ ao de 10 de fevereiro de 2008 CAP´ITULO 9. REGISTROS CAP´ITULO 9. REGISTROS Resposta 7 (contra 41 da for¸ca bruta) PORQUE Salto: 6 Prop T1: 6 versus Prop T2: 1 --------------------------------FOLGA MORRENDO PORQUE ALEM PORVUE DOS ANDES = PORQUE Salto: 6 Prop T1: 4 versus Prop T2: 6 --------------------------------FOLGA MORRENDO PORQUE ALEM PORVUE DOS ANDES = PORQUE Salto: 6 Prop T1: 6 versus Prop T2: 1 --------------------------------- Tabela 1: (Caracter ruim) Ao se encontrar um T[x] diferente de um P[y], em T1 se indica de quantas posicoes pode-se saltar em x (no T), ou seja, cada letra em T tem o indice da ultima ocorrencia desse caracter de T em P. Exemplo: Se T=’o gato caiu’ e P=’gato’, temos a primeira comparacao entre T[4]=a e P[4]=o, como sao diferentes, a T1 manda pular o g a t c i u T1= 4 0 1 2 3 0 0 0 2 posicoes, (ja que j=4 e T[a]=2 e 4-2=2) Exerc´ıcio 192 Segundo a f´ısica, quando temos diversas resistˆencias ligadas em paralelo, podemos substitu´ı-las por uma u ´nica resistˆencia chamada EQUIVALENTE, que tem uma resistˆencia calculada pela f´ ormula: 1 1 1 1 = + + ... + Req R1 R2 Rn Tabela 2: (Sufixo bom) Realiza um processamento apenas em P, e busca sufixos do padrao que tenham sido repetidos anteriormente no padrao. Definir um algoritmo que leia um conjunto indeterminado de resistˆencias, suponha-as ligadas em s´erie, calcule e escreva a resistˆencia equivalente do conjunto. Dados terminam quando for lido um valor igual a zero. Por exemplo, se forem lidos os valores de resistˆencias iguais a 5, 10, 1 e zero, a resposta da resistˆencia equivalente ser´a 10/13. Por exemplo, se P=’abeb’, a T2 e: 4,4,2,1, ja que o sufixo b (na p.4) ja ocorreu anteriormente em P (na p.2). Note que isto so e verdade que ja P[1] P[3] FOLGA MORRENDO PORQUE ALEM PORVUE DOS ANDES F O L G A M R E N D P Q U V S P O R Q U E T1= 0 2 0 0 0 0 0 3 6 0 0 1 4 5 0 0 T2= 6 6 6 6 6 1 FOLGA MORRENDO PORQUE ALEM PORVUE DOS ANDES = PORQUE Salto: 6 Prop T1: 6 versus Prop T2: 1 --------------------------------FOLGA MORRENDO PORQUE ALEM PORVUE DOS ANDES = PORQUE Salto: 6 Prop T1: 6 versus Prop T2: 1 --------------------------------FOLGA MORRENDO PORQUE ALEM PORVUE DOS ANDES = PORQUE Salto: 3 Prop T1: 3 versus Prop T2: 1 --------------------------------FOLGA MORRENDO PORQUE ALEM PORVUE DOS ANDES = PORQUE S= 6 *** ACHOU *** --------------------------------FOLGA MORRENDO PORQUE ALEM PORVUE DOS ANDES = vers˜ ao de 10 de fevereiro de 2008 173 Exerc´ıcio 193 De acordo com o regulamento do servi¸co postal americano, n˜ao pode seguir pelo correio, nenhum pacote cujo comprimento (maior dimens˜ao) somado `a amarra¸c˜ao seja superior a 72 polegadas. Amarra¸c˜ao ´e o comprimento do menor barbante que possa toda a volta ao pacote. Construa um algoritmo portugol que leia 3 dimens˜ oes e escreva ”PODE”se ˜ PODE”se n˜ao puder. As dimens˜ o pacote puder ser mandado via correio, ou NAO oes est˜ao em cent´ımetros, e deve ser usada a convers˜ao: 1 polegada = 2,5 cm. Exerc´ıcio 194 Escreva uma fun¸c˜ao capaz de receber dois n´umeros (inteiros) e devolver a m´edia geom´etrica entre eles (real). Exerc´ıcio 195 Escreva uma fun¸c˜ao capaz de receber um valor representativo de uma distˆancia medida em polegadas, e retorne a mesma distˆancia medida em metros (1pol = 2,54cm) Exerc´ıcio 196 Suponha um algoritmo para c´alculo de um D.V. para c´odigos de 4 d´ıgitos assim formulado: c´ odigo XYZT-d c´alculo de Q Q = X + Y + Z + T c´alculo de d d = Q mod 10 Escreva um algoritmo para calcular o DV de uma s´erie de c´ odigos lidos, na forma de 4 inteiros positivos. Para cada c´ odigo lido, o algoritmo deve imprimi-lo junto com o DV. Os dados terminam quando for lido um n´ umero negativo. O c´alculo do DV deve ser feito por uma fun¸c˜ao. Exerc´ıcio 197 Suponha um algoritmo para c´alculo de um D.V. para c´odigos de 4 d´ıgitos assim formulado: ©88-08, Pedro Kantek ©88-08, Pedro Kantek 174 vers˜ ao de 10 de fevereiro de 2008 CAP´ITULO 9. REGISTROS CAP´ITULO 9. REGISTROS c´ odigo XYZT-d c´alculo de Q Q = 2X + 3Y + 4Z + 5T c´alculo de d d = Q mod 7 Escreva um algoritmo para calcular o DV de uma s´erie de c´ odigos lidos, na forma de 4 inteiros positivos. Para cada c´ odigo lido, o algoritmo deve imprimi-lo junto com o DV. Os dados terminam quando for lido um n´ umero negativo. O c´alculo do DV deve ser feito por uma fun¸c˜ao. Exerc´ıcio 198 Suponha um algoritmo para c´alculo de um D.V. para c´odigos de 4 d´ıgitos assim formulado: c´ odigo XYZT-d c´alculo de Q Q = 3X + 5Y + 7Z + 9T c´alculo de w w = Q mod 11 c´alculo de d Se w = 10, ent˜ao d = 0, sen˜ao d = w. Escreva um algoritmo para calcular o DV de uma s´erie de c´ odigos lidos, na forma de 4 inteiros positivos. Para cada c´ odigo lido, o algoritmo deve imprimi-lo junto com o DV. Os dados terminam quando for lido um n´ umero negativo. O c´alculo do DV deve ser feito por uma fun¸c˜ao. Exerc´ıcio 199 Suponha um algoritmo para c´alculo de um D.V. para c´odigos de 4 d´ıgitos assim formulado: c´ odigo XYZT-d c´alculo de q1 q1 = 2X + 3Z c´alculo de q2 q2 = 2Y + 3T c´alculo de Q q = q1 + q2 c´alculo de d d = q mod 10 Escreva um algoritmo para calcular o DV de uma s´erie de c´ odigos lidos, na forma de 4 inteiros positivos. Para cada c´ odigo lido, o algoritmo deve imprimi-lo junto com o DV. Os dados terminam quando for lido um n´ umero negativo. O c´alculo do DV deve ser feito por uma fun¸c˜ao. Exerc´ıcio 200 Definir algoritmo capaz de gerar um d´ıgito verificador alfab´etico, para um c´ odigo formado por 7 d´ıgitos num´ericos. A regra deve ser: dv = ((d1 × 8) + (d2 × 7) + (d3 × 6) + (d4 × 5) + (d5 × 4) + (d6 × 3) + (d7 × 2)) mod 26 dv deve ser transformado de letra em n´ umero e a seguir impresso. O algoritmo deve ler in´ umeros c´ odigos (na forma cadeia[7]) at´e ler a cadeia ’0000000’. Exerc´ıcio 201 Definir algoritmo que leia um conjunto indeterminado, mas menor do que 129, de triplas formadas por: ˆ n´ umero do bimestre: inteiro de 1 a 4 ˆ n´ umero do aluno: inteiro de 1 a 32 ˆ Nota do aluno: real de 0,0 a 10,0. Os dados terminam quando for lido um n´ umero de bimestre diferente daqueles valores v´alidos. Ap´ os ler o conjunto, o algoritmo deve imprimir: 1. Qual a m´edia anual de cada aluno (32 valores) 2. Qual a m´edia da turma em cada bimestre (4 valores) 3. Qual o n´ umero do aluno e o n´ umero do bimestre em que ocorreu a MAIOR NOTA absoluta do ano. vers˜ ao de 10 de fevereiro de 2008 175 ©88-08, Pedro Kantek 4. Qual o bimestre em que ocorreram mais zeros 5. Qual o bimestre com menor amplitude de notas Exerc´ıcio 202 Definir um algoritmo que calcule o d´ıgito verificador do n´umero de matr´ıcula dos alunos das FACULDADES NEUTRAS. Tal n´ umero ´e formado por 4 d´ıgitos e o verificador ´e assim calculado: n´ umero: d1 d2 d3 d4 res = (d1 * 2) + (d2 * 3) + (d3 * 5) + (d4 * 7) d´ıgito = resto da divis˜ao de res por 9. O algoritmo deve ler uma s´erie de n´ umeros e para cada um, deve imprimir o n´ umero e o correspondente d´ıgito. A s´erie termina quando for lido o n´ umero 0. 9.2.1 Calend´ arios Em 1347 a peste negra devastou a Europa. Esta doen¸ca ´e na verdade uma pneumonia que causa bub˜ oes (incha¸cos nas axilas e virilhas), sendo tamb´em chamada de peste bubˆ onica. Os bub˜ oes eram caldos de cultura da bact´eria causadora, que tamb´em era transmitida por pulgas dos ratos. O nome negra, vem do fato de que (supostamente) a carne das v´ıtimas enegrecia pouco antes da morte. A hist´ oria come¸ca quando uma tribo Mogol de nome Kipchak resolve atacar um posto comercial genovˆes no Mar Negro. Usaram para isso uma das primeiras armas biol´ ogicas que a hist´ oria registra: cad´ averes humanos contaminados com a doen¸ca eram atirados atrav´es de catapultas para dentro da cidade. Esta embora armada e provisionada para resistir ao cerco, ao ver-se impotente para enfrentar esta arma resolveu fugir de navio de volta a Gˆenova, abandonando o posto comercial. Junto com eles, foi a doen¸ca. Durante os 4 anos seguintes a peste foi para a ´ Sic´ılia, Africa, It´ alia, Espanha, Fran¸ca, Inglaterra e depois toda a Europa. Vinte e cinco milh˜ oes de pessoas, um quarto da popula¸ca˜o europ´eia, morreram. Dois s´eculos passariam antes que a popula¸ca˜o retornasse ao n´ umero de 100 milh˜ oes. A devasta¸ca˜o da peste negra encerrou um ciclo na hist´ oria da humanidade. Levantes sociais e pol´ıticos espoucaram, a m˜ao de obra escasseou, o campo foi abandonado, os alimentos rarearam. At´e aqui, o universo era governado por regras estabelecidas por duas autoridades: Arist´ oteles (384322 aC) e o eg´ıpcio Cl´audio Ptolomeu (100-170 dC). No milˆenio anterior, a Igreja havia mesclado essas regras a` sua vis˜ ao de mundo, resultando um bloco homogˆeneo: Deus havia criado a Terra no centro do Universo. Estrelas e planetas giravam em o´rbitas circulares em volta da terra. Oito esferas concˆentricas feitas de material imut´ avel e eterno continham a Lua, o Sol, Marte, Merc´ urio, J´ upiter, Vˆenus e Saturno. A u ´ ltima esfera continha as estrelas. Apenas na terra a mat´eria se decompunha e morria. Nas esferas tudo era eterno. Veja-se o reflexo disso nos nomes dos dias de semana, nos principais idiomas ocidentais: Corpo Celeste Sol Lua Marte Merc´ urio J´ upiter Vˆenus Saturno Inglˆes Sunday Monday Tuesday Wednesday Thursday Friday Saturday Francˆes dimanche lundi mardi mercredi jeudi vendredi samedi Italiano domenica lunedi martedi mercoledi giovedi venerdi sabato Espanhol domingo lunes martes mi´ercoles jueves viernes s´abado A rea¸ca˜o a` peste foi um novo cen´ ario que buscou enterrar e esquecer aquele o mais r´apido poss´ıvel: a renascen¸ca. A It´ alia, pela localiza¸ca˜o central iniciou o movimento do com´ercio entre oriente e ocidente. Nasceram aqui os primeiros sistemas administrativos, o conhecimento financeiro e os bancos. A ciˆencia (a matem´atica) come¸cou a ser usada: ©88-08, Pedro Kantek 176 vers˜ ao de 10 de fevereiro de 2008 CAP´ITULO 9. REGISTROS CAP´ITULO 9. REGISTROS na arquitetura, no com´ercio, na cartografia. Sabemos hoje que a Terra demora 365 dias, 5 horas, 48 minutos e 46 segundos para uma volta completa ao redor do sol. Eg´ıpcios haviam estimado este valor em 365,25 dias (ou seja 365 dias e 6 horas. Ficou uma diferen¸ca de 11 minutos e 14 segundos). Com a ado¸ca˜o do calend´ ario eg´ıpcio por J´ ulio C´ezar no s´eculo I dC, esta disparidade foi se acumulando ano ap´ os ano, afastando as datas do calend´ ario das esta¸co˜es. Em meados do s´eculo XV ja havia dez dias de atraso. Em 1475 o papa Sisto IV pedira um estudo para determinar a causa do erro. N˜ ao houve quem conseguisse compatibilizar Arist´ oteles e Ptolomeu com o calend´ ario. Podiam garantir estabilidade pol´ıtica, mas estavam cada vez mais incapazes de calcular a data da P´ascoa corretamente. Cop´ernico (1473-1543) come¸cou a desenvolver em 1506 um sistema astronˆomico baseado em suas pr´oprias observa¸co˜es e c´ alculos. Na tentativa de tirar a Terra do centro do universo e colocar a´ı o Sol, a dificuldade era explicar como as coisas n˜ao ”ca´ıam”em dire¸ca˜o ao sol. Achava-se na ´epoca, que a mat´eria era naturalmente atra´ıda para o centro do universo (embaixo da terra). Quando recrutado pelo secret´ ario do papa, em 1514 para resolver o problema do calend´ ario, Cop´ernico viu-se num dilema: ou reafirmava a teoria que a vaidade, o medo e a B´ıblia haviam montado (estamos no centro do universo) e n˜ao resolvia o problema, ou chutava o pau da barraca para propor um novo calend´ ario. Ele, que bobo n˜ao era, recusou o convite, embora continuando a estudar o problema em segredo. Convencido pela corre¸ca˜o de seus c´ alculos e encorajado por amigos, esbo¸cou um rascunho de suas id´eias em 1530. Este escrito provocou rea¸co˜es mistas. Finalmente, em 1543, autorizou a publica¸ca˜o de De Revolutionibus Orbium Coelestium, comumentemente conhecido como As Revolu¸co˜es. Cop´ernico recebeu o primeiro exemplar em 24 de maio de 1543 e morreu poucas horas depois. O pr´oximo personagem desta hist´ oria ´e Galileu Galilei. Pulamos Giordano Bruno, queimado na fogueira no Campo di Fiori em 17 de fevereiro de 1600. Galileu teria deixado cair duas bolas de pesos diferentes da Torre de Pisa para provar que ambas chegariam juntas, contrariando Arist´ oteles que afirmara chegar a mais pesada antes. H´ a d´ uvidas se isso de fato ocorreu. Mais modernamente sup˜ oe-se que tenha sido uma experiˆencia intelectual apenas. O argumento intelectual ´e not´avel1 Este ´e o melhor jeito de fazer f´ısica, `a la Einstein... Galileu freq¨ uentou diversas universidades na It´ alia, sempre conflitando com os demais professores. Escreveu in´ umeros livros, ”inventou” o telesc´opio 2 Ao usar os telesc´opios, viu quatro sat´elites orbitando J´ upiter e os an´eis de Saturno e relatou isso no livro Sidereus Nuncius(O Mensageiro Celeste). Escreveu de leve, ainda sem adotar completamente o modelo copernicano. A Igreja j´ a come¸cou a enviar mensagens de que n˜ao concordava com as id´eias desse livro. Em 21 de dezembro de 1614, o padre Tom´ as Caccini, em Floren¸ca criticou Galileu aformando que se Deus parou o sol a pedido de Josu´e para que os israelitas derrotassem os amoritas, como o sol poderia ser o centro do universo ? O padre foi mais longe: acusou Galileu, a matem´atica e todos os matem´aticos de hereges pol´ıticos e religiosos. A defesa de Galileu ´e perfeita: N˜ ao me sinto na obriga¸ca˜o de acreditar que o mesmo Deus que nos dotou de sentidos, raz˜ ao e intelecto, tencionava descartar o uso destes e por algum outro meio nos dar o conhecimento que com eles podemos obter [...] A 1 Suponha jogar as 2 bolas e suponha que Arist´ oteles estava certo: a mais pesada chega antes. Agora suponha as mesmas duas bolas por´ em ligadas por fio. Por um lado pode-se argumentar que a mais leve ”segura” a mais pesada e esta demora mais a chegar. Por outro lado, pode-se supor que o fio transforma as duas massas em uma s´ o, que passa a ser mais pesada que a bola anterior. O resultado ´ e que agora as bolas chegam antes do que chegavam. Para que ambos os racioc´ınios estejam certos e est˜ ao, a u ´nica possibilidade ´ e elas chegarem juntas. 2 Ele ´ e assim considerado pois construiu os maiores telesc´ opios em uso na Europa, ultrapassando seus modelos anteriores por diversas vezes. vers˜ ao de 10 de fevereiro de 2008 177 ©88-08, Pedro Kantek inten¸ca˜o do Esp´ırito Santo ´e ensinar-nos como se vai para o c´eu e n˜ao como o c´eu funciona. Em 5 de mar¸co de 1616 o cardeal Belarmino da Santa Inquisi¸ca˜o decretou que o sistema copernicano era ”falso e errˆoneo” afirmando que Deus fixou a Terra em seus alicerces para jamais ser movida. Galileu nunca se conformou com este decreto, buscando incessantemente a sua revoga¸ca˜o. Em 1624, obteve do papa uma autoriza¸ca˜o para escrever seu livro mais famoso Di´ alogo sobre os dois m´ aximos sistemas do mundo, que foi publicado em 1632 e recebido com louvores por acadˆemicos de toda a Europa. Pouco depois, foi acusado pela inquisi¸ca˜o de herege. N˜ ao pode ver as acusa¸co˜es ou as provas. Ficou no dilema: ou se retratava ou morria como Giordano Bruno. Em decis˜ao que alguns criticaram como prejudicial a ciˆencia, ele resolveu pela vida. Em 22 de junho de 1633, fez uma longa retrata¸ca˜o. Diz a lenda que depois de terminada a leitura, ao se erguer da posi¸ca˜o de joelhos onde estava,Galileu teria dito ”E pur, si muove” . S´o em 1757 a Igreja retirou a proibi¸ca˜o sobre a obra. Em 1992, o papa Jo˜ ao Paulo II reconheceu formalmente o erro da Igreja. Depois vem Isaac Newton, um dos 5 maiores cientistas que a Humanidade produziu (decomposi¸ca˜o da luz, c´ alculo diferencial e integral, gravita¸ca˜o entre outros). Ao escrever sobre a lei universal da gravita¸ca˜o, ele acabou de consolidar o modelo copernicano, que j´ a havia sido engordado com as leis de Kepler sobre o deslocamento dos planetas. Calend´ arios Juliano e Ptolomeico A encrenca do calend´ ario est´ a em que ele lida com 3 ciclos distintos: solar: Alterna as esta¸co˜es e depende do sol. Mede os anos; lunar: Alterna as luas (cheia, nova ...) e depende da lua. Mede os meses; semanal: Mede os dias da semana e tem origem religiosa. Indica o sabath. A dificuldade e que estes 3 ciclos n˜ao s˜ao m´ ultiplos entre si. Em 45 aC, J´ ulio Cezar criou o calend´ ario juliano, baseado no ptolomeico. Neste o ano tinha 365d e um quarto de dia. Os meses foram batizados de Janius (portas e janelas), Februas (festa da purifica¸ca˜o), Mars (guerra), Apripe (abertura das flores), Maiores, Juniores, Quint´ılio, Sext´ılio, Sept´ılio, Oct´ılio, Novit´ılio e Decit´ılio. Logo depois, o pr´oprio JC mudou o nome do Quint´ılio para Julius. Seu sucessor, Cezar Augusto n˜ao deixou por menos, mudando o pr´oximo para Augustus. Em 1582, o papa Gerg´orio mudou o calend´ ario, que com a reforma passou a ser conhecido como calend´ ario gregoriano. Sumiram 10 dias em mar¸co desse ano. Adotouse a regra dos anos bissextos. A ado¸ca˜o deste calend´ ario demorou. Na Inglaterra ele s´o foi aceito em 1752. Em 1793, a Revolu¸ca˜o Francesa mudou novamente o calend´ ario. Nele h´a 12 meses de 30 dias e 5 feriados nacionais. Os meses: germinal, floral, thermidor, fructidor, brumaire. Napole˜ ao o aboliu em 1805. Novas propostas Em 1954, a ONU propˆos um novo calend´ ario. Ele tem 52 semanas de 7 dias = 364 dias. O dia 365 ´e no final do ano e n˜ao tem n´ umero nem nome. Os quadrimestres sempre tem 31 + 30 + 30 + 30 dias. Outra proposta foi o do calend´ ario fixo, com 13 meses de 28 dias cada um. Aqui, as segundas sempre ser˜ao dias 1, 8, 15 e 22. Falta 1 dia, que fica no final do ano. O dia do bissexto ´e ap´ os 28 de junho. O novo mˆes ´e o SOL que fica entre junho e julho. Finalmente, h´a uma nova proposta de estabelecer um tempo mundial, (desvinculado do sol), orientado a neg´ ocios e com divis˜ oes decimais. ©88-08, Pedro Kantek 178 vers˜ ao de 10 de fevereiro de 2008 CAP´ITULO 9. REGISTROS CAP´ITULO 9. REGISTROS Regra do bissexto Sejam R4 ← resto da divis˜ ao do ano por 4; R100 ← resto da divis˜ ao do ano por 100 e R400 ← resto da divis˜ ao do ano por 400. SE R4=0 ∧ ((R100 6= 0) ∨ (R400 = 0)) o ano ´e bissexto sen˜ao n˜ao ´e. Exerc´ıcio 203 Imagine um cilindro cujo diˆametro da base tem o mesmo comprimento Neste segundo caso, ser´a muito bom se o dono do sistema disponibilizar um balance line. Neste caso, o operador preparar´ a uma massa de atualiza¸ca˜o (possivelmente usando o notepad ou similar), far´ a as verifica¸co˜es e corre¸co˜es, e quando a massa estiver OK, submete-la-´ a, eventualmente via upload para atualiza¸ca˜o serializada. Ao inv´es de 400 transa¸co˜es, o operador ter´ a que se preocupar com apenas 1. O resto fica por conta do algoritmo Balance Line. de sua altura. Dentro dele est´a inscrita uma esfera, cujo raio ´e o mesmo raio da base do cilindro. Escrever algoritmo que leia uma s´erie de raios, e para cada um deles, calcule e escreva a diferen¸ca de volume entre o cilindro e a esfera. Os raios s˜ao lidos em cm e a diferen¸ca deve ser expressa em cm3. O ultimo raio ´e zero, e indica fim. Definir duas fun¸co˜es: uma para o c´alculo do volume da esfera, e outra para o c´alculo do volume do cilindro. Vesf era = 4 × πR3 3 Vcilindro = π × R2 × h Exerc´ıcio 204 Definir algoritmo que calcule e escreva a soma dos primeiros 50 n´umeros pares acima de 1000 (1000 inclu´ıdo), com os 60 primeiros n´ umeros ¡mpares acima de 500 (501 inclu¡do). Exerc´ıcio 205 Definir algoritmo que determine se uma seq¨uˆencia contendo 1000 ele´ ou NAO ˜ ESTA ´ classificado em ordem descendente. Ao final do algoritmo, mentos, ESTA este deve imprimir as mensagens ”EM ORDEM”ou ”FORA DE ORDEM”conforme o caso. Algoritmo Balance Line Este algoritmo teve importˆancia muito maior h´a 30 anos, quando os recursos de hardware n˜ao eram nem de longe t˜ao abundantes quanto hoje. Em 1974, existiam na cidade de Curitiba 7 computadores: o da Universidade Federal do Paran´a (um IBM 1130 com 8Kb de mem´oria), e os computadores da Celepar, Copel, Bamerindus, Banestado, Cr Almeida e URBS, sendo que cada uma destas empresas tinha 1 (um) computador. Como fazer para atualizar 80.000 registros (caso da folha de pagamento do Estado do Paran´a) todos os meses com apenas um computador que era usado para todos os sistemas do Goverbo do Estado ? Vale lembrar tamb´em que n˜ao existiam sistemas on-line, nem terminais remotos, muito menos micros. A solu¸ca˜o para este problema est´ a no algoritmo que ser´a estudado nesta aula, chamado Balance Line. Ele permite que grandes volumes de dados para tratamento atuarial (inclus˜ao, altera¸ca˜o e exclus˜ ao) sejam serializados e processados sem interferˆencia do operador. Importˆ ancia atual Este algoritmo ainda ´e muito importante, mesmo com abundˆancia de hardware. Ele, na verdade, permite economizar tamb´em tempo de operador, e este sempre deve ser economizado (principalmente quando o operador somos n´os. ;-). Imagine-se um site onde pessoas devem fazer atualiza¸co˜es. Uma coisa ´e entrar 1 vez por semana e fazer uma pequena atualiza¸ca˜o. Outra ´e precisar entrar de uma s´o vez e alterar digamos 400 registros. Para o primeiro caso, a estrat´egia atualmente usada (uma transa¸ca˜o atuarial que sob o comando do operador altera o dado) est´ a perfeita. Para a segunda, n˜ao. Poucos tem paciˆencia para refazer esta mesma transa¸ca˜o 400 vezes. vers˜ ao de 10 de fevereiro de 2008 179 ©88-08, Pedro Kantek ©88-08, Pedro Kantek 180 vers˜ ao de 10 de fevereiro de 2008 ´ CAP´ITULO 10. EXERC´ICIOS PRATICOS: 003 -RAIZ QUADRADA tamb´em pode ser negativo, mas com o mesmo valor absoluto. Se n˜ao for poss´ıvel obter a igualdade (y 2 = x), espera-se que y 2 seja menor que x e t˜ao pr´oximo quanto poss´ıvel. As etapas do algoritmo s˜ao: 1. Pegue uma folha de papel e escreva uma cruz grande, divindo a a´rea de trabalho em 4 quadrantes. Cap´ıtulo 10 2. Escreva o n´ umero do qual se quer achar a raiz quadrada (a quem chamaremos α), no quadrante superior esquerdo. Ao final do processo, a raiz vai aparecer no quadrante superior direito. Exerc´ıcios pr´ aticos: 003 -Raiz quadrada 3. Separe o n´ umero α em grupos de 2 d´ıgitos, a partir de sua v´ırgula decimal, a` direita e a` esquerda, completando com zeros n˜ao significativos quando necess´ario. Feito isso, nomearemos os grupos (de 2 d´ıgitos) da esquerda para a direita como G1 , G2 , ... Gn . 4. Relembremos a tabela de quadrados perfeitos de 1 a 100. 1 2 3 4 5 6 7 8 9 1 4 9 16 25 36 49 64 81 10.1 Exemplo de um algoritmo: raiz quadrada Suponha que sua vida dependa de obter a raiz quadrada de um determinado n´ umero, por exemplo 54.768,87. O que vocˆe faria ? 1. A solu¸ca˜o mais ´ obvia seria buscar uma calculadora capaz de extrair uma raiz quadrada. Por azar de nossa simula¸ca˜o, n˜ao h´a calculadoras, computadores, celular, etc. Nenhuma traquitana dispon´ıvel. 2. Considerando que a opera¸ca˜o de multiplica¸ca˜o ´e razoavelmente conhecida, outra possibilidade, seria avan¸car na base da tentativa-e-erro, usando o seguinte algoritmo. (a) Chute um n´ umero (b) Multiplique-o por ele mesmo (c) Se o resultado for igual ao n´ umero procurado, parab´ens! (d) Se for menor, aumente o chute (e) Se for maior, diminua o chute Esta tabela ´e importante pois todos os grupos acima formados s˜ao menores do que 100. 5. Busque o n´ umero que elevado ao quadrado gere um n´ umero menor ou igual do que G1. Coloque este n´ umero no quadrante superior direito. Chame-se este n´ umero G1.G2.G3. ... A1 como A1 . Fica 6. Eleve A1 ao quadrado e escreva o resultado no quadrante inferior esquerdo, embaixo de G1 . Chamemos este n´ umero A21 de P1 . 7. Fa¸ca G1 menos P1 e escreva o resultado da subtra¸ca˜o embaixo de P1 (no quadrante G1.G2.G3. ... A P1 inferior esquerdo). Chamemos este n´ umero de T1 . Fica – T1 8. (aaa) Baixe o pr´oximo grupo (neste caso o G2 , colocando-o ao lado de T1 , junte-os e obtenha um novo n´ umero (T1 G2 ). 9. Dobre o n´ umero A1 (multiplicando-o por 2) e escreva-o no quadrante inferior direito, embaixo de A1 . Chame-se este n´ umero de D1 . (f) Volte ` a etapa da multiplica¸ca˜o 3. Outra possibilidade, esta trazida pela teoria dos logaritmos (n˜ ao confunda logaritmo com algoritmo) ´e achar o logaritmo do n´ umero dado, dividir este √ valor por 2 e depois achar o antilogaritmo. Por exemplo, se n˜ao soubermos que 64 = 8, podemos fazer o log2 64 = 6. Dividindo 6 ÷ 2 = 3. E 23 = 8. O problema est´ a que poucas pessoas tem uma t´aboa de logaritmos na cabe¸ca, ou mesmo conhecem as propriedades dos logaritmos. 10. (***) Divida (divis˜ao inteira) T1 G2 por D1 × 10. Este resultado deve ser escrito em 3 lugares: 4. A resposta exata vem atrav´es do algoritmo de extra¸ca˜o de raiz quadrada, posto `a nossa disposi¸ca˜o pela matem´atica. 11. Calcule a multiplica¸ca˜o posta acima. Se o resultado for menor ou igual a T1 G2 , prossiga. Se for maior, OPS!, Volte a` etapa (***) e repita o processo com um resultado uma unidade menor. ˆ Ao lado de A1 , j´ a que ele ´e o pr´oximo n´ umero da raiz ˆ Ao lado de D1 . Imediatamente depois, escreva um sinal de × (vezes) ˆ Ao lado do sinal de × (vezes) escrito acima Algoritmo para raiz quadrada √ Por defini¸ca˜o, dado y = x, onde x ´e n˜ao negativo, deve-se achar o real y, tal que y 2 = x. Embora o n´ umero localizado seja positivo, deve-se lembrar que – em tese – ele 13. Volte a (aaa) 181 ©88-08, Pedro Kantek 12. Escreve-se o resultado da multiplica¸ca˜o embaixo de T1 G2 e efetua-se a subtra¸ca˜o. 182 vers˜ ao de 10 de fevereiro de 2008 ´ CAP´ITULO 10. EXERC´ICIOS PRATICOS: 003 -RAIZ QUADRADA ´ CAP´ITULO 10. EXERC´ICIOS PRATICOS: 003 -RAIZ QUADRADA Exemplo Seja calcular √ / = x = -------------- 14796, 5 01 47 96 50 00 00 00 ============ -1 ----------0 47 -44 ------------3 396 -241 ---------------155 15550 -14556 ------------------994 99400 -97296 ---------------------2104 210400 -0 ------------------------210400 21040000 121.640 =========== rq(1)=1 ----------2 x 1 = 2 47 / 20 = 2 22 x 2 = 44 -------------2 x 12 = 24 396 / 240 = 1 241 x 1 = 241 -------------2 x 121 = 242 15550 / 2420 = 6 2426 x 6 = 14556 -------------2 x 1216 = 2432 99400 / 24320 = 4 24324 x 4 = 97296 -------------2 x 12164 = 24328 210400 / 243280=0 243280 x 0 = 0 -------------- 10.2 24681 52543 26008 ´ ´ SUBTRA´IDO na parte esquerda da Nos 3 casos, ache o QUINTO NUMERO QUE E tabela acima. 1 2 3 10.3 Exerc´ıcio 2 Simule a execu¸ca˜o do algoritmo acima da raiz quadrada para os valores abaixo e em cada um, descubra o quinto n´ umero que ´e subtra´ıdo no algoritmo. Por exemplo, no exemplo dado acima, o quinto n´ umero seria 97296 e no que fizemos junto seria 355925. 44431 28819 37226 Treino ´ ´ SUBTRA´IDO na parte esquerda da Nos 3 casos, ache o QUINTO NUMERO QUE E tabela acima. 1 2 3 Fa¸camos a raiz quadrada de 1267.074. raizq 1267.074 12 67 07 40 00 00 ============ =========== rq( ) v = ----------x = ----------- ops ------------- / = x = -------------x = ---------------- ops ---------------------183 10.4 Exerc´ıcio 3 Simule a execu¸ca˜o do algoritmo acima da raiz quadrada para os valores abaixo e em cada um, descubra o quinto n´ umero que ´e subtra´ıdo no algoritmo. Por exemplo, no exemplo dado acima, o quinto n´ umero seria 97296 e no que fizemos junto seria 355925. / = x = -------------x = / = x = -------------x = ------------------- vers˜ ao de 10 de fevereiro de 2008 Exerc´ıcio 1 Simule a execu¸ca˜o do algoritmo acima da raiz quadrada para os valores abaixo e em cada um, descubra o quinto n´ umero que ´e subtra´ıdo no algoritmo. Por exemplo, no exemplo dado acima, o quinto n´ umero seria 97296 e no que fizemos junto seria 355925. 38692 26660 55802 ´ ´ SUBTRA´IDO na parte esquerda da Nos 3 casos, ache o QUINTO NUMERO QUE E tabela acima. 1 2 3 ©88-08, Pedro Kantek ©88-08, Pedro Kantek 184 vers˜ ao de 10 de fevereiro de 2008 ´ CAP´ITULO 10. EXERC´ICIOS PRATICOS: 003 -RAIZ QUADRADA 10.5 ´ CAP´ITULO 10. EXERC´ICIOS PRATICOS: 003 -RAIZ QUADRADA Exerc´ıcio 4 Simule a execu¸ca˜o do algoritmo acima da raiz quadrada para os valores abaixo e em cada um, descubra o quinto n´ umero que ´e subtra´ıdo no algoritmo. Por exemplo, no exemplo dado acima, o quinto n´ umero seria 97296 e no que fizemos junto seria 355925. 46951 41068 14107 ´ ´ SUBTRA´IDO na parte esquerda da Nos 3 casos, ache o QUINTO NUMERO QUE E tabela acima. 1 2 3 10.6 1 2 3 4 Respostas 0 337184 0 346624 91684 203676 228529 202625 vers˜ ao de 10 de fevereiro de 2008 193476 154336 94484 166229 185 ©88-08, Pedro Kantek ©88-08, Pedro Kantek 186 vers˜ ao de 10 de fevereiro de 2008 ´ ˜ CAP´ITULO 11. EXERC´ICIOS PRATICOS: 004-INTRODUC ¸ AO 2. 10 mod 2 = . . 3. 100 div 33 = 4. 100 mod 33 = 5. 8 div 2 = Cap´ıtulo 11 6. 8 mod 2 = Exerc´ıcios Pr´ aticos: 004-Introdu¸ c˜ ao Algoritmos Um algoritmo ´e um m´etodo finito, escrito em um vocabul´ ario simb´olico fixo, regido por instru¸co˜es precisas, que se movem em passos discretos, cuja execu¸ca˜o n˜ao requer insight, esperteza, intui¸ca˜o, inteligˆencia, ou clareza e lucidez e que mais cedo ou mais tarde chega a um fim. (David Berlinski) O algoritmo ´e o que est´ a por tr´ as de todos os programas de computadores. Fazendo uma analogia com a Rose (a empregada robot da fam´ılia Jetson). Quando ela apresenta uma bela torta de ma¸ca˜s, a torta ´e o produto final, a Rose ´e o computador e a receita da torta ´e o algoritmo. Algoritmos s˜ao bem antigos na hist´ oria do mundo. Provavelmente o mais antigo que ´e conhecido ´e devido a Euclides. Para poder observ´a-lo, vamos relembrar uma opera¸ca˜o da aritm´etica b´asica. Trata-se da divis˜ ao inteira. Quando os n´ umeros inteiros A e B s˜ao divididos em divis˜ ao inteira, dois resultados aparecem: o quociente e o resto. Por exemplo, na divis˜ ao inteira 10 ÷ 7, o quociente (resultado) ´e 1, enquanto o resto ´e 3. Nos nossos algoritmos, o quociente da divis˜ ao inteira vai ser representado pela palavra div, j´ a que o s´ımbolo ÷ e mesmo a barra simples / ficar˜ ao reservados para a divis˜ ao real. Portanto poderemos afirmar que 10 div 7 = 1 Da mesma maneira, o resto da divis˜ ao inteira, ser´a representado pela palavra mod, e aqui podemos afirmar que 10 mod 7 = 3 . Para treinar Procure calcular e responder: 1. 10 div 2 = . 187 . . 7. 45 div 11 = 8. 45 mod 11 = 9. 2 div 13 = 10. 2 mod 13 = 11.1.1 11.1 . . . . . M´ aximo Divisor Comum Define-se o m´aximo divisor comum entre dois n´ umeros inteiros A e B como sendo o maior n´ umero inteiro que divide simultaneamente tanto A como B sem deixar resto. Por exemplo, se quisermos achar o MDC entre 10 e 14, teremos que achar os divisores de 10 (que s˜ao: 1, 2, 5 e 10) e de 14 (que s˜ao 1, 2, 7, 14) e localizar o maior n´ umero que ´e comum a`s duas listas, no caso 2. Assim, 2 ´e o MDC entre 10 e 14. Para treinar Informe qual o MDC entre 1. M DC(15, 18) = . 2. M DC(20, 40) = . 3. M DC(17, 31) = . 4. M DC(2, 11) = . Do exerc´ıcio anterior percebeu-se que quando um dos n´ umeros ´e primo, o MDC ´e sempre 1. Isto decorre da defini¸ca˜o dos n´ umeros primos: Um n´ umero inteiro ´e primo, quando seus u ´ nicos divisores inteiros s˜ao a unidade e ele pr´oprio. 11.1.2 Algoritmo do M´ aximo Divisor Comum Este algoritmo sempre ´e chamado com dois inteiros. Note que o primeiro n´ umero deve ser maior ou igual do que o segundo. Se esta condi¸ca˜o n˜ao estiver satisfeita, os n´ umeros devem ser INVERTIDOS antes de serem entregues ao algoritmo. Este algoritmo recursivo ´e devido a Euclides 1: inteiro fun¸ ca˜o MDC(inteiro a, b) {obrigatoriamente: a ≥ b} 2: se b = 0 ent˜ ao 3: devolva a 4: \\ esta ´e outra maneira de identificar coment´arios 5: sen˜ ao 6: devolva MDC(b, (a mod b)) 7: fimse 8: fim {fun¸ ca˜o} Suponha que far-se-´a a chamada ao algoritmo acima, como segue: ©88-08, Pedro Kantek 188 vers˜ ao de 10 de fevereiro de 2008 ´ ˜ CAP´ITULO 11. EXERC´ICIOS PRATICOS: 004-INTRODUC ¸ AO ´ ˜ CAP´ITULO 11. EXERC´ICIOS PRATICOS: 004-INTRODUC ¸ AO MDC(1200, 1119) O que aconteceria ? Chamando com 1200 1119, Chamando com 1119 81, Chamando com 81 66, Chamando com 66 15, Chamando com 15 6, Chamando com 6 3 e Chamando com 3 0 Resposta ´ e 3 11.1.3 Exerc´ıcio 3 Chame o algoritmo mdc com os valores 1370 1224 Responda no quadro pr´oprio, qual o MDC pedido Algoritmos no dia a dia Na nossa vida, tamb´em usamos muitos algoritmos. Aqui eles tˆem uma caracter´ıstica t˜ao restrita como os algoritmos computacionais, porque supostamente eles ser˜ao seguidos por seres inteligentes. Mas, vale a experiˆencia: acompanhe o algoritmo que um de n´os poderia usar para ir do Unicenp at´e a Pra¸ca Tiradentes 1: Algoritmo para ir do Unicenp at´ e a Pra¸ca Tiradentes 2: se tenho dinheiro ? ent˜ ao 3: se tenho pressa ? ent˜ ao 4: chamo um taxi 5: mando ele ir para a Pra¸ca 6: sen˜ ao 7: procuro uma carona OU 8: vou para o ponto do ˆ onibus 9: ao desembarcar, pergunto qual a dire¸ca˜o da Pra¸ca 10: sigo andando at´e chegar nela 11: sen˜ ao 12: saio do Unicenp pela JK, pegando `a direita 13: pego a BR277 ` a direita, sigo at´e a Pe Agostinho 14: pego a Pe Agostinho ` a esquerda e sigo at´e a Al. Cabral 15: viro `a direita at´e a Carlos de Carvalho 16: viro `a esquerda e sigo at´e a Pra¸ca Tirandentes 17: fimse 18: fimse 11.1.4 11.1.6 11.1.7 Exerc´ıcio 4 Chame o algoritmo mdc com os valores 1939 1037 Responda no quadro pr´oprio, qual o MDC pedido 11.1.8 Exerc´ıcio 5 Chame o algoritmo mdc com os valores 1659 1434 Responda no quadro pr´oprio, qual o MDC pedido 11.1.9 Exerc´ıcio 6 Chame o algoritmo mdc com os valores 1777 1471 Responda no quadro pr´oprio, qual o MDC pedido Exerc´ıcio 1 Chame o algoritmo mdc com os valores 11.1.10 1987 1669 Exerc´ıcio 7 Chame o algoritmo mdc com os valores Responda no quadro pr´oprio, qual o MDC pedido 1808 1104 Responda no quadro pr´oprio, qual o MDC pedido 11.1.5 Exerc´ıcio 2 11.1.11 Chame o algoritmo mdc com os valores Exerc´ıcio 8 Chame o algoritmo mdc com os valores 1858 1376 1380 Responda no quadro pr´oprio, qual o MDC pedido vers˜ ao de 10 de fevereiro de 2008 189 1234 Responda no quadro pr´oprio, qual o MDC pedido ©88-08, Pedro Kantek ©88-08, Pedro Kantek 190 vers˜ ao de 10 de fevereiro de 2008 ´ ˜ CAP´ITULO 11. EXERC´ICIOS PRATICOS: 004-INTRODUC ¸ AO 11.1.12 ´ ˜ CAP´ITULO 11. EXERC´ICIOS PRATICOS: 004-INTRODUC ¸ AO Exerc´ıcio 9 Chame o algoritmo mdc com os valores 1876 1721 Responda no quadro pr´oprio, qual o MDC pedido 11.1.13 Exerc´ıcio 10 Chame o algoritmo mdc com os valores 1724 1707 Responda no quadro pr´oprio, qual o MDC pedido 11.1.14 1 2 3 4 5 6 7 8 9 10 Respostas 1 2 2 1 3 1 16 2 1 1 vers˜ ao de 10 de fevereiro de 2008 191 ©88-08, Pedro Kantek ©88-08, Pedro Kantek 192 vers˜ ao de 10 de fevereiro de 2008 ´ CAP´ITULO 12. EXERC´ICIO PRATICO: 006-JOGO DA VIDA sendo disponibilizados no mercado, significando que o jogo poderia ser rodado por horas nessa m´aquinas que n˜ao eram utilizadas de noite. Isto escondeu a popularidade posterior dos fractais gerados por computador. Para muitos aficcionados, Life era simplesmente um desafio de programa¸ca˜o, um m´etodo divertido de gastar os ciclos da CPU. Para alguns, no entanto, Life tinha conota¸co˜es mais filos´ oficas. Ele desenvolveu um culto atrav´es dos anos 70 e no meio dos 80; os desenvolvimentos atuais foram t˜ao longe a ponto de criar emula¸co˜es te´oricas de sistemas de computadores com as regras de um tabuleiro de Life. Cap´ıtulo 12 Exerc´ıcio pr´ atico: 006-Jogo da Vida Regras do Jogo da Vida As regras s˜ao simples e elegantes: ˆ Qualquer c´elula viva com menos de dois vizinhos vivos morre de solid˜ ao. ˆ Qualquer c´elula viva com mais de trˆes vizinhos vivos morre de superpopula¸ca ˜o. ˆ Qualquer c´elula com exatamente trˆes vizinhos vivos se torna uma c´elula viva. ˆ Qualquer c´elula com dois vizinhos vivos continua no mesmo estado para a pr´ oxima gera¸ca˜o. 12.1 O jogo da vida O Jogo da vida foi desenvolvido pelo matem´atico britˆ anico John Horton Conway em 1970. Come¸cou com uma brincadeira mas depois virou coisa s´eria. O jogo foi criado de modo a reproduzir, atrav´es de regras simples, as altera¸co˜es e mudan¸cas em grupos de seres vivos, tendo aplica¸co˜es em diversas ´areas da ciˆencia. As regras definidas s˜ao aplicadas a cada nova ”gera¸ca˜o”; assim, a partir de uma imagem em um tabuleiro bi-dimensional definida pelo jogador, percebem-se mudan¸cas muitas vezes inesperadas e belas a cada nova gera¸ca˜o, variando de padr˜oes fixos a ca´oticos. Origem Um dos problemas matem´aticos mais famosos dos anos 40 era o de achar uma m´aquina que fosse capaz de construir c´ opias de si mesma, que teve uma solu¸ca˜o baseada em um autˆomato celular extremamente engenhoso e complicado inventado pelo renomado matem´atico John von Neumann. Conway inventou o Jogo da Vida (ou Game of Life) ao utilizar suas descobertas anteriores relacionadas com o problema de encontrar um grupo sim´etrico de esferas em 24 dimens˜ oes, proposto por John Leech para simplificar a solu¸ca˜o de von Neumann. O jogo fez sua primeira apari¸ca˜o na edi¸ca˜o de Outubro de 1970 da Scientific American, na coluna de jogos matem´aticos de Martin Gardner. De um ponto de vista te´orico, ele ´e interessante, pois tem o poder de uma m´aquina de Turing universal: tudo pode ser computado atrav´es de algoritmos no Jogo da Vida de Conway. Tamb´em era dito desde 1970 que foi destinado mais tempo de computa¸ca˜o ao Jogo da Vida do que a qualquer outra atividade. Desde sua publica¸ca˜o, ele tem atra´ıdo muito interesse devido aos caminhos surpreendentes que pode tomar. Life ´e um exemplo de auto-organiza¸ca˜o. Ele ´e interessante para bi´ologos, matem´aticos, economistas, fil´osofos e outros a observar o modo como imagens complexas podem surgir de implementa¸co˜es de regras muito simples. O Jogo da Vida tem um n´ umero de imagens reconhecidas que emergem de posi¸co˜es iniciais particulares. Antes da publica¸ca˜o, muitas imagens interessantes j´ a haviam sido descobertas, incluindo o sempre envolvente R-pentomin´o, o auto propulsionado ”glider”, e v´arias ”guns”(armas) que geravam um fluxo sem fim de novas imagens, todas aumentando o interesse no jogo. Sua popularidade foi ajudada pelo fato de ele ter vindo justo no momento em que uma nova gera¸ca˜o de minicomputadores de baixo custo estavam 193 ´ importante entender que todos os nascimentos e mortes ocorrem simultaneamente. E Juntos eles constituem uma gera¸ca˜o ou, como podemos cham´a-los, um ”instante”na hist´ oria da vida completa da configura¸ca˜o inicial. Descri¸ c˜ ao Este ”jogo”´e na realidade um jogo sem jogador, o que quer dizer que sua evolu¸ca˜o ´e determinada pelo seu estado inicial, n˜ao necessitando de nenhuma entrada de jogadores humanos. Ele ´e jogado em um conjunto de c´elulas quadradas que seguem ao infinito em todas as dire¸co˜es. Cada c´elula tem oito ”vizinhos”, que s˜ao as c´elulas adjacentes, incluindo as diagonais. Cada c´elula pode estar em dois estados: ”viva”ou ”morta”. (Tamb´em s˜ao usados os termos ”ligado”e ”desligado”.) O estado do tabuleiro evolui e se modifica em pequenas passagens de tempo. Os estado de todas as c´elulas em um instante s˜ao considerados para calcular o estado de todas as c´elulas no instante seguinte. Todas as c´elulas s˜ao atualizadas simultaneamente. As transi¸co˜es dependem apenas do n´ umero de vizinhos vivos (ver as regras acima). A id´eia b´asica do ”jogo”´e come¸car com uma configura¸ca˜o simples de c´elulas vivas (organismos) que s˜ao colocadas em um tabuleiro 2D de v´arios m´etodos. Isto constitui a primeira gera¸ca˜o. As ”leis gen´eticas”de Conway para nascimentos, mortes e sobrevivˆencia (as quatro regras acima) s˜ao ent˜ao aplicadas e a nova gera¸ca˜o ´e ent˜ao colocada de acordo. Gera¸ca˜o a gera¸ca˜o os ”jogador(es)”observam as v´arias imagens que surgem. A vida sempre segue De uma imagem inicial de c´elulas vivas no tabuleiro, percebe-se que, conforme passam as gera¸co˜es, a popula¸ca˜o anda constantemente de modo n˜ao usual, algumas vezes belo e quase sempre inesperado, por´em muda. Em muitos poucos casos a sociedade eventualmente morre (todas as c´elulas se tornam c´elulas mortas), apesar de que isso pode n˜ao acontecer at´e que ocorram uma s´erie de novas gera¸co˜es. A maioria das imagens iniciais chegam a figuras est´ aveis - Conway chama-as de ”vida parada- que n˜ao podem mudar ou imagens que oscilam para sempre. Imagens sem simetria inicial tendem a se tornar sim´etricas. Uma vez que isto ocorre, a simetria n˜ao pode mais ser perdida, apesar de poder crescer em riqueza. Conway originalmente supˆ os que nenhuma imagem poderia crescer ilimitadamente. Em outras palavras, qualquer configura¸ca˜o com um n´ umero finito de c´elulas n˜ao pode crescer al´em de um limite finito superior ao n´ umero de c´elulas do campo. Esta foi provavelmente a mais profunda e mais dif´ıcil quest˜ ao colocada pelo jogo atualmente. Conway ofereceu um prˆemio de $50 a` primeira pessoa que pudesse provar a afirma¸ca˜o ©88-08, Pedro Kantek 194 vers˜ ao de 10 de fevereiro de 2008 ´ CAP´ITULO 12. EXERC´ICIO PRATICO: 006-JOGO DA VIDA ´ CAP´ITULO 12. EXERC´ICIO PRATICO: 006-JOGO DA VIDA ou seu contr´ ario antes do fim de 1970. Um caminho para provar seu contr´ ario era ser capaz de descobrir imagens que continuassem adicionando contadores ao campo: Uma ”gun”(uma configura¸ca˜o que constantemente atira objetos que se movimentam, como o ”glider”) ou um ”puffer train”(uma configura¸ca˜o que se move mas deixa atr´as uma trilha de ”fuma¸ca”). O prˆemio foi ganho em novembro do mesmo ano por um time do MIT, a configura¸ca˜o inicial (mostrada no topo da p´agina) cresce como um gun, emitindo seu primeiro glider na 40a gera¸ca˜o. A gun emite ent˜ao um novo glider a cada 30 gera¸co˜es. Informe a seguir se a posi¸ca˜o pedida, ap´ os 4 gera¸co˜es, est´ a viva ou morta. Indique que ela est´ a viva escrevendo 1 e que est´ a morta escrevendo 0. L= 7 , C= L= 7 , C= L= 7 , C= L= 7 , C= 1 2 3 6 Imagens Existe uma s´erie de diferentes imagens que podem ocorrer no Jogo da Vida, incluindo imagens paradas (”vidas paradas”), imagens repetitivas (”osciladores- o conjunto de vidas paradas), e imagens que se movimentam atrav´es do tabuleiro (”naves espaciais”). Imagens chamadas ”Matusalens”podem evoluir por longos per´ıodos de tempo antes de se repetir. ”Diehard”´e uma imagem que eventualmente desaparece ap´ os 130 gera¸co˜es, ou passos. ”Acorn”leva 5206 gera¸co˜es para criar 13 gliders depois se estabiliza como v´arios osciladores. Desde ent˜ao, uma s´erie de constru¸co˜es complicadas tˆem sido feitas, incluindo portas l´ogicas de gliders, um somador, um gerador de n´ umeros primos e uma unidade de c´elula que emula o Jogo da Vida em uma escala muito maior e a passos lentos. ´ poss´ıvel construir portas l´ogicas AND, OR e NOT usando gliders. E ´ poss´ıvel E construir uma imagem que aja como uma m´aquina de estado finito conectada a dois contadores. Isto possui o mesmo poder computacional de uma m´aquina de Turing universal (veja contador para a prova), Jogo da Vida ´e t˜ao poderoso quanto qualquer computador com mem´oria ilimitada: ´e o Turing completo. Al´em disso, uma imagem pode conter um conjunto de guns que se combina para construir novos objetos, incluindo c´ opias da imagem original. Um ”construtor universal”pode ser constru´ıdo que contenha um computador Turing completo, e que pode construir uma s´erie de objetos complexos, incluindo mais c´ opias de si mesma. Para este exerc´ıcio considere que o tabuleiro est´ a rodeado por c´elulas mortas. 12.3 Filosofia O Jogo da Vida de Conway cria um universo complicado a partir de poucas ´ imagin´ regras. E avel que todo o universo real seja um jogo similar, jogado em alguma dimens˜ ao mais alta. Esta possibilidade pode influenciar o debate de vivermos em um universo perfeitamente ajustado que requer um projeto inteligente. (texto fortemente baseado em pr.wikipedia.org) 12.4 12.2 Exerc´ıcio 1 Seja o seguinte tabuleiro inicial, onde ’.’ significa c´elula morta e ’X’ significa c´elula viva. . . . X . X . . . . . . . X . . X X . . X . X . . X . . . . . . . . . . . . X . X X X X X . . X . . . X . . . . . X X . . . . . . . . . X . . . . X . X . . . . vers˜ ao de 10 de fevereiro de 2008 . . X . . X . . . X X . . X . . . . . . Exerc´ıcio 2 Seja o seguinte tabuleiro inicial, onde ’.’ significa c´elula morta e ’X’ significa c´elula viva. . . . . . . X X . X . X X X . . X . X . . X . X . . . . . . . . . . . . . . . . X X . . . . . . . . . . X . . . X . . . X X . . . . . . . . X X . . X . . . . . X . X . . . . . X . . . . . X X . . X . Informe a seguir se a posi¸ca˜o pedida, ap´ os 4 gera¸co˜es, est´ a viva ou morta. Indique que ela est´ a viva escrevendo 1 e que est´ a morta escrevendo 0. L= 9 , C= L= 2 , C= L= 2 , C= L= 3 , C= 2 2 5 1 Exerc´ıcio 3 Seja o seguinte tabuleiro inicial, onde ’.’ significa c´elula morta e ’X’ significa c´elula viva. . X X . . . . . . X . . X . . . X X . X . . . . X . . . X X . . . X . . . . X . X . . . . X . . . . X . . . . . . . . . . . X . X . . . X . . . . . . X . X . . X . . X X . X . . . . . . X X X X . . . Informe a seguir se a posi¸ca˜o pedida, ap´ os 4 gera¸co˜es, est´ a viva ou morta. Indique que ela est´ a viva escrevendo 1 e que est´ a morta escrevendo 0. L= 8 , C= L= 8 , C= L= 9 , C= L= 10 , 8 9 4 C= 2 195 ©88-08, Pedro Kantek ©88-08, Pedro Kantek 196 vers˜ ao de 10 de fevereiro de 2008 ´ CAP´ITULO 12. EXERC´ICIO PRATICO: 006-JOGO DA VIDA 12.5 ´ CAP´ITULO 12. EXERC´ICIO PRATICO: 006-JOGO DA VIDA Exerc´ıcio 4 Seja o seguinte tabuleiro inicial, onde ’.’ significa c´elula morta e ’X’ significa c´elula viva. . . . . . . . . . . X . . X . . . . . X . . . . . . . . . . . . . X . X X X . . . X . . . . . . X . . X . . . . X X X . X X . . . . . X . . . . X X . . . . . X . X X X X . . X . . . . X . X . . . . . Informe a seguir se a posi¸ca˜o pedida, ap´ os 4 gera¸co˜es, est´ a viva ou morta. Indique que ela est´ a viva escrevendo 1 e que est´ a morta escrevendo 0. L= 9 , C= L= 9 , C= L= 9 , C= L= 1 , C= 5 6 7 6 12.6 1 2 3 4 Respostas 1 0 1 1 0 0 0 1 1 1 1 1 1 0 1 1 vers˜ ao de 10 de fevereiro de 2008 197 ©88-08, Pedro Kantek ©88-08, Pedro Kantek 198 vers˜ ao de 10 de fevereiro de 2008 ´ CAP´ITULO 13. EXERC´ICIO PRATICO:007-GPS Decodificando as localiza¸co˜es dos sat´elites a partir dos sinais de microondas (tipo de onda electromagn´etica) e de uma base de dados interna, e sabendo a velocidade de propaga¸c˜ao do sinal, o receptor, pode situar-se na intersec¸c˜ao de quatro esferas, uma para cada sat´elite. Cap´ıtulo 13 Exerc´ıcio Pr´ atico:007-GPS - 1 Sistema de Posicionamento Global, vulgarmente conhecido por GPS (do acr´onimo do inglˆes Global Positioning System), ´e um sistema de posicionamento por sat´elite, por vezes incorrectamente designado de sistema de navega¸c˜ao, utilizado para determina¸c˜ao da posi¸c˜ao de um receptor na superf´ıcie da Terra ou em ´orbita. O sistema GPS foi criado e ´e controlado pelo Departamento de Defesa dos Estados Unidos da Am´erica, DoD, e pode ser utilizado por qualquer pessoa, gratuitamente, necessitando apenas de um receptor que capte o sinal emitido pelos sat´elites. O DoD fornece dois tipos de servi¸cos GPS: Standard e Precision. Contrariamente ao que inicialmente acontecia, atualmente os dois servi¸cos est˜ao dispon´ıveis em regime aberto em qualquer parte do mundo. O sistema est´a dividido em trˆes partes: espacial, de controle e usu´ario. O segmento espacial ´e composto pela constela¸c˜ao de sat´elites. O segmento de controle ´e formado pelas esta¸co˜es terrestres dispersas pelo mundo ao longo da Zona Equatorial, respons´aveis pela monitoriza¸c˜ao das ´ orbitas dos sat´elites, sincroniza¸c˜ao dos rel´ ogios atˆomicos de bordo dos sat´elites e atualiza¸c˜ao dos dados de almanaque que os sat´elites transmitem. O segmento do usu´ario consiste num receptor que capta os sinais emitidos pelos sat´elites. Um receptor GPS (GPSR) decodifica as transmiss˜oes do sinal de c´ odigo e fase de m´ ultiplos sat´elites e calcula a sua posi¸c˜ao com base nas distˆancias a estes. A posi¸c˜ao ´e dada por latitude, longitude e altitude. Descri¸ c˜ ao t´ ecnica Receptores GPS vˆem numa variedade de formatos, de dispositivos integrados dentro de carros, telefones, e rel´ ogios, a dispositivos dedicados somente ao GPS como estes das marcas Trimble, Garmin e Leica. O sistema foi declarado totalmente operacional apenas em 1995. Seu desenvolvimento custou 10 bilh˜ oes de d´olares. Consiste numa ”constela¸c˜ao”de 28 sat´elites sendo 4 sobressalentes em 6 planos orbitais. Os sat´elites GPS, constru´ıdos pela empresa Rockwell, foram lan¸cados entre Fevereiro de 1978 (Bloco I), e 6 de Novembro de 2004 (o 29º). Cada um circunda a Terra duas vezes por dia a uma altitude de 20200 quilˆ ometros (12600 milhas) e a uma velocidade de 11265 quilˆ ometros por hora (7000 milhas por hora). Os sat´elites tˆem a bordo rel´ ogios at´omicos e constantemente difundem o tempo preciso de acordo com o seu pr´ oprio rel´ ogio, junto com informa¸c˜ao adicional como os elementos orbitais de movimento, tal como determinado por um conjunto de esta¸co˜es de observa¸c˜ao terrestres. Medi¸ c˜ ao com um GPS O receptor n˜ao necessita ter um rel´ ogio de t˜ao grande precis˜ao, mas sim de um suficientemente est´avel. O receptor capta os sinais de quatro sat´elites para determinar as suas pr´ oprias coordenadas, e ainda o tempo. Ent˜ao, o receptor calcula a distˆancia a cada um dos quatro sat´elites pelo intervalo de tempo entre o instante local e o instante em que os sinais foram enviados (esta distˆancia ´e chamada pseudodistˆancia). 199 Coordenadas com um GPS com B´ ussula e Alt´ımetro integrado Al´em de sua aplica¸c˜ao o´bvia na avia¸c˜ao geral e comercial e na navega¸c˜ao mar´ıtima, qualquer pessoa que queira saber a sua posi¸c˜ao, encontrar o seu caminho para determinado local (ou de volta ao ponto de partida), conhecer a velocidade e direc¸c˜ao do seu deslocamento pode-se beneficiar com o sistema. Atualmente o sistema est´a sendo muito difundido em autom´ oveis com sistema de navega¸c˜ao de mapas, que possibilita uma vis˜ao geral da ´area que vocˆe est´a percorrendo. A comunidade cient´ıfica utiliza-o pelo seu rel´ ogio altamente preciso. Durante experiˆencias cient´ıficas de captura de dados, pode-se registrar com precis˜ao de micro-segundos (0,000001 segundo) quando a amostra foi obtida. Naturalmente a localiza¸c˜ao do ponto onde a amostra foi recolhida tamb´em pode ser importante. Agrimensores diminuem custos e obtˆem levantamentos precisos mais rapidamente com o GPS. Unidades espec´ıficas tˆem custo aproximado de 3.000 d´olares e precis˜ao de 1 metro, mas existem receptores mais caros com precis˜ao de 1 cent´ımetro. A captura de dados por estes receptores ´e mais lenta. Guardas florestais, trabalhos de prospec¸c˜ao e explora¸c˜ao de recursos naturais, ge´ologos, arque´ologos, bombeiros, s˜ao enormemente beneficiados pela tecnologia do sistema. O GPS tem-se tornado cada vez mais popular entre ciclistas, balonistas, pescadores, ecoturistas, geocachers (uma divers˜ao bem moderna: uma caixa lacrada cheia de pinduricalhos e de um livro ´e escondida em algum lugar no planeta e suas coordenadas publicadas. Veja mais em http://www.geocaching.com), ou por leigos que queiram apenas orienta¸c˜ao durante as suas viagens. Com a populariza¸c˜ao do GPS, um novo conceito surgiu na agricultura: a agricultura de precis˜ao. Uma m´aquina agr´ıcola dotada de receptor GPS armazena dados relativos `a produtividade em um cart˜ao magn´etico que, tratados por programa espec´ıfico, produz um mapa de produtividade da lavoura. As informa¸co˜es permitem tamb´em otimizar a aplica¸c˜ao de corretivos e fertilizantes. Tipos de receptores Existem diferentes receptores GPS, desde diversas marcas que comercializam solu¸co˜es ”tudo-em-um”, at´e os externos que s˜ao ligados por cabo ou ainda por bluetooth. Geralmente categorizados em termos de demandas de uso em Geod´esicos, Topogr´aficos e de Navega¸c˜ao. A diferencia¸c˜ao entre essas categorias, que a princ´ıpio pode parecer meramente de pre¸co de aquisi¸c˜ao ´e principalmente devido `a precis˜ao alcan¸cada, ou seja a raz˜ao da igualdade entre o dado real do posicionamento, e o oferecido pelo equipamento. Sendo os mais acurados, com valores na casa dos mil´ımetros, os receptores Geod´esicos s˜ao capazes de captar as duas freq¨ uˆencias emitidas pelos sat´elites (L1 e L2), possibilitando assim a elimina¸c˜ao dos efeitos da refra¸c˜ao ionosf´erica. Os topogr´aficos, que tem caracter´ısticas de trabalho semelhantes `a categoria anterior, por´em somente captam a portadora L1, tamb´em possuem elevada precis˜ao, geralmente na casa dos cent´ımetros. Ambas as categorias tem aplica¸co˜es t´ecnicas, e caracter´ısticas pr´ oprias como o p´os-processamento, o que significa que geralmente n˜ao informam o posicionamento instantaneamente. No caso da categoria de maior uso, a de navega¸c˜ao, embora possua menor precis˜ao de posicionamento, tem in´ umeras vantagens como o baixo pre¸co de aquisi¸c˜ao e in´ umeras aplica¸co˜es, onde vˆe-se uma infinidade de modelos, tanto aqueles que integram diversos equipamentos como computadores de m˜ao, celulares, rel´ ogios, etc., como aqueles dedicados exclusivamente ao posicionamento GPS, onde tamb´em encontramos aplica¸co˜es para uso do dado de posicionamento em outros equipamentos como notebooks, rastreadores de ve´ıculos, etc. ©88-08, Pedro Kantek 200 vers˜ ao de 10 de fevereiro de 2008 ´ CAP´ITULO 13. EXERC´ICIO PRATICO:007-GPS ´ CAP´ITULO 13. EXERC´ICIO PRATICO:007-GPS Dia 3 de setembro de 1989 Maracan˜ a lotado para assistir ao Brasil X Chile, pelas eliminat´orias da Copa do Mundo de 90. Longe dali, em algum ponto a princ´ıpio entre Marab´a e Bel´em, Cezar Augusto Garcez comanda um vˆoo cego. Perdido em pleno ar, tenta se posicionar. Localiza, em v˜ao, uma r´adio que transmitia a partida que entraria para a hist´ oria como “o jogo da fogueteira”. Aquele vˆoo tamb´em estaria nos jornais no dia seguinte: “Avi˜ ao desaparece na Amazˆ onia”, publicou O Globo. Her´oi e vil˜ ao, ao mesmo tempo, o comandante Garcez ´e a principal personagem do RG-254 que caiu na selva amazˆonica em 1989. O que deveria ser um vˆoo rotineiro se transformou numa trag´edia. Desorientado, Garcez permaneceu durante trˆes horas em vˆoo cego. Temendo que o erro fosse descoberto, passou diversas informa¸co˜es truncadas para a base, afirmou estar onde n˜ao estava. Sem combust´ıvel, arriscou o aparentemente imposs´ıvel: um pouso na copa das ´ arvores, em plena noite, com visibilidade praticamente nula. Garcez foi acusado de negligenciar rotinas b´asicas da avia¸ca˜o. Por outro lado, salvou a vida de muitos passageiros ao conseguir aterrissar a aeronave e cuidar dos feridos. Ainda hoje, aguarda julgamento. 13.1 GPS Na d´ecada de 70, os EUA come¸caram a projetar e implementar o sistema conhecido como GPD (Global Positioning System). O primeiro sat´elite Navstar foi lan¸cado em 1978. O objetivo principal era permitir que os estimados 40.000 usu´ arios militares americanos se orientassem sobre a terra. Os civis come¸caram a usar o sistema a partir da d´ecada de 80. Hoje, estima-se em mais de 50.000.000 de dispositivos capazes de receber os sinais de GPS e apresentar uma estimativa de localiza¸ca˜o. Al´em do sistema americano, existe o russo Glonass de uso exclusivo pelos militares e a partir da u ´ ltima semana de 2005, o sistema Galileu constru´ıdo e operado pela Agˆencia Espacial Europ´eia. A grande explos˜ao de uso, dever´a vir quando celulares e autom´ oveis come¸carem a vir de f´ abrica com a possibilidade de informar sua localiza¸ca˜o. Associados a sistemas de mapas embarcados, poder˜ao informar ao motorista qual caminho tomar para ir virtualmente a qualquer lugar sobre a superf´ıcie terrestre. Associados a telefones celulares, poder˜ao informar a localiza¸ca˜o do telefone. Associados a sistemas de prote¸ca˜o contra roubo de autom´ oveis, informar˜ ao a localiza¸ca˜o em tempo real e assim por diante. A lista de aplica¸co˜es poss´ıveis parece inesgot´ avel. Todos os sistemas acima se baseiam na triangula¸ca˜o (ou quadrangula¸ca˜o) do receptor em rela¸ca˜o a 3 ou 4 (ou mais) sat´elites em ´orbita da terra. O sistema come¸ca pela identifica¸ca˜o de diversos pontos fixos sobre a superf´ıcie terrestre. Tais pontos contam com esta¸co˜es transmissoras e permitem a cada sat´elite a recep¸ca˜o de diversos pontos. Medindo o tempo gasto por cada sinal desde a esta¸ca˜o terrena at´e o sat´elite, e fazendo isso com diversas esta¸co˜es, o sat´elite conhece sua real posi¸ca˜o com precis˜ ao de cent´ımetros. Cada sat´elite possui um rel´ogio atˆ omico, integrado `a rede GPS e que garante precis˜ ao de tempo de 1 bilion´esimo de segundo. Todos os sat´elites emitem 2 mensagens: A primeira, envia a identifica¸ca˜o do sat´elite, sua posi¸ca˜o no espa¸co e sua hora interna. Uma segunda mensagem ´e uma seq¨ uˆencia de impulsos digitais em um padr˜ao inconfund´ıvel. Tudo funciona como se o receptor tamb´em gerasse no mesmo instante de tempo a mesma seq¨ uˆencia de impulsos digitais. Da an´ alise dos dois sinais (o gerado pelo sat´elite e o gerado internamente no receptor) ´e poss´ıvel medir o retardo do sinal do sat´elite. Conhecendo a velocidade da luz (fixa e igual a 299.729.458 m/seg) e conhecendo o tempo gasto pelo sinal do sat´elite ao receptor, ´e poss´ıvel estabelecer a distˆ ancia entre sat´elite e receptor. vers˜ ao de 10 de fevereiro de 2008 201 ©88-08, Pedro Kantek Daqui, pode-se inferir que o receptor est´ a sobre a esfera de centro x, y, z (as coordenadas no espa¸co do sat´elite) e de raio R, que ´e a distˆ ancia entre o receptor e o sat´elite. Ao fazer o mesmo c´ alculo com um segundo sat´elite, obtem-se uma segunda esfera, e o receptor est´ a sobre o c´ırculo de intersec¸ca˜o das duas esferas. Finalmente ao fazer o c´ alculo com um terceiro sat´elite, obtˆem-se uma terceira esfera. O receptor ainda pertence a`s 3 esferas, e a intersec¸ca˜o das 3 apresenta apenas 2 pontos no espa¸co. Um deles apenas sobre a superf´ıcie terrestre, e logo esta ´e a posi¸ca˜o do receptor, com precis˜ ao de metros. 13.1.1 Problemas Se os receptores pudessem ter um rel´ogio atˆ omico 3 sat´elites bastariam. Como um rel´ogio atˆ omico ´e muito caro e pesado, os receptores usam rel´ogios de quartzo comum (sujeitos a erros de 1 seg/dia). Ent˜ao usa-se um quarto sat´elite para refazer os c´ alculos e permitir acertar o atraso/adiantamen do rel´ogio local ao rel´ogio da rede. Se o usu´ ario estiver em movimento, os sinais ainda vˆem afetados pelo efeito Doppler, que precisa ser analiticamente corrigido antes de estabelecer a posi¸ca˜o do receptor. Idem para os efeitos relativ´ısticos associados. O sistema americano usa duas radiofrequencias: L1 e L2. A L1 ´e chamada Sinal Civil, embora os militares tamb´em a usem. A L2 ´e de uso exclusivo militar, j´ a que seus c´ odigos (a segunda parte das mensagens) n˜ao s˜ao p´ ublicos e s˜ao protegidos por criptografia. Ao usar apenas o sinal L1, receptores conseguem determinar sua posi¸ca˜o com erros de 5 a 10 m, causados pela a¸ca˜o da ionosfera. A camada de ar sobre a terra ´ como um l´apis aumenta a densidade da atmosfera, causando refra¸ca˜o nos sinais. E colocado dentro de um copo de a´gua. A potˆencia de um sat´elite ´e de 500W, o equivalente a 5 lˆampadas de 100W. Apenas para efeito de compara¸ca˜o, o sinal de TV de um sat´elite ´e 1 bilh˜ ao de vezes mais forte. Este fato permite que interferˆencias (`as vezes propositais) obscure¸cam ou at´e invalidem o sinal dos sat´elites. Este fato ´e usado em teatros de guerra, quando as for¸cas americanas introduzem geradores locais de ru´ıdo centrados na banda usada pelo sistema. Essa ´e a raz˜ ao pela qual embora o sistema seja p´ ublico, russos e europeus tratam de ter cada um o seu. 13.2 Dois amigos Vamos simular o c´ alculo de uma posi¸ca˜o desconhecida usando triangula¸ca˜o, mas vamos trabalhar apenas em 2D, que ningu´em aqui est´ a a fim de enlouquecer por causa da geometria anal´ıtica. ;-) Suponhamos uma regi˜ ao plana, na qual dois pontos tem coordenadas conhecidas. Vocˆe vai colocar 2 amigos, um em cada ponto, todos munidos de rel´ogios absolutamente acertados at´e o mil´esimo do segundo, e completamente precisos. Vocˆe combinou que a`s 14h00, um dos seus amigos dar´ a um tiro de espoleta. Nessa mesma hora, vocˆe ligar´a um cronˆ ometro. Alguns d´ecimos de segundos depois, vocˆe ouvir´a o tiro e desligar´ a o cronˆ ometro, obtendo um tempo gasto pelo barulho para percorrer a distˆ ancia entre o seu primeiro amigo e vocˆe. Vamos chamar esta distˆ ancia de D1 . Lembrando que o som se propaga a 340m/seg, vocˆe conseguir´ a uma medida confi´ avel entre vocˆe e seu amigo 1. O procedimento ser´a repetido a`s 14h15 com seu amigo n´ umero 2. Pelo mesmo mecanismo vocˆe obter´a a distˆ ancia entre vocˆe e seu amigo 2. Ser´a a distˆ ancia D2 . ©88-08, Pedro Kantek 202 vers˜ ao de 10 de fevereiro de 2008 ´ CAP´ITULO 13. EXERC´ICIO PRATICO:007-GPS ´ CAP´ITULO 13. EXERC´ICIO PRATICO:007-GPS Sabendo que seu amigo 1, se encontra no centro de um c´ırculo de raio D1 e coordenadas do centro iguais a x1 , y1 , e seu amigo 2 se encontra em x2 , y2 , tamb´em no centro de um c´ırculo de raio D2 , e que vocˆe se encontra sobre os dois c´ırculos, pede-se que vocˆe calcule a sua posi¸ca˜o. Obs: se vocˆe n˜ao tiver muita intimidade com a geometria an´ alitica, um bom m´etodo ´e o gr´ afico. Use um papel milimetrado, disponha os dois pontos, trace duas circunferˆencias de raios D1 e D2 e nos encontros das duas circunferˆencias vocˆe estar´a. Obs: Os dois pontos candidatos a serem sua localiza¸ca˜o s˜ao: x,y x,y 13.2.4 Problema 2 Dados: ˆ Este procedimento tamb´em pode ser usado para verificar o acerto/erro das contas e a verifica¸ca˜o final do ponto. ˆ Seu amigo 1 est´ a em x1 = 392 e y1 = 173. ˆ Como s´ o usaremos 2 amigos (ao inv´es de 3), haver´a 2 pontos candidatos, ambos na superf´ıcie da terra. Responda os 2. ˆ Seu amigo 2 est´ a em x2 = 696 e y2 = 210. 13.2.1 Exemplo Seja um caso em que x1 = 264m, y1 = 141m. x2 = 520m, y2 = 291m. Os tempos s˜ao: t1 = 0, 4749seg e t2 = 0, 4017seg. Obtem-se d1 = 161, 48m e d2 = 136, 6m. A f´ ormula do circulo 1 ´e x2 + y 2 − 528x − 282y + 63501.21 = 0 A f´ ormula do circulo 2 ´e x2 + y 2 − 1040x − 582y + 336421 = 0 Subtraindo uma equa¸ca˜o da outra, fica-se com 512x + 300y − 272920 = 0 e y= 272920 − 512x = 909.7 − 1.7x 300 ˆ O tiro do amigo 1 demorou t1 = .395137 segundos. O tiro do amigo 2 demorou t2 = .507112 segundos. Os dois pontos candidatos a serem sua localiza¸ca˜o s˜ao: x,y x,y 13.2.5 Problema 3 Dados: Substituindo o y obtido em qualquer uma das equa¸co˜es, chega-se ao valor correto do observador que ´e xo = 410m, yo = 210m. ˆ Seu amigo 1 est´ a em x1 = 283 e y1 = 130. ˆ Seu amigo 2 est´ a em x2 = 507 e y2 = 275. 13.2.2 Como fazer Para entender o funcionamento do sistema, ´e necess´ario relembrar um pouco de f´ısica e de geometria an´ alitica. Da f´ısica: distˆ ancia = velocidade × tempo. Sabendo que a velocidade do som ´e 340 m/seg, obtˆem-se as duas distˆ ancias. Da geometria anal´ıtica, um c´ırculo no plano ´e perfeitamente determinada se soubermos as coordenadas α, β do seu centro, bem como o raio dele, usualmente representada por R. Da geometria anal´ıtica, a f´ ormula ´e ˆ O tiro do amigo 1 demorou t1 = .449615 segundos. O tiro do amigo 2 demorou t2 = .335990 segundos. Os dois pontos candidatos a serem sua localiza¸ca˜o s˜ao: x,y x,y (x − α)2 + (y − β)2 = R2 13.2.6 Do problema, s˜ao conhecidos α1 , α2 , β1 , β2 , D1 e D2 . Obtem-se agora duas f´ ormulas em x2 , x, y 2 e y. Operando com elas obtem-se dois pares de x, y que s˜ao os pontos candidatos. Dados: 13.2.3 Problema 4 ˆ Seu amigo 1 est´ a em x1 = 310 e y1 = 170. ˆ Seu amigo 2 est´ a em x2 = 679 e y2 = 256. Problema 1 ˆ O tiro do amigo 1 demorou t1 = .614903 segundos. O tiro do amigo 2 demorou t2 = .499585 segundos. Dados: ˆ Seu amigo 1 est´ a em x1 = 253 e y1 = 169. Os dois pontos candidatos a serem sua localiza¸ca˜o s˜ao: x,y x,y ˆ Seu amigo 2 est´ a em x2 = 671 e y2 = 225. ˆ O tiro do amigo 1 demorou t1 = .675453 segundos. O tiro do amigo 2 demorou t2 = .568409 segundos. vers˜ ao de 10 de fevereiro de 2008 203 ©88-08, Pedro Kantek ©88-08, Pedro Kantek 204 vers˜ ao de 10 de fevereiro de 2008 ´ CAP´ITULO 13. EXERC´ICIO PRATICO:007-GPS 13.2.7 ´ CAP´ITULO 13. EXERC´ICIO PRATICO:007-GPS Problema 5 Os dois pontos candidatos a serem sua localiza¸ca˜o s˜ao: x,y x,y Dados: ˆ Seu amigo 1 est´ a em x1 = 201 e y1 = 163. ˆ Seu amigo 2 est´ a em x2 = 627 e y2 = 251. ˆ O tiro do amigo 1 demorou t1 = .593287 segundos. O tiro do amigo 2 demorou t2 = .686965 segundos. 13.2.11 Problema 9 Dados: ˆ Seu amigo 1 est´ a em x1 = 313 e y1 = 195. Os dois pontos candidatos a serem sua localiza¸ca˜o s˜ao: x,y x,y ˆ Seu amigo 2 est´ a em x2 = 506 e y2 = 279. ˆ O tiro do amigo 1 demorou t1 = .367376 segundos. O tiro do amigo 2 demorou t2 = .256153 segundos. 13.2.8 Problema 6 Os dois pontos candidatos a serem sua localiza¸ca˜o s˜ao: x,y x,y Dados: ˆ Seu amigo 1 est´ a em x1 = 288 e y1 = 109. ˆ Seu amigo 2 est´ a em x2 = 619 e y2 = 205. ˆ O tiro do amigo 1 demorou t1 = .443191 segundos. O tiro do amigo 2 demorou t2 = .570475 segundos. 13.2.12 Problema 10 Dados: ˆ Seu amigo 1 est´ a em x1 = 329 e y1 = 145. Os dois pontos candidatos a serem sua localiza¸ca˜o s˜ao: x,y x,y ˆ Seu amigo 2 est´ a em x2 = 519 e y2 = 219. ˆ O tiro do amigo 1 demorou t1 = .231924 segundos. O tiro do amigo 2 demorou t2 = .372242 segundos. 13.2.9 Problema 7 Os dois pontos candidatos a serem sua localiza¸ca˜o s˜ao: x,y x,y Dados: ˆ Seu amigo 1 est´ a em x1 = 308 e y1 = 157. ˆ Seu amigo 2 est´ a em x2 = 561 e y2 = 204. ˆ O tiro do amigo 1 demorou t1 = .330474 segundos. O tiro do amigo 2 demorou t2 = .429059 segundos. Os dois pontos candidatos a serem sua localiza¸ca˜o s˜ao: x,y x,y 13.2.10 Problema 8 Dados: 13.2.13 1 2 3 4 5 6 7 8 9 10 Respostas 478 524 408 513 400 433 416 408 422 406 215 198 218 220 196 150 188 194 256 162 ˆ Seu amigo 1 est´ a em x1 = 274 e y1 = 105. ˆ Seu amigo 2 est´ a em x2 = 511 e y2 = 264. ˆ O tiro do amigo 1 demorou t1 = .473127 segundos. O tiro do amigo 2 demorou t2 = .366280 segundos. vers˜ ao de 10 de fevereiro de 2008 205 ©88-08, Pedro Kantek ©88-08, Pedro Kantek 206 vers˜ ao de 10 de fevereiro de 2008 ´ CAP´ITULO 14. EXERC´ICIO PRATICO: 008 - PROBLEMAS 14.1.2 Cap´ıtulo 14 Exerc´ıcio Pr´ atico: 008 Problemas 14.1.3 Quais os nomes v´ alidos? Na lista de nomes a seguir, informe se cada nome ´e v´alido ou n˜ao. nome v´alido inv´alido R33 33R SALDOBANCARIO JKGHHGGJHG OBA AQUI A+B ZERO/DOIS Tipos de vari´ aveis Para representar as vari´ aveis a seguir, qual o(s) tipo(s) mais adequado ? (Se houver mais de um tipo, indique com “1” o melhor, com “2” o seguinte e assim por diante). nome do campo int real l´ogico carac cadeia nome sal´ ario n´ umero de filhos o sujeito tem filhos ? idade ano de nascimento categoria de motorista nome de uma vitamina 14.1 Resolva os exerc´ıcios a seguir Cada um dos exerc´ıcios a seguir apresenta uma resposta num´erica u ´ nica. Descubra-a e coloque o seu valor no quadrado duplo que segue a defini¸ca˜o. 14.1.1 Problema 1 Problema 2 Em um tanque h´a 4000 bolinhas de pingue-pongue. Um menino come¸cou a retirar as bolinhas, uma por uma, com velocidade constante quando eram 10h. Ap´ os 6 horas, h´a no tanque 3520 bolinhas. Se o menino continuasse no mesmo ritmo, a que horas do dia seguinte o tanque ficaria com 2000 bolinhas ? (OBM 2006) Problema 3 Uma processadora de alimentos desenvolveu uma marca de salada de fruta enlatada de muito sucesso. A f´ ormula desta salada, envolve as seguintes frutas e ingredientes nas seguintes propor¸co˜es: 1 Kg de banana; 0,5 Kg de abacaxi; 2 Kg de laranja e 250 gramas de a¸cucar. Suponha que em um determinado dia, existem dispon´ıveis as seguintes quantidades no dep´osito: 100 Kg de a¸cucar, 300 Kg de abacax´ı, 800 Kg de bananas e 1 tonelada de laranja. Pergunta-se quantos quilos de salada de fruta poder˜ao ser produzidos preservando as propor¸co˜es da f´ ormula original ? 14.1.4 Problema 4 A soma de dois n´ umeros primos a e b ´e 34 e a soma dos primos a e c ´e 33. Quanto vale a + b + c ? (OBM 2004) 14.1.5 Problema 5 Na multiplica¸ca˜o a seguir, a, b e c s˜ao algarismos: 1 a b b 3 --------* * * * * * --------1 c c 0 1 x Qual o valor de a + b + c Um certo espet´aculo musical no Jap˜ao, tem um custo para entrar de 3500 ienes para adultos e 1200 ienes para estudantes. No s´abado passado havia 608 pessoas, e a renda da noite foi de 1.707.100 ienes. Quantos estudantes havia ? 207 ©88-08, Pedro Kantek 208 vers˜ ao de 10 de fevereiro de 2008 ´ CAP´ITULO 14. EXERC´ICIO PRATICO: 008 - PROBLEMAS 14.1.6 ´ CAP´ITULO 14. EXERC´ICIO PRATICO: 008 - PROBLEMAS Problema 6 O per´ımetro de determinado retˆ angulo ´e 16 vezes maior do que o menor lado do retˆ angulo. O comprimento do maior lado ´e 12 cent´ımetros maior do que o menor lado. Qual o comprimento do maior lado, em cent´ımetros? 14.1.7 6 7 8 9 10 14.0 20.0 30.0 14.0 0 Problema 7 As letras O, B e M representam n´ umeros inteiros. Se O×B×M = 240, (O×B)+M = 46 e O + (B × M ) = 64, quanto vale O + B + M ? (OBM 2005) 14.1.8 Problema 8 Na oficina mecˆanica do Z´e Ti˜ao, nesta semana foram reparados 40 ve´ıculos, entre motos e carros. Como curiosidade, o auxiliar do Z´e Ti˜ao contou que o n´ umero total de rodas dos ve´ıculos reparados foi 100 rodas. Pergunta-se quantas motos foram reparadas ? 14.1.9 Problema 9 Um time de futebol ganhou 8 jogos a mais do que perdeu e empatou 3 jogos menos do que ganhou en 31 partidas jogadas. Quantas partidas o time ganhou ? (OBM 2006) 14.1.10 Problema 10 O correio de um determinado pa´ıs s´o aceita transportar pacotes com peso inferior a 3 Kg e comprimento master menor que 250 cent´ımetros. O comprimento master ´e o maior barbante que d´a a volta completa ao pacote. Supondo um pacote de 2,85 Kg e cujas dimens˜ oes em metros s˜ao: 0,3 x 0,7 x 1,1 m, pergunta-se Este pacote pode (responda 1) ou n˜ao pode (responda 0) ser mandado pelo correio ? 14.1.11 1 2 3 4 5 Respostas 183.0 11.0 1500.0 36.0 10.0 vers˜ ao de 10 de fevereiro de 2008 209 ©88-08, Pedro Kantek ©88-08, Pedro Kantek 210 vers˜ ao de 10 de fevereiro de 2008 ´ ´ CAP´ITULO 15. EXERC´ICIO PRATICO: 009-ACHAR O NUMERO QUE FALTA 15.2 Exerc´ıcio 1 Cap´ıtulo 15 Exerc´ıcio pr´ atico: 009-Achar o n´ umero que falta 15.1 Qual o n´ umero que falta ? Neste folha de exerc´ıcios, ser˜ao apresentadas diversas seq¨ uˆencias de 11 n´ umeros. Os n´ umeros iniciais (1, 2 ou 3) a depender da seq¨ uˆencia s˜ao aleat´orios. Os pr´oximos at´e o final seguem uma determinada lei de forma¸ca˜o. Um dos n´ umeros do final da seq¨ uˆencia ´e representado por um sinal de ?. Vocˆe deve descobrir que n´ umero ´e esse Exemplo Veja-se alguns casos N. 1 2 3 4 5 6 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 8 4 8 5 4 9 1 3 6 9 8 5 1 5 9 12 7 2 7 8 13 4 7 9 5 1 9 9 4 13 21 3 15 12 17 22 5 16 24 14 7 1 10 9 22 37 14 22 19 33 38 9 32 57 19 16 15 19 13 38 62 24 42 31 58 63 14 57 138 33 24 25 29 22 63 98 41 69 50 94 99 23 93 333 52 47 41 48 35 99 7 8 9 10 11 147 79 116 81 143 148 37 142 804 85 87 81 77 57 148 211 ? ? 131 207 212 60 206 1941 137 158 147 125 ? 212 292 264 311 212 ? 293 ? ? ? 222 292 ? ? 149 293 ? 487 506 ? 388 ? 157 387 11313 ? ? 497 327 241 ? 513 895 822 555 509 514 254 508 27312 581 987 913 529 390 514 211 resposta + + + + some em 3 = = + + = + + = + + = 3 N. 1 2 3 4 5 6 7 8 9 10 11 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 3 6 7 3 5 9 8 7 3 6 7 6 6 1 4 4 6 3 5 4 5 8 4 4 9 4 1 7 7 7 4 10 4 7 8 4 8 5 9 4 1 2 3 9 5 3 4 3 8 8 2 12 2 7 4 5 5 1 5 6 11 19 15 16 13 4 24 14 19 16 9 8 12 19 18 8 14 3 21 17 7 21 8 18 13 9 14 15 17 17 26 35 34 32 21 17 56 21 35 26 19 10 27 47 32 15 32 9 50 33 9 37 18 43 17 18 30 17 39 27 63 60 83 57 34 25 136 37 61 48 47 18 66 113 59 26 78 15 121 58 16 62 44 104 30 32 55 47 95 48 152 96 200 93 55 46 328 60 103 80 113 28 159 273 100 49 188 27 292 94 25 98 106 251 47 59 91 81 229 79 367 145 483 142 89 88 792 99 171 134 273 46 384 659 168 90 454 51 705 143 41 147 256 606 77 109 140 175 553 131 886 2139 290 2815 ? ? ? 387 377 293 4616 262 459 360 1591 120 2238 ? ? ? 9273 740 304 2646 171 4109 ? 12467 511 16407 508 610 992 26904 689 1213 952 9273 314 13044 22387 1203 1028 15422 579 23949 509 280 513 8696 20586 526 1245 506 2735 18785 920 ©88-08, Pedro Kantek ? 1166 206 144 159 ? ? 281 ? ? ? 927 1591 277 165 ? 93 ? 390 ? 11144 425 ? 586 3841 194 ? 6388 ? 207 66 211 618 ? ? 9920 388 173 292 ? ? ? 3532 201 368 285 687 3223 349 200 ? ? 1335 214 212 ? 3602 8527 325 ? 385 1361 ? ? resposta some em 3 + + = + + = + + = + + = + + = + + = + + = + + = + + = + + = vers˜ ao de 10 de fevereiro de 2008 ´ ´ CAP´ITULO 15. EXERC´ICIO PRATICO: 009-ACHAR O NUMERO QUE FALTA 15.3 ´ ´ CAP´ITULO 15. EXERC´ICIO PRATICO: 009-ACHAR O NUMERO QUE FALTA Exerc´ıcio 2 15.4 N. 1 2 3 4 5 6 7 8 9 10 11 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 3 5 1 1 7 7 2 7 3 9 2 8 9 7 9 9 4 3 2 7 4 5 4 7 7 1 7 3 8 3 7 9 9 1 11 2 6 11 1 5 3 9 13 1 5 5 7 7 6 5 3 2 8 11 11 8 2 2 6 3 16 18 12 9 20 11 6 20 5 23 9 17 22 1 19 14 15 16 15 8 13 9 19 20 20 9 11 7 20 15 32 34 23 11 36 15 14 36 11 33 16 26 38 9 43 19 29 32 31 20 22 20 34 36 36 17 24 11 46 27 57 59 37 21 61 28 26 61 27 79 29 43 63 11 105 33 59 57 56 33 41 49 60 61 61 26 59 20 112 51 93 95 62 41 97 45 46 97 65 145 49 69 99 21 253 52 117 93 92 61 69 118 101 97 97 43 142 33 270 87 142 144 101 73 146 75 86 146 157 303 82 112 148 41 611 85 235 142 141 114 116 285 168 146 146 69 343 55 652 147 206 287 289 268 ? ? ? 135 ? ? 291 122 158 210 ? ? 508 510 705 841 512 524 982 512 5333 4783 585 767 514 457 20755 581 3755 508 507 1296 829 9681 1192 512 512 474 11651 388 22148 1059 vers˜ ao de 10 de fevereiro de 2008 ? ? 291 915 1199 135 ? ? 293 293 135 212 ? 1475 137 ? 206 205 208 191 ? ? 210 210 112 828 ? 1574 243 213 ? 222 939 ? ? 383 313 1661 451 ? 389 435 457 391 323 534 ? 2209 2385 360 474 ? 249 8597 ? 1877 387 386 ? ? 4010 734 391 291 181 1999 147 3800 ? ? ? ? 651 239 ? resposta + + some em 3 = + + = + + = + + = + + = + + = + + = + + = + + = + + ©88-08, Pedro Kantek = 3 Exerc´ıcio 3 N. 1 2 3 4 5 6 7 8 9 10 11 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 6 6 7 6 6 2 3 5 8 2 1 3 8 2 5 4 8 7 5 7 1 5 2 2 4 9 5 2 8 5 2 2 7 4 10 8 8 6 6 6 5 1 5 9 2 6 6 7 3 1 2 7 4 6 4 2 4 7 12 9 10 2 21 14 19 1 12 16 20 8 14 4 17 1 12 1 22 14 4 12 4 9 14 15 12 13 10 9 21 18 22 10 35 32 35 11 21 28 46 14 27 8 26 12 19 11 34 21 12 17 8 21 26 31 20 28 15 16 37 34 54 14 77 78 60 20 34 60 112 22 49 13 47 22 36 18 78 35 19 33 16 37 48 56 44 69 26 25 62 59 130 26 147 188 96 32 56 116 270 36 84 25 77 35 60 30 146 56 35 54 32 67 82 92 84 166 42 41 98 95 314 50 301 454 145 63 91 236 652 58 141 46 128 69 101 59 302 91 66 91 64 125 138 141 172 401 69 66 147 144 758 90 1830 166 1197 2646 ? ? ? 390 210 240 ? ? 10666 562 4781 15422 511 713 630 3756 22148 398 1013 524 899 781 720 665 4782 623 748 645 1024 1425 992 507 2732 13621 478 453 513 510 ©88-08, Pedro Kantek ? 1096 209 115 148 468 1574 94 233 84 209 126 ? 3800 152 ? 2387 ? 1876 ? ? 623 155 ? ? 554 ? ? ? ? 230 272 196 1198 238 221 149 ? ? 256 421 ? 107 229 228 205 340 968 112 ? ? ? 214 ? 443 ? 2386 385 407 397 512 ? 610 286 684 2337 ? ? ? ? 295 280 392 389 173 292 289 resposta some em 3 + + = + + = + + = + + = + + = + + = + + = + + = + + = + + = vers˜ ao de 10 de fevereiro de 2008 ´ ´ CAP´ITULO 15. EXERC´ICIO PRATICO: 009-ACHAR O NUMERO QUE FALTA 15.5 Exerc´ıcio 4 N. 1 2 3 4 5 6 7 8 9 10 11 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 8 2 5 7 4 2 9 6 1 9 6 4 7 1 2 9 5 9 1 6 9 2 4 5 7 5 7 7 2 4 7 5 8 11 8 9 9 2 9 3 5 8 11 6 6 7 2 4 6 6 7 5 7 5 2 8 11 11 6 6 18 9 21 20 17 11 21 10 14 9 17 17 20 8 15 4 12 13 7 9 25 10 15 18 9 16 20 20 15 16 28 19 50 36 33 20 33 14 27 21 27 33 36 20 31 20 16 17 14 21 39 18 29 31 11 27 36 36 31 38 49 37 121 61 58 31 57 26 45 33 61 58 61 36 56 31 40 30 27 36 89 31 59 57 20 46 61 61 56 92 80 75 292 97 94 51 93 42 76 63 115 94 97 76 92 55 72 47 48 66 167 52 117 96 31 76 97 97 92 222 132 149 705 146 143 82 153 70 125 117 237 143 146 148 141 106 152 77 89 123 345 86 235 161 51 125 146 146 141 536 215 299 1702 210 207 133 249 114 ? 568 597 ? ? ? ? ? 9920 391 388 348 405 ? ? 334 213 467 207 210 ? ? ? 921 2389 23949 512 509 563 1065 490 881 1329 3757 509 512 2388 507 1196 2392 526 1019 1401 5465 607 3755 1149 348 874 512 512 507 18208 15.6 ´ ´ CAP´ITULO 15. EXERC´ICIO PRATICO: 009-ACHAR O NUMERO QUE FALTA ? ? 302 543 723 1875 388 ? 291 596 205 ? ? 353 296 124 ? ? ? 301 414 1369 230 225 679 ? 469 265 ? ? 434 133 204 ? ? 210 205 1294 1196 386 651 1192 325 554 ? ? 374 1877 ? 215 539 391 291 291 ? ? 386 3124 ? resposta some em 3 + + = + + = + + = + + = + + = + + = + + = + + = + + = + + = 3 Respostas 1 12169 2 760 3 5319 4 5654 1060 2820 658 1060 7066 10503 794 1048 vers˜ ao de 10 de fevereiro de 2008 953 995 913 1622 9698 4027 932 977 1970 1115 1103 993 215 2097 1501 492 3653 3347 1255 1535 1787 1005 5510 7188 624 8685 9663 526 8219 ©88-08, Pedro Kantek ©88-08, Pedro Kantek 216 vers˜ ao de 10 de fevereiro de 2008 ´ ´ ´ CAP´ITULO 16. EXERC´ICIOS PRATICOS: 011 - MATEMATICA E LOGICA ´ BASICAS 16 (15 mod 10)>(((6 × 7) × (5 - 6)) - (5 + 3)) 32 (∼(.V. ∨ .F.))∧((.V. ∨ .V.) ∨ .F.) soma das linhas Cap´ıtulo 16 16.1.3 Exerc´ıcios Pr´ aticos: 011 Matem´ atica e L´ ogica B´ asicas Exerc´ıcio 1.3 Resolva as 6 linhas abaixo e some (aritm´eticamente) os resultados encontrados, lan¸cando o total no quadro abaixo ˆ (((14 mod 9) div 1) div (19 mod 8))-(((3 - 7) + (8 - 9)) + (2 - 8)) ˆ (((21 mod 9) mod 5) div (16 mod 7))+(((4 - 7) + (4 + 4)) + (6 + 8)) ˆ (6 × 9)+((b((9 + 7) ÷ (2 + 5))) + (8 + 4)) ˆ (((30 div 10) mod 5) mod (16 div 6))-(((6 + 4) + (8 - 7)) - (8 - 3)) 16.1 Exerc´ıcio 1 ˆ (((24 div 7) mod 6) mod (22 div 3))+(((5 + 2) + (3 + 3)) × (3 + 5)) Note que a opera¸ca˜o x mod y, quando y = 0, matematicamente n˜ao est´ a definida. Entretanto, para esta folha, combinar-se-´ a que x mod y = x quando y = 0. Da mesma maneira, x ÷ 0 n˜ao est´ a definido. O caso particular, v´alido apenas aqui ´e 0 ÷ 0 que aqui dar´ a 1. 16.1.1 ˆ (9 + 2)+(((8 + 8) × (3 - 2)) - (5 + 2)) soma dos valores 16.1.4 Exerc´ıcio 1.1 Resolva as 6 linhas abaixo e some (aritm´eticamente) os resultados encontrados, lan¸cando o total no quadro abaixo ˆ ((27 div 7) mod 2)+(b(((9 + 4) - (3 - 5)) ÷ (3 + 6))) Exerc´ıcio 1.4 Resolva as 6 linhas abaixo e some (aritm´eticamente) os n´ umeros das linhas que respondem VERDADEIRO, lan¸cando o total no quadro abaixo 1 ((26 div 5) mod 4)>(((5 - 3) + (4 + 5)) + (6 + 2)) ˆ ((26 div 5) mod 3)-(((8 + 3) × (b(9 ÷ 7))) + (9 + 3)) 2 (23 mod 10)>(((6 × 8) - (6 - 9)) - (5 - 4)) ˆ (((4 + 7) - (5 × 5)) + (7 - 2))-(6 + 8) 4 (.F. ∨ .V.)∨((.V. ∨ .V.) ∧ .F.) ˆ ((27 div 3) div 5)+(((8 + 3) + (3 × 3)) × (8 - 4)) 8 (20 div 6)(b(((9 × 8) + (7 + 7)) ÷ (2 × 6))) ˆ (((26 div 3) mod 5) mod (15 div 1))+(((6 + 8) + (8 + 2)) + (4 × 5)) 4 (.F. ∨ .F.)∨((.F. ∧ .V.) ∨ (∼.V.)) ˆ (3 + 7)+(((9 + 6) × (2 + 6)) × (6 - 3)) 8 (27 div 8)>(((9 - 2) × (b(8 ÷ 7))) - (7 + 8)) ˆ ((11 mod 2) mod 3)+(((2 - 5) + (5 - 4)) - (3 + 8)) 16 (13 mod 7)>(((b(7 ÷ 4)) + (7 + 8)) + (3 × 8)) ˆ (((12 mod 9) mod 6) mod (13 mod 7))+(((4 + 9) - (3 × 9)) - (3 - 6)) 32 (.V. ∧ .F.)∨((.F. ∧ .V.) ∧ .F.) ˆ (((6 - 7) + (b(8 ÷ 2))) - (4 - 6))-(2 + 2) soma das linhas 16.1.7 soma dos valores Exerc´ıcio 1.7 16.1.10 Resolva as 6 linhas abaixo e some (aritm´eticamente) os resultados encontrados, lan¸cando o total no quadro abaixo ˆ (((14 mod 4) mod 6) mod (18 mod 10))-(((5 - 9) + (4 + 9)) + (2 + 4)) ˆ (((18 div 1) div 4) div (29 div 10))+(((4 + 4) × (4 - 9)) + (9 - 3)) ˆ (((8 + 7) + (6 + 4)) + (5 + 2))-(b(8 ÷ 4)) Exerc´ıcio 1.10 Resolva as 6 linhas abaixo e some (aritm´eticamente) os n´ umeros das linhas que respondem VERDADEIRO, lan¸cando o total no quadro abaixo 1 ((23 div 8) mod 6)>((b((3 + 7) ÷ (2 + 8))) + (4 - 7)) 2 (24 div 10)(((4 + 4) + (9 - 2)) + (9 - 3)) ˆ ((25 div 6) div 3)-(((5 + 8) × (9 + 5)) + (6 + 8)) 16 (28 mod 6)(b(((3 - 5) - (2 + 7)) ÷ (2 + 5))) 16.2 Exerc´ıcio 2 16.2.1 Exerc´ıcio 2.1 Resolva as 6 linhas abaixo e some (aritm´eticamente) os resultados encontrados, lan¸cando o total no quadro abaixo 2 (22 div 4)>(((7 - 2) + (8 + 5)) × (8 + 7)) 4 (.V. ∧ .V.)∧((.F. ∨ .V.) ∧ .F.) ˆ (((19 div 3) div 4) mod (21 div 2))-(((9 - 2) + (3 - 8)) + (9 + 6)) 8 (14 div 2)(((8 + 2) + (6 + 2)) - (7 - 2)) ˆ (2 + 7)+((b((2 - 4) ÷ (5 - 3))) + (2 - 8)) 2 (13 mod 8) 4)) ent˜ ao 12: C←E×5 13: fimse 14: fimse 15: imprima A + B + C + D + E 16: fim {fun¸ ca˜o} ©88-08, Pedro Kantek 228 vers˜ ao de 10 de fevereiro de 2008 ´ CAP´ITULO 17. EXERC´ICIOS PRATICOS: 017-SES COMPOSTOS E ENCADEADOS 17.2.2 Exerc´ıcio 2.2 10: Suponha a chamada EX2 ( 1, 4, 6, 3, 3, 2 ), com a seguinte defini¸ca˜o 1: fun¸ ca˜o EX2 (inteiro A, B, C, D, E, F) 2: se ((∼ (D ≥ 6)) ∧ (∼ (D > 5))) ent˜ ao 3: se ((∼ (D > 1)) ∧ (∼ (C > 1))) ent˜ ao 4: A←D×5 5: sen˜ ao 6: D←C-3 7: fimse 8: A←E-4 9: sen˜ ao 10: C←A-3 11: se ((C < 2) ∨ (F 6= 5)) ent˜ ao 12: D←E-B 13: fimse 14: fimse 15: imprima A + B + C + D + E 16: fim {fun¸ ca˜o} 17.2.3 Exerc´ıcio 2.3 Suponha a chamada EX3 ( 4, 1, 2, 3, 3, 1 ), com a seguinte defini¸ca˜o 1: fun¸ ca˜o EX3 (inteiro A, B, C, D, E, F) 2: se (∼ (F ≤ 1)) ent˜ ao 3: se ((E 6= 3) ∨ (E > 4)) ent˜ ao 4: B←F×2 5: sen˜ ao 6: F←E+F 7: fimse 8: C←B×3 9: sen˜ ao 10: E←C+E 11: se ((D ≤ 1) ∧ (E ≥ 6)) ent˜ ao 12: D←F×E 13: fimse 14: fimse 15: imprima A + B + C + D + E 16: fim {fun¸ ca˜o} 17.2.4 Exerc´ıcio 2.4 Suponha a chamada EX4 ( 6, 4, 6, 4, 2, 4 ), com a seguinte defini¸ca˜o 1: fun¸ ca˜o EX4 (inteiro A, B, C, D, E, F) 2: se ((∼ (D ≤ 2)) ∨ (E 6= 6)) ent˜ ao 3: se (((D < 6) ∧ (A = 6)) ∧ (∼ (F ≤ 6))) ent˜ ao 4: A←C-B 5: sen˜ ao 6: B←F×D 7: fimse 8: C←A-5 9: sen˜ ao vers˜ ao de 10 de fevereiro de 2008 ´ CAP´ITULO 17. EXERC´ICIOS PRATICOS: 017-SES COMPOSTOS E ENCADEADOS 229 ©88-08, Pedro Kantek 11: 12: 13: 14: 15: 16: F←F×2 se (((A < 6) ∨ (∼ (B = 6))) ∨ (∼ (A = 6))) ent˜ ao D←B+4 fimse fimse imprima A + B + C + D + E fim {fun¸ca˜o} 17.2.5 Exerc´ıcio 2.5 Suponha a chamada EX5 ( 1, 2, 4, 2, 6, 6 ), com a seguinte defini¸ca˜o 1: fun¸ ca˜o EX5 (inteiro A, B, C, D, E, F) 2: se (((B 6= 1) ∧ (B > 1)) ∧ (∼ (F > 4))) ent˜ ao 3: se (∼ (A < 4)) ent˜ ao 4: C←A+E 5: sen˜ ao 6: C←E×2 7: fimse 8: E←B-4 9: sen˜ ao 10: F←F×2 11: se (C > 2) ent˜ ao 12: A←F×D 13: fimse 14: fimse 15: imprima A + B + C + D + E 16: fim {fun¸ ca˜o} 17.2.6 Exerc´ıcio 2.6 Suponha a chamada EX6 ( 6, 2, 6, 1, 5, 3 ), com a seguinte defini¸ca˜o 1: fun¸ ca˜o EX6 (inteiro A, B, C, D, E, F) 2: se (((∼ (A > 4)) ∨ (∼ (A ≤ 1))) ∨ (∼ (A > 6))) ent˜ ao 3: se (∼ (F ≤ 4)) ent˜ ao 4: B←F+2 5: sen˜ ao 6: C←D×4 7: fimse 8: A←C+3 9: sen˜ ao 10: D←A-C 11: se ((∼ (A 6= 4)) ∨ (E ≤ 3)) ent˜ ao 12: F←C-4 13: fimse 14: fimse 15: imprima A + B + C + D + E 16: fim {fun¸ ca˜o} ©88-08, Pedro Kantek 230 vers˜ ao de 10 de fevereiro de 2008 ´ CAP´ITULO 17. EXERC´ICIOS PRATICOS: 017-SES COMPOSTOS E ENCADEADOS ´ CAP´ITULO 17. EXERC´ICIOS PRATICOS: 017-SES COMPOSTOS E ENCADEADOS Respostas 1 17.2.7 2 3 4 5 6 Respostas 1.1 1.2 17 1.3 21 1.4 5 1.5 17 1.6 14 49 2.1 2.2 15 2.3 15 2.4 29 2.5 38 2.6 19 24 vers˜ ao de 10 de fevereiro de 2008 231 ©88-08, Pedro Kantek ©88-08, Pedro Kantek 232 vers˜ ao de 10 de fevereiro de 2008 ´ CAP´ITULO 18. EXERC´ICIOS PRATICOS: 018-FLUXOGRAMAS M←M×4 M←K+2 fim{se} Se os trechos acima forem equivalentes, some 1 a` resposta. Cap´ıtulo 18 ex002 Exerc´ıcios Pr´ aticos: 018-FLuxogramas A>5 ∨ B6=9 v Z←Y-8 K←N+2 fim 18.1 Exerc´ıcios de Fluxos e Pseudoc´ odigo A seguir, s˜ao apresentados um fluxograma e a seguir um trecho em pseudo-c´ odigo. Ambos devem ser analisados e deve-se chegar a uma conclus˜ao: s˜ ao equivalentes ? Se forem, os n´ umeros que identificam cada exerc´ıcio devem ser somados. Ao final da s´erie, a soma deve ser respondida. 18.1.1 Exerc´ıcio 1 ex002 se (A≤5)∧(B=9) ent~ ao Z←Y-8 sen~ ao K←N+2 fim{se} Se os trechos acima forem equivalentes, some 2 a` resposta. ex001 ex004 A>4 A>8 v Z←Z-3 v C≤2 K←L-7 v T←Y×5 M←M×4 T←Z+2 M←K+9 T←T÷6 T←Z+6 M←K+2 Y←T÷4 K←M×9 S←P×5 fim fim ex004 se (A>8) ent~ ao T←Z+2 Y←T÷4 sen~ ao se (C>2) ent~ ao M←K+9 ex001 se (A>4) ent~ ao Z←Z-3 T←Y×5 T←Z+6 sen~ ao K←L-7 233 ©88-08, Pedro Kantek 234 vers˜ ao de 10 de fevereiro de 2008 ´ CAP´ITULO 18. EXERC´ICIOS PRATICOS: 018-FLUXOGRAMAS K←M×9 sen~ ao T←T÷6 S←P×5 fim{se} fim{se} ´ CAP´ITULO 18. EXERC´ICIOS PRATICOS: 018-FLUXOGRAMAS ex016 A=7 ∨ B≥3 v C=5 Se os trechos acima forem equivalentes, some 4 `a resposta. v ex008 Y←Z÷5 L←L÷8 S←P-6 Y←Z×5 N←K×3 S←R÷9 X←T×9 M←M×7 S←P÷2 A=1 v C=4 E=5 v v M←K-7 P←S×7 T←Y-4 N←N×6 S←R-7 X←T-8 K←K-2 R←T÷6 fim U←H+1 fim ex016 se (A6=7)∧(B2 v E=6 v v Y←Z×2 S←P+9 Z←X-2 Y←X-6 M←L+4 T←P×8 J←G÷5 T←Y+9 M←K×2 R←T÷7 H←U÷3 Z←Y+7 S←S-6 L←M×4 R←T×6 fim fim ex032 se (A6=6)∨(B2) ent~ ao S←S-6 R←T×6 sen~ ao L←M×4 fim{se} sen~ ao Z←X-2 Z←Y+7 fim{se} Se os trechos acima forem equivalentes, some 32 `a resposta. vers˜ ao de 10 de fevereiro de 2008 237 Se os trechos acima forem equivalentes, some 64 a` resposta. ©88-08, Pedro Kantek ©88-08, Pedro Kantek 238 vers˜ ao de 10 de fevereiro de 2008 ´ CAP´ITULO 18. EXERC´ICIOS PRATICOS: 018-FLUXOGRAMAS ex128 ex001 A=6 ∨ B≥9 v C≤9 ∧ D=4 v E≥3 ∨ F1 v C=4 ex016 se (A6=5)∧(B6=8) ent~ ao T←Y÷2 T←Y-8 X←X-6 sen~ ao se (C>8) ent~ ao K←N×2 N←M-3 sen~ ao P←T×5 fim{se} G←U×2 v X←Z+4 X←T-5 J←H÷3 L←L-9 P←T÷5 J←J×3 fim vers˜ ao de 10 de fevereiro de 2008 241 ©88-08, Pedro Kantek ©88-08, Pedro Kantek 242 vers˜ ao de 10 de fevereiro de 2008 ´ CAP´ITULO 18. EXERC´ICIOS PRATICOS: 018-FLUXOGRAMAS ´ CAP´ITULO 18. EXERC´ICIOS PRATICOS: 018-FLUXOGRAMAS fim{se} ex064 A=2 ∧ B>3 v Se os trechos acima forem equivalentes, some 16 `a resposta. C5)∧(B≤7) ent~ ao se (C=4)∧(D6=4) ent~ ao T←S×5 sen~ ao J←G-8 fim{se} sen~ ao se (E6=3)∨(F≥3) ent~ ao K←M×9 L←L+4 sen~ ao X←T÷2 fim{se} fim{se} Se os trechos acima forem equivalentes, some 128 `a resposta. Responda a soma dos exerc´ıcios que s˜ao equivalentes 18.1.3 1 2 Respostas 153 93 vers˜ ao de 10 de fevereiro de 2008 245 ©88-08, Pedro Kantek ©88-08, Pedro Kantek 246 vers˜ ao de 10 de fevereiro de 2008 ´ CAP´ITULO 19. EXERC´ICIOS PRATICOS: 018 - NASSI ex002 — A6=5 ∨ B>5 v f Y←Z×3 Cap´ıtulo 19 L←M÷3 K←N÷4 Exerc´ıcios Pr´ aticos: 018 Nassi Nassi e Pseudoc´ odigo: A seguir, some o n´ umero dos exerc´ıcios em que o trecho de pseudo- c´ odigo ´e 100% equivalente ao diagrama de Nassi apresentado 19.0.4 L←N÷2 ex002 se (A6=5)∨(B>5) ent~ ao L←M÷3 K←N÷4 L←N÷2 sen~ ao Y←Z×3 fim{se} Exerc´ıcio 1 Se os trechos acima forem equivalentes, some 2 a` resposta. ex004 — ex001 — v A6=1 f v A6=1 Z←Z+4 M←K×8 Y←Z×9 T←Z÷5 K←N÷5 X←X-4 Z←X÷9 K←M×2 f v C6=7 f K←L×2 P←P-5 S←P×8 R←T×4 ex001 se (A=1) ent~ ao Z←Z+4 T←Z÷5 Z←X÷9 sen~ ao M←K×8 K←N÷5 K←M×2 fim{se} Se os trechos acima forem equivalentes, some 1 `a resposta. 247 ex004 se (A=1) ent~ ao se (C=7) ent~ ao P←P-5 S←P×8 R←T×4 sen~ ao K←L×2 fim{se} sen~ ao Y←Z×9 X←X-4 fim{se} ©88-08, Pedro Kantek 248 vers˜ ao de 10 de fevereiro de 2008 ´ CAP´ITULO 19. EXERC´ICIOS PRATICOS: 018 - NASSI ´ CAP´ITULO 19. EXERC´ICIOS PRATICOS: 018 - NASSI se (C≥6) ent~ ao N←M+8 sen~ ao R←R+7 S←P×5 fim{se} fim{se} Se os trechos acima forem equivalentes, some 4 `a resposta. ex008 — A≥1 v f C≥4 v Z←X÷4 E>1 f v K←N×3 R←R-7 N←K+3 f H←H×4 Se os trechos acima forem equivalentes, some 16 a` resposta. G←J-5 ex032 — v ex008 se (A6 ∧ B=1 T←Z÷9 f v C≤3 f N←L-7 R←T×4 N←K×3 Se os trechos acima forem equivalentes, some 4 `a resposta. vers˜ ao de 10 de fevereiro de 2008 253 ex016 ©88-08, Pedro Kantek ©88-08, Pedro Kantek 254 vers˜ ao de 10 de fevereiro de 2008 ´ CAP´ITULO 19. EXERC´ICIOS PRATICOS: 018 - NASSI ´ CAP´ITULO 19. EXERC´ICIOS PRATICOS: 018 - NASSI se (A>6)∧(B=1) ent~ ao se (C≤3) ent~ ao R←T×4 sen~ ao N←L-7 N←K×3 fim{se} sen~ ao T←Z÷9 fim{se} ex064 — A>1 ∧ B=4 v Y←X×7 f v T←X÷8 C=3 ∧ D=1 f N←N-2 R←S-9 N←K÷3 S←R×5 P←R÷4 Se os trechos acima forem equivalentes, some 16 `a resposta. ex032 — v v A=8 ∧ B≤7 C7) ent~ ao se (E>3) ent~ ao T←S-9 sen~ ao U←G-3 U←J+4 H←H+5 fim{se} sen~ ao se (C≥4) ent~ ao N←K+2 L←N×8 L←K+6 sen~ ao Y←Z÷7 fim{se} fim{se} Se os trechos acima forem equivalentes, some 64 a` resposta. ex128 — v A≥7 ∧ B6=7 v C6=9 ∨ D6=8 f E6=2 ∧ F≤4 f v f Y←X÷4 L←M÷5 R←S×2 G←H+2 X←Y-9 M←L+7 T←P-2 H←U-2 G←J÷8 ex128 se (A≥7)∧(B6=7) ent~ ao se (C6=9)∨(D6=8) ent~ ao Y←X÷4 Se os trechos acima forem equivalentes, some 32 `a resposta. vers˜ ao de 10 de fevereiro de 2008 ex064 se (A≤1)∨(B6=4) ent~ ao se (C6=3)∨(D6=1) ent~ ao R←S-9 S←R×5 P←R÷4 sen~ ao N←N-2 N←K÷3 fim{se} sen~ ao Y←X×7 T←X÷8 fim{se} 255 ©88-08, Pedro Kantek ©88-08, Pedro Kantek 256 vers˜ ao de 10 de fevereiro de 2008 ´ CAP´ITULO 19. EXERC´ICIOS PRATICOS: 018 - NASSI ´ CAP´ITULO 19. EXERC´ICIOS PRATICOS: 018 - NASSI X←Y-9 sen~ ao L←M÷5 M←L+7 fim{se} sen~ ao se (E6=2)∧(F≤4) ent~ ao R←S×2 T←P-2 sen~ ao G←H+2 H←U-2 G←J÷8 fim{se} fim{se} Se os trechos acima forem equivalentes, some 128 `a resposta. Responda a soma dos exerc´ıcios que s˜ao equivalentes 19.0.6 1 2 Respostas 12 232 vers˜ ao de 10 de fevereiro de 2008 257 ©88-08, Pedro Kantek ©88-08, Pedro Kantek 258 vers˜ ao de 10 de fevereiro de 2008 ´ ˜ CAP´ITULO 20. EXERC´ICIOS PRATICOS: 021 - 5 FUNC ¸ OES SIMPLES 19: 20: 21: 22: 23: 24: Cap´ıtulo 20 25: 26: 27: Exerc´ıcios pr´ aticos: 021 - 5 fun¸ c˜ oes simples 20.1 Fun¸ c˜ oes num´ ericas Os exerc´ıcios a seguir est˜ ao indicados para desenvolver as habilidades de ˆ saber resolver condi¸co ˜es l´ogicas ˆ adquirir destreza em avaliar comandos condicionais ˆ ganhar disciplina mental para seguir testes de mesma (chineses) Os exerc´ıcios a seguir implementam fun¸co˜es. Em todas, as vari´ aveis A, B e C s˜ao inicializadas no in´ıcio da fun¸ca˜o. Vocˆe deve seguir a fun¸ca˜o at´e o final e neste ponto informar os valores de A, B e C. 20.1.1 Exerc´ıcio 1 Exerc´ıcio 1.1 Suponha a chamada ` a fun¸ca˜o CALC, com a seguinte defini¸ca˜o 1: fun¸ ca˜o CALC 2: inteiro A, B, C 3: A ← 1 4: B ← 8 5: C ← 7 6: se (B > 5) ent˜ ao 7: se (C 6= A) ent˜ ao 8: se (A ≥ B) ent˜ ao 9: C←C×5 10: sen˜ ao 11: B←B-B 12: fimse 13: sen˜ ao 14: se (B ≥ C) ent˜ ao 15: A←B-3 16: sen˜ ao 17: B←B+2 18: fimse 259 28: fimse sen˜ ao se (∼ (C = B)) ent˜ ao A←C×2 sen˜ ao B←A-3 fimse fimse imprima A, B, C fim{fun¸ca˜o} Exerc´ıcio 1.2 Suponha a chamada a` fun¸ca˜o CALC, com a seguinte defini¸ca˜o 1: fun¸ ca˜o CALC 2: inteiro A, B, C 3: A ← 5 4: B ← 2 5: C ← 2 6: se (B < C) ent˜ ao 7: se (A ≥ C) ent˜ ao 8: se (C 6= B) ent˜ ao 9: A←C-4 10: sen˜ ao 11: A←A-A 12: fimse 13: sen˜ ao 14: se (∼ (C = B)) ent˜ ao 15: B←A-4 16: sen˜ ao 17: B←C+3 18: fimse 19: fimse 20: sen˜ ao 21: se (A < 6) ent˜ ao 22: C←B+5 23: sen˜ ao 24: A←C×4 25: fimse 26: fimse 27: imprima A, B, C 28: fim{fun¸ ca˜o} Exerc´ıcio 1.3 Suponha a chamada a` fun¸ca˜o CALC, com a seguinte defini¸ca˜o 1: fun¸ ca˜o CALC 2: inteiro A, B, C 3: A ← 1 4: B ← 9 5: C ← 9 6: se (∼ (C > A)) ent˜ ao ©88-08, Pedro Kantek 260 vers˜ ao de 10 de fevereiro de 2008 ´ ˜ CAP´ITULO 20. EXERC´ICIOS PRATICOS: 021 - 5 FUNC ¸ OES SIMPLES 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: se (C ≥ B) ent˜ ao se (B = C) ent˜ ao C←B×5 sen˜ ao B←B+B fimse sen˜ ao se (B > A) ent˜ ao C←B-2 sen˜ ao C←C+B fimse fimse sen˜ ao se (∼ (A 6= 2)) ent˜ ao A←A×5 sen˜ ao B←A-2 fimse fimse imprima A, B, C fim{fun¸ca˜o} 27: 28: imprima A, B, C fim{fun¸ca˜o} Exerc´ıcio 1.5 Suponha a chamada a` fun¸ca˜o CALC, com a seguinte defini¸ca˜o 1: fun¸ ca˜o CALC 2: inteiro A, B, C 3: A ← 7 4: B ← 8 5: C ← 8 6: se (A = C) ent˜ ao 7: se (C < 3) ent˜ ao 8: se (A ≤ 4) ent˜ ao 9: B←A+2 10: sen˜ ao 11: C←C×C 12: fimse 13: sen˜ ao 14: se (∼ (B = 1)) ent˜ ao 15: A←A+2 16: sen˜ ao 17: C←C+4 18: fimse 19: fimse 20: sen˜ ao 21: se (∼ (B ≤ 3)) ent˜ ao 22: B←C-4 23: sen˜ ao 24: B←C×A 25: fimse 26: fimse 27: imprima A, B, C 28: fim{fun¸ ca˜o} Exerc´ıcio 1.4 Suponha a chamada ` a fun¸ca˜o CALC, com a seguinte defini¸ca˜o 1: fun¸ ca˜o CALC 2: inteiro A, B, C 3: A ← 4 4: B ← 8 5: C ← 7 6: se (∼ (B < A)) ent˜ ao 7: se (∼ (C < B)) ent˜ ao 8: se (B < C) ent˜ ao 9: B←C+4 10: sen˜ ao 11: B←A×B 12: fimse 13: sen˜ ao 14: se (B < A) ent˜ ao 15: C←A-B 16: sen˜ ao 17: B←C+3 18: fimse 19: fimse 20: sen˜ ao 21: se (B = 1) ent˜ ao 22: A←A+A 23: sen˜ ao 24: B←C-4 25: fimse 26: fimse vers˜ ao de 10 de fevereiro de 2008 ´ ˜ CAP´ITULO 20. EXERC´ICIOS PRATICOS: 021 - 5 FUNC ¸ OES SIMPLES 261 Respostas Exerc 1 Var. B 20.1.2 Exerc 2 Var. C Exerc 3 Var. B Exerc 4 Var. B Exerc 5 Var. B Exerc´ıcio 2 Exerc´ıcio 2.1 ©88-08, Pedro Kantek Suponha a chamada a` fun¸ca˜o CALC, com a seguinte defini¸ca˜o 1: fun¸ ca˜o CALC 2: inteiro A, B, C 3: A ← 8 4: B ← 4 ©88-08, Pedro Kantek 262 vers˜ ao de 10 de fevereiro de 2008 ´ ˜ CAP´ITULO 20. EXERC´ICIOS PRATICOS: 021 - 5 FUNC ¸ OES SIMPLES 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: C←5 se (A < C) ent˜ ao se (∼ (B > C)) ent˜ ao se (C < B) ent˜ ao B←B-2 sen˜ ao B←A+B fimse sen˜ ao se (∼ (C ≤ A)) ent˜ ao C←A+5 sen˜ ao B←B+B fimse fimse sen˜ ao se (B = A) ent˜ ao A←A×A sen˜ ao C←B+C fimse fimse imprima A, B, C fim{fun¸ca˜o} fimse fimse 27: imprima A, B, C 28: fim{fun¸ ca˜o} 25: 26: Exerc´ıcio 2.3 Suponha a chamada a` fun¸ca˜o CALC, com a seguinte defini¸ca˜o 1: fun¸ ca˜o CALC 2: inteiro A, B, C 3: A ← 9 4: B ← 8 5: C ← 7 6: se (B > C) ent˜ ao 7: se (∼ (A = 4)) ent˜ ao 8: se (∼ (B < 5)) ent˜ ao 9: B←C×4 10: sen˜ ao 11: A←B-2 12: fimse 13: sen˜ ao 14: se (C < A) ent˜ ao 15: C←B-3 16: sen˜ ao 17: A←B×5 18: fimse 19: fimse 20: sen˜ ao 21: se (∼ (A ≥ 1)) ent˜ ao 22: B←A-5 23: sen˜ ao 24: A←A-5 25: fimse 26: fimse 27: imprima A, B, C 28: fim{fun¸ ca˜o} Exerc´ıcio 2.2 Suponha a chamada ` a fun¸ca˜o CALC, com a seguinte defini¸ca˜o 1: fun¸ ca˜o CALC 2: inteiro A, B, C 3: A ← 4 4: B ← 5 5: C ← 7 6: se (A = 1) ent˜ ao 7: se (∼ (B ≥ 2)) ent˜ ao 8: se (∼ (B = C)) ent˜ ao 9: B←A+4 10: sen˜ ao 11: B←C×5 12: fimse 13: sen˜ ao 14: se (A > C) ent˜ ao 15: C←C+C 16: sen˜ ao 17: C←C×3 18: fimse 19: fimse 20: sen˜ ao 21: se (B 6= 2) ent˜ ao 22: B←C-B 23: sen˜ ao 24: A←C×2 vers˜ ao de 10 de fevereiro de 2008 ´ ˜ CAP´ITULO 20. EXERC´ICIOS PRATICOS: 021 - 5 FUNC ¸ OES SIMPLES 263 Exerc´ıcio 2.4 Suponha a chamada a` fun¸ca˜o CALC, com a seguinte defini¸ca˜o 1: fun¸ ca˜o CALC 2: inteiro A, B, C 3: A ← 3 4: B ← 2 5: C ← 9 6: se (A = 2) ent˜ ao 7: se (∼ (C > 1)) ent˜ ao 8: se (C ≤ 5) ent˜ ao 9: C←A×2 10: sen˜ ao 11: B←B×5 12: fimse ©88-08, Pedro Kantek ©88-08, Pedro Kantek 264 vers˜ ao de 10 de fevereiro de 2008 ´ ˜ CAP´ITULO 20. EXERC´ICIOS PRATICOS: 021 - 5 FUNC ¸ OES SIMPLES 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: sen˜ ao se (C 6= 1) ent˜ ao A←A×A sen˜ ao B←A-4 fimse fimse sen˜ ao se (C = 2) ent˜ ao A←A+C sen˜ ao C←C×A fimse fimse imprima A, B, C fim{fun¸ca˜o} ´ ˜ CAP´ITULO 20. EXERC´ICIOS PRATICOS: 021 - 5 FUNC ¸ OES SIMPLES Respostas Exerc 1 Var. C 20.1.3 Exerc 2 Var. B Exerc 3 Var. B Exerc 4 Var. C Exerc 5 Var. B Respostas 1 1.1 0 1.2 7 1.3 -1 1.4 10 1.5 4 2 2.1 9 2.2 2 2.3 28 2.4 27 2.5 -4 Exerc´ıcio 2.5 Suponha a chamada ` a fun¸ca˜o CALC, com a seguinte defini¸ca˜o 1: fun¸ ca˜o CALC 2: inteiro A, B, C 3: A ← 1 4: B ← 6 5: C ← 6 6: se (∼ (C = 2)) ent˜ ao 7: se (C 6= 3) ent˜ ao 8: se (A = 2) ent˜ ao 9: B←A×4 10: sen˜ ao 11: B←A-5 12: fimse 13: sen˜ ao 14: se (A > C) ent˜ ao 15: C←A+3 16: sen˜ ao 17: C←C+5 18: fimse 19: fimse 20: sen˜ ao 21: se (B = A) ent˜ ao 22: B←B+B 23: sen˜ ao 24: A←A×B 25: fimse 26: fimse 27: imprima A, B, C 28: fim{fun¸ ca˜o} vers˜ ao de 10 de fevereiro de 2008 265 ©88-08, Pedro Kantek ©88-08, Pedro Kantek 266 vers˜ ao de 10 de fevereiro de 2008 ´ CAP´ITULO 21. EXERC´ICIOS PRATICOS: 024 -DVS todas as caracter´ısticas originais estabelecidas pelo propriet´ ario da informa¸ca˜o, incluindo controle de mudan¸cas e garantia do seu ciclo de vida (nascimento, manuten¸ca˜o e destrui¸ca˜o). ˆ Disponibilidade - propriedade que garante que a informa¸ca ˜o esteja sempre dispon´ıvei para o uso leg´ıtimo, ou seja, por aqueles usu´ arios autorizados pelo propriet´ ario da informa¸ca˜o. Cap´ıtulo 21 Exerc´ıcios Pr´ aticos: 024 -DVs Mecanismos de seguran¸ ca O suporte para as recomenda¸co˜es de seguran¸ca pode ser encontrado em: ˆ Controles f´ısicos: s˜ ao barreiras que limitam o contato ou acesso direto a informa¸ca˜o ou a infra-estrutura (que garante a existˆencia da informa¸ca˜o)que a suporta. Existem mecanismos de seguran¸ca que ap´ oiam os controles f´ısicos: 21.1 D´ıgitos Verificadores Seguran¸ ca da informa¸ c˜ ao Seguran¸ca de Informa¸ca˜o est´ a relacionada com a prote¸ca˜o existente ou necess´aria sobre dados que possuem valor para algu´em ou uma organiza¸ca˜o. Possui aspectos b´asicos como confidencialidade, integridade e disponibilidade da informa¸ca˜o e n˜ao se aplica ou est´ a restrita a sistemas computacionais, nem a informa¸co˜es eletrˆ onicas ou qualquer outra forma mecˆanica de armazenamento. Ela se aplica a todos os aspectos de prote¸ca˜o e armazenamento de informa¸co˜es e dados, em qualquer forma. Um dos padr˜oes de seguran¸ca mais conhecidos ´e o BS7799, que estabelece melhores pr´aticas para implementa¸ca˜o e na gest˜ao da seguran¸ca da informa¸ca˜o. A s´erie de normas ISO 27000, encabe¸cadas pela ISO 27001 est˜ ao sendo elaboradas para substituir e completar os padr˜oes definidos pela BS7799. Algumas normas definem aspectos que devem ser levados em considera¸ca˜o ao elaborar pol´ıticas de seguran¸ca. Entre essas normas est˜ ao a BS 7799 (elaborada pela British Standards Institution) e a NBR ISO/IEC 17799 (a vers˜ao brasileira desta primeira). A ISO come¸cou a publicar a s´erie de normas 27000, em substitui¸ca˜o `a ISO 17799 (e por conseguinte `a BS 7799), das quais a primeira, ISO 27001, foi publicada em 2005. Entende-se por informa¸ca˜o todo e qualquer conte´ udo ou dado que tenha valor para alguma organiza¸ca˜o ou pessoa. Ela pode estar guardada para uso restrito ou exposta ao p´ ublico para consulta ou aquisi¸ca˜o. A seguran¸ca de uma determinada informa¸ca˜o pode ser afetada por fatores comportamentais e de uso de quem se utiliza dela, pelo ambiente ou infra-estrutura que a cerca ou por pessoas mal intencionadas que tem o objetivo de furtar, destruir ou modificar a informa¸ca˜o. A tr´ıade CIA (Confidentiality, Integrity and Availability) – Confidencialidade, Integridade e Disponibilidade – representa as principais propriedades que, atualmente, orientam a an´ alise, o planejamento e a implementa¸ca˜o da seguran¸ca para um determinado grupo de informa¸co˜es que se deseja protejer. Outras propriedades est˜ ao sendo apresentadas (legitimidade e autenticidade) na medida em que o uso de transa¸co˜es comerciais em todo o mundo, atrav´es de redes eletrˆ onicas (p´ ublicas ou privadas) se desenvolve. ˆ Confidencialidade - propriedade que limita o acesso a informa¸ca ˜o t˜ao somente `as entidades leg´ıtimas, ou seja, ` aquelas autorizadas pelo propriet´ ario da informa¸ca˜o. ˆ Integridade - propriedade que garante que a informa¸ca ˜o manipulada mantenha 267 Portas / trancas / paredes / blindagem / guardas / etc .. ˆ Controles l´ ogicos: s˜ao barreiras que impedem ou limitam o acesso a informa¸ca˜o, que est´ a em ambiente controlado, geralmente eletrˆ onico, e que, de outro modo, ficaria exposta a altera¸ca˜o n˜ao autorizada por elemento mal intencionado. Existem mecanismos de seguran¸ca que ap´ oiam os controles l´ogicos: – Mecanismos de encripta¸ca˜o. Permitem a transforma¸ca˜o revers´ıvel da informa¸ca˜o de forma a torn´a-la inintelig´ıvel a terceiros. Utiliza-se para tal, algoritmos determinados e uma chave secreta para, a partir de um conjunto de dados n˜ao encriptados, produzir uma sequˆencia de dados encriptados. A opera¸ca˜o inversa ´e a desencripta¸ca˜o. – Assinatura digital. Um conjunto de dados encriptados, associados a um documento do qual s˜ao fun¸ca˜o, garantindo a integridade do documento associado, mas n˜ao a sua confidencialidade. – Mecanismos de garantia da integridade da informa¸ca˜o. Usando fun¸co˜es de ”Hashing”ou de checagem, consistindo na adi¸ca˜o. – Mecanismos de controle de acesso. Palavras-chave, sistemas biom´etricos, firewalls, cart˜ oes inteligentes. – Mecanismos de certifica¸ca˜o. Atesta a validade de um documento. – Integridade. Medida em que um servi¸co/informa¸ca˜o ´e genuino, isto ´e, esta protegido contra a personifica¸ca˜o por intrusos. Existem duas filosofias por tr´ as de qualquer pol´ıtica de seguran¸ca: a proibitiva (tudo que n˜ao ´e expressamente permitido ´e proibido) e a permissiva (tudo que n˜ao ´e proibido ´e permitido). Integridade ˆ erros poss´ıveis em digita¸ca ˜o erro oblitera¸ca˜o repeti¸ca˜o transposi¸ca˜o substitui¸ca˜o fraude ©88-08, Pedro Kantek era 1234 1234 1234 1234 1234 foi digitado 123 12234 1324 7234 5678 268 vers˜ ao de 10 de fevereiro de 2008 ´ CAP´ITULO 21. EXERC´ICIOS PRATICOS: 024 -DVS ´ CAP´ITULO 21. EXERC´ICIOS PRATICOS: 024 -DVS ˆ Para minimizar estes erros, usa-se o conceito de d´ıgito verificador. Trata-se de um d´ıgito que ´e obtido como uma fun¸ca˜o matem´atica do c´ odigo e ´e grudado nele. Pela simples an´ alise do DV ´e poss´ıvel detectar grande parte dos erros acima descritos. ˆ A fun¸ca ˜o mais usada ´e MOD, j´ a que ´e uma fun¸ca˜o de m˜ao u ´nica. (n˜ ao tem inversa) Por exemplo DOBRO de 2 ´e 4. Logo A METADE de 4 ´e 2. J´a 8 MOD 7 ´e 1. Mas n˜ao ´e poss´ıvel determinar x em X mod 7 = 1. x pode ser 8, 22, 29,... Exemplos ´ o c´ UPC=C´ odigo de produto universal E odigo de barras que encontramos nos produtos do supermercado. As 3 primeiras posi¸co˜es do c´ odigo indicam o pa´ıs de produ¸ca˜o do bem. Neste caso, o Brasil ´e 789. Ou ´ ltimo d´ıgito (0 13o ) ´e assim obtido: 1. Soma-se os d´ıgitos que ocupam posi¸co˜es ´ımpares (1, 3, 5...) e multiplica-se o resultado por 3. 2. Soma-se os d´ıgitos que ocupam posi¸co˜es pares, e soma-se este resultado ao da etapa anterior 3. Subtrai-se o resultado do pr´oximo m´ ultiplo de 10. O resultado ´e o DV. Sejam exemplos de um recipiente de tinta de carimbo, marca ”Japan Stamp”. Seu c´ odigo ´e 7898076820584. Calcule e ache o resultado correto (4). Outro exemplo, um tubo de cola Tenaz. Seu c´ odigo ´e 7891200304295. Note-se que `as vezes, a ind´ ustria procede diferente. Ao inv´es do c´ odigo do produto ocupar as posi¸co˜es 4 a 12, sendo o DV a posi¸ca˜o 13, o c´ odigo do produto passa a ocupar as posi¸co˜es 5 a 13, e o DV (de maneira a que o u ´ ltimo d´ıgito do produto na posi¸ca˜o 13) seja correto, o 5 d´ıgito ´e convenientemente estabelecido. ISBN 10 (International Standard Book Number) O u ´ ltimo d´ıgito da s´erie de 10 do ISBN ´e o DV. Ele ´e calculado de maneira a que multiplicando cada d´ıgito do c´ odigo pela sua posi¸ca˜o (come¸cando da direita e em 1) e somando tudo, o resto desta soma por 11 deve ser 0. Acompanhe o exemplo: Seja o ISBN 85-7001-926-? (idioma-editor-livro-dv). Multiplicase 8 por 10, 5 por 9, 7 por 8, 1 por 5, 9 por 4, 2 por 3, 6 por 2 e o resultado ´e 240. Dividindo 240 por 11 tem-se 21.8, e portanto o pr´oximo inteiro divis´ıvel por 11 ´e 11 vezes 22, que ´e 242. Fazendo-se 242-240=2 que ´e o DV procurado. O ISBN 13 (em uso a partir de Janeiro de 2007) gera seu d´ıgito da mesma maneira que o UPC. C´ odigos de cart˜ ao de cr´ edito Usa-se o algoritmo de Luhn, (Hans Peter Luhn, funcion´ ario da IBM, 1896-1964), tamb´em conhecido como m´ odulo 10, foi desenvolvido nos anos 60, como um m´etodo para validar c´ odigos. Ele ´e usado nos n´ umeros de cart˜ao de cr´edito e no c´ odigo de seguro social do Canad´a. O algoritmo ´e de dom´ınio p´ ublico. Ele protege contra o erro acidental e n˜ao contra o ataque malicioso. Come¸cando com o d´ıgito mais a direita (que ´e o DV), dobre o valor dos d´ıgitos alternados. Para cada valor que ultrapasse 10, tome os seus d´ıgitos juntos. Por exemplo 1111 gera 2121, enquanto 8763 gera 7733, (de 2x6=12 →1+2=3 e 2x8=16→1+6=7). Some todos os d´ıgitos juntos. Por exemplo, 1111 vira 2121 ent˜ao 2+1+2+1 ´e 6. J´a 8763 torna-se 7733, ent˜ao 7+7+3+3 ´e 20. Se o total termina em zero (´e m´ ultiplo de 10) o c´ odigo completo ´e v´alido de acordo com a f´ ormula de Luhn, sen˜ao n˜ao ´e. Ent˜ao 1111 n˜ao ´e v´alido enquanto 8763 ´e. vers˜ ao de 10 de fevereiro de 2008 269 ©88-08, Pedro Kantek Para testar o algoritmo de Luhn, calcule o DV do cart˜ ao 4931 4701 2604 479?. A resposta deve ser 2. Este algoritmo tamb´em ´e usado no sistema banc´ ario da Noruega, no c´ odigo ISSN (peri´odicos), no n´ umero de identifica¸ca˜o do ve´ıculo em alguns estados americanos, no cart˜ ao de identifica¸ca˜o de israelenses e no Yugoslav Unique Master Citizen Number (JMBG). C´ odigo de barras da FEBRABAN Este c´ odigo est´ a presente no sistema banc´ ario brasileiro e ele permite o intercˆambio de pagamentos entre os bancos (ou seja, um t´ıtulo de um banco pode ser pago em qualquer outro, at´e o vencimento). Al´em do c´ odigo de barras, adequado para uma leitura mecˆanica, existe um c´ odigo num´erico, que cont´em as mesmas informa¸co˜es, mas n˜ao na mesma ordem. Note-se tamb´em que os d´ıgitos verificadores s´o aparecem no c´ odigo num´erico a digitar, mas n˜ao no c´ odigo de barras. Aqui eles s˜ao desnecess´ arios. O c´ odigo num´erico ´e formado por 5 campos. O primeiro, de 10 d´ıgitos ´e formado pelo c´ odigo do banco (3 posi¸co˜es, B1 , B2 , B3 ), c´ odigo da moeda (9=real, M4 ), e pelas posi¸co˜es L20 , L21 ,L22 ,L23 ,L24 do conte´ udo livre (´area do cliente), al´em de um DV obtido pelo m´etodo de base 10. O segundo campo contendo 11 d´ıgitos ´e formado pelo conjunto L25 ,...,L34 al´em de um novo DV base 10. O terceiro campo contendo 11 d´ıgitos ´e formado pelo conjunto L35 ,...,L44 al´em de um novo DV base 10. O quarto campo ´e o DV do conjunto completo, calculado com o d´ıgito 11 e pesos 2345678923... onde o 2 inicial corresponde ao caracter mais a` direita. Nesta representa¸ca˜o ele ´e o D5 . Finalmente, o quinto campo ´e formado por 14 d´ıgitos, sendo os 4 primeiros o fator de vencimento (dias decorridos desde 07/10/1997) at´e o dia de vencimento, ou seja F6 , F7 ,F8 ,F9 , e depois vem os 10 d´ıgitos do valor, com centavos, ou seja, o V10 , V11 , V12 , V13 , V14 , V15 , V16 , V17 , V18 , V19 . O c´ odigo de barras, apresenta os dados na ordem em que eles foram apresentados acima, a saber: B1 , B2 , B3 , M4 , D5 , F6 , F7 , F8 , F9 , V10 , V11 , V12 , V13 , V14 , V15 , V16 , V17 , V18 , V19 , L20 , L21 ,...,L44 . Al´em destes sinais, o c´ odigo de barra come¸ca por um start e termina por um stop. Este c´ odigo ´e o chamado entrela¸ca˜do 5-2, j´ a que os d´ıgitos s˜ao calculados de 5 em 5 sinais, e tanto as barras quanto os espa¸cos s˜ao usados para o reconhecimento. No c´ alculo do DV mod 11, ao subtrair 11 menos o resto da divis˜ ao, se a resposta for 0, 1 ou maior do que 9, o d´ıgito verificador ´e 1. O que ´ e oblitera¸ c˜ ao ? - 2 Na acep¸c˜ao 2 do Aur´elio, obliterar ´e ”destruir, eliminar, suprimir”e ´e sobre isto que nos fala esta hist´ oria. Quantas vezes ao escrever uma palavra qualquer no micro ecrevemos (aten¸c˜ao revis˜ao: ´e ecrevemos e n˜ao escrevemos) errado ? Vocˆe acabou de ver uma oblitera¸c˜ao, algu´em (meus dedos ?) sumiu com a letra ”s”de escrevemos. Isto ´e comum quando o pensamento ´e mais r´apido que os dedos que digitam, isto ´e quase sempre. Via de regra, depois que se termina um texto, mandam os bons constumes que o digitador leia o que escreveu, e neste caso as oblitera¸co˜es s˜ao – em geral – descobertas e corrigidas. Quando o texto ´e muito importante, ´e comum pedir-se a outra pessoa que fa¸ca a revis˜ao, j´a que muitos erros cometidos pelo digitador n˜ao podem ser facilmente descobertos por esse mesmo revisor. H´a necessidade de um terceiro. S˜ao cuidados m´ınimos para n˜ao pagar mico, e na sua falta, o implac´avel imponder´avel sempre d´a as suas caras, como vai-se ver a seguir. ©88-08, Pedro Kantek 270 vers˜ ao de 10 de fevereiro de 2008 ´ CAP´ITULO 21. EXERC´ICIOS PRATICOS: 024 -DVS ´ CAP´ITULO 21. EXERC´ICIOS PRATICOS: 024 -DVS A cena ´e o exame final do curso de inform´atica em uma universidade bem conceituada de Curitiba. Nesse curso, os alunos – para se formarem – precisam construir um software desde a sua concep¸c˜ao at´e sua opera¸c˜ao sem nenhum erro grave. Eles tˆem 1 ano para essa tarefa e acreditem-me, geralmente ´e pouco tempo. H´a alguns anos, uma equipe estava na u ´ltima banca para aprova¸c˜ao. N´os chamamos esta banca de magna, pois por ser a u ´ltima ´e composta por todos os professores orientadores, que naquele ano eram em n´ umero de 9. A equipe em quest˜ao era formada por 3 alunas, bonitas, charmosas e tamb´em competentes, n˜ao esque¸camos de afirmar. Estavam as 3 nervosas, roendo os dedos que as unhas j´a haviam acabado, numa espera imensa e infernal quando chegou a vez delas: Entraram na sala, instalaram o software, os micros, eram 3 que aquilo rodava em rede, o canh˜ao, enfim todas essas parafern´alias que todos t˜ao bem conhecemos. Rolava a apresenta¸c˜ao, sem maiores problemas, o que por s´ı s´o j´a devia ser s´erio ind´ıcio de que alguma coisa grave ia acontecer, essas coisas nunca rolam sem maiores problemas, quando... Mostrou-se uma transparˆencia imensa cujo t´ıtulo era ”processamento de pedidos”, afinal o software era para automatizar uma pequena lojinha de bairro. Nessa hora a oblitera¸c˜ao (a maldita) introduziu-se na hist´ oria. O digitador (o maldito) esquecera-se de digitar, obliterara uma letra no t´ıtulo. Maior gravidade n˜ao haveria se fosse qualquer letra, mas qual o quˆe: a letra roubada fora a terceira letra da terceira palavra, as alunas estavam apresentando uma transparˆencia onde em letras garrafais se dizia ”processamento de peidos”. N˜ao preciso descrever como terminou a banca. Apenas informo que as alunas foram aprovadas, o software estava muito bom. Pedro Kantek Os principais m´etodos usados: 21.1.1 M´ odulo 10 ˆ Separe os d´ıgitos do c´ odigo a processar. Ex: se o c´ odigo ´e 13865, tem-se d1 = 1, d2 = 3, d3 = 8, d4 = 6 e d5 = 5. ˆ Crie um vetor de pesos P, com o mesmo n´ umero de d´ıgitos, e contendo 2 e 1, come¸cando com 2 e alternando. Ex: p1 = 2, p2 = 1, p3 = 2, p4 = 1, p5 = 2. ˆ Multiplique os dois vetores, tirando NOVES FORA em cada multiplica¸ca ˜o. Ex: m1 = 1 × 2 = 2, m2 = 3 × 1 = 3, m3 = 8 × 2 = 16, noves fora=7, m4 = 1 × 6 = 6, m5 = 2 × 5 = 1 ˆ Some os elementos do vetor multiplica¸ca ˜o. Ex:2 + 3 + 7 + 6 + 1 = 19 ˆ O que faltar para completar a pr´ oxima dezena ser´a o DV mod 10. No exemplo, o que falta a 19 para completar 20 ´e 1. Logo DV = 1. Obs: 1: noves fora: se x > 9, x ← x − 9 ; 2:se deu a dezena, a resposta ´e 0. 21.1.2 M´ odulo 11 ˆ Separe os d´ıgitos. ˆ Crie vetor P. O menor peso ´e 2, alocado ao d´ıgito mais a direita. A seq¨ uˆencia de pesos cresce para a esquerda. Ex: 7, 6, 5, 4, 3, 2. A lei de forma¸ca˜o destes pesos PODE VARIAR em cada m´etodo. ˆ O DV = 11− resto da soma dividido por 11. vers˜ ao de 10 de fevereiro de 2008 271 ©88-08, Pedro Kantek ˆ Se o resto ´e 0 ou 1, o DV ´e igual a 0. (No BB se R=0, DV=X) Letra Chave Este m´etodo tem como resposta uma letra e n˜ao um d´ıgito. ˆ Separe os d´ıgitos e crie um vetor de pesos adequado. ˆ Some e ache o resto de uma divis˜ ao por 26. ˆ A LC ´e obtida pela equivalˆencia: R = 0, LC = A; R = 1, LC = B; ... R = 25,LC = Z. Este m´etodo se encontra em desuso. Foi usado na Receita do PR at´e 96. 21.1.3 CPF (Cadastro de Pessoas F´ısicas) a) S˜ao 2 DVs. b) O primeiro ´e calculado pelo MOD 11, com pesos = 10, 9, 8, 7, 6, 5, 4, 3, 2. c) O DV calculado ´e colocado no seu lugar e o processo refeito, agora com os pesos: 11, 10, 9, 8, 7, 6, 5, 4, 3, 2. d) O segundo d´ıgito ´e colocado no seu lugar. Obs: O nono d´ıgito de um CPF ´e a regi˜ ao onde foi criado. 6=MG, 7=ES/RJ, 8=SP, 9=PR/SC e 0=RS. Por exemplo, seja o CP F = 176.294.338, quais os DVs ? 1 × 10 + 7 × 9 + 6 × 8 + 2 × 7 + 9 × 6 + 4 × 5 + 3 × 4 + 3 × 3 + 8 × 2 = 246, cuja divis˜ ao por 11 tem como resto 4. Logo o primeiro DV ´e 11 − 4 = 7. Refazendo 1×11+7×10+6×9+2×8+9×7+4×6+3×5+3×4+8×3+7×2 = 303,cujo resto da divis˜ ao por 11 ´e 6. Assim, o DV ´e 11 − 6 = 5. O CPF completo fica sendo 176.294.338 − 75. Curiosidade: CPF = 111 111 111, DVs=1,1. CPF = 222 222 222 - 22, 333 333 333 - 33, 444 444 444 - 44, e assim por diante at´e 999 999 999 - 99 e 000 000 000 - 00. Veja se acerta: . Resposta: 40. CPF = 357 432 754 CPF = 247 212 764 . Resposta: 27. 21.1.4 CNPJ (antigo CGC) a) S˜ao 3 DVs. b) O DV1 ocupa a 8.posi¸ca˜o do c´ odigo e ´e um MOD 10 dos 7 d´ıgitos iniciais. c) O DV2 ocupa a 13.posi¸ca˜o e ´e um MOD 11 de todos os anteriores com o vetor de pesos = 543298765432. d) O DV3 ocupa a 14.posi¸ca˜o e ´e um MOD 11 de todos os anteriores com os pesos = 6543298765432. Exemplo, seja o CNPJ da COPEL: 7 648 381. O DV 1 = 7 × 2 = 14, noves fora = 5 + 6 × 1 = 6, +4 × 2 = 8, +8 × 1 = 8, +3 × 2 = 6, +8 × 1 = 8, +1 × 2 = 2. A soma ´e 43, e o DV1 ´e o que falta para a pr´oxima dezena, NESTE CASO 50, ou DV1=7. Com isso o primeiro c´ odigo ´e: 76.483.817. Continuando: A filial ´e 0001, e fica: 76.483.817/0001. O DV2 ´e igual a: = 7 × 5 + 6 × 4 + 4 × 3 + 8 × 2 + 3 × 9 + 8 × 8 + 1 × 7 + 7 × 6 + 0 × 5 + 0 × 4 + 0 × 3 + 1 × 2 = 229. O DV2 ´e 11 menos o resto de 229 por 11 que ´e 2. DV3=7×6+6×5+4×4+8×3+3×2+8×9+1×8+7×7+0×6+0×5+0×4+1×3+2×2 = 254. O resto de 254 dividido por 11 ´e 1, logo o DV3=11-1=10 ou zero. Assim, o CNPJ completo da COPEL ´e: 76.483.817/0001-20. ©88-08, Pedro Kantek 272 vers˜ ao de 10 de fevereiro de 2008 ´ CAP´ITULO 21. EXERC´ICIOS PRATICOS: 024 -DVS ´ CAP´ITULO 21. EXERC´ICIOS PRATICOS: 024 -DVS Veja se acerta os CNPJs a seguir: Carrefour: 45.543.91 /0001 . Resposta:581. /0061Resposta:152. Lacta: 57.003.88 BC: 00.038.16 /0001Resposta:605. 2= 7 6 8 4 0 6 7 2 6 - . Calcule os d´ıgitos dos seguintes CNPJs: 3= 6 6 1 6 2 3 4 4= 4 6 2 1 4 6 9 Observa¸ca˜o: Alguns CNPJs inexplicavelmente n˜ao seguem o aqui escrito. Aparentemente foram criados antes da regra. Por exemplo, o CGC da Light: 66 444 437/0001-46. /0009/0008- - . . Some os 10 d´ıgitos achados : Exerc´ıcio 6 21.2 Calcule os d´ıgitos dos Cadastros de Pessoa F´ısica: Exerc´ıcio 1 1= 4 9 6 9 5 5 5 0 2 2= 8 5 3 7 8 0 6 4 3 - Calcule os d´ıgitos dos Cadastros de Pessoa F´ısica: 1= 3 5 6 9 8 2 1 0 9 . 2= 8 8 9 4 0 5 5 3 1 . Calcule os d´ıgitos dos seguintes CNPJs: 3= 6 1 5 6 4 0 3 4= 3 4 8 9 2 5 7 Calcule os d´ıgitos dos seguintes CNPJs: 3= 7 4 7 7 8 3 4 4= 8 1 6 0 4 0 0 /0094/0069- - . . . . Calcule os d´ıgitos dos Cadastros de Pessoa F´ısica: 1= 6 6 7 6 1 6 4 2 2 2= 6 0 6 9 9 1 4 9 5 - Calcule os d´ıgitos dos Cadastros de Pessoa F´ısica: 1= 7 1 2 5 3 4 1 7 8 2= 6 2 5 4 9 3 2 4 3 - /0005/0099- - . . Calcule os d´ıgitos dos seguintes CNPJs: . . 3= 6 6 9 5 0 0 3 4= 3 3 9 7 7 2 1 Calcule os d´ıgitos dos seguintes CNPJs: . . /0005/0003- - . . Some os 10 d´ıgitos achados : Some os 10 d´ıgitos achados : Exerc´ıcio 8 Calcule os d´ıgitos dos Cadastros de Pessoa F´ısica: Exerc´ıcio 3 1= 5 2 2 8 4 2 5 3 4 2= 6 8 2 9 1 8 2 0 6 - Calcule os d´ıgitos dos Cadastros de Pessoa F´ısica: 3= 7 2 0 8 7 2 7 4= 6 0 1 1 5 1 5 Calcule os d´ıgitos dos seguintes CNPJs: /0045/0042- . . Calcule os d´ıgitos dos seguintes CNPJs: . . 1= 5 5 2 9 5 1 3 3 4 2= 4 3 1 7 3 8 3 0 2 - - . . /0006/0028- - . . Some os 10 d´ıgitos achados : Some os 10 d´ıgitos achados : Exerc´ıcio 9 Calcule os d´ıgitos dos Cadastros de Pessoa F´ısica: Exerc´ıcio 4 1= 8 0 5 4 5 2 6 7 3 2= 8 1 5 9 7 1 9 3 1 - Calcule os d´ıgitos dos Cadastros de Pessoa F´ısica: . . 1= 5 5 1 5 9 3 9 0 8 2= 8 6 5 4 7 1 0 3 3 - /0093/0059- 3= 6 0 8 8 8 3 2 4= 9 2 6 9 8 9 4 - . . - . . Exerc´ıcio 10 Calcule os d´ıgitos dos Cadastros de Pessoa F´ısica: Exerc´ıcio 5 1= 4 5 1 2 4 4 4 0 2 2= 4 1 7 0 9 9 8 8 6 - Calcule os d´ıgitos dos Cadastros de Pessoa F´ısica: vers˜ ao de 10 de fevereiro de 2008 /0005/0086- Some os 10 d´ıgitos achados : Some os 10 d´ıgitos achados : 1= 3 7 6 9 5 4 9 4 4 - . . Calcule os d´ıgitos dos seguintes CNPJs: Calcule os d´ıgitos dos seguintes CNPJs: 3= 8 0 9 9 4 8 2 4= 9 8 8 2 7 6 7 - Exerc´ıcio 7 Exerc´ıcio 2 3= 5 6 5 2 2 6 4 4= 2 4 8 7 9 6 3 /0041/0002- Some os 10 d´ıgitos achados : Some os 10 d´ıgitos achados : 3= 3 0 6 8 0 0 2 4= 5 2 1 3 4 8 6 . . . . . Calcule os d´ıgitos dos seguintes CNPJs: 273 ©88-08, Pedro Kantek ©88-08, Pedro Kantek 274 vers˜ ao de 10 de fevereiro de 2008 ´ CAP´ITULO 21. EXERC´ICIOS PRATICOS: 024 -DVS 3= 5 8 1 2 1 0 9 4= 4 6 3 8 4 6 2 /0043/0039- - ´ CAP´ITULO 21. EXERC´ICIOS PRATICOS: 024 -DVS . . Some os 10 d´ıgitos achados : 21.2.1 1 2 3 4 5 6 7 8 9 10 Respostas 33 50 35 47 50 43 30 39 31 38 9301128135 0615956369 4302226736 5507526863 9654840815 8292535036 1333145622 9094330137 3100841347 5230685423 vers˜ ao de 10 de fevereiro de 2008 275 ©88-08, Pedro Kantek ©88-08, Pedro Kantek 276 vers˜ ao de 10 de fevereiro de 2008 ´ ´ ˜ DECIMAL CAP´ITULO 22. EXERC´ICIOS PRATICOS: 027 - ARITMETICA NAO 0..9 A B C D Cap´ıtulo 22 = = = = = 0..9 10 11 12 13 E F G H I = = = = = 14 15 16 17 18 J K L M N = = = = = 19 20 21 22 23 O P Q R S = = = = = 24 25 26 27 28 T U V W X = = = = = 29 30 31 32 33 Y = 34 Z = 35 Nos exerc´ıcios a seguir, tente fazer as convers˜oes e as opera¸co˜es solicitadas: 1. Conversoes de Base Q para base 10 Exerc´ıcios Pr´ aticos: 027 aritm´ etica n˜ ao decimal 00122(18) = ________________________(10) 000O7(32) = ________________________(10) 00510(12) = ________________________(10) 001C4(24) = ________________________(10) 22.1 Aritm´ etica n˜ ao decimal A aritm´etica, tal como a conhecemos, n˜ao sofre nenhuma mudan¸ca conceitual ou operacional se passarmos a usar bases n˜ao decimais. O sistema de numera¸ca˜o usado, desde que posicional, funciona legal. Para as opera¸co˜es a seguir, considere um conjunto de d´ıgitos sujeito as seguintes regras: 1. O primeiro digito ´e sempre ZERO. 02120(07) = ________________________(10) 2. Conversoes de base 10 para base Q 00868(10) = ________________________(22) 00772(10) = ________________________(18) 00642(10) = ________________________(21) 2. Existem tantos d´ıgitos quanto ´e o valor da base. 3. Se forem necess´arios mais de 10 d´ıgitos, o 11o ser´a a letra A, o 12o a letra B e assim por diante at´e o 36o d´ıgito que ser´a o Z. Na soma individual, d´ıgito a d´ıgito, a regra ´e simples: se a soma for maior que a base, retira-se uma base do total e vai um... Na subtra¸ca˜o individual, d´ıgito a d´ıgito, se o n´ umero a subtrair ´e maior do que o n´ umero do qual vai ser feita a subtra¸ca˜o, empresta-se uma base do vizinho esquerdo. Exemplos: 27(10) + 45(10) = 00703(10) = ________________________(09) 00232(10) = ________________________(25) 3. Somas em base diferente de 10 01402(06) + 01113(06) = ________________(06) 01343(05) + 01104(05) = ________________(05) 2 7 + 4 5 ----7 2 001A1(15) + 001B9(15) = ________________(15) 0013I(22) + 00103(22) = ________________(22) Como 7 + 5 = 12 e 12 ´e maior do que a base, subtrai-se uma base (10) e o resultado ´e 2, e ”vai um”. A resposta final ´e 72. 94(10) - 59(10) = 9 4 5 9 ----3 5 000I2(19) + 00138(19) = ________________(19) 4. Subtra¸ coes em base diferente de 10 00176(18) - 00128(18) = ________________(18) Como 4 − 9 n˜ao pode ser feito (pois 9 > 4), a solu¸ca˜o ´e emprestar uma base do vizinho. Com isto, tem-se 4 + 10 = 14, e agora pode-se fazer 14 − 9, cujo resultado ´e 5. O um que foi emprestado do 9, deixa-o valendo apenas 8, e agora tem-se 8 − 5 = 3. O resultado final ´e 35. Para facilitar, use a seguinte tabela: 277 00297(12) - 00181(12) = ________________(12) 000LF(26) - 000GP(26) = ________________(26) 000DD(27) - 00080(27) = ________________(27) ©88-08, Pedro Kantek 278 vers˜ ao de 10 de fevereiro de 2008 ´ ´ ˜ DECIMAL CAP´ITULO 22. EXERC´ICIOS PRATICOS: 027 - ARITMETICA NAO 00671(09) - 00271(09) = ________________(09) 22.1.1 Programa VISUALG A seguir um programa escrito em VISUALG que resolve as adi¸c˜oes e subtra¸co˜es em bases n˜ao decimais. Note-se que o programa n˜ao faz nenhuma consistˆencia, e se algum erro aparecer, o programa abortar´ a. Eis alguns dos poss´ıveis erros: ˆ Usar n´ umeros de comprimento maior que 9 d´ıgitos ˆ Usar bases maiores do que 36 ˆ Escrever opera¸co ˜es de subtra¸ca˜o cujo resultado seja negativo ˆ Incluir caracteres diferentes de ”0..Z”nos operandos ˆ Usar opera¸co ˜es diferentes de + e ˆ Usar espa¸cos em branco entre os d´ıgitos dos operandos ˆ Usar digitos de valor absoluto maior ou igual do que a base

algoritmo "maismenosnaodecimal" var sinal: caracter c1, c2 : caracter b : inteiro op1 : vetor [1..10] de inteiro op2 : vetor [1..10] de inteiro res : vetor [1..10] de inteiro let : caracter i, j : inteiro funcao achaind (ind:caracter) : inteiro var k : inteiro inicio k

Numero da solicitacao de servico
autor
cliente
CA responsavel
interlocutor no cliente
fone
email