Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Algoritmos
Sumrio a
1 Contrato Pedaggico o 2 Cincia da Computao e ca 2.1 Representao do conhecimento . . . . . ca 2.2 Algoritmo . . . . . . . . . . . . . . . . . 2.2.1 Qualidades de um bom algoritmo 2.2.2 Como se escreve um algoritmo . 2.3 Portugol . . . . . . . . . . . . . . . . . . 2.4 Programao Estruturada . . . . . . . . ca 2.5 A mquina de Turing . . . . . . . . . . a 2.6 Linguagens de programao . . . . . . . ca 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 . . . . . . . . . . . . . . . . . . 3 Escrevendo algoritmos 3.1 Nome . . . . . . . . . . . . 3.2 Variveis . . . . . . . . . . . a 3.2.1 Tipos de variveis . a 3.2.2 Cdigo de caracteres o 3.3 Comando de atribuio . . ca 3.4 Expresses . . . . . . . . . . o 3.4.1 Aritmticas . . . . . e 3.4.2 Relacionais . . . . . 3.4.3 Lgicas . . . . . . . o 13 27 27 31 32 34 34 39 40 42 42 43 44 45 46 47 48 49 50 50 51 52 53 54 55 55 57 57 58 61 62 62 68 68
. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . . 3
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
SUMARIO 4 Comandos 4.1 Viso Top down e Bottom up . . . . . . . . . . . . a 4.2 Seqncia de execuo . . . . . . . . . . . . . . . . ue ca 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 repetio . . . . . . . . . . . . . . . ca 4.5.1 Repetio com condio no in ca ca cio: enquanto 4.5.2 Repetio com varivel de controle: para . ca a 4.5.3 Repetio com condio no nal: repita . . ca ca 4.5.4 Comando de mltipla escolha: Escolha . . . u 4.5.5 Abandono de iterao: abandone . . . . . . ca 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 Depurao de algoritmos . . . . . . ca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 109 114 116 117 118
7 Modularizao: funes ca co 119 7.1 Funes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 co 7.1.1 Variveis globais e locais . . . . . . . . . . . . . . . . . . . . . . . . 120 a 8 Vetores e Matrizes 8.1 Denio de Vetor . . . . . . . . . . . . ca 8.1.1 Origem dos ndices . . . . . . . . 8.2 Operaes Bsicas . . . . . . . . . . . . co a 8.3 Ordenao . . . . . . . . . . . . . . . . . ca 8.4 Operaes fundamentais na Informtica co a 8.5 Tabelas . . . . . . . . . . . . . . . . . . 8.6 Merge (intercalao) de dois vetores . . ca 8.7 Pesquisa seqencial . . . . . . . . . . . . u 8.8 Matriz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 . 123 . 124 . 125 . 129 . 130 . 133 . 135 . 137 . 149
9 Registros 157 9.1 Denio de registros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 ca 9.2 Processamento de Textos . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 9.2.1 Calendrios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176 a 10 Exerc cios prticos: 003 -Raiz quadrada a 10.1 Exemplo de um algoritmo: raiz quadrada 10.2 Exerc 1 . . . . . . . . . . . . . . . . . cio 10.3 Exerc 2 . . . . . . . . . . . . . . . . . cio 10.4 Exerc 3 . . . . . . . . . . . . . . . . . cio 10.5 Exerc 4 . . . . . . . . . . . . . . . . . cio
88-08, Pedro Kantek
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
SUMARIO 10.6 Respostas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 11 Exerc cios Prticos: 004-Introduo a ca 11.1 Algoritmos . . . . . . . . . . . . . . . . . . . 11.1.1 Mximo Divisor Comum . . . . . . . . a 11.1.2 Algoritmo do Mximo Divisor Comum a 11.1.3 Algoritmos no dia a dia . . . . . . . . 11.1.4 Exerc 1 . . . . . . . . . . . . . . . cio 11.1.5 Exerc 2 . . . . . . . . . . . . . . . cio 11.1.6 Exerc 3 . . . . . . . . . . . . . . . cio 11.1.7 Exerc 4 . . . . . . . . . . . . . . . cio 11.1.8 Exerc 5 . . . . . . . . . . . . . . . cio 11.1.9 Exerc 6 . . . . . . . . . . . . . . . cio 11.1.10 Exerc 7 . . . . . . . . . . . . . . . cio 11.1.11 Exerc 8 . . . . . . . . . . . . . . . cio 11.1.12 Exerc 9 . . . . . . . . . . . . . . . cio 11.1.13 Exerc 10 . . . . . . . . . . . . . . . cio 11.1.14 Respostas . . . . . . . . . . . . . . . . 12 Exerc cio prtico: 006-Jogo a 12.1 O jogo da vida . . . . . . 12.2 Exerc 1 . . . . . . . . cio 12.3 Exerc 2 . . . . . . . . cio 12.4 Exerc 3 . . . . . . . . cio 12.5 Exerc 4 . . . . . . . . cio 12.6 Respostas . . . . . . . . . 13 Exerc cio Prtico:007-GPS a 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 . . . . . da . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Vida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187 . 187 . 188 . 188 . 189 . 189 . 189 . 190 . 190 . 190 . 190 . 190 . 190 . 191 . 191 . 191 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 193 195 196 196 197 197 199 201 202 202 203 203 203 204 204 204 205 205 205 205 206 206 206 207 207 207 208 208 208 208 209
14 Exerc cio Prtico: 008 - Problemas a 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 . . . . . . . . .
verso de 10 de fevereiro de 2008 a
SUMARIO 14.1.7 Problema 7 . 14.1.8 Problema 8 . 14.1.9 Problema 9 . 14.1.10 Problema 10 14.1.11 Respostas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 209 209 209 209 211 211 212 213 214 215 215 217 217 217 217 218 218 218 219 219 219 220 220 220 220 221 221 222 222 222 223 223 223 224 224 225 225 226 226 226 227 227 228 228 228 229 229 229 230
15 Exerc cio prtico: 009-Achar o a 15.1 Qual o nmero que falta ? . . u 15.2 Exerc 1 . . . . . . . . . . cio 15.3 Exerc 2 . . . . . . . . . . cio 15.4 Exerc 3 . . . . . . . . . . cio 15.5 Exerc 4 . . . . . . . . . . cio 15.6 Respostas . . . . . . . . . . .
n mero que u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e . . . . . . . . . . . . . . . . . . . . . . .
falta . . . . . . . . . . . . . . . . . . . . . . . .
16 Exerc cios Prticos: 011 - Matemtica a a 16.1 Exerc 1 . . . . . . . . . . . . . . . cio 16.1.1 Exerc 1.1 . . . . . . . . . . cio 16.1.2 Exerc 1.2 . . . . . . . . . . cio 16.1.3 Exerc 1.3 . . . . . . . . . . cio 16.1.4 Exerc 1.4 . . . . . . . . . . cio 16.1.5 Exerc 1.5 . . . . . . . . . . cio 16.1.6 Exerc 1.6 . . . . . . . . . . cio 16.1.7 Exerc 1.7 . . . . . . . . . . cio 16.1.8 Exerc 1.8 . . . . . . . . . . cio 16.1.9 Exerc 1.9 . . . . . . . . . . cio 16.1.10 Exerc 1.10 . . . . . . . . . . cio 16.2 Exerc 2 . . . . . . . . . . . . . . . cio 16.2.1 Exerc 2.1 . . . . . . . . . . cio 16.2.2 Exerc 2.2 . . . . . . . . . . cio 16.2.3 Exerc 2.3 . . . . . . . . . . cio 16.2.4 Exerc 2.4 . . . . . . . . . . cio 16.2.5 Exerc 2.5 . . . . . . . . . . cio 16.2.6 Exerc 2.6 . . . . . . . . . . cio 16.2.7 Exerc 2.7 . . . . . . . . . . cio 16.2.8 Exerc 2.8 . . . . . . . . . . cio 16.2.9 Exerc 2.9 . . . . . . . . . . cio 16.2.10 Exerc 2.10 . . . . . . . . . . cio 16.2.11 Respostas . . . . . . . . . . . .
17 Exerc cios Prticos: 017-SEs compostos a 17.1 SEs compostos e encadeados . . . . . . . 17.1.1 Exerc 1.1 . . . . . . . . . . . cio 17.1.2 Exerc 1.2 . . . . . . . . . . . cio 17.1.3 Exerc 1.3 . . . . . . . . . . . cio 17.1.4 Exerc 1.4 . . . . . . . . . . . cio 17.1.5 Exerc 1.5 . . . . . . . . . . . cio 17.1.6 Exerc 1.6 . . . . . . . . . . . cio 17.2 Exerc 2 . . . . . . . . . . . . . . . . cio 17.2.1 Exerc 2.1 . . . . . . . . . . . cio 17.2.2 Exerc 2.2 . . . . . . . . . . . cio 17.2.3 Exerc 2.3 . . . . . . . . . . . cio 17.2.4 Exerc 2.4 . . . . . . . . . . . cio 17.2.5 Exerc 2.5 . . . . . . . . . . . cio
88-08, Pedro Kantek
SUMARIO 17.2.6 Exerc 2.6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230 cio 17.2.7 Respostas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 18 Exerc cios Prticos: 018-FLuxogramas a 18.1 Exerc cios de Fluxos e Pseudocdigo . o 18.1.1 Exerc 1 . . . . . . . . . . . cio 18.1.2 Exerc 2 . . . . . . . . . . . cio 18.1.3 Respostas . . . . . . . . . . . . 19 Exerc cios 19.0.4 19.0.5 19.0.6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 233 233 239 245
Prticos: 018 - Nassi a 247 Exerc 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 cio Exerc 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252 cio Respostas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257 simples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259 259 259 262 266 267 267 271 271 272 272 273 275 277 277 279 282 283 283 284 285 285 285 286 286 287 287 288 288 288 288 288 288 289 289 289
20 Exerc cios prticos: 021 - 5 funes a co 20.1 Funes numricas . . . . . . . . . co e 20.1.1 Exerc 1 . . . . . . . . . cio 20.1.2 Exerc 2 . . . . . . . . . cio 20.1.3 Respostas . . . . . . . . . .
21 Exerc cios Prticos: 024 -DVs a 21.1 D gitos Vericadores . . . . . . . . . . . . 21.1.1 Mdulo 10 . . . . . . . . . . . . . . o 21.1.2 Mdulo 11 . . . . . . . . . . . . . . o 21.1.3 CPF (Cadastro de Pessoas F sicas) 21.1.4 CNPJ (antigo CGC) . . . . . . . . 21.2 Exerc 1 . . . . . . . . . . . . . . . . . cio 21.2.1 Respostas . . . . . . . . . . . . . . 22 Exerc cios Prticos: 027 - aritmtica a e 22.1 Aritmtica no decimal . . . . . . . e a 22.1.1 Programa VISUALG . . . . . 22.2 Exerc 1 . . . . . . . . . . . . . . cio 22.3 Exerc 2 . . . . . . . . . . . . . . cio 22.4 Exerc 3 . . . . . . . . . . . . . . cio 22.4.1 Respostas . . . . . . . . . . .
no decimal a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23 Exerc cios Prticos: 031 - Manipulao de datas a ca 23.1 Algoritmos de Calendrio . . . . . . . . . . . . . . a 23.1.1 Clculo do dia da semana . . . . . . . . . . a 23.1.2 Clculo dos feriados mveis . . . . . . . . . a o 23.1.3 Bissexto . . . . . . . . . . . . . . . . . . . . 23.2 Exerc 1 . . . . . . . . . . . . . . . . . . . . . . cio 23.3 Exerc 2 . . . . . . . . . . . . . . . . . . . . . . cio 23.4 Exerc 3 . . . . . . . . . . . . . . . . . . . . . . cio 23.5 Exerc 4 . . . . . . . . . . . . . . . . . . . . . . cio 23.6 Exerc 5 . . . . . . . . . . . . . . . . . . . . . . cio 23.7 Exerc 6 . . . . . . . . . . . . . . . . . . . . . . cio 23.8 Exerc 7 . . . . . . . . . . . . . . . . . . . . . . cio 23.9 Exerc 8 . . . . . . . . . . . . . . . . . . . . . . cio 23.10Exerc 9 . . . . . . . . . . . . . . . . . . . . . . cio 23.11Exerc 10 . . . . . . . . . . . . . . . . . . . . . . cio 23.12Respostas . . . . . . . . . . . . . . . . . . . . . . .
verso de 10 de fevereiro de 2008 a
SUMARIO 24 Exerc cios Prticos: 035 - Localizao de oleoduto a ca 24.1 Localizao de oleoduto . . . . . . . . . . . . . . . . ca 24.2 Exerc cios . . . . . . . . . . . . . . . . . . . . . . . . 24.3 Exerc 1 . . . . . . . . . . . . . . . . . . . . . . . cio 24.4 Exerc 2 . . . . . . . . . . . . . . . . . . . . . . . cio 24.5 Exerc 3 . . . . . . . . . . . . . . . . . . . . . . . cio 24.6 Respostas . . . . . . . . . . . . . . . . . . . . . . . . 25 Exerc cios Prticos: 054 - Kumon de a 25.1 Treinamento bsico em Algoritmos . a 25.2 Exerc 1 . . . . . . . . . . . . . . cio 25.3 Exerc 2 . . . . . . . . . . . . . . cio 25.4 Exerc 3 . . . . . . . . . . . . . . cio 25.5 Respostas . . . . . . . . . . . . . . . 26 Exerc cios Prticos: a 26.1 Por exemplo . . . 26.2 Exerc 1 . . . cio 26.3 Exerc 2 . . . cio 26.4 Exerc 3 . . . cio 26.5 Respostas . . . . algoritmos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291 . 291 . 292 . 292 . 293 . 293 . 294 295 295 295 298 302 305 307 307 307 310 312 315 317 317 318 320 322 324
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
27 Exerc cios Prticos: 062 - Engenharia reversa a 27.1 Engenharia Reversa de algoritmos . . . . . . . 27.2 Exerc 1 . . . . . . . . . . . . . . . . . . . . cio 27.3 Exerc 2 . . . . . . . . . . . . . . . . . . . . cio 27.4 Exerc 3 . . . . . . . . . . . . . . . . . . . . cio 27.5 Respostas . . . . . . . . . . . . . . . . . . . . . 28 Exerc cios Prticos: a 28.1 Exerc 1 . . . cio 28.2 Exerc 2 . . . cio 28.3 Exerc 3 . . . cio 28.4 Respostas . . . . 29 Exerc cios Prticos: a 29.1 Exerc 1 . . . cio 29.2 Exerc 2 . . . cio 29.3 Exerc 3 . . . cio 29.4 Exerc 4 . . . cio 29.5 Respostas . . . . 30 Exerc cios Prticos: a 30.1 Exemplos . . . . 30.2 Exerc 1 . . . cio 30.3 Exerc 2 . . . cio 30.4 Exerc 3 . . . cio 30.5 Exerc 4 . . . cio 30.6 Respostas . . . .
88-08, Pedro Kantek
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
enquanto, . . . . . . . . . . . . . . . . . . . . . . . . . . . .
repita . . . . . . . . . . . . . . . . . . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
327 . 327 . 330 . 334 . 338 339 . 339 . 341 . 343 . 346 . 348 349 349 352 353 353 354 354
algoritmos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
073 - achar o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
dcimo e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
termo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
SUMARIO 31 Exerc cios Prticos: a 31.1 Exerc 1 . . . cio 31.1.1 Algoritmo 31.1.2 Algoritmo 31.1.3 Algoritmo 31.2 Exerc 2 . . . cio 31.2.1 Algoritmo 31.2.2 Algoritmo 31.2.3 Algoritmo 31.2.4 Algoritmo 31.3 Exerc 3 . . . cio 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 Prtico: 084 Balance LIne a 363 32.1 Respostas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367 33 Exerc cios Prticos: a 33.1 Exerc 1 . . . cio 33.2 Exerc 2 . . . cio 33.3 Exerc 3 . . . cio 33.4 Respostas . . . . 110 - indexao e indireo ca ca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369 370 372 374 376 377 377 380 380 380 381 383 386 386 386 387
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
34 Exerc cios Prticos: 116 - manuseio de tabelas a 34.1 Manuseio de tabelas . . . . . . . . . . . . . . . . 34.2 Exerc 1 . . . . . . . . . . . . . . . . . . . . . cio 34.3 Exerc 2 . . . . . . . . . . . . . . . . . . . . . cio 34.4 Exerc 3 . . . . . . . . . . . . . . . . . . . . . cio 34.5 Respostas . . . . . . . . . . . . . . . . . . . . . . 35 Exerc cio Prtico: a 35.1 Exerc 1 . . cio 35.2 Exerc 2 . . cio 35.3 Exerc 3 . . cio 35.4 Exerc 4 . . cio
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
36 Exerc cios Prticos: a 36.1 Exerc 1 . . . cio 36.2 Exerc 2 . . . cio 36.3 Exerc 3 . . . cio 36.4 Exerc 4 . . . cio 36.5 Respostas . . . . 37 Exerc cios Prticos: a 37.1 Exerc 1 . . . cio 37.2 Exerc 2 . . . cio 37.3 Exerc 3 . . . cio 37.4 Exerc 4 . . . cio 37.5 Respostas . . . .
verso de 10 de fevereiro de 2008 a
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
389 . 389 . 393 . 396 . 400 . 404 405 . 405 . 409 . 412 . 416 . 419
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
SUMARIO 38 Exerc cios Prticos: a 38.1 Exerc 1 . . . cio 38.2 Exerc 2 . . . cio 38.3 Exerc 3 . . . cio 38.4 Exerc 4 . . . cio 38.5 Respostas . . . . 125c - Correo de algoritmos ca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Correo de Algoritmos ca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421 421 425 429 433 437 439 439 442 446 449 452 453 456 456 457 457 457
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
39 Exerc cios Prticos 125d a 39.1 Exerc 1 . . . . . . cio 39.2 Exerc 2 . . . . . . cio 39.3 Exerc 2 . . . . . . cio 39.4 Exerc 3 . . . . . . cio 39.5 Respostas . . . . . . . 40 Exerc cios Prticos: a 40.1 Exerc 1 . . . cio 40.2 Exerc 2 . . . cio 40.3 Exerc 3 . . . cio 40.4 Exerc 4 . . . cio 40.5 Respostas . . . . 41 Exerc cios prticos: a 41.1 Exerc 1 . . . cio 41.2 Exerc 3 . . . cio 41.3 Exerc 4 . . . cio
cubo RUBIK 459 . . . . . . . . . . . . . . . . . . . . . . . . . . . 462 . . . . . . . . . . . . . . . . . . . . . . . . . . . 463 . . . . . . . . . . . . . . . . . . . . . . . . . . . 464 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 467 467 468 468 469 469 470 470 471 473 474 474 476 476 477 477 479 479 480 481 482 482 483 483 484
42 Exerc cios prticos: 139 - Ostras a 42.1 A fazenda de ostras de Zing Zhu . . . . . 42.1.1 Resolvendo... . . . . . . . . . . . . 42.1.2 Truques usados na implementao ca 42.2 Exerc 1 . . . . . . . . . . . . . . . . . cio 42.3 Exerc 2 . . . . . . . . . . . . . . . . . cio 42.4 Exerc 3 . . . . . . . . . . . . . . . . . cio 42.5 Exerc 4 . . . . . . . . . . . . . . . . . cio 42.6 Respostas . . . . . . . . . . . . . . . . . . 43 Exerc cios prticos: 144 - romanos a 43.0.1 Converso de romano para arbico a a 43.0.2 Converso de arbico para romano a a 43.1 Exerc 1 . . . . . . . . . . . . . . . . . cio 43.2 Exerc 2 . . . . . . . . . . . . . . . . . cio 43.3 Exerc 3 . . . . . . . . . . . . . . . . . cio 43.4 Respostas . . . . . . . . . . . . . . . . . . 44 Exerc cios Prticos: 148 - diversos a 44.1 Universidade de Pinguinhos / cubos 44.2 Exerc 1 . . . . . . . . . . . . . . cio 44.2.1 Cubos Coloridos . . . . . . . 44.3 Exerc 1a . . . . . . . . . . . . . . cio 44.4 Exerc 2 . . . . . . . . . . . . . . cio 44.5 Exerc 2a . . . . . . . . . . . . . . cio 44.6 Exerc 3 . . . . . . . . . . . . . . cio 44.7 Exerc 3a . . . . . . . . . . . . . . cio
88-08, Pedro Kantek
. . . . . . . .
. . . . . . . .
. . . . . . . .
10
SUMARIO 44.8 Respostas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 484 45 Exerc cios Prticos: a 45.1 A Piscina . . . . 45.2 Exerc 1 . . . cio 45.3 Mgico . . . . . . a 45.4 Exerc 1a . . . cio 45.5 Exerc 2 . . . cio 45.6 Exerc 2a . . . cio 45.7 Exerc 3 . . . cio 45.8 Exerc 3a . . . cio 45.9 Respostas . . . . 151 - diversos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485 485 486 487 488 488 489 489 489 490 491 491 491 492 493 494 494 495 497 497 499 500 500 500 501
46 Exerc cios Prticos: 152 - Regata de cientistas e Luzes da Festa a 46.1 Exerc 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . cio 46.2 Regata de cientistas . . . . . . . . . . . . . . . . . . . . . . . . . . . 46.3 Iluminao da festa . . . . . . . . . . . . . . . . . . . . . . . . . . . . ca 46.4 Exerc 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . cio 46.5 Exerc 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . cio 46.6 Exerc 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . cio 46.7 Respostas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 Exerc cios prticos: 153a - Jogo do Retngulo a a 47.1 Jogo do retngulo . . . . . . . . . . . . . . . . . a 47.2 Exerc 1 . . . . . . . . . . . . . . . . . . . . cio 47.3 Exerc 2 . . . . . . . . . . . . . . . . . . . . cio 47.4 Exerc 3 . . . . . . . . . . . . . . . . . . . . cio 47.5 Exerc 4 . . . . . . . . . . . . . . . . . . . . cio 47.6 Respostas . . . . . . . . . . . . . . . . . . . . . 48 Exerc cios Prticos: a 48.1 Exerc 1 . . . cio 48.2 Exerc 2 . . . cio 48.3 Exerc 3 . . . cio 48.4 Exerc 4 . . . cio 48.5 Respostas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Descarga do vulco503 a . . . . . . . . . . . 503 . . . . . . . . . . . 506 . . . . . . . . . . . 507 . . . . . . . . . . . 508 . . . . . . . . . . . 509 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 511 511 512 514 514 515 515 516 517 517 518 519 519 520 521
49 Exerc cio prtico: 156 - Genoma e Palavras Cruzadas a 49.1 Projeto Genoma . . . . . . . . . . . . . . . . . . . . . . 49.2 Palavras Cruzadas . . . . . . . . . . . . . . . . . . . . . 49.3 Exerc 1 . . . . . . . . . . . . . . . . . . . . . . . . . cio 49.4 Exerc 2 . . . . . . . . . . . . . . . . . . . . . . . . . cio 49.5 Exerc 3 . . . . . . . . . . . . . . . . . . . . . . . . . cio 49.6 Exerc 4 . . . . . . . . . . . . . . . . . . . . . . . . . cio 49.7 Respostas . . . . . . . . . . . . . . . . . . . . . . . . . . 50 Exerc cio prtico 157 a 50.1 Trem ou Caminho? a 50.2 RoboCoee . . . . . 50.3 Restaurante . . . . . 50.4 Exerc 1 . . . . . cio 50.5 Exerc 2 . . . . . cio 50.6 Exerc 3 . . . . . cio
verso de 10 de fevereiro de 2008 a
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . . 11
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
SUMARIO 50.7 Exerc 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 521 cio 50.8 Respostas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 522 51 Exerc cio prtico a 51.1 Seqncias . . ue 51.2 Carga Pesada 51.3 Rede tica . . o 51.4 Exerc 1 . cio 51.5 Exerc 2 . cio 51.6 Exerc 3 . cio 51.7 Exerc 4 . cio 51.8 Respostas . . 52 Exerc cio prtico a 52.1 Quermesse . . 52.2 Bits Trocados 52.3 Saldo de gols 52.4 Exerc 1 . cio 52.5 Exerc 2 . cio 52.6 Exerc 3 . cio 52.7 Exerc 4 . cio 52.8 Respostas . . 53 Exerc cio prtico a 53.1 Macaco-prego 53.2 MASP . . . . 53.3 Exerc 1 . cio 53.4 Exerc 2 . cio 53.5 Exerc 3 . cio 53.6 Exerc 4 . cio 53.7 Respostas . . 158 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 523 523 523 524 525 526 527 527 528 529 529 530 530 531 532 532 533 534 535 535 536 537 538 539 540 540 541 541 542 543 543 545 546 547 548 549 549 550 550 551 552 552 553 553
159 . . . . . . . . . . . . . . . . . . . . . . . . 160 . . . . . . . . . . . . . . . . . . . . .
54 Exerc cio prtico - 161 a 54.1 Anis quadrados . . e 54.2 Balaio . . . . . . . . 54.3 Meteoros . . . . . . 54.4 Exerc 1 . . . . . cio 54.5 Exerc 2 . . . . . cio 54.6 Exerc 3 . . . . . cio 54.7 Exerc 4 . . . . . cio 54.8 Respostas . . . . . .
55 Exerc cios prticos - 162 a 55.1 Domin . . . . . . . . o 55.2 Sorvete . . . . . . . . 55.3 Pirmide . . . . . . . . a 55.4 Exerc 1 . . . . . . cio 55.5 Exerc 2 . . . . . . cio 55.6 Exerc 3 . . . . . . cio 55.7 Exerc 4 . . . . . . cio 55.8 Respostas . . . . . . .
12
Cap tulo 1
Contrato Pedaggico o
Regras da disciplina Uma aula dupla tem 100 minutos, que sero em princ assim divididos: 10 minutos a pio para os bons dias, 30 minutos de teoria, 30 de apresentao do exerc prtico e mais ca cio a 30 minutos para os alunos fazerem o seu exerc cio. Cada aluno vai receber um exerc individual e unico. cio O exerc dever ser devolvido feito at a data escrita na prpria folha do exerc cio a e o cio. Se entregue atrasado pagar 50% da nota de multa. Em outras palavras, a nota do a exerc ser dividida por 2. cio a No haver segunda chamada de exerc a a cios perdidos. No sero aceitos xerox, fax ou e-mail de exerc a a cios. Apenas o exerc original que cio contiver o nome do aluno ser aceito. Se o aluno quiser (alguns querem), tire cpia a o xerox do exerc para guardar a coleo deles. Entretanto, todo exerc entregue ao cio ca cio professor ser corrigido e devolvido ao aluno. a A nota bimestral ser obtida fazendo a mdia aritmtica dos exerc a e e cios do bimestre, com peso de 60% e a prova bimestral, esta com peso 40%. As provas tambm so individuais e diferentes para cada aluno. e a Exerc cios Individuais Cada exerc tem um identicador unico, chamado seqncia com as seguintes inforcio ue maes: aaLGM101, que deve ser assim interpretada: [aa] Ano atual;[LG] disciplina co de Algoritmos; [M ou N] Turno;[1] 1o bimestre do ano letivo [01] Primeiro exerc deste cio bimestre;
Introduo a algoritmos ca
cdigo: 4 o nalizado em 20/12/05 13
CAP ITULO 1. CONTRATO PEDAGOGICO Apresenta os conceitos de diviso inteira e resto e a seguir pede para analisar o algoa ritmo de mdc (mximo divisor comum) devido a Euclides (aprox 400aC). Alm disso, o a e exerc pede um algoritmo de uma tarefa trivial do dia a dia do aluno. cio
Jogo da vida
cdigo: 6 o nalizado em 23/10/07 Um exercicio simples, no qual o Jogo da Vida (Conway, 1970) apresentado e so feitos e a comentrios sobre a sua importncia na Cincia da Computao. As 4 regras do jogo a a e ca so apresentadas e depois dado um tabuleiro 10 10. Pede-se ao aluno que simule 4 a e geraes e informe depois como caram 4 clulas do tabuleiro especialmente escolhidas. co e O objetivo do exerc divertir e depois trabalhar ainda informalmente os conceitos cio e de: matriz, algoritmo, iterao, entre outros. ca
Problemas introdutrios o
cdigo: 8 o nalizado em 29/08/06 Apresenta 2 questes comuns sobre regras de nomes de variveis e tipos de varivel a o a a usar em determinados algoritmos. Depois gera uma coleo de 10 exerc ca cios matemticos a individuais sobre racioc nio. A resposta sempre um nmero. e u
14
Pseudocdigo X Fluxograma o
cdigo: 18 o nalizado em 05/05/07 8 trechos de programa so apresentados atravs de um uxograma e atravs do pseua e e docdigo equivalente. Entretanto, em alguns desses 8 trechos ambos so equivalentes o a e em alguns outros trechos houve uma sutil alterao ou no uxograma ou no pseuca docdigo de maneira que ambos deixaram de ser equivalentes. O aluno deve investigar o quais dos 8 trechos so efetivamente equivalentes. a
D gitos vericadores
cdigo: 24 o nalizado em 04/02/01 Mostra-se a importncia dos DVs e depois mostra-se os algoritmos de clculo do CPF e a a do CNPJ. O aluno deve calcular os DVs de 2 CPFs e de 2 CNPJs.
Aritmtica no decimal e a
cdigo: 27 o nalizado em 28/11/01 E mostrada uma generalizao da aritmtica para bases no decimais, variando entre ca e a base = 3 e base = 33, excetuando-se as bases 2, 10 e 16. Converses, somas e subtraes o co nestas bases so pedidas. a
verso de 10 de fevereiro de 2008 a
15
Clculo de calendrios a a
cdigo: 31 o nalizado em 25/02/02 Mostra o algoritmo de Aloysius Lilius e Cristopher Clavius do sculo XVI para calcular e o Domingo da Pscoa, do qual decorrem todos os feriados mveis de nosso calendrio: a o a Carnaval, Sexta da Paixo e Corpus Christi. Alm de mostrar a distribuio de bissextos, a e ca o exerc mostra o clculo de qualquer dia da semana. Finalmente, o exerc sugere cio a cio um ano hipottico (entre 1600 e 2400) e pede que o aluno calcule o dia da semana de e um dia qualquer e os 3 feriados mveis deste ano o
Localizao de um oleoduto ca
cdigo: 35 o nalizado em 27/12/02 9 poos de petrleo so dispostos sobre uma grade de 100m 100m. Pede-se que o aluno c o a calcule de que maneira lig-los atravs de tubos de maneira a minimizar a quantidade a e de tubos usados. Exerc extra do livro do Cormen, pg 155 da edio brasileira. cio do a ca
Kumon de algoritmos
cdigo: 54 o nalizado em 23/06/06 Esta folha para treinar os comandos bsicos de algoritmos (se, enquanto, repita e e a para). So 17 exerc a cios simples, de apenas um unico comando cada um deles.
Gerao de sequncias ca e
cdigo: 57 o nalizado em 30/12/05 Neste exerc so apresentadas 8 funes que contm laos (loops). Na parte nal de cio a co e c cada lao h a impresso de uma varivel. O exerc c a a a cio mostra os primeiros 4 valores impressos e pede que o aluno ache o oitavo elemento impresso. Otimo exerc para ser cio implementado.
16
Chines de algoritmos II
cdigo: 69 o nalizado em 29/02/00 4 funes geradas aleatoriamente, mas que garantidamente executam em tempo nito co so mostradas. Cada funo recebe 5 valores mostrados. Pede-se que o aluno calcule e a ca informe, ao nal da execuo de cada funo, o valor da soma das 5 variveis originais. ca ca a
Chines de algoritmos
cdigo: 77 o nalizado em 21/02/00 4 funes usuais na informtica so mostradas: busca em cadeias, mdias em um vetor co a a e numrico, ordenao por insero e soma de colunas em uma matriz. Dados de entrada e ca ca so fornecidos, junto com o cdigo de cada funo pedindo-se ao aluno que inra os a o ca resultados que sero produzidos. a
Balance Line
cdigo: 84 o nalizado em 02/03/00 O algoritmo de balance line mostrado e discutida a sua importncia para atualizao e e a ca em lote de grandes volumes de dados. O exerc oferece dois arquivos de 30 registros cio cada (o arquivo de cadastro antigo e o arquivo de movimentaes), pedindo-se ao aluno co que gere o novo cadastro atualizado bem como o relatrio de incompatibilidades da o atualizao. Perguntas so feitas sobre o contedo dessas duas sa ca a u das
verso de 10 de fevereiro de 2008 a
17
Indexao e indireo ca ca
cdigo: 110 o nalizado em 18/02/01 Dados 3 vetores de 16 valores numricos cada e dadas 5 variveis numricas globais, o e a e exerc pede que o aluno ache o resultado de 48 operaes de indexao e de indireo. cio co ca ca
Manuseio de tabelas II
cdigo: 119 o nalizado em 10/08/06 So mostrados 5 algoritmos: incluso em tabelas desordenadas, excluso puxando os a a a sobrantes, excluso preenchendo com um indicador de excluso, busca binria e incluso a a a a em tabela ordenada. Por enquanto, a folha pede apenas o preenchimento de algumas complexidades. As folhas so todas iguais entre si. a
18
Matrizes
cdigo: 128 o nalizado em 22/08/06 Apresenta 5 algoritmos de matrizes. Uma totalizao nos dois sentidos, o clculo da ca a matriz transposta, uma matriz com elementos abaixo da diagonal principal zerados (um grafo no dirigido ?), depois a multiplicao de 2 matrizes e nalmente a soluo de a ca ca um sistema de equaes lineares. O algoritmo mostrado e um exemplo completo est co e a descrito na folha. Finalmente, o aluno convidado a resolver (a mo ou usando o e a computador, a escolha dele) um sistema com 8 equaes e 8 incgnitas. e co o
N meros romanos u
cdigo: 144 o nalizado em 16/09/06 Apresenta o sistema romano de numerao. Os algoritmos de converso de arbico ca a a para romano e vice-versa so apresentados. H 6 converses em cada sentido para a a o o aluno fazer. Deve-se alertar o fato de que na converso de arbico romano h a a a vrias respostas poss a veis (todas corretas) devendo o aluno fazer aquela que dada pelo e algoritmo estudado. Isto atrapalha o uso de conversores livremente dispon veis para resolver o problema proposto.
verso de 10 de fevereiro de 2008 a
19
Universidade Pinguinhos
cdigo: 148 o nalizado em 07/10/06 Problema retirado da Maratona de Programao de 2005 da ACM. D-se um curso ca a universitrio composto de cerca de 15 matrias com diversas relaes de pr-requisitos. a e co e Estabelecida a prioridade das matrias, e a quantidade mxima de matrias por semestre, e a e pede-se que o aluno monte a grade proposta.
Piscina/Mgico a
cdigo: 151 o nalizado em 28/10/06 Dois exerc cios retirados da maratona de Programao da ACM dos anos de 2005 e 2004 ca respectivamente. O primeiro, d um estoque de azulejos de tamanho pequeno mdio e a e grande respectivamente e pede a disposio de custo m ca nimo para azulejar uma piscina de dimenses dadas. O segundo descreve um truque de adivinhao de cartas e pede o ca que o aluno resolva 3 instncias desse truque. a
Jogo do Retngulo a
cdigo: 153 o nalizado em 09/11/07 Este exerc extra da Olimp cio do ada Internacional de Informtica de 2005, ocorrido na a Polnia, oferece um retngulo de dimenses inteiras. Cada jogador pode fazer 1 corte o a o (vertical ou horizontal) sempre em unidades inteiras. Feito o corte, o menor pedao c e desprezado e segue o jogo. Quem car com o retngulo 11 perde. So dados os mtodo a a e de soluo e os algoritmos. Dadas 3 instncias (2 vencedoras e 1 perdedora) pede-se que ca a o aluno identique a perdedora e oferea o lance ganhador nas outras 2. c
Caminho e Vulco a
cdigo: 155 o nalizado em 11/08/07 Dois exerc cios baseados em similares pedidos na Olimp ada Espanhola de Informtica. a No primeiro, uma matriz de letras estabelecida e pede-se o caminho que estabelece e uma palavra dada. Note-se que a matriz tem as extremidades ligadas, o que torna mais complexa a busca. No segundo, um vulco descrito pelas altitudes de seus plats, a o derrama lava e o problema pede que o aluno descubra para onde vai a lava nos diversos instantes discretos de tempo
88-08, Pedro Kantek
20
21
22
23
CAP ITULO 1. CONTRATO PEDAGOGICO Apenas de soluo de problemas. So eles: Excurso dos alunos(2), Conjunto de rock ca a a (2), azulejos (1) e transporte de alunos (2).
24
Meu nome Pedro Luis Kantek Garcia Navarro, conhecido como Kantek, ou Pedro e Kantek. Nasci em Curitiba h mais de 50 anos. Sou portanto brasileiro, curitibano e a coxa-branca com muito orgulho, mas sendo lho de espanhis (meus 7 irmos nasceram o a l), tenho tambm a nacionalidade espanhola. Aprendi a falar em castellano, o pora e tugus portanto meu segundo idioma. Estudei no Colgio Bom Jesus e quando chegou e e e a hora de escolher a prosso, l por 1972, fui para a engenharia civil, mas sem muita a a convico. Durante a copa do mundo de futebol de 1974 na Alemanha, ao folhear a ca Gazeta do Povo, achei um pequeno anncio sobre um estgio na rea de processamento u a a de dados (os nomes informtica e computao ainda no existiam). L fui eu para um a ca a a estgio na CELEPAR, que hoje, mais de 30 anos aps, ainda no acabou. Na CELEPAR a o a j fui de tudo: programador, analista, suporte a BD (banco de dados), suporte a TP a (teleprocessamento), coordenador de auto-servio, coordenador de atendimento, ... Atc ualmente estou na rea de governo eletrnico. Desde cedo encasquetei que uma boa a o maneira de me obrigar a continuar estudando a vida toda era virar professor. Comecei essa desaante carreira em 1976, dando aula num lugar chamado UUTT, que no existe a mais. Passei por FAE, PUC e cheguei `s Faculdades Positivo em 1988. Sou o decano a do curso de informtica e um dos mais antigos professores da casa. Na dcada de 80, a e 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, So Paulo, Fortaleza, a Floripa, ...). Em 90, resolvi voltar a estudar e fui fazer o mestrado em informtica ina dustrial no CEFET. Ainda peguei a ultima leva dos professores franceses que iniciaram o curso. Em 93 virei mestre, e a minha dissertao foi publicada em livro pela editora ca Campus (Downsizing de sistemas de Informao. Rio de Janeiro: Campus, 1994. 240p, ca ISBN:85-7001-926-2). O primeiro cheque dos direitos autorais me manteve um ms em e Nova Iorque, estudando ingls. Alis, foi o quarto livro de minha carreira de escritor, e a antes j havia 3 outros (MS WORD - Guia do Usurio Brasileiro. Rio de Janeiro: Cama a pus, 1987. 250p, ISBN:85-7001-507-0, Centro de Informaes. Rio de Janeiro: Campus, co 1985. 103p, ISBN:85-7001-383-3 e APL - Uma linguagem de programao. Curitiba. ca CELEPAR, 1982. 222p). Depois vieram outros. Terminando o mestrado, rapidamente para no perder o flego, engatei o doutorado em engenharia eltrica. Ele se iniciou em a o e 1994 na UFSC em Florianpolis. S terminou em 2000, foram 6 anos inesquec o o veis, at e porque nesse meio tive que aprender o francs - mais um ms em Paris aprendendo-o. e e Finalmente virei engenheiro, 25 anos depois de ter iniciado a engenharia civil. Esqueci de dizer que no meio do curso de Civil desist (c pra ns o assunto era meio chato...) em a o favor de algo muito mais emocionante: matemtica. Nessa poca ainda no havia cursos a e a superiores de informtica. Formei-me em matemtica na PUC/Pr em 1981. Em 2003, a a 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 Brasilzo que sequer imaginava existirem (por a exemplo, Rondonpolis, Luizinia, Rio Grande, entre outros), sempre avaliando os curo a sos na rea de informtica: sistemas de informao, engenharia e cincia da computao. a a ca e ca Atualmente estou licenciado da PUC e no UNICENP respondo por 4 cadeiras: Algoritmos (1. ano de sistemas de informao), Estrutura de Dados (2.ano, idem) e Tpicos ca o Avanados em Sistemas de Informao (4.ano, idem), alm de Inteligncia Articial (lc ca e e u timo ano de Engenharia da Computao). J z um bocado de coisas na vida, mas acho ca a que um dos meus sonhos um dia ser professor de matemtica para crianas: tentar e a c despert-las para este mundo fantstico, do qual lastimavelmente boa parte delas a a nunca chega sequer perto ao longo de sua vida.
verso de 10 de fevereiro de 2008 a
25
26
Cap tulo 2
Cincia da Computao e ca
Programas de qualquer tamanho esto sujeitos a conterem bugs(erros). a Alguns deles acabam custando caro. Em 22/jul/62 um foguete foi lanado com a misso de chegar a Venus. Esta c a foi a primeira tentativa de explorar qualquer planeta. O foguete desviou-se do curso e foi destruido. Investigaes posteriores revelaram que o responsvel pelo problema foi um co a erro de programao dos computadores. Apesar de testes e depuraes exca co tensas, a omisso de um simples h a fen num dos comandos de um programa no foi detectada. Este erro causou a falha da misso inteira a um custo de a a US$ 18,5 milhes. Trecho do livro Software Testing Techniquesde Boris Beizer. o Se o construtores constru ssem edif cios da mesma forma que os programadores escrevem programas, o primeiro pica-pau poderia destruir a civilizao. Gerald Weinberg, citado por James Martin, em O manifesto. ca Se alguma coisa pode dar errada, dar errada. a
Lei de Murphy
2.1
Representao do conhecimento ca
Se olharmos a histria deste nosso pequeno planeta e abstrairmos a hiptese Teolgica o o o (j que cienticamente ela no tem comprovao) veremos uma histria mais ou menos a a ca o assim: 1. H uns 3.000.000.000 de anos, surgem os primeiros seres vivos, capazes de entre a outras coisas se reproduzirem por cpia de si mesmos. Aparece aqui o DNA o (cido desoxi-ribonucleico) o elemento comunicador da herana. Foi o primeiro e a c at hoje bem importante local onde se armazenou o conhecimento. e 2. Mais tarde, surge o sexo. Ele tem enorme importncia nesta histria ao permitir a o que os lhos herdem um poco do DNA do pai e um pouco da me, acelerando a a evoluo. ca 3. Um bocado de tempo depois, surgem os animais superiores e nestes o crebro e passa a ser responsvel pelo local onde o conhecimento produzido e armazenado. a e Denomina-se esta fase ` do conhecimento extragentico. a e 4. Enquanto limitado ao conhecimento localmente produzido, o crebro pode are mazenar pouco. O prximo estgio de ampliao quando surge a fala. Agora o a ca e o contedo de um crebro pode ser repassado a outro, com resultados melhores e u e crescentes. O nome conhecimento extrassomtico e a 27
CAP ITULO 2. CIENCIA DA COMPUTACAO 5. Com a fala, os dois sujeitos tem que estar tte-`-tte. A seguir, surge a escrita. e a e Agora a comunicao poss na modalidade um-muitos (Antes era um-um) e ca e vel mesmo um crebro morto pode se comunicar pela escrita. e 6. Enquanto a escrita manuscrita, est naturalmente limitada. A prxima novidade e a o a imprensa que ao automatizar a produo de textos, amplia signicativamente e ca o acesso e a disseminao de informaes. ca co 7. Finalmente, o ultimo estgio da ampliao do conhecimento reside no software. a ca Hoje, 23 milhes de brasileiros sabem declarar seu IR, sem precisar fazer um o exaustivo aprendizado sobre as regras da declarao, graas a um... software. O ca c nome inteligncia extrassomtica. e e a Durante o sculo XX a maior indstria foi a do petrleo. Depois, a do automvel e u o o e nalmente no nal do sculo, a indstria de computadores passou a ser a maior. A e u tendncia para o futuro de que ela suplante todas as demais. Hoje o homem mais rico e e do mundo construiu a sua fortuna vendendo um software. O computador nasce na cabea de um cientista ingls (Alan Matheson Turing em c e 1937) e constru para a guerra pelos ingleses em 1942. A seqncia de escopo do e do ue computador e guerra a idia aqui usar o computador como otimizador dos recursos blicos, cripe e e tograa, pesquisa operacional, tabelas bal sticas... aritmtica o computador se transforma em super-calculadora. A matemtica passa a e a ser a linguagem da informtica, por excelncia. O FORTRAN dessa poca... a e e e negcios em plena sociedade capitalista, os negcios passam a ser otimizados pelo o o computador. Dessa poca o COBOL a linguagem representante... e e aldeia global Negcios, governos, universidades e organizaes sociais passam a como co partilhar o ciberespao. Surge e se robustece a Internet... c lazer o computador vira um eletrodomstico. As casas de classe mdia passam a contar e e com um (ou mais de um) computador. Jogos, msica, lmes, e-mule, mp3, ... u ... realidade virtual No se sabe direito o que vir por aqui. As tcnicas de simulao a a e ca levadas ao paroxismo permitiro criar realidades virtuais, com toda a contradio a ca exposta no t tulo. Talvez retornemos ` dvida de Plato (o universo existe ou a u a e apenas uma sensao que eu tenho? ). ca O computador se diferencia de qualquer outra mquina pela sua generalidade. No a texto original de Turing isto ca claro pela conceituao de uma mquina universal. ca a Assim, diferentemente de um liquidicador (que s serve para picar comida e tem apeo nas um boto de liga-desliga), um computador precisa antes de qualquer coisa ser a programado para fazer algo. De fato, se comprar um computador vazio e lig-lo, ele no a a vai fazer nada. Tecnicamente, chama-se a parte f sica do computador de hardware signicando ferragem, duro (hard), componente f sico, etc. J a programao recebe o nome de a ca software signicando mole (soft em oposio a hard), componente lgico, no f ca o a sico, programa de computador. A fabricao de hardware engenharia. Sua produo pode ser planejada e otimizada ca e ca e isso de fato feito. A fabricao de software, a despeito de ser chamada de engenharia, e ca c entre ns, no o muito. Est mais para arte do que para engenharia. a o a e a
88-08, Pedro Kantek
28
CAP ITULO 2. CIENCIA DA COMPUTACAO Talvez, como seres humanos, devamos dar graas aos cus por esta situao. Pois enc e ca quanto a produo de hardware (ou pode ser) em grande parte robotizada, a produo ca e ca de software ainda exige um bom crebro cinzento por trs. e a As restries que ainda existem sobre o software e que talvez nunca deixem de existir, co impedem a programao dos computadores em linguagem natural. Hoje ainda no ca a e poss vel dialogar com um computador como se fala com uma pessoa medianamente inteligente. Os computadores ainda no conseguem tal proeza. a Para programar um computador necessitamos uma linguagem. O hardware s eno tende uma linguagem de pulsos eltricos (chamada de linguagem de mquina). Para e a facilitar a nossa vida (j que muito dicil para o homem programar nela), criaram-se a e programas tradutores que recebem comandos e dados em uma linguagem articial e a convertem em linguagem de mquina. A maioria desses tradutores recebeu o mesmo a 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 www.tiobe.com o tio ndice TPC que mensalmente lista as 100 linguagens mais usadas no mundo. Quando os primeiros computadores foram construidos, a unica linguagem por eles entendida era a binria. Seqncias interminveis de uns e zeros, algo assim como 0 0 1 a ue a 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 autntico e samba do crioulo doido. Chamou-se a isto, mais tarde, linguagem de primeira gerao. ca A seguir, o primeiro melhoramento: o assembler (ou montador), programa que era capaz de entender instrues escritas em uma linguagem um pouco mais humana, e co traduzir cada uma destas instrues em sua expresso binria equivalente. Junto com co a a este programa criou-se a primeira linguagem digna deste nome: o assembler, at hoje e usado, se bem que muito raramente. Programar em assembler ainda exige muito talento e pacincia. A mquina precisa e a ser conhecida em inmeros detalhes de construo, os programas so longos e dif u ca a ceis (principalmente sua manuteno). Entretanto esta a linguagem mais eciente do ca e ponto de vista dos consumo dos recursos da mquina, isto , ela gera programas velozes a e e pequenos. Depois, vieram as linguagens de terceira gerao: a primeira foi o FORTRAN, deca pois COBOL, PL/I, PASCAL, C, C++, Java, LISP, Prolog e outras menos votadas: BASIC, ADA, APL. H um distanciamento do programador em relao ` mquina, e a ca a a uma aproximao do mesmo em relao ao problema a resolver. Estas linguagens so ca ca a mais fceis de aprender e embora gerem programas maiores e mais lentos, aumentam a em muito a produtividade humana de escrever cdigo de programao. o ca Um exemplo diferente para mostrar todos estes conceitos de linguagens poderia ser o seguinte: Suponha um engenheiro brasileiro, que s conhece o idioma portugus. Ele o e precisa transmitir certas ordens de fabricao para um colega sovitico, que s conhece ca e o o idioma russo, com escrita cir lica. Os dois podem tentar conversar quanto quiserem, mas provavelmente no haver nenhum resultado prtico util. E necessria a presena a a a c de um tradutor, algum que ouvindo o portugus consiga transformar as ordens em e e suas equivalentes russas. Finalmente, o engenheiro brasileiro ver se as ordens foram a corretamente traduzidas e executadas analisando o resultado nal do trabalho. Neste exemplo, o engenheiro brasileiro o programador. O colega sovitico a e e e mquina (que ao invs de russo, s entende a linguagem eltrica). O tradutor a a e o e e linguagem de programao. ca Podemos ainda estabelecer dois n veis para linguagens de programao: baixo e alto. ca Linguagem de baixo n vel aquela que requer a especicao completa do problema e ca 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, pressupe uma traduo inteligente, o que libera o engeno ca
verso de 10 de fevereiro de 2008 a
29
CAP ITULO 2. CIENCIA DA COMPUTACAO 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 que rodam todas no a mesmo computador que constru usando a chamada Arquitetura de Von Neumann. e do Bem resumido, essa arquitetura prev a existncia da memria, de uma unidade arite e o mtico lgica, canais e o elemento ativo: a unidade de controle. Essa estrutura comporta e o os seguintes tipos de comandos (ordens): entrada-sa de dados, aritmtica, movimenda e taao em memria, condicional e desvio. c o Com apenas essas 5 ordens, so constru a dos todos os programas que existem ou que existiro em nosso mundo usando este tipo de computador. a Uma pergunta que se pode fazer aqui, se melhor aprender tudo de uma linguagem e e e se tornar um especialista nela, ou se melhor conhecer vrias, ainda que no chegando e a a a muita profundidade em nenhuma. No h resposta fcil, mas apostar todas as suas chas em uma unica pode ser a a a perigoso. A tecnologia tem substitu a linguagem da vez mais ou menos a cada 8, do 10 anos. Pior, ao se xar em uma linguagem, corre-se o risco de misturar questes do o problema (do algoritmo) com questes do programa (da linguagem). o Como na vida real, parece ser melhor buscar ser poliglota, ainda que obviamente haja uma linguagem preferida. Neste caso, todo o esforo deve ser no ncleo mais c u 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 semelhana entre seguir um programa de c computador e uma receita culinria, prepare um uxograma da seguinte receita: a Bolo de nozes da Dona Filustreca Ingredientes: 250g de chocolate em p, 250g de passas, 3 x o caras de aucar, meia x c cara de leite condensado, meia x cara de leo, 1 colher de ch de baunilha, 250g de manteiga e o a 1 colher de ch de sal. a Modo de fazer: ponha o leite, o leo, o aucar, o chocolate e o sal em uma panela e o c leve ao fogo, mexendo at a fervura. Reduza o fogo e continue a fervura at o ponto de e e caramelo. Retire do fogo e deixe esfriar por 10 min. Em seguida, bata com a manteiga e a baunilha at a mistura car homognea. Distribua as passas no fundo de uma forma grande e e untada de manteiga. Derrame a massa sobre as passas. Deixe esfriar por 10 minutos, corte em pedaos e o bolo est pronto para ser comido. c a Exerc cio 2 Seja agora um exemplo numrico. Eis aqui a seqncia de Fibonacci e ue
1, 1, 2, 3, 5, 8, 13, 21, 34, 55, ... Escreva um procedimento que informe a soma dos primeiros 1000 nmeros da seqncia de u ue Fibonacci. Fica claro por estes dois exemplos, que programar um computador emprestar ine teligncia ao computador. Ou seja, para programar a soluo de um problema, h que e ca a saber resolver esse problema. E, no apenas resolver em tese, mas descrever detalhadaa mente todas as etapas da soluo. ca De fato, a programao detalhista ao extremo. ca e Como se disse acima, o computador surge em 1937, descrito em um artigo denominado on a computable numbers. Este artigo era to indito que quase no publicado: a e a e faltavam revisores que o atestassem. O conceito matemtico de computador est l, a a a quase 10 anos de existir algo f sico que lembrasse o conceito.
88-08, Pedro Kantek
30
CAP ITULO 2. CIENCIA DA COMPUTACAO Ao mesmo tempo, o exrcito nazista alemo comea a usar um esquema criptogre a c a co muito inteligente atravs de uma mquina denominada ENIGMA, a qual, tinham e a eles certeza, era inexpugnvel. Mal sabiam que do outro lado do canal da Mancha esa tava Turing. Ele criou um computador, batizado COLOSSUS, que quebrava o cdigo o ENIGMA em poucas horas. Foi o primeiro computador constru pelo homem. O do ENIAC de que os americanos se gabam tanto, veio depois. No meio da guerra, Turing foi enviado aos Estados Unidos e l teve contacto com a Von Neumann. Este o autor da assim chamada arquitetura de Von Neumann, que a e e que usamos at hoje em qualquer computador. e
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 Aurlio, algoritmo Processo de clculo, ou de resoluo de um e e a ca grupo de problemas semelhantes, em que se estipula, com generalidade e sem restries, co regras formais para a obteno do resultado ou da soluo do problema. ca ca Algoritmo a idia que est por trs de um programa de computador. E a coisa e e a a 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 informtica, algoritmo a regra de soluo de um problema, a e ca isto , surgida uma necessidade buscar-se- uma soluo, ou construir-se- um algoritmo e a ca a capaz de solucionar o problema. J um programa de computador, (segundo Wirth) uma formulao concreta de a e ca algoritmos abstratos, baseados em representaes e estruturas espec co cas de dadose devidamente traduzido em uma linguagem de programao. ca Outra denio de algoritmo, esta dos autores Angelo Guimares e Newton Lages: ca a Algoritmo a descrio de um padro de comportamento, expressado em termos de e ca a um repertrio bem denido e nito de aes primitivas, das quais damos por certo o co 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 compreenso, em seus a dois aspectos, a quem chamaremos esttico e temporal. Na sua viso esttica, um a a a algoritmo um conjunto de ordens, condies, testes e vericaes. No seu aspecto e co co 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 no podem ser separadas, elas esto instrinsicamente ligadas. A a a diculdade em fazer bons algoritmos, ter em mente, enquanto se escreve o algoritmo e (aspecto esttico) o que ele vai fazer com seus dados (aspecto temporal). a Vamos exemplicar esta discusso, comentando sobre o algoritmo de soluo de uma a ca equao do segundo grau. ca Dada a equao Ax2 + Bx + C = 0, para encontrar as duas raizes, segundo a ca inesquec frmula de Bhaskara, procedemos da seguinte forma: vel o
Calculamos DELTA, que B ao quadrado, menos o produto de 4,A e C. e Se DELTA < 0, as raizes no existem no campo dos nmeros reais a u
verso de 10 de fevereiro de 2008 a
31
No seu aspecto dinmico, ter a amos que gerar uma srie de dados de entrada (triplas e A,B,C), seguir o algoritmo, e vericar se os resultados que ele gera so aqueles esperaa dos de antemo. a
Dado um problema, para o qual temos que escrever um algoritmo, usualmente no a h soluo unica. Quanto mais complexo o problema a resolver, maior a quantidade a ca de poss veis algoritmos corretos. Cada um certamente ter as suas qualidades e os seus a defeitos. Alguns so muito bons, e outros muito ruins, mas entre um e outro existem a inmeras variaes, que nem sempre so facilmente reconhecidas. u co a Pode-se dizer que um algoritmo um programa de computador do qual se faz a e abstrao da linguagem de programao. Neste sentido o algoritmo independe de qual ca ca ser sua implementao posterior. Quando pensamos em algoritmos, no nos preocua ca a pamos com a linguagem. Estamos querendo resolver o aspecto contedo. Mais tarde, u quando programarmos, a linguagem passa a ser importante, e agora a preocupao ca e com a forma.
2.2.1
Se um programa fcil de ler, ele provavelmente um bom programa; se e a e ele dif de ler, provavelmente ele no bom.(Kernighan e Plauger) e cil a e Clareza O algoritmo uma ferramenta de entendimento e soluo de um problema. e ca Deve portanto, ser o mais claro poss vel. Ao fazer o algoritmo seu autor deve se preocupar constantemente em se o que est pensando est vis no que est a a vel a escrevendo. Nunca sacricar clareza por ecincia; nunca sacricar clareza pela e oportunidade de revelar sua inteligncia.Jean Paul Tremblay. e Impessoalidade Nem sempre quem vai examinar, depurar, corrigir, alterar etc , um algoritmo seu autor. Portanto, nada de usar macetes, regras pessoais, nomes que e s tem sentido para o autor etc. Neste ponto de muita ajuda a existncia de um o e e bem organizado conjunto de normas de codicao e de elaborao de algoritmos ca ca para a organizao. As melhores e mais bem organizadas empresas de informtica ca a dedicam parcela signicativa de seus esforos a esta atividade. c Simplicidade Poucos programadores resistem ` tentao de elaborar uma genial sa a ca da para um problema. Nada contra isso, desde que essa sa no ra os princ da a pios de simplicidade que todo algoritmo deve procurar satisfazer. Nem sempre fcil e a fazer algoritmos descomplicados, principalmente porque em geral os problemas que enfrentamos no so simples. Transformar algo complicado em solues singelas, a a co parece ser a diferena entre programadores comuns e grandes programadores. c Reaproveitamento Existe inmera bibliograa sobre algoritmos. Grandes instalaes u co de informtica costumam criar o conceito de biblioteca de algoritmos. Muitos a softwares tambm esto partindo para esta sa e a da. O programador no deve se a esquecer nunca de que um algoritmo novo, custa muito caro para ser feito, e custa muito mais caro ainda para ser depurado. Se j existir um pronto e testado, tanto a melhor.
88-08, Pedro Kantek
32
CAP ITULO 2. CIENCIA DA COMPUTACAO Capricho Tenha sempre em mente que a principal funo de um algoritmo transmitir ca e a soluo de um problema a outrem. Desta maneira, um m ca nimo de capricho indispensvel a m de no assustar o leitor. Letra clara, identao correta, e a a ca nomes bem atribu dos, tudo isto em papel limpo e sem borres. Como o leitor j o a pode estar imaginando, esta caracter stica fundamental em provas, avaliaes e e co trabalhos. A primeira conseqncia prtica desta regra : faa seus algoritmos a ue a e c lpis. a Documentao Nem sempre o texto que descreve o algoritmo muito claro. Alm do ca e e que, ele informa o que feito, mas no porque feito, ou quando feito. Assim, o e a e e programador pode e deve lanar mo de comentrios sempre que sentir necessidade c a a de claricar um ponto. Bons comentrios no podem melhorar uma m codicao, mas maus a a a ca comentrios podem comprometer seriamente uma boa codicao. Jean a ca Paul Tremblay. Correo (ou integridade ou ainda robustez) Um algor ca tmo ntegro aquele onde e os clculos esto satisfatoriamente colocados, e atuam corretamente para todos a a os dados poss veis de entrada. No adianta um algoritmo sosticado e cheio de a estruturas de controle, se suas operaes aritmticas elementares no estiverem co e a corretas. E mais comum (e perigoso) o algoritmo que funciona em 95% dos casos, mas falha em 5% deles. Ecincia Esta caracter e stica tem a ver com economia de processamento, de memria, o de comandos, de variveis etc. Infelizmente, quase sempre uma caracter a e stica oposta ` da clareza e da simplicidade, sendo estas mais importantes do que a ea cincia. Entretanto, em alguns casos, (principalmente na programao real - dentro e ca das empresas), a ecincia pode ser fundamental. Neste caso, perde-se facilidade, e para se ter economia. O bom programador aquele que alia a simplicidade ao e mximo de ecincia poss a e vel. Generalidade Dentro do poss vel, um algoritmo deve ser o mais genrico que puder. e Isto signica que vale a pena um esforo no sentido de deixar nossos algoritmos cac pazes de resolver no apenas o problema proposto, mas toda a classe de problemas a semelhantes que aparecerem. Usualmente o esforo gasto para deixar um algoritmo c genrico pequeno em relao aos benef e e ca cios que se obtm desta preocupao. e ca Modularidade Algoritmos grandes dicilmente cam bons se usarmos uma abordagem linear. E praticamente imposs garantir clareza, impessoalidade, documentao vel ca etc, quando se resolve um algoritmo de cima a baixo. Uma conveniente diviso a em mdulos (isto , em sub-algoritmos), para que cada um possa ser resolvido a o e seu tempo. No podemos esquecer que a regra urea da programao estruturada a a ca dividir para conquistar. e Comentrios Permitem a agregao de informaes destinadas ao leitor humano do a ca co algoritmo. Seu contedo no levado em considerao na anlise da integridade e u a e ca a correo do algoritmo. Tem nalidade apenas explicativa e informativa. Mas isso no ca a signica que eles sejam desprez veis. Pelo contrrio, comentrios so importantes em a a a algoritmos de um modo geral. Os comentrios so delimitados por um abre-chave({) e um fecha-chave(}). Eles a a podem ser colocados em qualquer ponto do algoritmo e tudo o que estiver entre chaves desconsiderado no momento de seguir o algoritmo. e Exemplo {Isto um comentrio} e a
verso de 10 de fevereiro de 2008 a
33
CAP ITULO 2. CIENCIA DA COMPUTACAO H dois tipos de comentrios aqui: aqueles encerrados entre chaves e aqueles colocaa a dos depois de uma dupla barra. {Isto um comentrio, que s ser encerrado quando se encontrar e a o a o fecha chave, ainda que ele ocupe mais de uma linha } // isto tambm um comentrio, desde a dupla barra at o fim da linha e e a e
2.2.2
A questo agora : como se escreve um algoritmo? Usando uma ferramenta adequada a e para comunicar algum tipo de computao que o algoritmo execute. Qualquer linguagem ca poderia ser adequada, mas melhor inventar uma sublinguagem derivada do portugus e e (ou do ingls em livros nesse idioma) que ajude a treinar o pensamento criativo em e algoritmos. A idia que a ferramenta ajude a fazer a tarefa. Por analogia, experimente aparae e fusar algo pequeno usando um p de cabra. e O nome da sublinguagem que usaremos portugus estruturado, tambm conhecida e e e como portugol.
2.3
Portugol
Figura 2.2: Como se entender com ele ? Como vimos, portugus estruturado uma linguagem inventada aqui para simplicar e e a tarefa de aprender a construir, depurar e documentar algoritmos estruturados. Existem inmeras verses, cada professor de lgica tem a sua. E importante salientar que a u o o
88-08, Pedro Kantek
34
CAP ITULO 2. CIENCIA DA COMPUTACAO s ntaxe e a construao de portugus estruturado so arbitrados por algum, segundo c e a e seus critrios, mas uma vez estabelecido um padro, pele precisa ser seguido. e a Esta restrio tem duas vertentes. A primeira, que h que haver um m ca e a nimo de concordncia para que outras pessoas possam ler e entender o que escrevemos. A a segunda, que uma das principais caracter e sticas do bom programador a disciplina e intelectual. Nada mais apropriado que comearmos a exercitar esta dif qualidade c cil desde j. a Por que PORTUGOL e no PORTUGUES ? Portugus (como qualquer idioma a e natural) tem inmeras desvantagens: u
No entendido pela mquina (exige traduo complex a e a ca ssima)
E amb guo E muito extenso Vejamos por exemplo, uma orientao extra do manual de organizao de uma Emca da ca presa. O funcionrio far jus ao PREMIO PRODUTIVIDADE se estiver trabala a hando h mais de 6 meses da poca de distribuio (fevereiro de cada ano), e a e ca trabalhar na rea de vendas, ou ento se tiver sido especialmente citado como a a tendo tido alta produtividade. Perdem o direito, funcionrios que tiverem a mais de 2 faltas e mais de 5 atrasos, ou que tiverem fruido licena sade do c u INSS no per odo aquisitivo. Parece claro, no ? Agora tentemos responder: a e
Joo tem 3 meses de casa e foi citado como de alta produtividade. Ganha ou a no? a Maria teve 3 faltas. Perde ou no ? a
Outro exemplo, minha tia tem uma gatinha e ela muito bonita. Quem bonita, e e a tia ou a gatinha ? O linguajar acima, no adequado para expressarmos algoritmos pois inexato, a e e dbio, e deixa muita margem de interpretao, usa verbos e comandos proibidos, isto u ca , que o computador no saber executar. Devemos lembrar sempre que a margem de e a a interpretao do computador, qualquer computador, sempre ZERO, e os computadores ca e tem a pssima mania de fazer o que mandamos eles fazerem, e no o que queremos que e a eles faam. c Por que PORTUGOL e no uma linguagem qualquer como Java? ou qualquer a outra linguagem de programao? ca Uma linguagem de programao, ainda que de alto n ca vel, caso do Java, exige um conhecimento da mquina que ainda no temos. Tambm importante salientar que a a e e idealmente falando, no boa pol a e tica enfrentar dois problemas interligados ao mesmo tempo. Isto , no convm misturar diculdades de lgica, (advindas do problema que e a e o se quer resolver) com diculdades da linguagem (advindas do ambiente tecnolgico onde o o programa vai rodar), pois ambas somadas podem ser demais para a cabea do autor. c J dizia Dijkstra deve-se reconhecer que tem-se uma cabea pequena, e que melhor a c e tratar de conviver com ela e respeitar suas limitaes. Aproveitando a citao, mais co ca de uma do mesmo autor: A regra urea da programao estruturada dividir para a ca e reinar.
verso de 10 de fevereiro de 2008 a
35
CAP ITULO 2. CIENCIA DA COMPUTACAO Os programas em PORTUGOL vo deixar de lado inmeras chateaes, (que so a u co a imprescind veis para o programa rodar em um computador real) tais como: instrues co de ambientao na compilao de programas, descries de operaes de entrada/sa ca ca co co da complexas, pouca ou nenhuma preparao de controles etc. ca E claro, que anexo a esta disciplina, existe outra de laboratrio de programao, o ca onde vai se aprender o Java. Nessa hora, os algoritmos j devem estar consolidados, e a a preocupao passa a ser a mquina e seu ambiente. Na nossa cadeira de algoritmos, ca a devemos esquecer a mquina e nos concentramos no problema e na sua soluo. a ca Portugus estruturado Cada autor tem a sua viso do que seja o ideal em termos e a de linguagem de especicao de algoritmos. Veja, por exemplo, o quadro ca
O que um computador entende Baseado na arquitetura de Von Neumann, (um processador, uma unidade de controle, uma ULA, memria e registradores), todo computador constru neste paradigma o do e capaz de obedecer, l no n mais baixo, a um pequeno conjunto de ordens. Note-se a vel como ele restrito. e Entrada/Sa da Este tipo de ordem, para orientar o computador no sentido de e adquirir um dado externo (entrada), ou para divulgar alguma coisa que ele calculou (sa da). Aritmtica Estas ordens so similares aquelas que aprendemos no primeiro grau, e e a destinam-se a informar ao computador como ele deve efetuar algum clculo. Esa tas ordens so: adio, subtrao, multiplicao, diviso, potenciao, funes a ca ca ca a ca co trigonomtricas etc. No se esquea que a linguagem universal dos computadores e a c
88-08, Pedro Kantek
36
CAP ITULO 2. CIENCIA DA COMPUTACAO a matemtica. Escrever um programa de computador correto como demonstrar e a e um teorema. Alternativa E talvez a ordem mais importante no universo da computao. E ela que ca d ao computador condies de ser inteligente e decidir qual de dois caminhos a co deve se seguido. Sempre tem a forma de uma pergunta, seguida por duas ordens distintas. Se a pergunta for respondida armativamente, a primeira ordem ser a executada, e se a pergunta for negada, a segunda ordem ser executada. a Desvio Esta ordem para dar ao computador habilidade de saltar algumas ordens e e executar outras. Um programa de computador nem sempre obrigado a seguir as e instrues seqencialmente comeando no comeo e terminando no m. O desvio co u c c e potencialmente perigoso quando usado sem critrio, e por isso veremos em seguida e que uma das regras da programao estruturada o estabelecimento de r ca e gidos controles sobre os desvios. Movimentao na memria Embora parea estranho, esta ordem mais comum em ca o c e um programa. Considerando o tamanho das memrias de computador e a quano tidade de coisas que so l colocadas, imprescind que os programas tenham a a e vel a habilidade de manusear todas estas coisas. Fazendo uma gura de linguagem, suponha que a memria do computador um grande supermercado. Se os artigos o e no puderem se mexer de lugar, bem poucas coisas acontecero. a a Outra observao, que o verbo mover, quando usado em manipulaes dentro ca e co da memria usado por razes histricas, e certamente contm um equ o e o o e voco. O correto seria usar o verbo copiar, j que quando um contedo levado de um a u e lado a outro, sua instncia anterior no desaparece. Usa-se aqui uma regra jocosa, a a mas que sempre verdadeira. computador no usa apagador. e a ciclo de vida Qual a histria de vida de um programa de computador ? Isto como nasce, cresce e o e morre um programa ? Grosso modo, pode se dizer que as principais etapas so: a
estudo do problema: Espera-se que haja algum problema ou diculdade esperando e ser resolvido pelo programa de computador. E pr-requisito antes de tentar a soluo de qualquer questo, estud-la, compreender o entorno, as limitaes, os ca a a co balizadores, os recursos dispon veis. Uma boa maneira de estudar e compreender um problema fazer hipteses, estudar comportamentos, projetar simulaes. S e o co o se pode passar adiante se boa parte do entorno do problema for entendida. Note-se que nem sempre poss aguardar at ter 100% do conhecimento antes de seguir e vel e ` adiante. As vezes no d tempo, mas o percalo principal nem esse: que muitas a a c e e vezes o conhecimento no existe e s vai aparecer quando se cutucar o problema. a o Como se diz em espanhol los caminos se hacen al caminar. Quando isto ocorrer, e ocorre muitas vezes, no tem jeito: anda-se para frente e para trs, e a cada a a passada o conhecimento maior. e bolar ou procurar o algoritmo. Agora hora de converter a soluo encontrada e ca em algo prximo a um algoritmo. Isto , algo formal, com condies iniciais, reo e co sultado nal, e manipulaes entre o que entra e o que sai. Usam-se os comandos co permitidos em algoritmos e s estes. Usualmente, h aqui o que se chama de aproo a fundamento interativo. Comea-se com uma declarao genrica que vai sendo c ca e detalhada e especicada at chegar ao n e vel bsico, no qual os comandos algoa r tmicos (entrada/sa da, aritmticos, alternativos, movimentao e de repetio) e ca ca
verso de 10 de fevereiro de 2008 a
37
CAP ITULO 2. CIENCIA DA COMPUTACAO podem ser usados. Note que pode-se copiar ou aproveitar um algoritmo j exisa tente. Entretanto este re-uso dicilmente imediato. Sempre h que estudar e e a eventualmente modicar um algoritmo j existente, a menos que quando este foi a feito seu autor j tinha a preocupao com o reuso. a ca transcrever em LP. E hora de escolher um computador, um ambiente operacional e sobretudo uma linguagem de programao que esteja dispon e seja conhecida. ca vel Dessas 3 opes (computador, ambiente e linguagem) surge a plataforma denitiva: co agora poss escrever, testar, depurar e implementar o programa de computae vel dor.
depurar. Usualmente h uma seqncia de testes: a ue
compilao correta: nenhum erro apresentado pelo compilador ca testes imediatos sem erro: testes ad hoc para este programa (e s para ele) o do os resultados esperados. a teste alfa: um esforo completo de testes, inclusive integrando este programa c aos seus antecessores e sucessores. Usualmente o teste feito pelo(s) autor(es) e do programa. teste beta: um teste completo feito por terceiros. H uma regra aqui de que a quem faz (programador) no deve ser quem testa (testador). a
implementar e rodar. Com o programa testado e liberado hora de rod-lo em e a produo. Nesta hora ocorre o que tem sido chamado de deploy (dizem as ms ca a l nguas que sempre associado a seu irmo gmeo, o delay). Dependendo do porte a e da instalao e do sistema, `s vezes esta passagem complexa e trabalhosa. ca a e manuteno. Seria muito bom se a histria acabasse na etapa anterior. No o ca o a e que ocorre, j que o mundo muda e os programas precisam mudar com ele. Se a a manuteno pequena, usualmente pode-se faz-la sem muito transtorno, mas ca e e caso no seja, este ciclo recomea. Note-se que aps algumas manutenes grandes a c o co o programa comea a dar mostrar de instabilidade a popular colcha de retalhos c e hora de comear tudo de novo, na nova verso do programa. e c a
Como se aprende algoritmos? No fcil aprender algoritmos. No que tm de engenharia, mais fcil. H frmulas, a e a e e a a o procedimentos, prticas consagradas prontas a serem usadas. Mas, no que so arte, tais a a receitas desaparecem. E mais ou menos como tentar ensinar algum a desenhar (outra e arte) ou a compor msica (outra ainda). u Olhando como se aprende a desenhar, poss e 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 indicaes co
Estudando algoritmos prontos. Pegue bons livros de algoritmos, e estude as implementaes que l aparecem. Transcreva tais algoritmos em um simulador (tipo co a visualg) ou mesmo em uma linguagem de programao. Execute os algoritmos. ca Busque entender o que cada parte do mesmo faz. Sugira hipteses sobre o funo cionamento e provoque pequenas mudanas no cdigo para conrmar (ou rejeitar) c o suas hipteses. o Tenha intimidade com algum ambiente de compilao e testes. Esta proposta ca importante para poder testar algoritmos. Se car embatucado diante de uma e simples implementao, voc ter grandes diculdades de escrever algoritmos. ca e a
88-08, Pedro Kantek
38
2.4
Programao Estruturada ca
O termo programao estruturada veio ` luz pela primeira vez, nos ns da dcada ca a e de 60, quando Edsger Dijkstra (L-se como Dikster ) escreveu um artigo, publicado e em Communications of the ACM, cujo t tulo O comando GO TO prejudicial. e e Viv amos a poca de ouro do COBOL, e o comando GO TO a instruo de desvio desta e e ca linguagem. Dijkstra observou que a qualidade dos programadores decai em funo do ca nmero de GO TOs usados em seus programas. Segundo ele, Comandos GO TO tendem u a criar caminhos de lgica confusos e programas pouco claros. A sua recomendao foi o ca de que o comando em questo fosse banido das linguagens de alto n a vel. Nessa poca tambm (1966) dois professores italianos, Giuseppi Jacopini e Core e rado Bohm, provaram matematicamente que qualquer lgica de programao poderia o ca ser derivada de trs tipos bsicos de procedimentos, a saber: seqncia, alternativa e e a ue repetio. ca Chegou-se ento ao mago da programao estruturada, que trocar a instruo a a ca e ca de desvio pelas instrues de repetio. Ao fazer isto, todos os componentes de um co ca programa passam a ter uma entrada e sa unicas. Atente-se que ao usar uma instruo da ca de desvio, essa regra de uma entrada e uma sa violada: o conjunto passa a ter no da e m nimo duas sa das. Sequncia simples Trata-se de um conjunto de comandos simples, que seguem um e ao outro e que so executados na ordem em que aparecem. Exemplo a A 10 BA + 5 X1 + 2 Dentro de uma seqncia simples de comandos a entrada sempre pelo primeiro coue e mando e a sa sempre pelo ultimo. Graas ao princ da e c pio da programao estruturada ca (uma entrada e uma sa da), uma seqncia simples pode ser substitu por um bloco ue da com entrada e sa unicas. da Alternativa E um comando que permite dois caminhos alternativos, da o nome, a depender de alguma condio. Na matemtica convencional isto j existe, por exemplo ca a a na frmula de Bhaskhara. No momento de calcular a raiz quadrada de , h que se o a tomar uma deciso. Se < 0 os clculos cessam e a resposta de ra imaginrias deve a a zes a ser dada. Se 0, a raiz pode ser extra e um ou dois valores de ra da zes emergem. O ponto importante aqui que em algum lugar os dois ramos se juntam novamente, e e a regra de ouro da programao estruturada (entrada unica e sa unica tambm) ca da e continua verdadeira. Tal como na seqncia, um comando alternativo, por mais complexo que seja, pode ue ser substitu por unica caixa. do
verso de 10 de fevereiro de 2008 a
39
CAP ITULO 2. CIENCIA DA COMPUTACAO Repetio O terceiro bloco da programao estruturada a resposta ` necessidade ca ca e a de usar o comando de desvio. Perceba-se que aqui existe um desvio impl cito, j que ao a se terminar o bloco, h que se desviar para o in do mesmo, que o que caracteriza a cio e uma repetio. A restrio a obedecer no a ausncia de desvio de resto, imposs ca ca a e e vel de obedecer mas sim a regra da entrada e sa unicas. Em outras palavras no da a e proibido usar o desvio, desde que ele esteja contido em limites bem determinados. Tal como na seqncia e na alternativa, um comando de repetio, por maior ou ue ca mais complexo que seja, pode ser substitu por unica caixa. do A importncia desta descoberta para o software teve tanto impacto quanto a de que a qualquer forma lgica de hardware pode ser construida pelas combinaes de portas o co AND, OR e NOT. A grande vantagem dos trs elementos da programao estruturada que possuem e ca e a caracter stica de pacote ou caixa preta, uma vez que todos tem uma unica entrada e uma unica sa da. Isto signica que partes de programas construidos com estas estruturas podem ser tambm considerados pacotes, sempre com entradas e saidas unicas. Esta a e e melhor qualidade da programao estruturada, e por esta caracter ca e stica que o GOTO deve ser desprezado na construo de bons algoritmos. Tanto isto verdadeiro, que as ca e linguagens mais modernas, no tem mais a instruo de desvio, banida por perniciosa e a ca desnecessria. a
2.5
A mquina de Turing a
Embora a humanidade use o conceito de algoritmo h milnios (O de MDC devido a a e e Euclides), e o prprio nome algoritmo derive do autor rabe de um tratado de lgebra o a a escrito por volta de 800 dC, a denio precisa do que seja um algoritmo geral apenas ca e de 1930. Ela devida a Turing, atravs do seu conceito de Mquina de Turing. Esta e e a no uma mquina real, sendo apenas uma abstrao matemtica, da o seu poder de a e a ca a encanto. Em 1900, o matemtico alemo Hilbert apresentou em um congresso uma lista de a a problemas que segundo ele estariam ocupando as mentes matemticas no sculo que a e ora se iniciava. O dcimo problema de Hilbert, dizia: ...haver algum procedie a mento mecnico geral que possa em princ a pio resolver todos os problemas da matemtica ? 1 a Em 1937, Turing respondeu a esta pergunta atravs do conceito de Mquina de e a Turing. Ela composta por um nmero nito de estados, ainda que possa ser muito e u grande. Deve tratar um input innito. Tem um espao exterior de armazenagem tambm c e innito. Turing imaginou o espao exterior para dados e armazenamento como sendo c uma ta, que pode mover-se para frente e para trs. Alm disso a mquina pode ler a e a e escrever nesta ta. A ta est composta por quadrados (ou seja, o nosso ambiente a discreto). Apenas 2 s e mbolos podem ser escritos nos quadrados da ta, digamos 0 signicando quadrado em branco e 1 (quadrado preenchido), ou vice-versa. Isto posto, lembremos que: 1. os estados internos do aparelho so nitos em nmero a u 2. o comportamento da mquina totalmente determinado pelo seu estado interior a e 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 coecients: to devise a process according to which it can be determined by a nite number of operations whether the equation is solvable in rational integers
40
CAP ITULO 2. CIENCIA DA COMPUTACAO 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.
Denio de uma mquina de Turing Para especicarmos nossa mquina de Turca a a ing, 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 denio acima, adequada para a tarefa de numerao das Mquinas de Turca e ca a ing, fenmeno esse que central na teoria. Entretanto, para operar com esta mquina, o e a 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 mquinas de Turing Para ver isso funcionando, precisa-se numerar as a mquinas de Turing. Necessita-se um pouco de esperteza aqui. Primeiro, converte-se D, a E, PARE, e v rgula como os nmeros 2, 3, 4, 5 e 6. Ou usando um sistema unrio, u a 110, 1110, 11110, 111110 e 1111110. Zero ser 0, e 1 ser 10, como j se viu. As colunas a a a 4 e 5 nas tabelas no precisam separao, j que o contedo da coluna 5 apenas 1 ou a ca a u e zero e sempre ocupa 1 caracter. Pode-se dar ao luxo de no codicar nenhuma seta, nem nada do que as antecede a (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 no seriam escritas a por nunca ocorrerem na mquina). a Fazendo tudo isso, e escrevendo toda a programao da mquina que soma 1 a um ca a nmero unrio, ela ca: u a 101011011010010110101001110100101101011110100001110100101011 10100010111010100011010010110110101010101101010101101010100. Convertendo este nmero binrio para decimal chegamos a 450813704461563958982113775643437908 u a O que signica que a mquina que soma 1 em unrio a 450.813.704.461.563.958.982.113.775.643.437.908a a a e
2 um fenmeno deterministico quando gera sempre o mesmo resultado a partir das mesmas condies o e co iniciais. Por exemplo, soltar um corpo em queda livre. Ao contrrio um fenmeno probabil a o stico (ou randmico ou estocstico) o fenmeno no qual dadas as mesmas condies iniciais o resultado o a e o co e imprevis vel. Por exemplo, lanar um dado c
41
CAP ITULO 2. CIENCIA DA COMPUTACAO mquina de Turing. Naturalmente, mudando-se (otimizando-se) alguma coisa na proa gramao, esta mquina muda de nmero. ca a u A mquina que soma 1 em unrio a 177.642a mquina. A que multiplica 2 em a a e a binrio expandido 10.389.728.107a mquina e a que multiplica por 2 um nmero unrio a e a u a a 1.492.923.420.919.872.026.917.547.669 a mquina. e a E assim vai. A T7 , no corretamente especicada, j que existem uma seqncia e a a ue de 5 uns, e ela emperra ao processar tal seqncia. ue Mquina Universal de Turing Teremos uma mquina U, que antes de mais nada a a ler as informaes na ta de entrada para que ela passe a se comportar como a mquina a co a T. Depois disso vem os dados de input que seriam processados pela mquina T, mas que a sero pela U, operando como se fosse a T. a Dizendo que quando a n-sima mquina de Turing atua sobre o nmero m produz e a u o nmero p, podemos escrever Tn (m) = p. Podemos pensar nesta relao como sendo u ca uma funo de 2 parmetros (n e m) que leva a p. Esta funo, pelo que vimos ca a ca e totalmente algoritmica. Logo, ela pode ser realizada por uma mquina de Turing, a a quem chamaremos de U . Ento, fornecendo o par (n, m) a U , obtemos como resposta a p. Podemos escrever U (n, m) = Tn (m) A mquina U quando alimentada primeiro com o nmero n, passa a se comportar a u como a Tn Como U uma mquina de Turing, ela uma Talgumacoisa . Quanto essa alguma e a e e coisa ? E mais ou menos 7.24 101688 , ou seja o nmero 724 seguido de 1686 zeros. u Todos os computadores modernos, desde um humilde Z80 at um Cray multi-vetorial e so mquinas de Turing. a a Acabamos de ser apresentados a um moderno computador: em U (n, m) = p, U o e hardware, n o software (ou programa), m so os dados de entrada e nalmente p o e a e resultado esperado. Para efeito de entender a MT, pode-se desenhar algo como segue: Usar como modelo a MT que multiplica por 2 em unrio Construir o modelo acima no quadro e depois a testar as sequencias 000010000, 00001100000 e 00001110000. Todas vo funcionar. a
2.6
2.6.1
Linguagens de programao ca
Assembler
O assembler no uma linguagem de alto nivel. E apenas um tradutor de cdigos a e o e portanto est muito prximo da linguagem de mquina. Utiliz-lo um autntico a o a a e e calvrio, j que todas as operaes que o computador precisa realizar cam por conta a a co do programador. A produtividade muito baixa, e a unica vantagem que se consegue e e a ecincia: os programas voam. e Por outro lado, tamanha aderncia `s entranhas da mquina cobra seu preo: na e a a c mudana de plataforma tecnolgica um monte de coisas precisa ser reestudado e recic o clado. No uma boa idia programar prossionalmente em assembler. Mas, quem domina a e e esta tcnica, bastante valorizado no mercado. Mesmo que trabalhando em outras e e linguagens, quem conhece o assembler, conhece o interior da mquina. Sem dvida a u 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
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
Fortran
Fortran uma linguagem muito antiga, originalmente sugerida pela IBM na dcada de e e 50. Seu texto se assemelha a uma descrio matemtica e de fato, FORTRAN signica ca a
verso de 10 de fevereiro de 2008 a
43
CAP ITULO 2. CIENCIA DA COMPUTACAO FORmula TRANslation. E, ou pelo menos era, uma linguagem franciscana de to pobre a em recursos. Foi a unica linguagem ensinada em escolas de engenharia at a dcada de e e 80. O primeiro compilador de FORTRAN foi desenvolvido para o IBM 704 em 1954-57 por uma equipe da IBM cheada por John W. Backus. A incluso de um tipo de dados de nmero complexo na linguagem tornou a lina u guagem Fortran particularmente apta para a computao cient ca ca. As principais reviso so a Fortran 66, 77, 90 e 95. A mais famosa e usada a a a e Fortran 90. Sua principal vantagem a ecincia em calculo numrico pesado. e e e 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~o de 2o.grau" ca 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
2.6.3
Lisp
LISP a segunda linguagem de alto nivel mais antiga. e O LISP nasce como lho da comunidade de Inteligncia Articial. Na origem, 4 e grupos de pessoas se inseriram na comunidade de IA: os lingistas (na busca de um u tradutor universal), os psiclogos (na tentativa de entender e estudar processos cerebrais o humanos), matemticos (a mecanizao de aspectos da matemtica, por exemplo a a ca a demonstrao de teoremas) e os informticos (que buscavam expandir os limites da ca a cincia). e
88-08, Pedro Kantek
44
CAP ITULO 2. CIENCIA DA COMPUTACAO O marco inicial o encontro no Dartmouth College em 1956, que trouxe duas e conseqncias importantes: a atribuio do nome IA e a possibilidade dos diferentes ue ca pesquisadores se conhecerem e terem suas pesquisas beneciadas por uma interfecundaao intelectual. c A primeira constatao foi a de que linguagens existentes privilegiavam dados numrica e cos na forma de arrays. Assim, a busca foi a criao de ambientes que processassem ca s mbolos na forma de listas. A primeira proposta foi IPL (Information Processing Language I, por Newel e Simon em 1956). Era um assemblo com suporte a listas. A IBM a engajou-se no esforo, mas tendo gasto muito no projeto FORTRAN decidiu agregar-lhe c capacidade de listas, ao invs de criar nova linguagem. Nasceu a FLPL (Fortran List e Processing Language). Em 1958, McCarthy comeou a pesquisar requisitos para uma linguagem simblica. c o Foram eles: recurso, expresses condicionais, alocao dinmica de listas, desalocao a o ca a ca automtica. O FORTRAN no tinha a menor possibilidade de atend-las e assim Mca a e Carthy junto com M. Minsky desenvolveu o LISP. Buscava-se uma funo Lisp Universal ca (como uma mquina de Turing Universal). A primeira verso (chamada LISP pura) era a a completamente funcional. Mais tarde, LISP foi sofrendo modicaes e melhoramenco tos visando eliminar inecincias e diculdades de uso. Acabou por se tornar uma e linguagem 100% adequada a qualquer tipo de resoluo de problema. Por exemplo, o ca editor EMACS que um padro no mundo UNIX est feito em LISP. e a a Inmeros dialetos LISP apareceram, cada um queria apresentar a sua verso como u a sendo a melhor. Por exemplo, FranzLisp, ZetaLisp, LeLisp, MacLisp, Interlisp, Scheme, T, Nil, Xlisp, Autolisp etc. Finalmente, como maneira de facilitar a comunicao entre ca todos estes (e outros) ambientes, trabalhou-se na criao de um padro que foi denomca a inado Common Lisp. Como resultado o Common Lisp cou grande e um tanto quanto heterogneo, mas ele herda as melhores prticas de cada um de seus antecessores. e a Seja agora um exemplo de uma funo lisp: ca > (defun li (L1 L2) ; pergunta se duas listas s~o iguais a (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 abreviao de PROgrammation LOGique. Foi criada em meados de 1972 por Alain ca Colmerauer e Philippe Roussel, baseados no conceito de Robert Kowalski da interpretaao procedimental das clusulas de Horn. A motivao para isso veio em parte da c a ca vontade de reconciliar o uso da lgica como uma linguagem declarativa de representao o ca do conhecimento com a representao procedimental do conhecimento. ca *Histrico o
Precursores: Newell, Shaw e Simon, com sua Logic Theory Machine, que buscava a prova automtica de teoremas, em 1956. a Robinson, 65, no artigo A machine oriented logic based on the resolution principle. Propunha o uso da frmula clausal, do uso de resoluo e principalmente do o ca algoritmo de unicao. ca
verso de 10 de fevereiro de 2008 a
45
Limitou a expressividade `s clusulas de Horn a a Criou uma estratgia de resoluo, no completa, mas muito eciente e ca a
Em 72, em Edinbourg e Marselha, surgiu a linguagem PROLOG. Em 77, Waren escreve o primeiro compilador de PROLOG. Comea o sucesso de c PROLOG na Europa. Nos EUA, sempre deu-se maior ateno ao LISP. ca Foi a base para o computador de 5a gerao do Japo. ca a
A seguir, um pequeno trecho de uma sesso PROLOG: a 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) X=jorge Y=cris
2.6.5
Cobol
O nome vem da sigla de COmmon Business Oriented Language (Linguagem Comum Orientada aos Negcios), que dene seu objetivo principal em sistemas comerciais, o nanceiros e administrativos para empresas e governos. O COBOL foi criado em 1959 pelo Comit de Curto Prazo, um dos trs comits proe e e postos numa reunio no Pentgono em Maio de 1959, organizado por Charles Phillips a a
88-08, Pedro Kantek
46
CAP ITULO 2. CIENCIA DA COMPUTACAO do Departamento de Defesa dos Estados Unidos. O Comit de Curto Prazo foi fore mado para recomendar as diretrizes de uma linguagem para negcios. Foi constitu o do por membros representantes de seis fabricantes de computadores e trs rgos govere o a namentais, a saber: Burroughs Corporation, IBM, Minneapolis-Honeywell (Honeywell Labs), RCA, Sperry Rand, e Sylvania Electric Products, e a Fora Area dos Estados c e Unidos, o David Taylor Model Basin e a Agncia Nacional de Padres (National Bureau e o of Standards ou NBS). Este comit foi presidido por um membro do NBS. Um comit de e e Mdio Prazo e outro de Longo Prazo foram tambm propostos na reunio do Pentgono. e e a a Entretanto, embora tenha sido formado, o Comit de Mdio Prazo nunca chegou a fune e cionar; e o Comit de Longo Prazo nem chegou a ser formado. Por m, um subcomit e e do Comit de Curto Prazo desenvolveu as especicaes da linguagem COBOL. e co As especicaes foram aprovadas pelo Comit de Curto Prazo. A partir da foram co e aprovadas pelo Comit Executivo em Janeiro de 1960, e enviadas ` grca do governo, e a a 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 denido na especicao original, possuia excelentes capacidades de ca autodocumentao, bons mtodos de manuseio de arquivos, e excepcional modelagem de ca e dados para a poca, graas ao uso da clusula PICTURE para especicaes detalhadas e c a co de campos. Entretanto, segundo os padres modernos de denio de linguagens de o ca programao, tinha srias decincias, notadamente sintaxe prolixa e falta de suporte da ca e e variveis locais, recorrncia, alocao dinmica de memria e programao estruturada. a e ca a o ca A falta de suporte ` linguagem orientada a objeto compreens a e vel, j que o conceito era a desconhecido naquela poca. Segue o esqueleto de um programa fonte COBOL. e IDENTIFICATION DIVISION. PROGRAM-ID. HELLO-WORLD. * ENVIRONMENT DIVISION. * DATA DIVISION. * PROCEDURE DIVISION. PARA-1. DISPLAY "Al^, Mundo.". o * STOP RUN.
2.6.6
APL
Ela nasceu do trabalho de um professor de matemtica canadense de nome Keneth a Iverson. Sua proposta original era a de produzir uma nova notao matemtica, menos ca a sujeita `s ambigidades da notao convencional. a u ca Na dcada de 60, trabalhando na IBM em conjunto com Adin Falco, ambos produzie ram a primeira verso de APL, quando um interpretador da linguagem cou dispon a vel. A principal caracter stica de APL o uso de um conjunto especial de caracteres que e incluem algumas letras gregas (rho, iota...), s mbolos matemticos convencionais (o sinal a de vezes, o de dividido...) e alguns s mbolos especialmente inventados. Este fato sempre limitou a disseminao da linguagem. At o advento das interfaces ca e grcas, como o windows, por exemplo, exigia-se um hardware especial para poder a programar em APL. Programas em APL em geral sempre so muito pequenos, embora poderosos. A a linguagem est preparada para tratar arranjos de grandes dimenses. Por exemplo, a o quando em APL se escreve A+B, se A e B forem escalares (isto um nmero unico), e u
verso de 10 de fevereiro de 2008 a
47
CAP ITULO 2. CIENCIA DA COMPUTACAO a resposta tambm o ser. Se A e B so vetores de 100 nmeros, a resposta tambm o e a a u e ser. Idem para matrizes e at arrays-nd. Em algumas verses de APL este n chega a a e o 256 dimenses. o Este um comando EDIT (troca algo, de... para...) e
2.6.7
Basic
A linguagem BASIC (acrnimo para Beginners All-purpose Symbolic Instruction Code), o foi criada, com ns didticos, pelos professores John G. Kemeny e T. Kurtz em 1963 no a Dartmouth College. BASIC tambm o nome genrico dado a uma grande fam de linguagens de e e e lia programao derivadas do Basic original. Provavelmente existem mais variaes de ca co Basic do que de qualquer outra linguagem de programao. ca Basic uma linguagem imperativa de alto n e vel, pertencente ` terceira gerao, que a ca normalmente interpretada e, originalmente, no estruturada, por ter sido fortemente e a baseada em FORTRAN II. Um programa em Basic tradicional tem suas linhas numeradas, sendo que quase que e padro usar nmeros de 10 em 10 (o que facilita a colocao de linhas intermedirias). a u ca a Os comandos so poucos, simples e facilmente compreens a veis na l ngua inglesa (LET, IF, ...). Um programa em Basic, que calcula a frmula de Bhaskara caria como: o 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<0 THEN GOTO 430 PRINT "SOLUCAO" IF D=0 THEN GOTO 100 PRINT "PRIMEIRA SOLUCAO",(-B+SQR(D))/(2*A) PRINT "SEGUNDA SOLUCAO",(-B-SQR(D))/(2*A) GOTO 20 PRINT "SOLUCAO UNICA",(-B)/(2*A) GOTO 20 PRINT "A DEVE SER DIFERENTE DE ZERO" GOTO 20 PRINT "NAO HA SOLUCOES REAIS" GOTO 20 DATA 10,20,1241,123,22,-1 END 48
verso de 10 de fevereiro de 2008 a
CAP ITULO 2. CIENCIA DA COMPUTACAO O programa demonstra a falta de estruturao da linguagem original, pois o IF funciona ca como um GOTO condicional, o que favorece o cdigo espaguete. o
2.6.8
Clipper
Tudo comeou com o dbase, que foi o precursor de bancos de dados para micros. Por c volta de 83, 84 surgiu o dbase 2 (nunca houve o 1) para micros de 8 bits com memrias o t picas de 64Kb e um ou dois disquetes de 8 polegadas e cerca de 512 KB de capacidade em cada um. O dbase j era um gerenciador de dados, dentro da viso relacional, com m a a nima redundncia de dados e com todas as garantias de acesso e uma linguagem estruturada, a no melhor padro, de uso geral, capaz de garantir um aumento na produtividade na a programao. ca A histria do dBASE comea em 74, no Jet Propulsion Laboratory, conhecido como o c JPL, e instalado em Pasadena, Califrnia. o Nesta instalao da NASA trabalhava Jeb Long, pesquisador que lidava com dados ca obtidos nas pesquisas espaciais atravs de naves no tripuladas. Estes, por serem em e a grande nmero, comearam a trazer problemas e dissabores a Jeb Long, que desenvolveu, u c ento, um programa de computador capaz de gerenciar tais informaes. Este programa a co com nome de JPLDIS, foi conclu e alcanou razovel sucesso tendo sido bastante do c a comentado pelo pessoal tcnico. Foi o que bastou para que um analista de sistemas e (Wayne Ratli) comeasse a desenvolver um programa gerenciador de dados, genrico, c e mas tendo como modelo o JPLDIS. Rapidamente o novo trabalho tornou-se melhor do que o original, e Ratli desenvolveuo cada vez mais. Em 79, Ratli achou que o programa j estava maduro e pronto para enfrentar o a mercado, e ele foi anunciado com o nome de VULCAN. Foi, entretanto, um fracasso: no se chegou a vender sequer 50 cpias. a o Alguns meses depois, um grande distribuidor de programas de micros, George Tate, tomou conhecimento do dBASE. Testou-o e cou entusiasmado. Achou que o que faltava a Ratli era suporte comercial, uma vez que seu trabalho era muito bom. Rapidamente providenciaram-se algumas mudanas cosmticas no proc e grama, seu nome foi mudado para dBASE II (nunca houve o dBASE I, tratava-se de estratgia comercial, para apresentar o produto como um melhoramento), e uma nova e empresa (ASHTON TATE) foi criada para vender este produto. Em pouco tempo, dBASE tornou-se um marco na histria de softwares para microo computadores. A grande vantagem de um banco de dados retirar a amarrao entre programas e e ca dados. A explicao desta vantagem que dados so muito mais estveis do que os proca e a a cedimentos (=programas). Separando-os garante-se que longevidade aos dados, que em geral so os mais custosos para adquirir. a O dbase como linguagem era interpretado, o que trazia desempenho p nas aplio caes, alm da eventual falta de segurana (qualquer um podia alterar os dados). Para co e c corrigir estas duas decincias, logo surgiram inmeros compiladores, dos quais o mais e u famoso foi o CLIPPER. Eis um programa em CLIPPER, por acaso um trecho do programa que emite provas aleatrias e diferentes: o w_nomq = space(8) w_file = "LIXO " @ 08,45 say "Nome Arquivo: " get w_file pict "@!" @ 09,5 say "Qual a turma ? " get w_turm pict "@!"
verso de 10 de fevereiro de 2008 a
49
CAP ITULO 2. CIENCIA DA COMPUTACAO @ 09,40 say "OU arquivo de nomes " get w_nomq pict "@!" oba := 1 do while oba == 1 oba := 0 W_mess := " " @ 11,15 say "Questao 1:" @ 12,20 say "Topico: " get w_top1 @ 12,50 say "Grupo: " get w_gru1 pict "99"
2.6.9
Natural
NATURAL uma linguagem de quarta gerao que pode ser utilizada, indistintamente e ca por usurios nais trabalhando em auto-servio, ou por programadores prossionais em a c suas atividades normais no CPD. Embora possa ler arquivos seqenciais, o Natural mais indicado para ler bancos u e de dados ADABAS, que a partir da dcada de 90 foi o padro de bancos de dados em e a nosso pa e em boa parte do mundo. s Eis um exemplo de programa em Natural: 0010 0020 0030 0040 0050 0060 0070 0080 0090 0100 0110 0120 0130 0140 0150 0160 0170 0180 0190 AT TOP OF PAGE DO WRITE 20T "INFORMACOES SALARIAIS PARA SANTA CATARINA" SKIP 1 DOEND FIND PESSOAL WITH ESTADO = "SC" SORTED BY CIDADE AT BREAK OF CIDADE DISPLAY NOTITLE "NOME DA/CIDADE" OLD(CIDADE) "TOTAL/SALARIOS" SUM(SALARIO) (EM=ZZZ,ZZZ,ZZZ) "SALARIO/MEDIO" AVER(SALARIO) "SALARIO/MAXIMO" MAX(SALARIO) "NUMERO/PESSOAS" COUNT(CIDADE) (EM=ZZ99) AT END OF DATA DO SKIP 1 WRITE "TOTAL DE TODOS OS SALARIOS" TOTAL(SALARIO) DOEND END
2.6.10
Pascal
E uma linguagem de programao estruturada que recebeu este nome em homenagem ca ao matemtico Blaise Pascal. Foi criada em 1970 pelo suco Niklaus Wirth, tendo em a mente encorajar o uso de cdigo estruturado. o Segundo o autor, Pascal foi criada simultaneamente para ensinar programao estruca turada e para ser utilizada em sua fbrica de software. A linguagem reete a liberao a ca pessoal de Wirth aps seu envolvimento com a especicao de ALGOL 68, e sua sugo ca esto para essa especicao, o ALGOL W. a ca A linguagem extremamente bem estruturada e muito adequada para ensino de e linguagens de programao. E provavelmente uma das linguagens mais bem resolvidas ca entre as linguagens estruturadas, e certamente um dos exemplos de como uma linguagem especicada por uma pessoa pode ser bem melhor do que uma linguagem especicada por um comit. e
88-08, Pedro Kantek
50
CAP ITULO 2. CIENCIA DA COMPUTACAO Pascal originou uma enorme gama de dialetos, podendo tambm ser considerada uma e fam de linguagens de programao. Grande parte de seu sucesso se deve a criao, na lia ca ca dcada de 80, da linguagem Turbo Pascal, inicialmente dispon e vel para computadores baseados na na arquitetura 8086 (com verses para 8080 no seu in o cio). Pascal normalmente uma das linguagens de escolha para ensinar programao, e ca junto com Scheme, C e Fortran. S mais recentemente o Java entrou nesta lista. o Comercialmente, a linguagem foi sucedida pela criao da linguagem Object Pascal, ca atualmente utilizada nas IDEs Borland Delphi, Kylix e Lazarus. Academicamente, seus sucessores so as linguagens subseqentes de Niklaus Wirth: Modula-2 e Oberon. a u A partir da verso 2005, o Delphi passou a se referir a sua linguagem de programao a ca como Delphi Language. Assim como a Linguagem C, que padronizado pela ANSI (Ansi C), o Pascal possui e padres pela ISO, como o Pascal Standard e o Advanced Pascal. Um exemplo: o program Teste; var a,b:integer; uses crt; begin writeln (Digite um nmero para A); u readln (a); writeln (Digite o nmero para B); u readln (b); if (a > b) then { Se A maior que B ent~o } e a writeln (A maior que B) e else { Sen~o... } a writeln (B maior que A); e end
2.6.11
C uma linguagem de programao estruturada e padronizada criada na dcada de e ca e 1970 por Dennis Ritchie e Ken Thompson para ser usada no sistema operacional UNIX. Desde ento espalhou-se por muitos outros sistemas operacionais, e tornou-se uma das a linguagens de programao mais usadas. ca C tem como ponto-forte a sua ecincia e a linguagem de programao de prefere e ca ncia para o desenvolvimento de software bsico, apesar de tambm ser usada para e a e desenvolver aplicaes. E tambm muito usada no ensino de cincias da computao, co e e ca mesmo no tendo sido projetada para estudantes e apresentando algumas diculdades a no seu uso. Outra caracter stica importante de C sua proximidade com a linguagem e de mquina, que permite que um projetista seja capaz de fazer algumas previses de a o como o software ir se comportar ao ser executado. a C tem como ponto fraco a falta de proteo que d ao programador. Praticamente ca a tudo que se expressa em um programa em C pode ser executado, como por exemplo pedir o vigsimo membro de um vetor com apenas dez membros. Os resultados muitas e vezes totalmente inesperados e os erros so dif a ceis de encontrar. Muitas linguagens de programao foram inuenciadas por C, sendo que a mais ca utilizada atualmente C++, que por sua vez foi uma das inspiraes para Java. O e co exemplo: #include <stdio.h> struct pessoa { unsigned short idade;
verso de 10 de fevereiro de 2008 a
51
CAP ITULO 2. CIENCIA DA COMPUTACAO 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; }
2.6.12
Java
Java uma linguagem de programao orientada a objeto desenvolvida na dcada de 90 e ca e pelo programador James Gosling, na empresa Sun Microsystems. Diferentemente das linguagens convencionais, que so compiladas para cdigo nativo, a linguagem Java a o e compilada para um bytecode que executado por uma mquina virtual. e a Desde seu lanamento, em maio de 1995, a plataforma Java foi adotada mais rapic damente do que qualquer outra linguagem de programao na histria da computao. ca o ca Em 2003 Java atingiu a marca de 4 milhes de desenvolvedores em todo mundo. Java o continuou crescendo e hoje uma referncia no mercado de desenvolvimento de software. e e Java tornou-se popular pelo seu uso na Internet e hoje possui seu ambiente de execuo ca presente em web browsers, mainframes, SOs, celulares, palmtops e cartes inteligentes, o entre outros. Principais Caracter sticas da Linguagem Java A linguagem Java foi projetada tendo em vista os seguintes objetivos: Orientao a objeto - Baseado no modelo de Smalltalk e Simula67 ca Portabilidade - Independncia de plataforma - write once run anywhere e Recursos de Rede - Possui extensa biblioteca de rotinas que facilitam a cooperao com ca protocolos TCP/IP, como HTTP e FTP Segurana - Pode executar programas via rede com restries de execuo c co ca Sintaxe similar a Linguagem C/C++ Facilidades de Internacionalizao - Suporta nativamente caracteres Unicode ca Simplicidade na especicao, tanto da linguagem como do ambientede execuo (JVM) ca ca E distribu com um vasto conjunto de bibliotecas (ou APIs) da Possui facilidades para criao de programas distribu ca dos e multitarefa (mltiplas linhas u de execuo num mesmo programa) ca Desalocao de memria automtica por processo de coletor de lixo (garbage collector) ca o a Carga Dinmica de Cdigo - Programas em Java so formados por uma coleo de classes a o a ca armazenadas independentemente e que podem ser carregadas no momento de utilizao. ca Eis um exemplo: public abstract class Animal { public abstract void fazerBarulho(); } public class Cachorro extends Animal { public void fazerBarulho() { System.out.println("AuAu!"); }
88-08, Pedro Kantek
52
CAP ITULO 2. CIENCIA DA COMPUTACAO } public class Gato extends Animal { public void fazerBarulho() { System.out.println("Miau!"); } }
2.6.13
PHP
PHP (um acrnimo recursivo para PHP: Hypertext Preprocessor) uma linguagem de o programao de computadores interpretada, livre e muito utilizada para gerar contedo ca u dinmico na Web. a 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 lanado o novo pacote da linguagem com o nome de PHP/FI, trazendo a ferramenta c Forms Interpreter, que era na verdade um interpretador de comandos SQL. Trata-se de uma linguagem modularizada, o que a torna ideal para instalao e uso ca em servidores web. Diversos mdulos so criados no repositrio de extenses PECL o a o o (PHP Extension Community Library) e alguns destes mdulos so introduzidos como o a padro em novas verses da linguagem. Muito parecida, em tipos de dados, sintaxe e a o mesmo funes, com a linguagem C e com a C++. Pode ser, dependendo da congurao co ca do servidor, embutida no cdigo HTML. Existem verses do PHP dispon o o veis para os seguintes sistemas operacionais: Windows, Linux, FreeBSD, Mac OS, OS/2, AS/400, Novell Netware, RISC OS, IRIX e Solaris Construir uma pgina dinmica baseada em bases de dados simples, com PHP. Este a a e prov suporte a um grande nmero de bases de dados: Oracle, Sybase, PostgreSQL, e u 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 RPC, SOAP. E poss abrir sockets e interagir com outros protocolos. E as bibliotecas vel de terceiros expandem ainda mais estas funcionalidades. Veja um exemplo de PHP <? ... $tipss =mysql_result($result,0,SSERVTIPSS); $porss =mysql_result($result,0,SSERVPORSS); $daali =mysql_result($result,0,SSERVDAALI); $anexo =mysql_result($result,0,SSERVANEXO); $query = "select * from ANDAM where ANDAMNSERV =$nserv1 " ; $result = mysql_query($query); $quantos = mysql_num_rows($result); $quantos++; ?> <table > <tr> <td>Numero da solicitacao de servico<td><? echo $nserv ?><tr> <td>autor<td><? echo $nomeu ?><tr> <td>cliente<td><? echo $clien ?><tr> <td>CA responsavel<td><? echo $cares ?><tr> <td>interlocutor no cliente<td><? echo $intcl ?><tr> <td>fone<td><? echo $fonic ?><tr> <td>email<td><? echo $emaic ?><tr>
verso de 10 de fevereiro de 2008 a
53
2.6.14
Para os que acharam APL uma linguagem meio sem ps nem cabea, eis aqui J. Olhando e c para o J, o APL passa a ser to comportada quanto um COBOL da dcada de 70. a e Para entender o J, precisamos estudar a vida do cara que inventou o APL, o canadense Ken Iverson. Na minha opinio, o sujeito foi um gnio. Coloco-o sem nenhum medo a e de errar na galeria dos grandes matemticos da humanidade, talvez o primeiro (junto a com Mandelbroot) que tenha realmente conseguido casar com sucesso a matemtica e a a computao. ca Depois de propor o APL como uma notao matemtica (dcada de 50), de liderar ca a e o grupo que converteu o APL em linguagem de programao (dcada de 60 na IBM) e ca e de liderar a popularizao da linguagem (anos 70 e comeos dos 80), em meados dos 80, ca c ele chegou a algumas concluses: o
o uso de um alfabeto no usual (para ser educado), restringia o uso do APL a (lembremos que ainda no havia o windows e portanto para usar APL havia que a comprar hardware especializado - e caro). o desenvolvimento continuado por 30 anos da linguagem apontou algumas inconsistncias tericas no modelo. No esqueamos que o Iverson era um matemtico e o a c a da pesada o custo que o APL sempre teve inviabilizava seu uso pelos menos aquinhoados
Dessas elocubraes nasceu a linguagem J. O nome no tem explicao, exceto a co a ca dada por um de seus autores (Why J ? It is easy to type.). H quem diga que J segue a Ino alfabeto, sendo este Ia notao Iverson. Seja como for, J no tem nada a ver ca a 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+-<.1.5*?200$2 1 1 1 2 1 2 xx=.(y?(<.y*1.6)) z=.+/|:r*($r)$xx r,.((y,1)$z),.(y,1)$xx ) Equivale ao programa gerasima do workspace vivo128, que gera um sistema de n incgo nitas e n equaes, depois o resolve para obter os termos independentes e possibilitar co propor ao aluno que descubra as incgnitas. o
54
Cap tulo 3
Escrevendo algoritmos
Para escrever algoritmos usando portugus estruturado (portugol), primeiro necessita-se e estabelecer algumas regras de notao e de s ca ntaxe. Comea-se descrevendo qual a forma c de ler os quadros indicativos da s ntaxe da linguagem. Esta notao resume a linguagem de especicao de algoritmos. Ela um apanhado ca ca e de no m nimo 4 linguagens (Java, PASCAL, CLIPPER e APL), e tem a nalidade de expressar o funcionamento do algoritmo em bom portugus, da maneira mais clara pose s e completamente descompromissado das idiossincrasias dessas e outras linguagens vel de programao. ca S mbolo no formato Signicado palavra Na escrita desse comando, palavradeve ser escrita exatamente como aparece no formato. <palavra> <palavra> deve ser substitu do por algum tipo de palavra aceitvel neste contexto a [ palavra ] ou [ < O fato de algo estar escrito entre colchetes sigpalavra > ] nica que OPCIONAL e ... (reticncias) e Repetio (de 0 a n vezes) de um determinado ca item. As reticncias, `s vezes tambm aparee a e cem na omisso de uma parte opcional em um a comando qualquer { opo 1 | opo 2 | ... A barra vertical indica que uma de vrias ca ca a } opes deve ser a escolhida co Eis como usar esta tabela. Seja por hiptese a seguinte especicao de comando: o ca <nome> gostaria [muito] de {comer | beber}
A partir da especicao acima, seriam vlidos os comandos ca a Joo gostaria de beber a Maria gostaria muito de comer Antnio gostaria de comer... o
3.1
Nome
O elemento bsico da linguagem o nome, tambm conhecido como identicador. Sua a e e construo dada pelo diagrama a seguir ca e 55
Dentro deste diagrama, (e nos prximos que tiverem este formato) qualquer caminho o seguido, levar a identicadores vlidos. Consideram-se letra, as 26 letras do alfabeto a latino maisculas, e d u gito, os 10 d gitos de 0 a 9. Deve-se atentar que o branco no a faz parte do rol de caracteres vlidos, o que faz com que o identicador no possa ser a a constitu de mais de uma palavra. Pode-se usar neste caso o separador ( ), chamado do sublinha. Atente-se para a importncia dos nomes criados pelo programador serem a escritos em maiscula. u Exemplos vlidos a NOME SOM_TERMOS RAIZ1 SALDO08 SALDO_09 Exemplos no vlidos a a nome (usa-se letras minsculas) u Saldo Devedor (usa-se duas palavras) SaldoDevedor (mistura-se letras maisculas e minsculas) u u 123SALDO (comea por um dgito numrico) c e Embora a maioria dos livros de lgica no faam distino entre o uso de maisculas o a c ca u e minsculas para efeito de estabelecimento de identicadores, aqui vai-se padronizar u nossos identicadores sempre EM LETRAS MAIUSCULAS. Isto pode incomodar um pouco no in cio, mas se revelar uma grande vantagem na anlise de algoritmos feitos a a por terceiros, ou mesmo fde autoria prpria, mas feitos h tempos. o a O autor do algoritmo tem total autoridade para nomear seus identicadores como queira. Entretanto, h uma regra de bom senso impl a cita. Cada identicador deve ter um nome o mais prximo poss o vel de sua funo. Exemplo: Se precisarmos um ca identicador para representar uma somatria, poderemos cham-lo de SOMA, SOMAT, o a SM, etc, mas nunca de ABC, ou XYZ, ou ainda AKLJHJKH. Quanto ao tamanho do identicador, tambm s h uma regra: BOM SENSO. Nem e o a to pequeno que que quase imposs a vel identic-lo pelo nome, nem to longo que a a seja cansativo escrev-lo. Exemplo. Ao gerar um identicador para conter a quantie dade total de horas trabalhadas deve-se cham-lo como QTHT, ou QTDHORAS, ou a HORTRAB, ou similar, mas seria um exagero chamar o identicador de QUANTIDADE DE HORAS TRABALHADAS NO MES. Finalmente, deve-se discutir se as palavras que compe o algoritmo devem ou no ser o a acentuadas. Parece uma discusso bizantina, mas no o necessariamente. Se o leitor a a e do algoritmo for um ser humano, pode-se acentu-lo sem nenhum problema. Entretanto, a se o algoritmo for no futuro processado por algum programa, h que se ter em mente, a que em geral, para qualquer programa diferente de a e esta regra vale para todas a e as letras. Tambm diferente de c. e c e
88-08, Pedro Kantek
56
3.2
Variveis a
Ao identicador atribui-se um valor, que ser usado nas computaes futuras. Quando a co este valor pode variar ao longo do processamento, diz-se que o identicador representa uma varivel. (No contrrio, dir-se-ia que o identicador representa uma constante). a a Outra denio para varivel : Um lugar onde se guarda uma valor. ca a e Por norma do portugus estruturado, todas as variveis devem ser declaradas antes e a de poderem ser utilizadas. Chama-se ` ateno, pois esta no uma regra obrigatria. a ca a e o Inmeras linguagens de programao, permitem que se dena uma varivel no instante u ca a em que ela passa a ser necessria e em qualquer ponto do programa. (Exemplo: BASIC, a dbase, APL etc) Em portugol (e em Pascal, Cobol, Fortran, C, Java etc), isto no a e poss vel. Assim, nossos programas tero dois blocos: O primeiro o de denio de a e ca variveis, e o segundo o de procedimentos, sempre nesta ordem. a e
3.2.1
Tipos de variveis a
Existem cinco tipos de variveis bsicas em portugol: inteiro, real, caracter, lgico e a a o cadeia. Inteiro E uma varivel que pode conter nmeros inteiros (positivos ou negativos, no importa). a u a Exemplos: 5, 1009, -6730 etc. O conceito de inteiro familiar a ns. Qualquer operao e o ca de contagem, pode ser estabelecida a partir do conjunto dos valores inteiros. Uma quantidade discreta 1 (i.. enumervel) sempre pode ser processada com base nos inteiros. e a Embora possam ter uma denio formal, para ns suciente a seguinte descrio: Uma ca o e ca varivel inteira a que pode armazenar qualquer um dos nmeros do conjunto: a e u , ... (n + 1), n, ..., 2, 1, 0, 1, 2, ..., n, n + 1, ..., + Real E outra varivel numrica que pode conter qualquer nmero real, isto , inteiro ou a e u e fracionrio. Ex.: 1.5, -0.99, 1700,78 etc. Claramente salta aos olhos que armazenar a uma varivel real mais caro(em tempo e em recursos) do que processar uma varivel a e a inteira. Alis, esta uma das razes porque existem variveis inteiras. Outra a a e o a e caracter stica da enumerabilidade que no est presente no conjunto dos nmeros reais. a a u Caracter Uma varivel que pode conter um unico caracter, como uma letra, ou um unico d a gito. O real contedo de uma varivel caracter depende do cdigo bsico que est em uso. u a o a a Mas, por enquanto, pode-se simplicar esta questo dizendo que qualquer caracter que a esteja no teclado do computador pode ser colocado em uma varivel caracter. a Cadeia ou string E um tipo de varivel formado por um ou mais de um caracteres. Por exemplo, um nome: a JOSE, ou uma cidade como CURITIBAetc. Ou seja, a diferena entre uma varivel c a caracter e uma varivel cadeia que a primeira tem tamnho 1 (um unico caracter) e a a e segunda tem tamanho maior que um, ou seja, vrios caracteres. a
1 discreta
= quantia que exprime valores inteiros, objetos, coisas, enm grandezas no cont a nuas
57
CAP ITULO 3. ESCREVENDO ALGORITMOS Lgico ou booleano o O nome booleando vem de George Boole, um matemtico. E uma varivel que pode a a conter apenas 2 valores, conhecidos pelas palavras: VERDADEIRO e FALSO. Algumas linguagens no tm este tipo (C ou APL, por exemplo) usando artif a e cios para simular o conceito.
O tipo cadeia traz consigo uma pequena diculdade, que a necessidade de estae belecer - quando da denio da varivel - qual o seu tamanho mximo, em nmero ca a a u de caracteres. Esta atitude necessria para informar a quem l o algoritmo (seja um e a e homem ou um computador) quanto de espao reservar para conter esta varivel. c a Esta diculdade no existe nas variveis numricas nem nas lgicas que tem tamanhos a a e o predeterminados e principalmente xos. Existe uma caracter stica das linguagens de programao conhecida como tipagem. ca H linguagens de tipagem forte (por exemplo Pascal) e as h de tipagem fraca (por a a exemplo C). Este conceito tem a ver com restries e vericaes que a linguagem deterco co mina ou executa a cada comando. A tipagem forte torna as linguagens um pouco mais demoradas, mas evita erros cometidos pelo programador ao no vericar as operaes a co que comandou. Este tipo de erro, de resto muitas vezes dif de localizar e corrigir, e cil pois o sintoma que surge frequentemente intermitente e nem sempre tem muito a ver e com o real local onde o erro est acontecendo. Outra vertente de linguagens fracamente a tipadas quando a linguagem tem regras de converso entre tipos diversos e elas so e a a aplicadas antes de qualquer comando.
3.2.2
Cdigo de caracteres o
No momento de representar caracteres, aparece um problema: Qual sua lei de formao ca e representao ?. Tal problema no aparece nos nmeros: a matemtica ajuda. Entreca a u a tanto, no h uma aritmtica para caracteres, e portanto precisa-se construir uma srie a a e e de propriedades e relaes entre os caracteres. Para no criar um novo conceito, vai-se co a aproveitar o cdigo de representao padro em uso nos computadores atuais. Trata-se o ca a do cdigo ASCII (American standard Code for Information Interchange). A seguir, uma o parte do prprio: o
Cdigo de caracteres Existem diversos cdigos usados no mundo da computao. O o o ca mais usual o cdigo ASCII (American Standard Code for Intrechange of Informations), e o embora se usem tambm o BCD, EBCDIC e mais recentemente haja uma tendncia no e e uso do UNICODE. Como exemplo, eis uma parte do cdigo ASCII. o
88-08, Pedro Kantek
58
CAP ITULO 3. ESCREVENDO ALGORITMOS dec 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 carac sp ! # $ % & ( ) * + , . / dec 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 carac 0 1 2 3 4 5 6 7 8 9 : ; < = > ? 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 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 { | }
ue e Esta seqncia ASCII, muito importante pois permite estabelecer o atributo de ordem no universo dos caracteres. Olhando para ela, podemos armar, por exemplo, que o caractere a menor do que o caractere b. Da mesma maneira, o aminsculo maior e u e do que o Amaisculo (alis, isto vale para todas as letras), e qualquer d u a gito numrico e menor do que qualquer letra. e Um especial cuidado deve ser tomado, pois esta no a unica seqncia poss a e ue vel, e nem sequer a melhor. Cada mquina e cada implementao pode ter a sua. Alguns outa ca ros cdigos: BRASCII (Cdigo padro BRASILEIRO para intercmbio de informaes), o o a a co EBCDIC (Extended binary-coded decimal interchange coded), Z-Code etc. Outra observao que na tabela ASCII no existem caracteres acentuados. Duas ca e a conseqncias advm deste fato: nem sempre se podem usar tais caracteres e se eles ue e forem usados, no se sabe qual a sua ordem no conjunto. Trocando em midos, se se a u solicitar a ordenao de uma lista de palavras contendo AMORA, ANCORA BROA, ca CAFE, ARROZ, CEREAL, no ser nenhuma surpresa se a resposta for AMORA, a a ARROZ, BROA, CAFE, CEREAL e ANCORA.
Exerc cio 3 Uma salada de frutas, produzida industrialmente leva ma, banana, abaca caxi e aucar nas propores de 1 Kg : 2 Kg : 0,5 Kg : 0,5 Kg respectivamente. Denir c co 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 sero usadas logo total o a 10,10,10,10 5,10,2.5,2.5 20Kg dades que ultrapassam a proporo. Exemplos: ca 10,20,10,10 10,20,5,5 40Kg 10,10,1,1 2,4,1,1 8Kg Exerc cio 4 Imagine que voc tem uma entrada com um par de nmeros reais. Eles e u representam as dimenses x e y medidas em metros, de um retngulo. Escreva o algoritmo o a que leia esse par de nmeros e escreva x, y e a rea do retngulo de lados x e y, apenas se u a a o per metro deste mesmo retngulo for superior a 12.0 m. a Exerc cio 5 Dena e escreva uma funo que receba trs nmeros reais, encontre e ca e u devolva o maior deles.
verso de 10 de fevereiro de 2008 a
59
Exerc cio 6 Dena um algoritmo capaz de comparar dois nmeros inteiros e positivos u e imprimir a mensagem IGUAIS ou DIFERENTES em funo dos valores de tais nmeros. ca u Eles sero considerados IGUAIS quando sua diferena for menor a 10% do maior nmero. a c u Sero considerados diferentes quando sua diferena for maior ou igual a 10% do valor do a c maior. O algoritmo termina quando for lido um nmero negativo. u Exerc cio 7 Dena e escreva um algoritmo que leia um nmero e determine se ele u e divis por 3. Se for o algoritmo deve imprimir a mensagem E DIVIS vel IVEL, e se no for a deve imprimir NAO E DIVIS IVEL . Exerc cio 8 Escrever um algoritmo que leia um conjunto de trs variveis que indicam e a respectivamente: Nome do funcionrio (cadeia-30), nmero de horas (inteiro) e valor da a u hora trabalhada (real). Se o nmero de horas maior que 40, calcule o valor a pagar, sabendo que as horas u e extras so remuneradas a base de 1,5 x a hora normal. Se o salrio for maior que R$ 650,00 a a retire 10% do salrio para o governo (imposto). escreva nome, horas, valor da hora, valor a a receber e valor do imposto. Dados terminam quando for lido um nmero de horas igual a u zero. Por exemplo, Lido Impresso Joo,50,100 Joo,50,100,4950,550 a a Maria,30,10 Maria,30,10,300,0 XXX,0,0 m. 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 previdncia. e Assim, escreva um algoritmo capaz de calcular o desconto para o INSS, sujeito `s seguintes a regras:
Inicialmente o programa deve ler o valor do salrio de referncia a e Depois deve ler uma srie de dados compostos por RG e salrio bruto. e a A srie termina quando for lido um RG = 0. e Para um salrio bruto at 10 S.R. o desconto 8% do salrio bruto a e e a Para um salrio entre 10,01 S.R. e 20 S.R. desconto 9% do salrio bruto a e a Acima de 20 S.R. o desconto de 10% do salrio bruto. e a Ao nal, imprimir o RG, o salrio bruto, o desconto e o salrio l a a quido.
Exerc cio 10 Pretende-se informatizar um estacionamento. Nele existem 3 tipos de preos: 2 R $ por hora ou frao para carros pequenos, 2,50 R$/hora para carros mdios e 3 c ca e R$/hora para carros grandes. Denir algoritmo que leia uma serie de informaes formadas co por: Tipo do carro: caracter; hora-entrada: inteiro, minuto-entrada: inteiro; hora-saida: inteiro, minuto-saida: inteiro. Para cada conjunto de informaes lidas, o algoritmo deve co imprimir a quantidade de dinheiro devida.
88-08, Pedro Kantek
60
3.3
Comando de atribuio ca
Comando de atribuio aquele que permite colocar/alterar valores de contedo em ca e u variveis. Para tanto usaremos o s a mbolo . 2 Quando dizemos expresso, podemos estar querendo dizer valor (que a forma a e mais simples de expresso), ou simplesmente um conjunto de valores e operadores (que a a denio de expresso). e ca a Exemplos: A 1 (aqui, a expresso apenas um valor) a e B 1 + 2 (neste caso, a expresso um conjunto de 2 valores e uma operao, no a e ca caso, a adio) ca E importante notar, que a expresso que se encontra do lado direito da echa de a atribuio () deve ser compat com o tipo de varivel que foi denida. Em outras ca vel a palavras, no comando A 1+1, a expresso 1+1 tem que ser compat com a varivel a vel a A, ou seja A dever ter sido denida como inteira ou real, mas no como caracter, cadeia a a ou lgica. o Na atribuio de variveis do tipo inteira, a expresso dever ser uma expresso ca a a a a inteira, isto , sem parte fracionria. Para variveis do tipo real, a expresso dever e a a a a ser numrica sem nenhuma outra restrio. Esta a unica exceo ` regra acima, pois e ca e ca a podemos colocar um valor inteiro em uma varivel real. a Na atribuio de variveis cadeia, o valor dever estar envolvido entre aspas simples ca a a (). Ele no dever ter um tamanho maior do que aquele estabelecido para a varivel. a a a Se isto acontecer, o valor ser truncado. Entretanto, no boa norma de programao a a e ca usar esta facilidade (ou caracter stica) pois ela diculta a compreenso do algoritmo. a Finalmente, nas variveis lgicas, deveremos usar as palavras VERDADEIRO e a o FALSO, ou quando no houver risco de confuso, podemos usar as abreviaturas F ou V. a a Exemplos de atribuies: co X1 XAC 1 + 1 + 1 DEV 2000 23 N -1 B 1.89 XAD 1 3 N -1.0009 ALF 1000900 X1 NOME ALFREDO COD ABCDEabcde ALFA abcde12345 SIM VERDADEIRO NAO FALSO VARLOG V VARLOG2 F
variveis inteiras a
variveis reais a
variveis cadeia a
variveis lgicas a o
2 A questo do s a mbolo da atribuio bem complicada. Poucos ambientes (como o APL) dispe do ca e o s mbolo nativo . Os outros improvisam, com os s mbolos := do Pascal, ou simplesmente = do C e Java. No primeiro caso, so 2 s a mbolos, ao invs de um unico, e no segundo surge a confuso entre A=1 e a (signicando A recebe 1) e A=1 (signicando a pergunta: A igual a 1 ?). Da o C e o Java fazerem a e pergunta com ==. No h uma sa fcil. a a da a
61
CAP ITULO 3. ESCREVENDO ALGORITMOS NOME A XUNXO X variveis caracter a NUM 1 AST * Duas perguntas a responder:
A 1 A varivel numrica ou caracter ? e a e B V B varivel lgica ou cadeia ? e a o
Como regra geral, sempre que houver mistura entre elementos inteiros e reais, nas operaes +, e o resultado ser real. co a Exemplos de uso de operadores em expresses numricas o e A 1 1,78 3 B trunc(3.1416) C abs (-6 + trunc (3.4)) D 1 + 10 + 100 - 1000 etc Uma observao nal e bem importante que dentro de um mesmo algoritmo uma ca e varivel pode ter diversos (isto , mais de um) comandos de assinalamento. Isto no a e a e erro, e ao contrrio bem freqente. Nestes casos, a varivel ter o valor que foi nela a e u a a colocado por ultimo. Por exemplo, em 1: A 1 2: ... 3: A 10 4: ... 5: escreva (A) 6: ... Se nos comandos representados com ... no houver nenhuma alterao na varivel A, a ca a o resultado impresso ao nal ser 10 (e no 1). a a
3.4
Expresses o
Expresses so conjuntos de variveis, valores, operaes e eventualmente parnteses, o a a co e que demandam algum tipo de computao determinada na expresso e produzem um ca a resultado. As expresses se classicam em geral devido ao tipo de operaes que existem o co dentro da expresso, podendo ser aritmticas, condicionais, lgicas e de caracteres. a e o
3.4.1
Aritmticas e
As expresses aritmticas so aquelas que envolvem variveis numricas, valores idem e o e a a e as operaes aritmticas, dando como resultado um nmero (que obviamente pode ser co e u real ou inteiro). Notao Exponencial Para os casos em que seja necessrio representar nmeros ca a u muito grandes ou muito pequenos, pode-se lanar mo da notao exponencial, que c a ca ser escrita de acordo com a seguinte regra: A primeira parte do nmero ser escrita a u a como um nmero convencional, podendo ter o ponto decimal (constante ponto utuante) u ou no (constante inteira). Depois, vem a letra maiscula E, indicando elevado a. a u Um segundo nmero inteiro, positivo ou negativo indicando a potncia de 10 ` qual a u e a primeira parte do nmero est elevada. u a
88-08, Pedro Kantek
62
CAP ITULO 3. ESCREVENDO ALGORITMOS Por exemplo: o nmero deve ser entendido como u 3E4 3 104 ou 3 10000 ou 30000 6.3E-2 6.3 102 ou 6.3 0.01 ou 0.063 -4.22E6 4.22 106 ou 4.22 1000000 ou -4220000
63
Funao c Adiao c
Subtrao ca
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 Fracionrio frac(A) A parte fraa cionria a 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 prximo o Raiz sqrt(A) Raiz quadrada quadrada de A Quadrado Somar 1 sqr(A) A++ O quadrado de A A varivel A a e incrementada de 1 unidade
abs(A)
inteiro real inteiro real inteiro real inteiro real inteiro real inteiro real inteiro real real real
ou ou ou ou ou ou ou
Tipo do resultado Se A e B so inteiros, a A+B ine teiro. Se pelo menos um dos dois real, e o resultado e real idem ao anterior idem ao anterior real real O mesmo tipo de A real real inteiro real
Exemplo 3 + 7 10 e
ou ou
round(3.6) e 4 sqrt(4) 2 e
ou A( ou ou
real
O mesmo de A O mesmo de A
64
CAP ITULO 3. ESCREVENDO ALGORITMOS Subtrair 1 Diviso a inteira Resto A A varivel A a e decrementada de 1 unidade o quociente inteiro da diviso a de A por B O resto da diviso inteira de a A por B inteira real inteiros ou O mesmo de A inteiro Se A 10, e A coloca 9 em A. 4 div 3 1 e
A div B A mod B
inteiros
inteiro
10 mod 7 3 e
Prioridades Na execuo de um comando complexo, podemos encontrar duas ou mais ca operaes numricas uma ao lado da outra, e neste caso, pode surgir a pergunta: Qual co e realizar antes ? Exemplo: 2 + 3 4 igual a 14 ou 20 ? Anal, 2 + (3 4) 14, e(2 + 3) 4 20. e e e Embora na matemtica tradicional j se tenha uma lista de prioridades que deve ser a a obedecida, aqui no portugus estruturado tambm h uma lista, que se resume a: e e a 1. Primeira Prioridade: Parnteses e 2. Prioridade: Funes co 3. Prioridade: Menos unrio (oposto) a 4. Prioridade: Potenciao ca 5. Prioridade: Multiplicao e diviso ca a 6. Prioridade: Adio e subtrao ca ca 7. Prioridade: Comparaes (>, <, =, , , =) co 8. Prioridade: Operadores lgicos, , , . o Se houverem duas operaes de mesma prioridade, as mesmas sero realizadas em qualco a quer direo convencionada, por exemplo, da esquerda para a direita. ca E dif decorar esta tabela, alm do que, algumas linguagens de computador podem cil e implementar tabelas ligeiramente diferentes desta. Assim, resta como sugesto ao aluno: a
Denir linhas pequenas (clareza e auto-documentao). Se for necessrio, quebrar ca a um comando complexo em vrios simples. a Usar e abusar de parnteses, ainda que redundantes, pois eles reforam a ordem e c de execuo e desobrigam de conhecer e consultar a tabela de prioridades. ca
Round e Trunc Arredondar um nmero converter um real em inteiro aproximando-o do inteiro mais u e prximo. A regra bsica que nmeros cuja parte fracionria menor do que 0.5 so o a e u a e a trazidos para o inteiro menor e nmeros cuja parte fracionria igual ou maior a 0.5 u a e so arredondados para mais. a J o truncamento simplesmente despreza a parte fracionrio, trazendo o resultado a a sempre para o inteiro menor ou igual ao nmero dado. u As funes round e trunc operam sobre nmeros positivos e negativos. Quando for co u este ultimo caso, a denio continua prevalecendo, o resultado encontrado como se ca e o operando fosse positivo, e a seguir o sinal de menos colocado sobre o resultado. e Acompanhe nos exemplos:
verso de 10 de fevereiro de 2008 a
65
Div e Mod Existem duas importantes funes matemticas, a quem chamar-se- div e mod e que co a a so usadas em matemtica inteira. Ambas atuam sobre nmeros inteiros e do como a a u a resultado tambm nmeros inteiros. Div devolve o resultado inteiro de uma diviso. e u a J mod devolve o resto inteiro da diviso de dois nmeros. Em ambos operadores, o a a u segundo termo tem que ser diferente de zero. Em resumo, A div B, o resultado inteiro da diviso de A por B. e a Exemplo: 10 div 3 3 e 5 div 3 1 e 890 div 100 8 e 1000 div 1 1000 e A mod B o resto inteiro da diviso de A por B. e a Exemplo 10 mod 3 1 e 5 mod 3 2 e 890 mod 100 90 e 1000 mod 1 0 e As duas funes se completam na expresso I mod J = I (I div J) J. co a Exemplo: 20 mod 6 2 2 2 = = = = 20 - (20 div 6) * 6 20 - 3 * 6 20 - 18 2
c.q.d.
Um especial cuidado deve ser tomado quando o primeiro operando de div for menor que o segundo, por exemplo em 2 div 3. Neste caso, a resposta 0. Esta regra segue e vlida se o primeiro nmero 0. Por exemplo, em 0 div 5, a resposta segue sendo zero a u e e no h erro nesta chamada. a a A mesma considerao pode ser feita na funo mod. 2 mod 3 2 e 0 mod 5 zero, ca ca e e sem erro nos dois casos.
88-08, Pedro Kantek
66
CAP ITULO 3. ESCREVENDO ALGORITMOS suc, pred, ord e chr Para os tipos ordinais pr-denidos (caracter, inteiro e lgico), existem algumas funes e o co que podem ser usadas. Para cada tipo de operandos os universos so: a inteiros neste caso, a seqncia de ordenao aquela dos nmeros inteiros da matemtica: ue ca e u a ... , ..., -2, -1, 0, 1, 2, ... +. caracteres aqui a seqncia dada pelo cdigo nativo do ambiente, no caso o ASCII. ue e o booleanos a seqncia FALSO, VERDADEIRO. ue e Ord A Funo ord devolve o ordinal do operando dentro do seu universo original. ca Assim, a ord de um operando caracter, devolve o ordinal dentro do cdigo ASCII. A ord o de um lgico, considera o universo de 2 valores (V e F). e a ord de um nmero inteiro, o u e o prprio nmero inteiro. Embora atue sobre os 3 tipos acima, na verdade ela se aplica o u verdadeiramente aos caracteres. Por exemplo: ORD(-3) -3. e ord(a) 97. e ord(FALSO) 0. e ord(7) 55, e ord(W) 87, e ord(z) 122, e No caso dos caracteres, a resposta ` funo ord se encontra na tabela vista anteria ca ormente. Consultamos o operando de ord na coluna referente a ASCII, e a resposta de ord o nmero decimal que estiver na mesma linha. e u Chr A funo chr a funo inversa da funo ord, porm s funciona para caracca e ca ca e o teres. Dado um nmero inteiro entre 0 e 255, para o cdigo ASCII e 0 e 64536 para u o o cdigo UNICODE, a funo chr deste nmero devolve o caractere correspondente a o ca u ele. Para simular como o portugol faz isto, dado um nmero, procura-se na tabela em u qual linha ele ocorre sob a coluna decimal, e a seguir responde-se com o caractere ASCII correspondente ` mesma linha. a Exemplo, CHR(97) a, etc. e Suc Trata-se da funo sucessora, que nos devolve o prximo valor ao do operando ca o considerado o seu universo original. Esta funo s se aplica a operandos ordinais prca o e denidos (inteiro, caracter e lgico). Se o operando for inteiro, a resposta tambm ser. o e a Se o operando for lgico, a resposta tambm ser. Da mesma maneira se o operando for o e a caracter. suc(a) b e suc(FALSO) VERDADEIRO e suc(23) 24, e assim por diante e suc(1) 2, e CUIDADO ====> succ(9) : e succ(9) 10. e e Uma aplicao interessante para esta funo a substituio do incremento de varca ca e ca iveis. a Por exemplo, em vez de fazer: I I + 1; podemos fazer I suc(I);
verso de 10 de fevereiro de 2008 a
67
CAP ITULO 3. ESCREVENDO ALGORITMOS Pred Esta funo devolve o predecessor, e tambm s se aplica a ordinais pr-denidos. ca e o e Tambm (tal como no suc) o tipo da resposta o mesmo tipo do operando. Exemplos: e e pred(b) a e pred(FALSO) VERDADEIRO e pred(23) 22, e assim por diante. e
3.4.2
Relacionais
As expresses relacionais so as que envolvem os operadores =, =, >, , < e . Este o a operadores visam a estabelecer se uma dada proposio falsa ou verdadeira. E comum ca e em qualquer linguagem de programao, comparar-se 2 valores, perguntando, por exca emplo, se o primeiro maior do que o segundo. A resposta, na forma lgica, dir se a e o a armao ou no verdade. ca e a e So eles: igual (=), diferente (=), maior (>), maior ou igual (), menor (<) e menor a ou igual (). Estes operadores sempre relacionam duas variveis ou constantes de tipos coma pat veis. Por exemplo ao perguntar 3 > 5?, a resposta ser falso. a Note que no permitido (ou seja gera-se um erro), misturar valores de tipos distina e tos. Ento, a comparao A = 3, embora logicamente pudesse estar correta (ou seja a ca a letra A no igual ao nmero 3), d erro em qualquer linguagem de programao e a e u a ca portanto est proibida de ser usada na construo de algoritmos. a ca A exceo ` regra acima quando se comparam dois nmeros, sendo um deles do tipo ca a e u inteiro e outro do tipo real. Embora de tipos diferentes (inteiro e real), a matemtica a permite fazer essa comparao, j que ambos so nmeros. ca a a u Tem-se ento que os operandos podero ser de qualquer tipo, desde que compat a a veis, mas a resposta sempre ser do tipo lgico. a o Funo ca Formato Objetivo Operando Resultado Exemplo Igual A = B Comparar o ambos .V. se A = B 3 = 4 .F., e contedo de A e inteiros, u e .F. se A = 66.0 = 66 .V., e de B reals ou al- B. AB= ab .F. e fanumricos e Diferente A = B igual ao anterior igual ao an- .V. se A = B 3 = 4 .V., 66.0 e terior e .F. se A = = 66 .F. e B. AB= AB e .F. Maior A > B igual ao anterior ambos in- .V. se A > B 5 > 2 .V. e teiros ou e .F. se A 2 > 5 .F. e reais B. Maior ou A B igual ao anterior igual ao an- .V. se A B 5 2 .V. e igual terior e .F. se A < 2 2 .V. e B. Menor A < B igual ao anterior igual ao an- .V. se A < B 5 < 2 .F. e terior e .F. se A 2 < 5 .V. e B. Menor ou A B igual ao anterior igual ao an- .V. se A B 2 5 .V. e igual terior e .F. se A > 2 2 .V. e B.
3.4.3
Lgicas o
As expresses lgicas envolvem valores lgicos (verdadeiro e falso) conectados por opo o o eradores lgicos, que so 3: E (), OU () e NAO ( ou ). Estes operadores o a
88-08, Pedro Kantek
68
CAP ITULO 3. ESCREVENDO ALGORITMOS destinam-se as operaes lgicas entre operandos. Eles atuam sobre os valores V (verco o dade) e F (falso). Acompanhe a seguir as tabelas verdade: Em termos verbais a expresso A B ser verdadeira quando A e B forem verdadeiros a a e ser falsa seno. a a Vendo na tabela a seguir: verdadeiro falso verdadeiro verdadeiro falso falso falso falso
A expresso A B ser verdadeira quando A for verdadeiro ou B for verdadeiro ou a a ainda quando ambos forem verdadeiros. A expresso s ser falsa quando A e B forem a o a falsos. Veja: verdadeiro falso verdadeiro verdadeiro verdadeiro falso verdadeiro falso
Finalmente, a expresso A (lida como NAO A), devolve o valor lgico oposto ao de a o A. Ento verdadeiro falso e falso verdadeiro. a e e ou verdadeiro falso Funao c E-lgico o falso verdadeiro Operando ambos lgio cos Resultado .V. se A e B so .V., .F. a em caso contrrio a .V. se A ou B so .V., .F. a em caso contrrio a .V. se A .F. e .F. se A .V. e Exemplo .V. .V. .V. e .V. .F. .F. e .F. .V. .F. e .F. .F. .F. e .V. .V. .V. e .V. .F. .V. e .F. .V. .V. e .F. .F. .F. e .F. .V. e .V. .F. e
OUlgico o NAOlgico o
AB
ambos cos
lgio
A ou A
Nega logicamente A
lgico o
As palavras verdadeiro e falso bem como os s mbolos Ve F podem ser considerados constantes lgicas tambm chamadas booleanas e podem ser empregados livremente o e na construo dos algoritmos. As duas constantes, formam um conjunto ordenado, e ca 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 relaes numricas entre co e 0 e 1 continuam verdadeiras entre FALSO e VERDADEIRO. A grande importncia dos valores lgicos em portugol, decorre do fato de que quala o quer comparao usando os operadores relacionais sempre devolve um lgico. ca o A importncia das expresses lgicas que elas permitem conectar duas ou mais a o o e expresses relacionais, formando uma nova e maior expresso relacional. Veja-se nos o a exemplos:
69
CAP ITULO 3. ESCREVENDO ALGORITMOS expresso lgica a o (A B) C D (E F) G ser verdadeira quando... a A e C forem verdadeira ou B e C forem verdadeiras D for falsa E e F forem verdadeiras ou ento se G for verdadeiro a
Exerc cio 11 Suponha que voc vai escrever um algoritmo em portugol para resolver e as raizes de ax2 +bx+c = 0. Quais variveis seriam necessrias e como elas seriam denidas a a ? Exerc cio 12 Quando criana Gauss resolveu a somatria 1 + 2 + 3 + ... + 4998 + c o 4999 + 5000, de uma forma brilhante, intuindo toda a teoria de progresses. Se voc tivesse o e que resolver o problema de Gauss, quais variveis deniria, e como elas seriam denidas ? a Exerc cio 13 Para cada uma das frmulas a seguir, supor que ser criado um algoritmo, o a no qual voc dever dizer quais variveis sero necessrias e como sero denidas: e a a a a a
1. per metro de um retngulo a 2. clculo do terceiro ngulo de um tringulo, dados 2 ngulos. a a a a 3. clculo da quantidade de azulejos a serem colocados em um banheiro. a 4. Volume de uma lata de leite 5. Preo a pagar pelo estacionamento de um ve c culo.
Exemplo: 1 + 1 + 2, ter como resposta: 4, inteiro, SOM:inteiro; SOM 4 a 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
Exerc cio 16 Na srie de exerc a seguir, considere o seguinte conjunto de variveis: e cios a
X 5 (inteiro) Y 1 (inteiro) AA 0.5 (real) BB 4.9 (real) CC 3 (real) Para cada expresso pedida, calcule o resultado e determine o tipo (inteiro ou real) do a resultado. 1. (AA - X) CC 2. CC + abs(trunc(BB)) 3. frac(AA) - AA 4. X + Y + CC 5. sqrt(trunc(BB-AA)) 6. (round(AA+BB)) mod CC 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)) 14. (X + Y) AA 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)
verso de 10 de fevereiro de 2008 a
71
CAP ITULO 3. ESCREVENDO ALGORITMOS VAR4 VAR4 VAR4 VAR4 VAR4 VAR4 VAR4 (5 div 2) > (trunc (3.5) + frac(3.5)) 72+2>0 5+5-5 (10 + frac(0) + trunc(0) - 10) > 5 5 > 6 div 3 + 2 mod 1 + 0 mod 6 2842 (1 + trunc (13.5) 2) (1 (2 + 1))
73
74
Cap tulo 4
Comandos
4.1 Viso Top down e Bottom up a
Estes termos, consagrados no jargo da informtica, signicam maneiras de atacar e a a resolver um problema em computador. A maneira top down, que pode ser traduzido como de cima para baixo, pressupe estudar o problema como um todo, e depois ir o realizando a montagem do esquema completo, atravs da execuo das partes, mas sem e ca nunca esquecer o modelo completo. A viso bottom up, parte da construo individual de todos os elementos, que postea ca riormente so juntados e testados. E poss fazer sistemas de computador usando as a vel duas tcnicas. e Fazendo uma analogia (meio mambembe, mas v l) com a montagem de um carro, a a na viso top down a primeira coisa a fazer seria juntar a carroceria e as rodas, de a maneira que o carro conseguisse se mover. Depois, os diversos sistemas e componentes iriam sendo instalados pea a pea no carro e a cada etapa o carro continuaria a andar c c em suas prprias rodas. A montagem terminaria quando o carro andasse sozinho. o J na viso bottom up cada um dos sistemas (motor, bancos, instrumentao, ...) a a ca seria montado isoladamente, testado e em caso de sucesso levado aonde o carro est a sendo constru e a posto em conexo com os outros sistemas do carro. O processo do a tambm termina quando o carro sair andando. e O exemplo no dos melhores, porque um carro diferente de um programa de coma e e putador. L se lida com coisas f a sicas que ocupam espao e pesam para ser carregadas. c Aqui se fala de entidades abstratas (dados e programas). Outro exemplo, este talvez algo melhor a proposta de escrever um livro. Antes de tudo h que se ter o plano e a completo da obra, mas depois poss visualizar a construo top down e a construo e vel ca ca bottom up.
4.2
Sequncia de execuo ca e
Vale lembrar que a menos que o comando em questo determine outro caminho, os a comandos dentro de um algoritmo vo sendo executado seqencialmente, comeando a u c no primeiro e terminando no ultimo, e sempre esperando terminar este para comear o c prximo. Diz-se nestes casos que o uxo cai por decantao. Assim, por exemplo, na o ca seqncia ue 1: A 1 2: B 2 + A 75
CAP ITULO 4. COMANDOS Pode-se armar com certeza que primeiro ser executado o comando 1. Depois dele a que ser executado o comando 2, e a o valor da varivel A j estar estabelecido e a a a a corretamente.
4.3
Entrada/Sa da
A maioria dos algoritmos necessitar receber dados externos, e em algum momento do a seu processamento precisar comunicar respostas. Para resolver estes dois problemas a existem os chamados comandos de entrada/sa da. E atravs deles que o algoritmo se e comunica com o mundo externo. Desprezando as complexidades inerentes a um processo de transferncia de dados em e um computador real eis a a principal vantagem do portugol , os comandos que se usaro so dois: leia e escreva. O verbo ou comando leia signicar uma entrada de a a a dados externos para dentro do algoritmo. A forma desta entrada, isto se os dados vo e a entrar pelo teclado, vo ser lidos do disco ou viro por uma linha telefnica questo a a o e a que no interessa agora. Nos prximos anos do curso, haver muitas horas de aula sobre a o a estas questes. Agora s interessa o fato de que o dado entra para o algoritmo e pronto. o o Da mesma forma, para a sa dos dados, usar-se- o comando escreva, que tambm da a e no signica obrigatoriamente impresso em papel. Estes dados podem estar saindo no a a v deo, em um plotter, em um disco, linha telefnica etc. o O formato destes comandos : e leia (nome1, [nome2, ...]) Ao lado do verbo leia, e entre parnteses, deve-se escrever as variveis que devero e a a ter seus valores fornecidos neste comando. Os identicadores citados j devero ter sido a a denidos anteriormente no programa. Em geral (regra heur stica) dados que vo ser a lidos no precisam ser inicializados antes. a O comando de impresso : a e escreva ([mensagem] nome1) Este comando externa um resultado dispon vel a quem est operando o algoritmo. E a claro que os valores a imprimir tero que ter sido inicializados e/ou calculados antes da a impresso. As variveis a escrever tem seu nome citado entre parnteses. a a e Exemplos de leitura: VALOR1, VALOR2: inteiro leia (VALOR1, VALOR2) De impresso a VALOR1: inteiro VALOR1 .... escreva (O valor obtido , VALOR1) e Na impresso comum se colocar constantes alfanumricas, mensagens ou textos a e e explicativos antes ou depois dos dados para clarear e facilitar a leitura humana posterior. Por exemplo, ao calcular uma raiz na varivel RZ, muito melhor escrever escreva a e (A raiz e,RZ), do que simplesmente escreva (RZ). Neste ultimo caso, o dado caria perdido (no v deo, no papel, ...) sem que o operador soubesse o que era aquilo. Identicamente, para imprimir uma rea, melhor fazer escreva (AR,m2), do que fazer s a e o escreva(AR).
4.3.1
Comando de Entrada
76
CAP ITULO 4. COMANDOS leia (<nome-1> [,<nome-2>,...]) Por exemplo, 1: A, B : inteiro 2: RAIZ : real 3: leia (A, B, RAIZ)
4.3.2
Comando de Sa da
Permite a gerao de resultados por parte do algoritmo. Permite mesclar variveis e ca a expresses. Em geral, as expresses alfanumricas inclu o o e das no comando servem para auxiliar na interpretao dos resultados gerados. ca escreva (<nome-1> | <express~o-1> [,<nome> | <express~o> ...]) a a Por exemplo, 1: escreva (a raiz procurada e , RAIZ)
4.4
O comando alternativo
Como j se disse este o comando que permite versatilidade e generalidade aos algoa e ritmos. Ao permitir-se modicar caminhos tendo em vista certas condies que o co e algoritmo habilita o computador a pensar (as aspas, por favor).
4.4.1
Alternativa simples
Existem oportunidades em que um determinado comando dentro de um algoritmo s o deve ser executado se certas condies o permitirem. Por exemplo, ao olhar se uma co pessoa est quites com as suas obrigaes militares, isto deve ser feito apenas se o sexo a co da pessoa masculino. Em nosso pa mulheres esto desobrigadas de tais tratativas. e s, a O comando que identica uma ao condicional o comando SE, que tem o seguinte ca e formato: se <condi~o> ent~o ca a a~o ca fimse A condio uma expresso cujo resultado nal do tipo lgico, isto VERca e a e o e DADEIRO ou FALSO. A ao pode ser um comando simples ou uma seqncia de ca ue comandos. Exemplo: 1: se DELTA < 0 ento a 2: escreva (no poss extrair esta raiz); a e vel 3: mse Para efeito de clareza na leitura de um algoritmo, costuma-se identar os comandos subordinados a uma condio. Esta a razo pela qual se deixou 3 espaos em banco ca e a c ao in do comando escreva no exemplo acima. cio A margem deve ser trazida ao que era antes do comando se, apenas quando se escrever o mse correspondente.
verso de 10 de fevereiro de 2008 a
77
in cio
1: 2: 3: 4: 5: 6: 7: 8: 9:
4.4.2
Alternativa composta
E uma extenso da alternativa simples. Neste caso podemos determinar o que fazer se a a condio verdadeira, e o que fazer se a condio for falsa. O formato deste comando ca ca (` esquerda em linguagem algor e a tmica, portugol, e ` direita em uxograma. a Se a condio estabelecida verdadeira, so executados os comandos c1, c2, ... e ca e a no so executados os comandos c10, c11.... Se a condio falsa, so executados os a a ca e a comandos c10, c11, ..., mas no os primeiros. a Neste caso a identao tambm importante. Os comandos se, seno e mse ca e e a comeam na margem corrente. Todos os demais comandos internos a este deixam uma c identao de 3 caracteres. ca Exemplo:
DELTA < 0
1: 2: 3: 4: 5: 6:
DELTA 4 A C - sqr(B) se DELTA < 0 ento a escreva (raizes imaginrias) a seno a X sqrt(DELTA) mse
4.4.3
Alternativas aninhadas
Nada impede que exista uma condio dentro de outra, (regra da programao estruca ca turada) e assim por diante. Nestes momentos a identao mais importante ainda. ca e Repare no exemplo a seguir: Para ver a vantagem da identao analisar-se- exatamente o mesmo cdigo, porm ca a o e escrito sem este recurso:
88-08, Pedro Kantek
78
in cio
A=0 v B0
C=0 v D0
1: 2: 3: 4: 5: 6: 7: 8:
F3
G 77
1: 2: 3: 4: 5: 6: 7: 8:
79
Denir se um valor numrico representativo de um ms, est correto e e a 1: se MES > 0 MES < 13 ento a 2: ... mes OK ... 3: seno a 4: ... mes ERRADO ... 5: mse Um certo cdigo pode assumir os seguintes valores: 10, 15, 17, 18 e 30. Testar se ele o est ou no correto. a a 1: se COD = 10 COD = 15 COD = 17 COD = 18 COD = 30 ento a 2: ... cdigo OK ... o 3: seno a 4: ... cdigo ERRADO ... o 5: mse As vezes mais fcil organizar a sa correta atravs do SENAO e no do ENTAO, e a da e a 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 ento a 2: ... indicador ERRADO ... 3: seno a 4: ... indicador CERTO ... 5: mse Se entretanto, quisssemos no inverter as saidas, precisar e a amos negar as condies. co Atente-se a que a negao de um conjunto de OUs um conjunto de Es. ca e 1: se IND = 1 IND = 4 IND = 5 IND = 6 IND = 7 IND = 9 ento a 2: ... indicador CERTO ... 3: seno a 4: ... indicador ERRADO ... 5: mse Outra maneira de escrever o comando acima, seria: se (IND = 1) (IND > 3 IND < 8) (IND = 9) ento a 2: ... indicador ERRADO ... 3: seno a 4: ... indicador CERTO ... 5: mse Finalmente, se quisssemos manter as saidas sem inverso: e a 1: se (IND = 1) (IND 3 ou IND 8) (IND = 9) ento a 2: ... indicador CERTO ... 3: seno a 4: ... indicador ERRADO ... 5: mse
88-08, Pedro Kantek
1:
80
Em resumo, a negao de ca
Outro Exemplo: Suponhamos o seguinte trecho de lgica: Um aluno estar aprovado se: o a
Tiver mdia maior ou igual a 7,00 E e Tiver assistido a 45 ou mais aulas
Supondo que a mdia a varivel M, e que o nmero de aulas assistidas a varivel e e a u e a AA, poderia car usando SEs aninhados Veja na gura 4.4.3
in cio
se MD 7 ento a se AA 45 ento a ...APROVADO seno a ...REPR. FREQUENCIA mse seno a se AA 45 ento a ...REPR. MEDIA seno a ...REPR. NOS 2 mse mse
usando SEs compostos 1: se MD 7 AA 45 ento a 2: ...APROVADO 3: mse 4: se MD 7 AA < 45 ento a 5: ...REPROVADO POR FREQUENCIA 6: mse 7: se MD < 7 AA 45 ento a 8: ...REPROVADO POR MEDIA 9: mse 10: se MD < 7 AA < 45 ento a 11: ...REPROVADO NOS 2 CRITERIOS 12: mse
verso de 10 de fevereiro de 2008 a
81
CAP ITULO 4. COMANDOS misturarando tudo Funciona, embora no seja uma boa idia. a e 1: se MD 7 AA 45 ento a 2: ...APROVADO 3: seno a 4: se AA 45 ento a 5: ...REPROVADO POR MEDIA 6: seno a 7: se MD 7 ento a 8: ...REPROVADO POR FREQUENCIA 9: seno a 10: ...REPROVADO NOS 2 CRITERIOS 11: mse 12: mse 13: mse Na programao, o demnio se esconde nos detalhes, Niklaus Wirth ca o
Exerc cio 22 Dena um algoritmo que receba sries de 3 valores reais indicativos de e
lados de um tringulo, medidos em cent a metros. Para cada tripla, o programa deve responder as seguintes perguntas: 1. Tais lados podem formar um tringulo ? a 2. Este tringulo retngulo ? a e a 3. Este tringulo equiltero ? a e a 4. Este tringulo issceles ? a e o 5. Este tringulo escaleno ? a e 6. Este tringulo acutngulo ? a e a 7. Este tringulo obtusngulo ? a e a Condies do problema co triangulo ? maior < A+B e retangulo maior2 = A2 + B2 equilatero A=B=C issceles o (A = B) ou (B = C) ou (A = C) escaleno (A = B) e (A = C) acutngulo a maior2 < A2 + B2 obtusngulo maior2 > A2 + B2 a Por exemplo se for lido dever ser impresso a 3,4,5 sim, retngulo, escaleno a 3,3,3 sim, equiltero, acutngulo a a 1,2,7 no a 10,18,10 sim, issceles, acutngulo o a
Exerc cio 23 Um cdigo est certo se for maior que 100, ou igual a 50. Escrever um o a algoritmo portugol que receba este valor e some 1 no cdigo se ele estiver errado. o Exerc cio 24 Uma data vem acompanhada de um campo chamado DIASEM, cujo valor 1 para domingo, 2 para segunda, ... , 7 para sbado. Escrever um algoritmo portugol e a que receba DIASEM e verique se o dia corresponde a um dia util. (semana inglesa).
88-08, Pedro Kantek
82
Exerc cio 25 Escrever um algoritmo portugol que receba (no importa como) trs a e valores numricos (chamados A,B e C), e devolva a informao OKquando se satiszerem e ca as seguintes condies: (A deve ser maior que 10 e menor do que 100) OU (B deve ser co diferente de C E C deve ser maior que 50). Se a condio no for satisfeita, o algoritmo ca a deve devolver a mensagem ERRO
4.5
Estruturas de repetio ca
Para obedecer ` terceira estrutura da programao estruturada e visando o reaproveitaa ca mento de cdigo, ver-se-o agora as possibilidades de repetir partes do algoritmo. Estas o a estruturas contm impl e cito um comando de desvio (go to) e nas linguagens mais modernas o unico desvio que aceito. e e Os trechos de programas que so repetidos ao se usar as estruturas de repetio so a ca a conhecidos genericamente com o nome de loops ou em portugus laos. Assim, um erro e c de programao bastante comum o chamado loop innito, quando inadvertidamente a ca e condio de sa tal, que nunca alcanada. ca da e e c
4.5.1
Parece razovel que um algoritmo deve ser criado para a execuo de um unico conjunto a ca de valores fornecidos como entrada. Por exemplo, ao escrever o algoritmo de aprovao ca de alunos na cadeira de algoritmos do Unicenp, o programador s precisa se preocupar o com um unico aluno, pois a regra de um vale para todos. No teria sentido descrever a os mesmos procedimentos para todos os alunos, isto seria interminvel, alm de deixar a e o algoritmo espec co para um determinado nmero de alunos. u Falando em termos mais genricos, ao escrever um programa de computador que e calcule o salrio de um empregado, deve-se imaginar apenas um empregado e no os a a milhares que o computador processar. a A chave para este problema est no reaproveitamento de instrues do algoritmo. a co Em outras palavras, uma vez escrito o caminho principal do algoritmo (o chamado caminho das pedras), ns vamos fazer todos os funcionrios (ou alunos) passarem por este o a caminho. Uma das chaves para este procedimento o comando chamado ENQUANTO. e Seu formato: enquanto <condi~o> faa ca c c1 c2 ... fimenquanto Este comando deve ser assim interpretado. A condio avaliada. Se ela for falsa, ca e o algoritmo deve saltar todos os comandos subordinados e continuar a execuo aps ca o o comando menquanto. Entretanto, se a condio for verdadeira, os comandos subca ordinados so executados, at se encontrar o comando menquanto. Neste momento, a e h um desvio na seqncia de processamento e um retorno ao comando enquanto. a ue A condio novamente avaliada. Se falsa, pulam-se os comandos subordinados. Se ca e verdadeira, os comandos so novamente executados, e assim por diante. a Se a condio for uma verdade eterna, isto , algo como 1 = 1, tem-se um lao inca e c nito, pois os comandos nunca deixaro de ser executados. Por outro lado se a condio a ca for uma tautologia (sempre falsa), ento os comandos subordinados nunca sero execua a tados. Exemplo Calcular a soma dos nmeros inteiros at 100. u e
verso de 10 de fevereiro de 2008 a
83
in cio
1: 2: 3: 4: 5: 6: 7: 8: 9:
SOMA:real NUMERO:inteiro SOMA 0 NUMERO 1 enquanto NUMERO < 101 faa c SOMA SOMA + NUMERO NUMERO NUMERO + 1 menquanto escreva (SOMA)
escreva (SOMA)
Comandos internos ao comando enquanto devem estar identados de 3 espaos, para c clareza. enquanto <condi~o> ca <comando-1> <comando-2> ... fimenquanto faa c
1: 2: 3: 4: 5:
4.5.2
O segundo comando que se usa para controlar laos, atende pelo nome de para. Ele c pressupe a existncia de uma varivel de controle que ir (como o nome diz) controlar o e a a o in e o m do lao. cio c O formato do comando para e para varivel DE valor-1 ATE valor-2 [PASSO valor-3] faa a c comando 1 comando 2
88-08, Pedro Kantek
84
Uma especial observao deve ser feita quando o valor-3 (o incremento) for negativo. ca Nestes casos h vrias inverses no comando, a saber: a a o
O valor 1 deve ser maior do que o valor 2, j que a varivel de controle vai diminuir a a ao invs de aumentar. e O teste de saida para maior ou igual, por idntica razo. e e a
Veja-se dois exemplos para ajudar a entender e a guardar estas questes: o para J de 1 at 9 passo 2 faa e c escreva J mpara Aqui sero impressos os valores 1, 3, 5, 7 e 9. J em a a 1: para J de 9 at 1 passo -2 faa e c 2: escreva J 3: mpara Sero impressos os valores 9, 7, 5, 3 e 1. a Devemos lembrar que todo comando para pode ser convertido em seu equivalente enquanto. D mais trabalho (so 3 comandos) mas sempre poss a a e vel. J a rec a proca nem sempre verdadeira. S poss transformar um enquanto em um para equive oe vel alente, quando se souber o nmero exato de iteraes que o enquanto faria. Quando u co isto for desconhecido a converso no poss a a e vel. Exemplos: usando para equivalente usando enquanto para I de 1 at 10 passo 2 I 1 e escreva I enquanto (I 10) fimpara escreva I II + 2 fimenquanto
1: 2: 3:
verso de 10 de fevereiro de 2008 a
85
4.5.3
Alm da instruo enquanto, a maioria das linguagens de alto n e ca vel oferece outras formas de repetir uma parte do programa. A rigor, com uma unica estrutura poder-se ia resolver todos os problemas (como, demonstraram aqueles dois professores italianos). Entretanto, criar um programa no um exerc a e cio acadmico, ou no s isso. Na e a e o universidade, no h pressa, e o rigor cient a a co o que importa. Na vida prtica h e a a pressa, e o rigor importante na medida em que garante qualidade, ele no um m e a e em s mesmo. Portanto, visando facilitar, acelerar e simplicar, tem-se aqui um outro comandos de repetio: ca repita comando 1 comando 2 ... comando n at <condi~o> e ca Os comandos internos ao repita so executados enquanto a condio contida na a ca clusula at no for satisfeita. Isto , quando o uxo chega ao at, a condio a e a e e ca e avaliada. Se for verdadeira, o uxo segue aps o at. Se for falsa, o uxo retorna ao o e comando imediatamente seguinte ao repita. Embora parecido com o enquanto, o repita tem algumas diferenas, a saber c
Os comandos internos ao repita so executados sempre ao menos uma vez, indea pendente da condio. J no enquanto, tais comandos podem no ser executados ca a a nem uma vez. O lao do enquanto ser realizado se a condio for VERDADEIRA. J o lao do c a ca a c repita ser realizado se a condio for FALSA. a ca A estrutura enquanto testa e faz. A estrutura repita faz e testa.
Em geral tudo o que se faz com um deles se pode fazer com o outro. A vantagem que para determinadas situaes (que so espec e co a cas de cada algoritmo) um ou outro pode ser mais indicado, isto pode resolver o problema com menos lgica adicional (o e o chamado overhead) tais como contadores, chaves, testes etc. Uma observao meio extempornea, mas ainda assim importante aos java-parlantes ca a ou aos C-parlantes: Nestas duas linguagens o comando de repetio com condio no ca ca in cio e no nal o mesmo. Trata-se do comando while. Muda apenas o local da e condio. Por esta razo, no existe a inverso lgica de sa explicitada acima. Em ca a a a o da Java e em C, a sa quando a condio aparece depois do bloco quando a condio da ca e ca e FALSA. E o contrrio do comando repita acima descrito. a Veja-se em exemplos: No portugol acima descrito tem-se Neste trecho sero impressos os valores 4, 7, 10, 13, 16, 19 e 1000. J em Java o a a trecho caria 1: J = 4 2: while { 3: system.out.println (J) // assim mesmo ? e 4: J = J + 3 5: J > 20 6: system.out.println (1000) } Ser impresso pelo Java: 4, 1000. a
88-08, Pedro Kantek
86
in cio
J4
escreva J JJ+3
J > 20
v escreva 1000
tipos de algoritmos (algo jocoso) Uma categorizao com algo de chacota, mas que ajuda a entender os algoritmos: ca 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 no gera resultado nenhum externo ao a computador. (Por exemplo, um programa que atualize o relgio da mquina) o a Inventa e imprima o algoritmo no recebe nada, mas ao ser acionado gera um rea sultado (Por exemplo, o algoritmo que estabelece letra pequena na impressora matricial. Inventa e esquece ???
Exerc cio 26 Denir algoritmo que escreva a soma dos primeiros 100 nmeros inteiros u
(1, 2, 3, ... , 100)..
Exerc cio 27 Denir algoritmo que escreva a soma dos primeiros 100 nmeros pares u inteiros (2, 4, 6, ... , 200). Exerc cio 28 Denir algoritmo que some todos os mltiplos de 7 compreendidos entre u 100 e 10000, e informe ao nal, quantos foram os mltiplos e quanto resultou sua soma. u Exerc cio 29 Escreva um algoritmo que leia dois nmeros inteiros n e m e: u
Teste se m > n, se no for dar uma mensagem de erro e terminar o processamento a Somar todos os mltiplos de 13 que estiverem compreendidos entre n e m, inclusive u Imprimir a soma ao nal
Exerc cio 30 Denir algoritmo que leia 17.000 nmeros reais e informe, quantos: u
1. foram maiores do que 100;
verso de 10 de fevereiro de 2008 a
87
Exerc cio Resolvido 1 Escreva um algoritmo que leia uma srie de notas (que se e
encerram quando for lido um nmero negativo) e ao nal escreva as duas maiores notas que u 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 um pouco mais complexo, vamos ver diversas estratgias para a sua cio e e soluo: ca 1. primeira estratgia e 1: enquanto ... faa c 2: leia(N) 3: se N > P ento a 4: PN 5: mse 6: se N > S ento a 7: SN 8: mse 9: menquanto DEFEITO: ao nal, P e S tero o mesmo valor (o maior) a 2. segunda abordagem 1: enquanto ... faa c 2: leia(N) 3: se N > P ento a 4: PN 5: mse 6: se N > S ento a 7: se N = P ento a 8: SN 9: mse 10: mse 11: menquanto DEFEITO: Com a srie 1, 10, 2, 8, 5 funciona e Com a srie 1, 8, 7, 2, 9 no funciona e a 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 faa c 6: leia (NUM, NOT) 7: se NOT > PNO ento a 8: se PNO > SNO ento a 9: SNO PNO 10: SNU PNU
88-08, Pedro Kantek
88
mse PNO NOT SNO NUM mse se NOT > SNO ento a se NOT = PNO ento a SNO NOT SNU NUM mse mse menquanto escreva (PNO,PNU) escreva (SNO,SNU)
Eis a lista de variveis usada acima a NUM = nmero do aluno atual u NOT = nota do aluno atual PNU = nmero do aluno com a melhor nota at agora u e PNO = melhor nota at agora e SNU = nmero do aluno com a segunda melhor nota at agora u e SNO = segunda melhor nota at agora e X = contador at 100 e
Exerc cio 31 Denir algoritmo capaz de jogar com o operador oJOGO DO PALITO,
e de vencer, sempre que poss vel. Este jogo tem a seguinte regra.
So dois jogadores, a quem chamaremos: mquina (programa) e humano. a a O humano escolhe um nmero de palitos qualquer entre 20 e 30. u A mquina retira 1, 2 ou 3 palitos. a O humano tambm retira 1, 2 ou 3 palitos, e a seqncia prossegue, at que reste e ue e apenas um palito. Quem tirar o ultimo palito perde. O programa deve atentar para impedir retiradas diferentes de 1 2 ou 3.
Dica: Estratgia vencedora: deixar o adversrio sempre com 1, 5, 9, 13, 17, 21, 25 ou 29 e a
Exerc cio 32 Dena algoritmo que calcule e escreva o somatrio expresso pela seguinte o
srie: e S= 500 480 460 20 + + + ... + 2 3 4 26
Exerc cio 33 Escreva um algoritmo que leia uma seqncia de nmeros positivos (a ue u
condio de m a leitura do nmero -1) e escreva ao nal, qual o nmero mais prximo ca e u u o de 100 que foi lido. DESAFIO: escreva o nmero par mais prximo a 100. u o
Exerc cio 34 Escreva um algoritmo que leia uma seqncia de nmeros positivos (a ue u
condio de m a leitura do nmero -1) e escreva ao nal, qual o ultimo nmero que foi ca e u u lido. DESAFIO: escreva o ante-penltimo, ou -1 se no houver ante-penltimo u a u
verso de 10 de fevereiro de 2008 a
89
Exerc cio 35 Dados o seguinte trecho de lgica escritos usando o enquanto, escrever o
trecho equivalente usando o repita 1: Z 10 2: enquanto Z > 0 faa c 3: ZZ-3 4: escreva (Z) 5: menquanto
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 GH = 5 e
maior que 3), e escreva PRIMOse ele for primo, ou NAO PRIMO ele for divis se vel. Por PRIMO e se for lido 11, dever dizer exemplo, se for lido 10, o programa dever dizer NAO , PRIMO.
Exerc cio 38 Escrever um algoritmo que leia um unico nmero (que por denio u ca e
Exerc cio 39 Denir algoritmo que leia uma seqncia de valores numricos inteiros ue e e determine, ao nal se eles estavam em ordem ascendente ou no. Se estiverem, deve a imprimir EM ORDEM e se no estiverem, deve imprimir FORA DE ORDEM , a . Exerc cio 40 Dena algoritmo que calcule e escreva o somatrio expresso pela seguinte o srie. O nmero de termos deve ser lido a priori. e u
1 1 1 1 S = 1 + 2 + 3 + ... + n 2 3 4 n+1
Exerc cio 42 Dados o seguinte trecho de lgica escritos usando o enquanto, escrever o
trecho equivalente usando o repita. 1: A 10 2: B 20 3: enquanto (A + B) < 50 faa c 4: AA+5 5: B B + 10 6: escreva (A+B)
88-08, Pedro Kantek
90
menquanto
Exerc cio 43 Dados o seguinte trecho de lgica escritos usando o enquanto, escrever o
trecho equivalente usando o repita. 1: K 5 2: enquanto K < 10 faa c 3: K K + 1.5 4: escreva (K) 5: menquanto
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 T > 10 e
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: AA+1 4: at (A > 10) e b) 1: GH 5 2: repita 3: escreva (ABC) 4: at (GH = 5) e c) 1: T 0 2: repita 3: T T + 0.5 4: escreva (T * 2) 5: at (T > 10) e
Exerc cio 47 Um comercial de rdio tem seu custo em funo de 2 variveis, a saber: a ca a durao e hora de irradiao, segundo a tabela: ca ca
Durao ca At 10 segundos e De 11 a 30 segs Acima de 30 segs de 0 a 5h59min 5 US$ 12 US$ 16 US$ Horrio a de 6 a 20h59min 12 US$ 21 US$ 26 US$ 91 de 21 a 24h 8 US$ 17 US$ 22 US$
88-08, Pedro Kantek
CAP ITULO 4. COMANDOS e Obs: o preo acima para o comercial inteiro, ou seja, NAO por segundo de comercial. c e Denir algoritmo que: 1. leia o valor da cotao do dlar naquele dia ca o 2. leia srie de duplas (durao,hora) escreva a dupla e o valor a ser cobrado em reais. e ca A durao est dada em segundos. ca a Os dados terminam quando for lida uma dupla com durao igual a zero. ca Valores vlidos: 0 Durao 60, 0 Hora 23 a ca Por exemplo, se o dlar estiver cotado a R$ 2,20 e o forem lidos dever ser impresso 10,4 26,40 R$ 20,23 37,40 R$ 10,23 17,60 R$ 0,0 m...
Exerc cio 49 Denir um algoritmo que leia uma srie indeterminada de valores posie tivos, sendo que a marca de m a leitura do nmero -1. O algoritmo deve imprimir qual o e u ultimo nmero lido, imediatamente antes do nmero -1. Por exemplo, se for lida a srie 3, u u e 7, 21, 4, -1, o algoritmo deve imprimir 4. Exerc cio 50 Dena e escreva um algoritmo para imprimir todos os nmeros perfeitos u entre 1 e 500. Um nmero perfeito aquele que igual a soma de todos os seus fatores. O u e e primeiro nmero perfeito o 6 (6=1+2+3), logo por denio o nmero 1 no perfeito. u e ca u a e Usar uma funo para determinar se um nmero ou no perfeito. Outros nmeros so: ca u e a e u a 28, 496. Depois disso, descobrir qual o prximo nmero perfeito, maior que 500. o u Exerc cio 51 Dena um algoritmo que calcule e escreva a soma da srie a seguir, e considerando 50 termos:
S= 100 2 4 6 + + + ... + 3 5 7 101
Exerc cio 52 Denir algoritmo que receba uma srie de triplas de nmeros inteiros. e u Para cada tripla deve ser gerada uma progresso aritmtica supondo que: a e
O primeiro elemento da tripla o termo inicial e O segundo elemento da tripla a razo e a O terceiro elemento da tripla o nmero de termos e u
Os elementos da PA devero ser impressos. O processo termina quando for lido um nmero a u de termos igual a zero.
Exerc cio 53 Escreva um algoritmo que leia uma srie de nmeros inteiros e positivos e u e ao nal do processamento escreva qual o maior deles. O processamento se encerra quando for lido qualquer nmero negativo que no deve ser considerado para efeitos de comparao. u a ca
88-08, Pedro Kantek
92
Exerc cio 54 Escrever um algoritmo, que receba conjuntos de 3 notas de um aluno. O primeiro valor corresponde a mdia do primeiro semestre. O segundo valor mdia do e e e segundo semestre, e o terceiro valor correspondendo a nota nal. Existe uma varivel no a algoritmo (pr-denida) chamada QTD-APROV. Para cada aluno aprovado, o algoritmo e deve somar 1 em QTD-APROV. Regra de aprovao: ca
(N1 3 + N2 3 + N3 4) 10 7 Os dados terminam quando o primeiro valor da srie for negativo. Por exemplo, se QTDe APROV tiver o valor 0, e forem lidas as triplas (5,7,2), (8,8,6), (1,10,5) e (-1,0,0) o resultado nal de QTD-APROV ser 1. a
Exerc cio 55 Denir um algoritmo que leia uma srie de pares de valores inteiros que e representam COMPRIMENTO e LARGURA de um retngulo. Calcular e imprimir a rea do a a retngulo se o per a 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 ser o a impressa a rea 80, equivalente ` dupla (10,8). a a Exerc cio Resolvido 2 Imagine um relgio analgico de ponteiros. No existe o o o a
ponteiro de segundos, e os ponteiros realizam movimentos discretos, isto , eles s se movem e o a cada 60 segundos. Escreva um algoritmo que leia diversos conjuntos de hora e minuto, e para cada conjunto lido, informe qual o menor ngulo que os dois ponteiros fazem entre a si ao representar a hora informada. O algoritmo termina quando for lida a dupla 0,0. Os valores permitidos para hora esto entre 0 e 11 e para minuto os valores vlidos esto entre a a a 0 e 59. A sa do resultado pode ser em graus e dcimos de grau, ou se o aluno preferir da e em graus e minutos. 1: algoritmo ponteiro 2: inteiro h m 3: real ah am qtm angulo 4: leia (h,m) 5: enquanto h = 99 faa c 6: qtm (h * 60) + m 7: ah qtm * 0,5 8: am qtm * 6 9: enquanto ah 360 faa c 10: ah ah - 360 11: menquanto 12: enquanto am 360 faa c 13: am am - 360 14: menquanto 15: se se ah > am ento a 16: angulo ah - am 17: seno a 18: angulo am - ah 19: mse 20: se se angulo > 180 ento a 21: angulo 360 - angulo 22: mse 23: escreva (angulo) 24: leia(h,m) 25: menquanto 26: m{algoritmo}
verso de 10 de fevereiro de 2008 a
93
Exerc cio 56 Interprete o seguinte trecho de algoritmo, informando (em portugus) o e que faz ou para que serve o algoritmo analisado. Estude e informe a condio de m. Se ca necessrio, realize um chins a e sobre os dados. 1: inteiro CA,CE 2: leia(CA,CE) 3: enquanto CA = CE faa c 4: se CA < CE ento a 5: escreva(CA) 6: mse 7: escreva(CE) 8: leia(CA,CE) 9: menquanto Exerc cio 57 Interprete o seguinte trecho de algoritmo, informando o que faz ou para que serve o algoritmo analisado. Estude e informe a condio de m. Se necessrio, realize ca a um chins e 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 = 0 faa c 10: se A < B ento a 11: BA 12: mse 13: leia(A) 14: menquanto 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 condio de m. Se necessrio, realize ca a um chins e 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 = 0) (C = 0) faa c 7: se R = 0 ento a 8: C 2 PI R 9: seno a 10: R C (2 PI) 11: mse 12: escreva(R,C) 13: leia(R,C) 14: menquanto Exerc cio 59 Siga o seguinte algoritmo, e informe quais os valores de A, B, C e D que so impressos ao nal. a
88-08, Pedro Kantek
94
inteiro A, B, C, D A0 B 10 CB3 DB+C+A enquanto D < 0 faa c AA+1 DD+1 menquanto se A > 0 ento a DD2 seno a BB2 mse escreva (A,B,C,D)
Exerc cio 60 BrinquedosPIRRALHOS ENDIABRADOS um grande distribuidor de e presentes em todo o pa Recentemente, a empresa teve a oportunidade de comprar 15.000 s. pequenos brinquedos, todos embalados em caixas retangulares. O objetivo da compra, foi colocar cada brinquedo em uma esfera colorida, para revend-los como surpresa, mais ou e menos como o Kinder ovo. Existem esferas de raios 10, 20 e 30 cm. Cada brinquedo, tem um nmero de ordem, e as suas 3 dimenses A, B e C, medidas em cent u o metros. Denir um algoritmo que leia 15.000 qudruplas (ordem,A,B,C) e para cada uma delas escreva a a ordem do brinquedo e o raio da esfera necessrio. Todos os brinquedos cabero em uma das a a esferas. Exerc cio 61 Supondo um trecho de cdigo escrito em pseudo-cdigo: o o
para I de 1 at 100 faa e c para J de 3 at 11 passo 2 faa e c para K de 5 at 25 passo 5 faa e c 4: escreva (I,J,K) 5: mpara 6: mpara 7: mpara Imagine que voc precisa re-escrever este cdigo e a sua nova linguagem no estruturada, e o a e o que signica que no existem as estruturas para ... mpara, enquanto ... menquanto e a nem repita ... at. Voc s conta com labels, testes e desvios. e e o Eis como caria: 1: algoritmo qualquer 2: I 1 3: J 3 4: K (*1) 5: L1: se (I > 100) 6: vpara FIM a 7: seno a 8: se (J > 11) 9: vpara L2 a 10: seno a 11: se (K > (*2)) 12: vapara L3
1: 2: 3:
verso de 10 de fevereiro de 2008 a
95
CAP ITULO 4. COMANDOS seno a escreva (I,J,K) K K + (*3) vpara L1 a mse mse mse 20: L3: J J + (*4) 21: K 5 22: vpara L1 a 23: L2: I++ 24: J (*5) 25: K 5 26: vpara L1 a 27: malgoritmo Os valores propostos para (*1) (*2) (*3) (*4) e (*5) para que os dois trechos sejam equivalentes so a
13: 14: 15: 16: 17: 18: 19:
a) b) c) d) e)
5, 5, 5, 1, 1,
5, 5, 5, 1, 1,
2, 2 2, 11 2, 11 1, 2 2, 1
4.5.4
Nos casos em que h mltiplas sa a u das para um determinado teste, ns podemos usar o a estrutura de alternativas simples e compostas, devidamente encadeadas. Tal uso (de acordo com os dois mestres italianos) sempre suciente para a soluo de qualquer e ca problema. Entretanto, para simplicar a poss soluo, inmeras linguagens tem o comando vel ca u de teste mltiplo (COBOL tem o GOTO depending ON, PASCAL tem o comando u CASE, dbase tem o CASE, APL tem o desvio para um vetor etc). Aqui, usar-se- o a seguinte formato: escolha <express~o> a caso valor-1 [: valor-2 caso valor-a [: valor-b ... sen~o : comando-z a fimescolha ...] : comando-1 ...] : comando-a
O funcionamento deste comando simples: A expresso que aparece ao lado do e a comando Escolha avaliada, e deve gerar um resultado determinado. Este resultado e ser comparado com os valores colocados ao lado direito das palavras caso. Quando um a valor igual for encontrado, o comando colocado o seu lado ser executado. Finalmente, a se nenhum valor for igual, e existir a clusula seno, esta ser executada. Exemplo a a a 1: ESCOLHA (A + 1) 2: CASO 1 : comando-1; 3: CASO 2 : 3 : 4 : comando-2; 4: SENAO: omando-3; 5: FIMESCOLHA
88-08, Pedro Kantek
96
CAP ITULO 4. COMANDOS Aqui, se A for zero, ser executado o comando-1. a Se A for 1, 2 ou 3, ser executado o comando-2. a Se A tiver qualquer valor diferente de 0, 1, 2 ou 3, ser executado o comando-3. a
4.5.5
Este comando exige uma sa incondicional de cada uma das estruturas de repetio da ca (enquanto, repita ou para), independente de condies. Geralmente, este comando co e colocado dentro de um se. O desvio sempre se d para o comando seguinte ao m da a estrutura que est sendo usada. Eis o formato do comando a abandone Este comando s tem sentido quando emitido dentro de um lao de processamento o c (dentro de um enquanto, repita ou para). Ele utilizado quando se deseja - a partir e de uma determinada condio - abandonar o processo iterativo em curso. Seu funcionaca mento simples: ao ser executado, este comando provoca um desvio incondicional para e o comando subseqente ao m do lao. u c Exemplo 1: enquanto A > 10 faa c 2: comando 1... 3: comando 2... 4: se B = 5 ento a 5: abandone 6: mse 7: comando 10... 8: menquanto 9: comando 20... 10: ... Neste caso, quando abandone for executado, independente do estado da varivel A (e a do teste (A > 10), ser executado o comando 20. Assim, quando abandone executado a e dentro de um para, desvia-se para o comando seguinte ao mpara. Da mesma forma, quando dentro de um repita executa-se o seguinte a at ... . e Se existirem dois ou mais laos (um dentro do outro), e for emitido um abandone, c ele vale para o lao mais interno. Exemplo c 1: enquanto (X = 10) faa c 2: comando 1 ... 3: enquanto (Y > 20) faa c 4: comando 10 ... 5: se (Z = 8) ento a 6: abandone 7: mse 8: comando 30 ... 9: menquanto 10: comando 40... 11: menquanto 12: comando 50... Neste caso, ao ser executado o abandone, ser executado o comando 40 e no o a a comando 50 como poderia parecer a primeira vista.
Exerc cio 62 Dados o seguinte trecho de lgica escritos usando o enquanto, escrever o
trecho equivalente usando o repita.
verso de 10 de fevereiro de 2008 a
97
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: AA+1 4: at A > 10 e
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 20 faa e c 2: XJ3 3: escreva (X) 4: mpara
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 100 passo 2 faa e c 2: SEM1 SEMENTE 2 3: SEM2 SEMENTE + 1.5 ABC 4: MEDIA (SEM1 + SEM2) 2 5: escreva MEDIA 6: mpara
Exerc cio Resolvido 3 Dois nmeros so considerados amigosquando um nmero u a u igual a soma dos fatores do outro nmero. Por exemplo, 220 e 284 so amigos, pois 220 e u a igual a soma dos fatores de 284 (142,71,4,2,1) e 284 a soma dos fatores de 220 (110 e e 55 44 22 20 11 10 5 4 2 1). Denir algoritmo que escreva os pares de nmeros amigos u existentes entre 1 e 500. 1: inteiro i,j,k,l,m,n 2: inteiro funo somf (inteiro a) ca 3: inteiro var ind,som 4: som 0 5: para ind 1 to a-1 faa c 6: se a mod ind = 0 ento a 7: som som + i 8: mse 9: mpara
88-08, Pedro Kantek
98
retorne som m{funo} ca para i 1 to 500 faa c escreva i para j i to 500 faa c m somf(i) n somf(j) se (m = j) (n = i) ento a escreva (i,j) mse mpara mpara
Exerc cio Resolvido 4 Escreva uma funo que receba um nmero inteiro positivo ca u
k, calcule e devolva o prximo nmero primo x, onde k x. o u Soluo Para resolver este exerc ca cio, consideraremos denida e operante a funo EPca RIMO, com o seguinte cabealho lgico fun~o EPRIMO (inteiro x), que devolve VERc o ca DADEIRO quando x primo e FALSO seno. e a Eis a resposta 1: inteiro funo PROXPRIM (inteiro K) ca 2: enquanto 1=1 faa c 3: se EPRIMO(K) ento a 4: retorne K 5: abandone 6: mse 7: K++ 8: menquanto 9: mfuno ca Atente para a condio terminadora do enquanto. J que a sa se dar atravs do ca a da a e abandone, qualquer condio sempre verdadeira pode ser colocada a ca .
Exerc cio Resolvido 5 Voc tem uma coleo seqencial de 10.000.000 de apose ca u
tas na sena. Para cada apostador, existem os 6 nmeros em que ele jogou e mais o u nmero da aposta, que posteriormente identicar o apostador. Suponha uma funo u a ca lgico ganhou (inteiro a1, a2, a3, a4, a5, a6) que devolve VERDADEIRO se esta o aposta vencedora e FALSO seno. Suponha tambm que a condio de m de dados a e a e ca e leitura de a1 negativo. Soluo Para resolver este exerc ca cio, duas hipteses podem ser consideradas: a primeira o 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 faa c 5: se ganhou (a1, a2, a3, a4, a5, a6) ento a 6: escreva apostador 7: mse 8: leia (a1, a2, a3, a4, a5, a6, apostador) 9: menquanto 10: m{algoritmo}
verso de 10 de fevereiro de 2008 a
99
CAP ITULO 4. COMANDOS A segunda abordagem, faz apenas uma leitura, mas a funo nitidamente menos limpa ca e 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 faa c 5: leia (a1, a2, a3, a4, a5, a6, apostador) 6: se a1 > 0 ento {pode ter chegado o negativo} a 7: se ganhou (a1, a2, a3, a4, a5, a6) ento a 8: escreva apostador 9: mse 10: mse 11: menquanto 12: m{algoritmo}
Uma estratgia pesquisar os poss e e veis valores de x, y e z, usando intuio, pistas, ca experincias passadas, ao estilo de Sherlock Holmes. Uma segunda estratgia usar da e e e informao de que 2 x, y, z, 7 e adotar a fora bruta, fazendo ca c 1: para X de 2 at 7 faa e c 2: para Y de 2 at 7 faa e c 3: para Z de 2 at 7 faa e c 4: para I de 1 at 10 faa e c 5: escreva ... 6: mpara 7: escreva ... 8: mpara 9: mpara 10: mpara
Exerc cio 67 Escrever um algoritmo que leia uma srie indeterminada de nmeros e u positivos. A leitura deve prosseguir at ser lido o nmero 1203, quando o programa dar e u a mensagem 1203 ENCONTRADO e terminar o processamento. Se este nmero no for u a encontrado, ao nal dos dados (quando for lido um nmero negativo) o programa deve u
88-08, Pedro Kantek
100
CAP ITULO 4. COMANDOS imprimir o nmero lido mais prximo de 1203, com a mensagem xxx MAIS PROXIMO u o , onde xxx o nmero em questo. e u a
Exerc cio 68 Dena um algoritmo capaz de somar os primeiros 50 nmeros mltiplos u u de 4, comeando no 4 (isto : 4, 8, 12, ...400). O algoritmo deve imprimir o resultado ao c e nal. Exerc cio 69 Escreva um algoritmo capaz de calcular e imprimir o valor da somatria o dada pela srie a seguir. O nmero de termos lido ao in do algoritmo. e u e cio
S= 12 22 32 + + + ... 1 2 4
Para resolver este tipo de exerc cio, deve-se buscar a frmula do termo genrico. Sem esta o e frmula dif programar a soluo. Fica: o e cil ca Tn = e sobretudo S=
i=1
12 + (n 1) 10 2 (n 1)
n
Tn
ou S=
n i=1
12 + (n 1) 10 2 (n 1)
Ao se encerrar este algoritmo quais os valores de X e Y ? O que acontece se se tirar o E colocando em seu lugar OU
Exerc cio 72 Qual o 30 nmero primo ? e u Exerc cio 73 Escreva o algoritmo de uma funo que receba um nmero inteiro posica u tivo X e devolva o prximo primo maior ou igual a X. o
verso de 10 de fevereiro de 2008 a
101
Exerc cio 74 Dois inteiros positivos a e b so relativamente primos se no tiverem a a fatores comuns exceto 1. Por exemplo, 4 e 25 so relativamente primos, apesar de nenhum a deles o ser. Escreva uma funo que receba X e Y e devolva .V. se eles forem primos relativos ca e .F. seno. a A propsito, os nmeros 17.773 e 14.973 so relativamente primos ? o u a Exerc cio 75 Diamantes so classicados atravs de 3 testes distintos, como segue: a e
Dureza maior do que 12 Percentagem de impurezas menor que 45 Resistncia ` trao maior que 600 Kgf e a ca
Se o diamante passa nos trs testes, ele ganha o grau 50. Se passa em dois, ganha o grau e 40, se passa apenas em um teste, ganha 30, e se no passa em nenhum ganha o grau 15. a Escrever um algoritmo que leia um conjunto de variveis formado por Nmero da partida a u (inteiro), dureza (real), percentagem de impurezas (real), resistncia (real); e escreva o e nmero da partida e a nota do diamante. Os dados terminam quando for lida a partida u nmero zero. A nota do diamante deve ser calculada por uma funo. u ca
Exerc cio 76 Escreva algoritmo capaz de criar e imprimir uma tabela de ngulos, senos a
e cossenos, para todos os ngulos de 0 a 90 graus. a Exemplo ANGULO SENO COSSENO 0o 0 1 1o 0.01745240644 0.9998476952 2o 0.0348994967 0.999390827 3o 0.05233595624 0.9986295348 4o 0.06975647374 0.9975640503 5o 0.08715574275 0.9961946981 6o 0.1045284633 0.9945218954 7o 0.1218693434 0.9925461516 ...
Exerc cio 77 Denir um algoritmo que escreva a diferena entre o 21. nmero primo c u e o 13. nmero primo. u Exerc cio 78 Resolver o seguinte problema usando o comando ESCOLHA. Numa organizao, o nmero de dependentes limita a quantidade de dias que um empregado pode ca u 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 nmero de dependentes e escreva a quantidade u de dias que podem ser fruidos anualmente para cada caso. Exerc cio 79 Um concurso de vendas realizado dentro de uma empresa. Por razes e o territoriais, cada venda unitria, d direito a um bnus cujo valor depende do estado em que a a o foi feita a venda, segundo a tabela: PR e SC do direito a a 5 bnus o RS, SP e RJ 4 bnus o MG, GO, MS e TO 3 bnus o BA e PE 2 bnus o demais estados no citados 1 bnus a o
88-08, Pedro Kantek
102
CAP ITULO 4. COMANDOS Denir algoritmo que receba uma srie de vendas no formato (valor, estado) e para cada e uma informe a quantidade de bnus de direito. Os dados terminam quando for lido um o estado igual a XX ou um valor de vendas negativo.
Exerc cio 80 Denir um algoritmo que leia uma srie de nmeros inteiros e positivos e u (condio de m: leitura de um negativo). O algoritmo deve calcular e imprimir a mdia ca e dos nmeros lidos EXCLU u IDOS os zeros. Exerc cio 81 Existe um conjunto de muitos nmeros inteiros e positivos, agrupados u trs a trs. Deve-se escrever um algoritmo capaz de: e e
Ler os trs nmeros e u Identicar o maior deles, e rejeit-lo a Calcular a mdia entre os dois nmeros restantes e u Imprimir os dois nmeros selecionados e a mdia. u e
A pesquisa termina quando o primeiro nmero dos trs lidos, for negativo. u e
Exerc cio 82 Dados conjunto de 20 pares de nmeros, realizar sobre eles o seguinte u
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 nmeros e o resultado obtido segundo as u regras acima.
Exerc cio 83 Uma eleio anulada se a somatria de votos brancos e nulos superior ca e o e
` metade dos votos totais. Suponha que numa eleio existem 3 candidatos e para apur-la, a ca a deveremos ler um conjunto indeterminado de votos (nmeros inteiros), usando a regra: u
1 = voto no candidato nmero 1 u 2 = voto no candidato nmero 2 u 3 = voto no candidato nmero 3 u 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 so: 1=55 anos, 2=58 anos e 3=47 a anos. Escrever um algoritmo que: 1. Verique se a eleio foi vlida ca a 2. Se foi, quem a venceu.
Exerc cio 84 Escreva um algoritmo que leia uma sequncia de nmeros positivos (a e u leitura um depois do outro, por restrio do problema no se pode usar um vetor) com e ca a condio de m igual a leitura de um nmero negativo e escreva o ultimo nmero lidos que ca u u tenha sido maior que 100.
verso de 10 de fevereiro de 2008 a
103
Exerc cio 85 Calcular a soma total e o produto total de uma srie de nmeros inteiros e u e positivos que sero fornecidos. A srie termina quando for lido o nmero -1. a e u Exerc cio 86 Escreva um algoritmo capaz de move atribu a atletas de ginstica das a ol mpica. Tal como na prtica, este algoritmo deve eliminar a maior e a menor notas, e a a seguir calcular e imprimir a mdia entre as duas notas restantes. e
104
Cap tulo 5
Nassi-Schneiderman
Fluxos e Nassi-Schneiderman
Alm da maneira pela qual descreveremos nossos algoritmos (que atravs do Portugol), e e e existem outras formas de representar algoritmos. Falaremos de mais duas: a primeira a linguagem dos uxogramas. Tem importncia histrica na informtica, pois foi a e a o a primeira (e durante muito tempo unica) representao de programas e similares. ca A seguir uma lista dos principais s mbolos usados em uxogramas
Iniciador/terminador Processo Alternativa
Conector
Fluxogramas perderam sua condio de unicas ferramentas, entre outras razes, pelas ca o a seguir expostas:
Prestam-se mal ` programao estruturada, pois permitem a construo de algoa ca ca ritmos no estruturados. a Exigem capricho, dando muito trabalho para serem feitos e mantidos. So necessrias quantidades enormes de papel, pois h um overhead muito grande, a a a isto , s se escreve dentro dos quadrinhos, e boa parte do papel se perde. e o Embora hoje j existam programas para fazer e guardar uxos em computador a (como por exemplo o FLOWCHART e o AUTOFLOW), eles no so muito prtia a a cos para este trabalho. Assim para seguir a tendncia moderna (que guardar e e matriz da documentao em computador e no em papel) o uxograma resulta ca a incmodo. o
105
CAP ITULO 5. NASSI-SCHNEIDERMAN Outra possibilidade de representao atravs dos diagramas de NASSI & SHNEIDERca e e MAN, tambm conhecidos como mapas de CHAPIN ou estructogramas. Alguns autores e negam importncia a este trabalho, armando tratar-se de pseudo-cdigo (no caso, PORa o TUGOL), apenas escrito de outra maneira. Outros, reconhecem fora e inovao nesta c ca idia. e A idia destes diagramas formatar em um retngulo todas as informaes do proe e a co cessamento usando marcas que identiquem as diversas operaes permitidas. Tem a co vantagem sobre os uxogramas de no permitirem o desvio. Os s a mbolos usados so: a nome da estrutura objetivo
comando inicial objetivo (nome do procedimento) nome da entrada caminho cr tico
verdadeiro, ao 1 ca verdadeiro, ao 2 ca comando a repetir condio de m ca condio ca comando a executar item do caso condio 1 ca comando a executar condiao 2 c
seleao c caso 1 nome entrada 1 comando a executar nome entrada 2 comando cr tico a executar comando no a cr tico a executar a atraso de 10seg seno aes do seno co a
A seguir, alguns exemplos de algoritmos feitos em um e noutro esquema Seja o seguinte algoritmo Algoritmo Calcular {a soma dos nmeros inteiros at 100} u e real SOMA inteiro NUMERO SOMA 0 NUMERO 1 enquanto {NUMERO < 101}
88-08, Pedro Kantek
106
CAP ITULO 5. NASSI-SCHNEIDERMAN SOMA SOMA + NUMERO NUMERO NUMERO + 1 fim{enquanto} imprima SOMA fim{algoritmo} calcular soma os 100 primeiros nmeros u
real SOMA inteiro NUMERO SOMA 0 NUMERO 1 NUMERO < 101 SOMA SOMA + NUMERO NUMERO NUMERO + 1 imprima SOMA
5.1
Chines
Tambm conhecido como teste de mesa, o chines a execuo manual, passo a passo, de e e ca um algoritmo pelo programador. Em geral, atravs do chines que o autor do algoritmo e e se certica de que ele funciona. Infelizmente, o chines costuma apontar onde e quando o algoritmo falha, mas no a garante de que o algoritmo esteja 100% correto, pois o caminho eventualmente errado pode no ter sido seguido durante o chines. a As regras a seguir para um proveitoso chines, so: a Obter uma massa de dados signicativa O conjunto a testar no deve ser extenso, a mas precisa ser abrangente e incluir as condies que esto sendo testadas. Escolher bem co a os dados a testar uma arte. Se mal escolhidos no vo certicar nada e s vo dar e a a o a trabalho. Obter o resultado correto Com os dados de entrada em mos, o programador a precisa obter o resultado esperado que estes dados vo gerar. Como fazer isto, varia de a caso a caso, mas imprescind que antes de comear o chines, se saiba qual resultado e vel c esperar. Listar os parmetros e variveis Deve-se providenciar no alto de uma folha de a a papel, o nome de todos os parmetros e variveis que o algoritmo manuseia. Deve haver a a bastante espao abaixo dos nomes, a m de que os valores que iro sendo lanados, c a c 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
verso de 10 de fevereiro de 2008 a
107
CAP ITULO 5. NASSI-SCHNEIDERMAN raciocinar, a ponta da lapiseira ca sobre o ponto de interrupo. A tabela de valores ca das variveis vai sendo lida (consultada) e escrita (alterada) durante o chines a Deciso Quando o algoritmo e o chines terminam, um resultado obtido. Ento, a e a ele comparado com o resultado esperado, acima calculado. Se for diferente, um erro e aconteceu. Raras vezes no processo manual de obteno do resultado, mas quando e ca isso ocorre o algoritmo pode estar certo e o resultado obtido que est errado. Mas, na e a maioria das vezes, o algoritmo que est errado. E hora de procurar o erro e refazer e a todo o ciclo. Se ambos so iguais, o algoritmo funcionou para este caso de teste. Quanto deste a funcionamento adequado pode ser generalizado para qualquer caso de testes ca em aberto.
108
Cap tulo 6
Visualg
O VISUALG um programa que auxilia o aprendizado de algoritmos na medida em e que permite a entrada e execuo de um algoritmo escrito em portugol, conforme aqui ca descrito. Escrito pela empresa Apoio, pode ser obtido em www.apoioinformatica.com.br.
6.1
Regras de Visualg
Algoritmo E a unidade bsica de escrita de algoritmos. a formato 1: algoritmo <nome> 2: var 3: variveis a 4: se houver, a funo entra aqui ca 5: inicio 6: comandos 7: malgoritmo exemplo 1: algoritmo teste 2: var 3: N : inteiro 4: inicio 5: leia (N) 6: escreva (N * 2) 7: malgoritmo
CAP ITULO 6. VISUALG Funo A funo uma unidade no autnoma de programao. Ela sempre precisa ca ca e a o ca receber seus dados (atravs de uma lista de parmetros) e devolver um resultado a quem e a a chamou. Em Visualg so colocadas imediatamente antes da palavra inicio do bloco a a que se referem. Formato 1: funcao <nome>( <parametros>) : <tipo-resultado> 2: var 3: variveis locais a 4: inicio 5: comandos 6: ... retorne ... 7: mfuncao Exemplo 1: funcao teste(N : inteiro; A, B:real) : inteiro 2: var 3: inicio 4: retorne (N * 2) 5: mfuncao O <nome-de-funo> obedece as mesmas regras de nomenclatura das variveis. Por ca a outro lado, a <seqncia-de-declaraes-de-parmetros> uma seqncia de ue co a e ue [var] <seqncia-de-parmetros>: <tipo-de-dado> ue a separadas por ponto e v rgula. A presena (opcional) da palavra-chave var indica pasc sagem de parmetros por referncia; caso contrrio, a passagem ser por valor. a e a a Por exemplo, eis alguns cabealhos de funes c co 1: funcao CALC22 (A, B : inteiro; C : real) : real Deniu-se uma funo de nome CALC22, que recebe 3 parmetros, sendo os dois ca a primeiros inteiros e o terceiro real. A funo devolve um resultado real. ca 1: funcao EQA6 (X : inteiro) : inteiro Deniu-se uma funo de nome EQA6, que recebe um unico nmero inteiro e devolve ca u outro nmero inteiro. u 1: funcao EXA (var X : inteiro) A funo EXA recebe um parmetro inteiro. A presena da palavra var implica ca a c em que a passagem por referncia, ou seja o que a funo modicar na varivel X e e ca a permanecer modicado aps o retorno da funo EXA. a o ca Nomes Ao construir algoritmos necessrio dar nomes a muitas coisas. A regra de e a construo de nomes ca e
Uma unica palavra Composta de letras e nmeros u Comeando com uma letra c Escrita em maisculo u
110
CAP ITULO 6. VISUALG Tipo inteiro real caracter logico Contedo u qualquer nmero inteiro, variando entre u e + qualquer nmero inteiro ou no inteiro u a uma cadeia somente pode conter os valores VERDADEIRO e FALSO Exemplo inteiro A A,B,C : inteiro A : real X,Y,Z : real A : caracter // o tamanho no expl a e cito A : logico
Vetor Um vetor (ou matriz) denido, escrevendo-se o nome, dois pontos (:) a palavra e vetor e as especicaes de repetio. Veja nos exemplos: co ca Formato <nome> : vetor [inicio..m] [inicio..m] ... de <tipo> Exemplo AAA : vetor [1..10] de real BBB : vetor [0..4] [1..8] de inteiro
Comandos Os comandos em pseudo-cdigo so poucos < (recebe), leia, escreva, o a se...mse, enquanto...menquanto, para...mpara, repita...at, retorne e abandone. e Leia Serve para introduzir um dado externo para dentro do algoritmo. As variveis a citadas no comando j tero que ter sido denidas e tipadas. a a formato leia (<lista de variveis >) a exemplo leia (A)
Escreva Serve para produzir um dado como resposta do algoritmo. As variveis a citadas no comando j tero que ter sido devidamente atribu a a das. formato escreva (<lista de variveis >) a exemplo escreva (o valor procurado e ,x)
Para variveis numricas, pode-se especicar var:tamanho:decimais. a e < Este comando permite inicializar uma varivel ou alterar-lhe o contedo. a u exemplo A<B B < CURITIBA C < A + 23
formato a a <varivel> < <varivel> OU <varivel> < <constante> OU a <varivel> < <expresso> a a
Expresso Numrica Qualquer combinao compat de funes que acabem gerando a e ca vel co um unico resultado numrico. e
verso de 10 de fevereiro de 2008 a
111
CAP ITULO 6. VISUALG Formato adio (+), subtrao (), multiplica ca cao (), diviso real (/) ca a diviso inteira (barra ao contrrio) a a resto (percentagem) abs(a:real):real arcxxxx(a:real):real asc(s:caracter):inteiro carac(c:inteiro):caracter caracpnum(c:caracter):inteiro real compr(c:caracter):inteiro copia(c:caracter; p,n:inteiro):caracter xxx(a:real):real a div b exp(b,e) grauprad(a:real):real int(a:real):inteiro log(a:real):real logn(a:real):real maiusc(c:caracter):caracter minusc(c:caracter):caracter a mod b numpcarac(n:inteiro real):caracter pi:real pos(subc,c:caracter):inteiro quad(a:real):real radpgrau(a:real):real raizq(a:real):real ou O que faz o usual da aritmtica e s usa inteiros o o resto da diviso inteira a o valor absoluto de a arco xxx converte o caracter s em inteiro converte o byte c em caracter ou deve ser o comprimento do string copia um substring funcao trigonometrica divisao inteira de a po b eleva a base ao expoente converte graus em radianos converte real em inteiro logaritmo base 10 logaritmo base e converte para maiuscula converte para minuscula resto da divisao inteira de a por b converte numerica a caracter devolve o valor de pi devolve a posicao de subc em c devolve o quadrado de a converte radiano para grau devolve a raiz quadrada xxx pode ser sen,cos,tan,cotan Exemplo A+3 A/2.5 5\2 2 e 5%2 1 e abs(3) 3; abs(-3) e e 3 xxx pode ser cos, sen e tan
Expresso Relacional Qualquer combinao compat a ca vel de relaes que acabem co gerando um unico resultado lgico. o Formato O que faz Exemplo Igual (=) devolve VERDADEIRO se seus operan- 3=3 VERDADEIRO e dos so iguais e FALSO seno a a Diferente (<>) devolve VERDADEIRO se seus operan- 3<>3 FALSO e dos so diferentes e FALSO seno a a Maior (>) Em A > B devolve VERDADEIRO se 3>4 FALSO e A maior do que B e Menor (>) Em A < B devolve VERDADEIRO se 3<4 VERDADEIRO e A menor do que B e Maior ou igual (>=) Em A >= B devolve VERDADEIRO 3>=3 VERDADEIRO e se A maior ou igual do que B e Menor ou igual (<=) Em A <= B devolve VERDADEIRO 3<=3 VERDADEIRO e se A menor ou igual do que B e
88-08, Pedro Kantek
112
CAP ITULO 6. VISUALG Expresso Lgica Qualquer combinao compat a o ca vel de expresses relacionais e/ou o lgicas que acabem gerando um unico resultado lgico. o o Formato E O que faz Em A E B, devolve VERDADEIRO se A e B so verdadeiros e devolve FALSO a seno a Em A OU B, devolve VERDADEIRO se A ou B ou ambos so VERa DADEIRO e devolve FALSO seno a Inverte o valor lgico do operando o Exemplo VERDADEIRO E VERDADEIRO VERDADEIRO e Todas as outras combinaes do co a FALSO FALSO OU FALSO FALSO Toe das as outras combinaes do co a VERDADEIRO NAO VERDADEIRO FALSO e e NAO FALSO VERDADEIRO e
Ou
No (NAO) a
Se Este comando denominado alternativo, pois permite escolher caminhos da proe gramao dependendo de uma condio (expresso lgica). Note que o trecho entre ca ca a o sen~o e o comando imediatamente anterior a fim{se} so opcionais, razo pela qual no a a a formato eles aparecem entre colchetes. Os comandos entre ent~o e sen~o ou fim{se} a a (se no houver seno) sero executados apenas se a condio do comando for verdadeira. a a a ca Se houver comandos entre sen~o e fim{se} os mesmos sero executados apenas se a a a condio for falsa. ca formato se <condio> entao ca comando1 comando2 ... senao comando11 comando12 mse exemplo se A >= 4 entao B<B+1 C<C+D+A X<0 senao escreva (N * 2) Y<0 mse
Enquanto Este comando permite a realizao de laos (loops) dentro de programas. ca c Comeando o comando, a condio avaliada. Se ela for falsa, h um desvio para o coc ca e a mando seguinte ao fim{enquanto}. Se a condio for verdadeira os comando internos ao ca enquanto so executados. Ao se encontrar o fim{enquanto} h um desvio incondicional a a ao in do enquanto e a condio inicial reavaliada. cio ca e exemplo A<5 enquanto A <= 9 faca escreva (A) A<A+3 menquanto sero impressos os valores 5 e 8. a
formato enquanto < condio > faca ca comando1 comando2 ... menquanto
Repita mas.
113
CAP ITULO 6. VISUALG exemplo A<5 repita escreva (A) A<A+3 ate A > 9 sero impressos os valores 5 e 8. a
Para Este comando tambm permite a realizao de laos (loops) dentro de programas. e ca c No in cio a varivel citada no comando inicializada com <constante1>. Depois a e e feita a condio. Se o passo est ausente ou positivo, a variavel testada para ca a e e <constante2>. (Se o passo negativo, o teste com ). Se o resultado VERDADEIRO e e e os comandos internos so executados. Ao nal deles, a varivel incrementada (ou a a e decrementada se o passo negativo) e depois h um retorno ao teste inicial. Quando o e a passo no explicito, ele vale 1. a e formato para <var> de <constante1> ate <constante2> [passo <constante3>] exemplo faa c para K de 3 ate 8 passo 2 faca comando1 escreva (A) comando2 mpara ... mpara sero impressos os valores 3, 5 e 7. a
Retorne Usado exclusivamente dentro de funes, tem a nalidade de devolver um co resultado a quem chamou esta funo. Ao contrrio do C, no necessariamente encerra ca a a a execuo da funo. ca ca exemplo se A > 5 entao retorne A mpara
Outros Comandos aleatorio arquivo <nome-de-arquivo> algoritmo lendo do arquivoarquivo teste.txt timer on / timer o pausa debug eco cronmetro o
6.2
Exemplos de Visualg
114
funcao QP(N: inteiro): inteiro var A,B:inteiro inicio A <- 2 B <- 1 enquanto B <= N faca se EPRIMO(A) entao B <- B + 1 fimse A <- A + 1 fimenquanto retorne A - 1 fimfuncao funcao EPRIMO(M: inteiro): logico var QT,DI:inteiro inicio QT <- 0 DI <- 2 enquanto DI < M faca se M % DI = 0 entao QT<- QT + 1 fimse DI <- DI + 1 fimenquanto retorne QT = 0 fimfuncao inicio leia (J,K) R <- QP(K)-QP(J) escreva (R) escreva (QP(K)) escreva (QP(J)) fimalgoritmo Exemplo 2 algoritmo "palito" var N,SEQ,J,TV:inteiro inicio N<-0 enquanto ((N<20) ou (N>30)) faca escreval ("com quanto comecamos ?") leia (N) fimenquanto enquanto (N>0) faca SEQ <- 1 enquanto ((N-SEQ)>=0) faca
verso de 10 de fevereiro de 2008 a
115
CAP ITULO 6. VISUALG SEQ <- SEQ + 4 // escreval ("depuracao... N=",N," SEQ=",SEQ) fimenquanto J<-4+(N-SEQ) se (J=0) entao J<-1 fimse escreval ("eu joguei ",J) N<-N-J escreval ("Existem ",N," palitos") se (N<=0) entao escreva ("por incrivel que pareca,... perdi,... ") interrompa fimse TV<-0 enquanto ((TV<1) ou (TV>3)) faca escreval ("jogue") leia (TV) fimenquanto N <- N - TV escreval("existem ",N," palitos") se (N<=0) entao escreval("burrao, eu ganhei...") interrompa fimse fimenquanto fimalgoritmo
6.2.1
Suponha que o VisualG no tem a funo raiz quadrada. Como poder a ca amos construir uma ? Eis uma poss formulao vel ca Dado um nmero real x, u x > 0, calcular a raiz quadrada dele.
Pensando sobre o que j aprendemos sobre a raiz quadrada de x, tem-se que y a raiz a e quadrada de x se e somente se y 2 = x. Ou reescrevendo, y = x . Isto nos d uma idia a e y de algoritmo:
Chute um valor g para y e teste-o. Calcule Se
x g x g
Se o processo estiver funcionando adequadamente, o chute inicial poder ser qualquer a nmero, ento vai-se padronizar o primeiro chute como sendo 1. Com isso a funo sqrt u a ca em VisualG ca funcao sqrt(N:real):real retorne teste(N,1) fimfuncao A seguir, escreve-se a funo teste e ca ca
88-08, Pedro Kantek
116
CAP ITULO 6. VISUALG funcao teste(X,G:real):real inicio escreval(X,G) se perto((X/G),G) entao retorne G senao retorne teste(X, melhor(X,G)) fimse fimfuncao Sobram 2 funes, melhor e perto. Ei-las: co funcao melhor(X,G:real):real inicio retorne (G+(X/G))/2 //a media entre G e X/G fimfuncao funcao perto(A,B:real):logico inicio retorne (B*0.001) > abs(A-B) fimfuncao
6.2.2
Agora o algoritmo para achar ra n-simas. Ou seja, dados w e n quaisquer, o que se e zes e pretende agora achar n w. Para isto, deve-se procurar x tal que xn = w. Reescrevendo e xn w = 0. Portanto, em f (x) = xn w procura-se encontrar o valor de x quando f (x) = 0, isto , onde a curva corta o eixo dos x. e Em outras palavras e mais genericamente, dada f (x) como descobrir onde a funo ca corta o eixo x?. Para poder resolver este problema far-se-o 3 hipteses: a o
a funo cruza o eixo x apenas em um lugar ca a funo cont ca e nua, vale dizer diferencivel e a a derivada no intervalo sempre positiva ou sempre negativa e
Supondo uma funo qualquer (sujeita `s restries acima), imagina-se um chute ca a co original g (no eixo x) e f (g) no eixo y. Calculando a derivada no ponto g e vericando onde esta derivada (que nada mais do que a inclinao da curva no ponto g) cruza o e ca eixo x obtem-se um novo e melhor chute para a raiz procurada. Este, em essncia, o e e mtodo de Newton. e Eis o desenvolvimento, para achar a raiz n do valor w funcao raiz(w:real;n:inteiro):real inicio retorne acharn(w,1,n) fimfuncao funcao acharn(w,g:real;n:inteiro):real var novo:real inicio
117
CAP ITULO 6. VISUALG novo <- g-(f(w,g,n) / fprime(g,n)) // escreval(w,g,n,novo) se perton(novo,g) entao retorne novo senao retorne acharn (w,novo,n) fimse fimfuncao funcao f(w,g:real;n:inteiro):real inicio retorne (g^n)-w fimfuncao
funcao fprime(g:real;n:inteiro):real inicio retorne n * (g^(n-1)) fimfuncao funcao perton(a,b:real):logico inicio retorne abs(a-b) < abs(b * 0.01) fimfuncao
6.2.3
Depurao de algoritmos ca
Na atividade prossional ou amadora da construo de programas ecientes e ecazes, ca a programao ocupa apenas uma parte. E, no a maior nem a principal parte. O ca a e que toma tempo e preocupao a atividade de depurar os programas. Entende-se por ca e depurao a arte da descoberta, isolamento e correo de erros. ca ca Alis, o programador mais talentoso no o que comete poucos ou nenhum erro a a e (imposs vel), mas aquele que em os cometendo localiza-os e corrige-os com rapidez. Programar ir das causas para o resultado, e depurar ao contrrio, ir do resultado e e a para as causas. S que nesta segunda parte, conspiram contra a atividade: o
o ru ambiente do o fato do programa poder ter sido feito por outro a presso do tempo e do $. a
Exerc cio 88 Na vspera desta aula, os alunos sero divididos em 4 grupos. A cada e a
grupo ser dado um conto de Sherlock Holmes, SEM A PARTE FINAL do mesmo. O grupo a ter entre 5 e 10 minutos para contar a histria e toda a turma ser convidada a descobrir a o a o que aonteceu. Depois deste prazo, o professor contar o nal da histria. a o
118
Cap tulo 7
Modularizao: funes ca co
7.1 Funoes c
Existem 2 maneiras de denir um algoritmo. A primeira, denindo um cdigo come o pleto, auto-suciente, capaz de ser facilmente traduzido em um programa completo e auto-suciente capaz de ser rodado em computador gerando resultados ao instante. Este algoritmo por um cabealho reconhecido pela palavra constante e c algoritmo <nome> Note que a especicao <nome> deve ser substitu por um nome que identique este ca da algoritmo. O bloco se encerra pela especicao ca fimalgoritmo Entre estas duas constantes, deve ser escrito o bloco do algoritmo que sempre ser a formado por 2 componentes: a descrio de variveis e os procedimentos que o algoritmo ca a far. Eles devem aparecer nesta ordem: primeiro a denio de variveis e depois os a ca a procedimentos. Uma diculdade aqui a necessidade de obter os dados do algoritmo do meio ame biente (possivelmente fazendo uma operao de leitura) e gerar os dados de sa para ca da serem aproveitados, usualmente atravs de uma operao de impresso. e ca a Como uma funo Em computao, o uso da palavra funo ligeiramente diferca ca ca e ente do uso similar na matemtica, embora os 2 conceitos tenham muitas similaria dades. Aqui, o uso da palavra funo indicar um sub-programa separado do programa ca a principal que computa alguns valores. A especicao do cabealho de uma funo ca c ca ser a 1: funo <nome> ([var] <lista-vars> : <tipo> [;...]) : <tipo-resultado> ca Com a seguinte regra de leitura: <nome> tal como no algoritmo, identica um nome unico <lista-vars> uma seqncia de nomes de variveis separadas por v ue a rgulas. Se houver a palavra var no in a passagem ser por cio a referEncia e seno por valor a <tipo> tipo das variveis da lista anterior a ; separador em as listas de variveis (Se mais de uma houver) a <tipo-resultado> especica qual o tipo que ser devolvido por esta funo a ca aps os clculos que realizar. Pode ser um dos 5 tipos o a a conhecidos at agora e A funo de encerra pela especicao ca ca 119
CAP ITULO 7. MODULARIZACAO: FUNCOES fimfun~o ca A parte de denio de variveis locais em uma funo nem sempre necessria, ca a ca e a logo opcional, mas se presente deve aparecer logo aps o cabealho da funo e antes e o c ca dos procedimentos. Esta denio mais simples do que a do algoritmo completo. Os dados no precisam ca e a ser obtidos do exterior, eles sero entregues ` funo simplesmente por referenci-los a a ca a no cabealho da funo. Identicamente no necessrio imprimir resultados bastando c ca a e a retorn-los (a quem chamou a funo). a ca Acompanhe um mesmo problema resolvido dos dois jeitos. Seja escrever um algoritmo que calcule a mdia entre dois nmeros e u como algoritmo como funo ca algoritmo MEDIA funo MEDIA (A, B : real) : real ca real A B M retorne (A + B) / 2 leia A B mfuno ca MA+B/2 escreva M malgoritmo Do ponto de vista da disciplina de algoritmos, ambos os resultados acima so equivaa lentes. Entretanto, se algum quisesse testar a segunda implementao (a funo), teria e ca ca que escrever o programa chamador, que poderia ter o seguinte aspecto: algoritmo T2 real A B leia A B escreva MEDIA (A, B) fimalgoritmo O conceito de funo permite a modularizao dos algoritmos. Deve-se denir e usar ca ca uma funo sempre que: ca
Um processamento espec co tiver que ser feito em diversos locais do algoritmo Um processamento for complexo e auto-contido Outros algoritmos possam vir a usar este mesmo processamento etc
7.1.1
Uma varivel global existe desde que criada e pode ser consultada e alterada por a e qualquer algoritmo ou funo que rode enquanto ela existe. Dito de outra maneira, ca todas as funes subalternas que forem chamadas aps a criao da varivel global a co o ca a enxergaro e podero modic-la. a a a O uso de variveis globais deve ser fortemente reprimido, pois elas so responsveis a a a por um dos maiores eventos causadores de erros em programas, o chamado efeito colateral. Tanto isto verdade, que a grande vantagem do paradigma funcional de prograe mao no ter varivis globais. E, com isto ele acaba gerando programas que tm uma ca e a a e quantidade inacreditavelmente menor de erros. Quando um programa dene variveis e em seguida chama uma funo, aquelas a ca variveis que o programa deniu so consideradas como globais pela funo chamada. a a ca Se esta primeira funo chamar uma segunda funo, esta ultima tambm enxergar as ca ca e a variaveis denidas pelo programa, como sendo variveis globais. a
88-08, Pedro Kantek
120
CAP ITULO 7. MODULARIZACAO: FUNCOES J a varivel local a uma funo denida dentro da funo e quando esta funo a a ca e ca ca se encerrar o programa original no ter mais acesso a elas. Entretanto se esta primeira a a funo chamar uma segunda, as variveis denidas como locais dentro da primeira funo ca a ca passam a ser globais e so enxergadas pela segunda funo. a ca A funo pode ter suas prprias variveis internas, tambm conhecidas como variveis ca o a e a locais ` funo. Existe um comando, tambm opcional, chamado retorne, que signica a ca e devolver para o algoritmo que chamou esta funo, qual o valor calculado por ela. O ca tipo deste resultado deve ser igual aquele especicado depois da palavra funo. ca Toda funo usada dentro de um programa deve ter sido denida antes de ser ca chamada. Em resumo, a regra de alcance das variveis : uma varivel denida em um local a e a global para todas as funes chamadas a seguir, mas no enxergada pelas funes e co a e co chamadas previamente. Por exemplo: 1: algoritmo ALFA 2: var 3: A, B : inteiro 4: funcao BETA (C, D : inteiro) : inteiro 5: var 6: E : inteiro 7: inicio 8: ... 9: mfuncao {funcao BETA} 10: inicio 11: ... 12: malgoritmo Aninhamento de Funes Quando existe uma funo dentro de outra, as variveis co ca a da funo externa so locais para ela e globais para as funes internas. J as variveis ca a co a a da funo interna so locais a ela e so desconhecidas pela funo externa. ca a a ca Quando existe conito de nomes (duas variveis com mesmo nome, sendo uma local a e outra global), vale a denio local, e a global deixa de poder ser acessada (Embora ca continue existindo normalmente). Mas, este um procedimento que deve ser evitado e pelo programador, tanto quanto poss vel. A especicao dos parmetros nada mais do que uma denio de todas as varca a e ca iveis que existem na lista-de-parmetros. a a
Exerc cio Resolvido 7 Um exemplo de algoritmo Escreva uma funo que receba ca
2 nmeros inteiros, X e Y, (X ( Y) e devolva a diferena entre o X-simo e o Y-simo u c e e nmeros primos. Por exemplo, se X = 10 e Y = 8 a funo dever devolver 6, pois o 10 u ca a nmero primo 23 e o 8 17 e 23 - 17 = 6 u e e Vericao se um nmero primo: ca u e Entrada: um inteiro X qualquer Sa da: .V. se X for primo e .F. seno a 1: lgico funo EPRIMO (inteiro X) o ca 2: inteiro DV, QT 3: QT 0 4: DV 2 5: enquanto (DV (X div 2)) faa c 6: se X mod DV = 0 ento a 7: QT++
verso de 10 de fevereiro de 2008 a
121
Entrada: um inteiro K qualquer Sa da: o k-simo numero primo e 1: inteiro funo PRIMO (inteiro K) ca 2: inteiro Z, QTD 3: QTD 1 4: Z 1 5: enquanto (Z K) faa c 6: se EPRIMO(QTD) ento a 7: Z++ 8: mse 9: QTD++ 10: menquanto 11: retorne QTD - 1 12: mfuno ca Diferena entre 2 nmeros primos: c u Entrada: dois inteiros M e N Sa da: a diferena entre o m-simo e o n-simo nmeros primos c e e u 1: inteiro EXEMPLO1 (inteiro M, N) 2: retorne PRIMO(M) - PRIMO(N) 3: mfuno ca
122
Cap tulo 8
Vetores e Matrizes
Se partirmos da premissa que algoritmos sozinhos so incapazes de ajudar a resolver a problemas, necessitando de completas estruturas de denio de dados, veremos que os ca quatro tipos de dados vistos at aqui (inteiro, real, alfanumrico e lgico) so insue e o a cientes. Por exemplo, vejamos o caso de um programa capaz de calcular a diferena entre c o salrio e a mdia salarial de um grupo de 50 pessoas. O algoritmo em si fcil, a e e a entretanto se faz necessrio: a
a criao de 50 variveis para conter os salrios, permitir o clculo da mdia, e ca a a a e depois das diferenas individuais, OU c A dupla leitura dos dados, a primeira para calcular a mdia, e a segunda para e obter as diferenas individuais. c
Nenhuma das duas alternativas conceitualmente correta, pois ambas complicam e desnecessariamente algo que simples. A soluo para resolver este e inmeros problee ca u mas similares, e a introduo do conceito de vetor. ca A caracter stica principal do vetor , a criao de muitas variveis de mesmo tipo, e ca a que atendero pelo mesmo nome, e que sero acessadas pelo seu deslocamento dentro a a do vetor, ou seja pelo seu nmero. u No caso acima (dos 50 salrios), ao usar a soluo de vetores, criar a ca amos uma unica varivel de nome SALAR, na forma de vetor, contendo 50 ocorrncias de uma varivel a e a tipo real. O conjunto poderia ser referenciado na totalidade com o nome de SALAR, ou cada um dos valores poderia ser acessado individualmente atravs do seu e ndice. A principal caracter stica que determina o uso de vetores para resolver problemas de programao o seu acesso direto ou via ca e ndice. Isto signica que, em um vetor, dado um valor de ndice, imediata o acesso ao elemento do vetor, seja para obt-lo (leitura) e e seja para alter-lo (escrita). a Um vetor uma coleo HOMOGENEA de coisas. Essas coisas so referenciadas e ca a pela sua posio dentro do vetor, j que so todas iguais. A cadeia um vetor de ca a a e caracteres, mas to comum que acaba sendo um tipo fundamental. No precisaria. e a a
8.1
Denio de Vetor ca
Na criao de vetores , apenas necessrio indicar qual o fator de ocorrncia daquela ca e a e varivel. Este valor numrico inteiro, ser escrito entre colchetes logo aps o nome do a e a o vetor. Cuidado, que aqui o colchete no signica opcional. Azares de quem tem um a universo limitado de caracteres a utilizar para escrever seus algoritmos. 123
CAP ITULO 8. VETORES E MATRIZES Esta especicao indica mltiplas ocorrncias de uma varivel em uma unica dica u e a menso a <nome> : vetor [inicio..m] de <tipo> // exemplo: A : vetor [1..10] de inteiro Exemplos Vejamos alguns exemplos: 1. Quantidade de carros em cada dia da semana QTD-CARR : vetor [1..7] de inteiro 2. Valor recebido por dia ao longo do mes VALOR : vetor [1..31] de real
Exerc cio Resolvido 8 Seja denir um vetor para conter as taxas inacionarias
dos ultimos 12 meses: INFLACAO : vetor [1..12] de real
Exerc cio Resolvido 10 Podemos ter um vetor para guardar as populaes brasileiras, co
ano a ano, nos ultimos 20 anos: POPAA : vetor [1..20] de inteiro Exemplo:
V : vetor [1..5] de inteiro {denio} ca V 20 10 35 65 47. O vetor V tem 5 inteiros. V[1] 20, V[4] 65. V[6] erro. e e e X : vetor [1..9] de caracter ou cadeia X {no segundo caso o tamanho impl e cito} X ABCDEFGHI. O vetor X tem 9 caracteres ( portanto, uma cadeia). X[1] e A. X[5] E. X[32] erro. e e e A : vetor [1..3] de logico A verdadeiro, falso, falso. A um vetor de lgicos. A[2] falso. e o e F : vetor [1..6] de real F 10.9 10 11 11.2 13 19. F um vetor de reais. (Lembrar que um inteiro um e e real tambm. V[1] 10.9, V[2] 10.0, e assim por diante. e e e
O ndice em um vetor tem que obrigatoriamente ser: 1. inteiro e positivo 2. menor ou igual ao tamanho do vetor
8.1.1
A origem da contagem varia entre 0 e 1. Ns sempre que NADA for dito em contrrio, o a usaremos 1. Quando a origem zero, conta-se: 0, 1, 2, ... n-1 (para contar n elementos). e Quando a origem 1, a contagem a trivial: 1, 2, ... , n. Repare que a notao [inie e ca cio..nal] a rigor permitiria quaisquer valor inicial e nal, mas o mundo da programao ca j sucientemente complexo. Assim, vai-se combinar que o in semore ser 1 (como ae cio a no COBOL, PASCAL, BASIC, APL, ...), ou mais raramente 0 (como no C, C++, Java, ...), mas nunca algo diferente de 0 ou 1.
88-08, Pedro Kantek
124
8.2
Operaes Bsicas co a
Vetores podem ser processados coletivamente ou elemento a elemento. Por exemplo: V : vetor[1..6] de inteiro V 0 {coletivamente} V 10,20,30,40,50,60 {idem} **** OU **** I1 enquanto I 6 faa c V[I] I 10 {elemento a elemento} II+1 menquanto Na leitura a mesma coisa e Y : vetor[1..5] de real leia Y {5 pfs so lidos e colocados em Y} a **** OU **** I1 enquanto I 5 faa c leia Y[I] {leitura individual de cada elemento} II+1 menquanto Atribuio ca Trata-se de modicar o contedo dos elementos do vetor. u 1: A[i] A[i] + 1 Inicializao ca E a colocao do valor inicial dos elementos de um vetor , usualmente antes de comear ca c o processamento. 1: B[j] 0 Enumerao ca Percorre-se todos os elementos de um vetor, executando sobre eles uma mesma operao. ca Por exemplo, seja contar quantos elementos so negativos. a 1: inteiro VALS[200] 2: inteiro I, QTOS 3: leia VALS 4: QTOS 0 5: para para I de 1 a 200 faa c 6: se VALS[I] 0 ento a 7: QTOS++ 8: mse 9: mpara Acumulao ca Parecido com a enumerao, mas com o carter de acumulao sobre os resultados da ca a ca operao. Exemplo: seja somar todos os elementos de um vetor ca
verso de 10 de fevereiro de 2008 a
125
inteiro VALS[200] inteiro I, SOMA leia VALS SOMA 0 para para I de 1 a 200 faa c SOMA SOMA + VALS[I] mpara
Insero ca Colocao de um novo elemento dentro do vetor. Usualmente, este novo elemento enca e caixado em alguma posio do vetor, e todos os elementos anteriores que tinham ca ndice igual ou maior a esta posio so deslocados uma posio. Exemplo: Seja manter um veca a ca tor de 10 notas, com as melhores notas at ento aparecidas. e a 1: NOTAS : vetor[1..10] de real 2: NOTAS ... as notas at aqui e 3: NOVANOTA 4: I 1 5: enquanto (I < 11) (NOVANOTA < NOTAS[I]) faa c 6: II+1 7: menquanto 8: se I = 11 ento a 9: escreva (a nota nova e menor do que as 10 j existentes) a 10: seno a 11: J9 12: enquanto (J > 0) (NOTAS[J] < NOVANOTA) faa c 13: NOTAS[J+1] NOTAS[J] 14: JJ-1 15: menquanto 16: NOTAS[I] NOVANOTA 17: mse Supresso a Operao inversa ` da insero. Retira-se um elemento, trazendo todos os que estavam ca a ca uma posio abaixo dele uma posio acima. ca ca Busca No acesso direto, dado um ndice, obtemos o valor do elemento no vetor. Aqui ocorre o contrrio. Dado um valor do vetor, queremos saber qual seu a ndice (isto , onde ele e est?). a Ordenao ca Reordenar os elementos de um vetor com vistas a deix-los obedecendo alguma relao a ca de ordem.
126
CAP ITULO 8. VETORES E MATRIZES Genericamente Neste caso, considera-se um unico valor para todas as ocorrncias do vetor. Por exemplo, e para zerar um vetor pode-se fazer: 1: inteiro VETVEN [10] 2: VETVEN 0 O comando VETVEN 0 permitido e faz com que TODOS os 10 elementos de e VETVEN sejam zerados.
Conjuntamente Neste caso, um conjunto da de mesmo nmero de elementos usado na referncia ao u e e vetor. Exemplo: 1: real VETVEN [10] 2: VETVEN (1 2 3 4 5 6 7 8 9 0) Neste caso o conjunto (1 2 3 4 5 6 7 8 9 0) usado para inicializar o vetor de uma e s vez com contedos diferentes. Os valores devem aparecer entre parnteses, e devem o u e ser em mesmo nmero do que a denio original do vetor u ca
Individualmente E o caso mais comum, e pressupe a existncia de um comando para cada elemento do o e vetor. 1: real VETVEN [10] 2: VETVEN [1] 0.1 3: VETVEN [2] 0.01 4: VETVEN [5] 1 5: ... 6: VETVEN [8] 100 7: VETVEN [9] 10 8: VETVEN [10] 1000 Estas 3 maneiras de referenciar, no se aplicam apenas ` inicializao, mas tambm as a a ca e demais aes poss co veis em . Assim, podemos ter testes: seVETVEN = 0 - signicando setodos os elementos de VETVEN, leituras: leia (VETVEN) - signicando leiatodos os elementos, gravaao: escreva (VETVEN) - signicando escrevatodos..., etc. c Todos os comandos vistos podem e devem ser usados junto com o conceito de vetores. Entretanto, existe um que muito orientado para estas estruturas. Trata-se do comando e para. Vejamos um exemplo, em que o para usado para calcular a soma dos elementos e de um vetor. 1: algoritmo exemplo 2: inteiro I,SOMA 3: inteiro VET [120] 4: leia(VET) 5: SOMA 0 6: para I de 1 ate 120 faa c 7: SOMA SOMA + VET[I] 8: mpara 9: escreva(SOMA) 10: m algoritmo
verso de 10 de fevereiro de 2008 a
127
Um dos erros mais comuns e graves que acontece quando se utilizam vetores o e estabelecimento de um valor para o ndice maior do que o comprimento total do vetor, ou em termos mais rigorosos, o erro acontece quando se usa para ndice de um valor no compreendido no intervalo da denio do vetor. Este erro ocorre quase sempre em a ca tempo de execuo (o que torna mais dif sua correo). ca cil ca
88-08, Pedro Kantek
128
CAP ITULO 8. VETORES E MATRIZES Exemplo 1: real W [20] 2: inteiro A 3: A 15 4: escreva(W[A+10]) Indireo ca A indireo uma dupla (ou tripla ou n-upla) indexao. Usualmente representada ca e ca e por diversos colchetes. Veja no exemplo 1: escreva A[A[x]] O que est se pedindo acima a dupla indexao de A. A maneira de resolver o pedido a e ca (e descobrir o valor de A[A[x]]) e usando o valor de x, recuperar o contedo da posio u ca A[x]. De posse deste valor usa-se-o como ndice nal para saber o valor de A[A[x]]. Se houver muita diculdade de entender este conceito o mesmo pode ser desdobrado em 1: escreva A[A[x]] equivalente a e 1: B A[x] 2: escreva A[B] Tipos de erros em vetores a) indice caindo fora do vetor. b) tipo do indice denido inadequadamente (ex: inteiro X[30]; caracter Y; Y <- 2; X[Y] d erro) Note que a maioria das linguagens exige inteiro a (ou real mas sem decimais).
8.3
Ordenao ca
Antes de comearmos a estudar a classicao, vamos denir o problema: c ca Seja X um conjunto composto por i elementos entre os quais se pode estabecer uma relaao de ordem. Dados Xi e Xj com i = j, sempre pode-se estabelecer Xi > Xj ou c Xi = Xj ou Xi < Xj .
X estar em ordem crescente se e somente se Xi Xj , i < j. a X estar em ordem estritamente crescente se e somente se Xi < Xj i < j. a X estar em ordem decrescente se e somente se Xi Xj , i < j. a X estar em ordem estritamente decrescente se e somente se Xi > Xj i < j. a
verso de 10 de fevereiro de 2008 a
129
CAP ITULO 8. VETORES E MATRIZES Um algoritmo de ORDENACAO aquele que recebe um X qualquer (possivelmente e desordenado), permuta seus elementos e devolve X em ordem. Tipicamente fazem parte de Xi um conjunto de informaes. Neste caso, haver co a uma parte de Xi denominada CHAVE e identicada por k (k=key) pela qual se fara a ordenao. Embora devamos ter em mente a existncia dos outros campos, apenas a ca e chave ser tratada nos algoritmos. a Existem 2 classes de algoritmos de ordenao: os que trazem todos os dados para ca a memria (sort interno) e os que ordenam dados em m o dia magntica seqencial (sort e u externo). Note que neste caso o algoritmo apenas acessa uma parte do subconjunto total. Um algoritmo de ordenao estvel se no caso particular em que se k[i] = k[j], a ca e a ordem original dos dados preservada. E sempre bom que um mtodo de ordenao e e ca seja estvel. a Antes de prosseguir, vale uma lembrana. Para conjunto de dados pequenos (quanto?) c no h necessidade de grandes pesquisas e deve-se usar o algoritmo mais simples poss a a vel. O conjunto completo (completo?) de algoritmos de ordenao ser visto e estudado ca a no segundo ano (na disciplina de estrutura de dados), mas por enquanto vamos usar um algoritmo simples e fcil (mas ineciente) para ordenar vetores: a Algoritmo de movimentao ca 1: inteiro[1000] {funo} MOVIMENTA (inteiro V[1000]) ca 2: inteiro Y[1000] 3: inteiro MAIOR, QUAL 4: inteiro I,J 5: para I de 1 at 1000 faa e c 6: MAIOR 7: para J de 1 at 1000 faa e c 8: se V[J] > MAIOR ento a 9: MAIOR X[J] 10: QUAL J 11: mse 12: mpara 13: Y[I] X[QUAL] 14: V[QUAL] 15: mpara 16: retorne Y 17: m{funo} ca Este algoritmo estvel. e a
8.4
Dado um conjunto S de chaves, as 3 operaes fundamentais em informtica so as co a a seguintes: Pesquisa Dada uma chave desconhecida x, pesquis-la contra S signica vericar se a x pertence ou no ao conjunto S. Em termos matemticos, x S ? Esta funo a a ca retorna um valor booleano.
88-08, Pedro Kantek
130
CAP ITULO 8. VETORES E MATRIZES Insero Dada uma chave x que reconhecidamente no pertence ainda a S (e isto pode ca a ser vericado pela operao acima), a operao de insero signica inserir x em ca ca ca S. Ou S S {x}. A funo pode retornar apenas um indicativo de sucesso. ca Excluso Dada uma chave x que sabidamente pertence a S, a operao de excluso a ca a signica retirar x do conjunto S. Ou S S {x}. Pode-se retornar apenas um indicativo de sucesso. Mximo Dado um conjunto S, descobrir-lhe seu mximo obter o valor x, tal que a a e y = x S, x y. Esta funo retorna um ponteiro ou um cursor para o elemento ca x. M nimo Muito semelhante ao anterior, s que busca-se x tal que y = x S, x y. o Sucessor Esta operao busca descobrir qual o seguinteelemento do conjunto segundo ca um critrio qualquer. A funo recebe como entrada um valor x que est presente e ca a em S e devolve um apontador ou cursor para o nmero imediatamente maior a x u em S. Outra hiptese de retorno um terminador, caso x j seja o maior elemento o e a em S. Antecessor Esta operao busca descobrir qual o anteriorelemento do conjunto seca gundo um critrio qualquer. A funo recebe como entrada um valor x que est e ca a presente em S e devolve um apontador ou cursor para o nmero imediatamente u menor a x em S. Outra hiptese de retorno um terminador, caso x j seja o o e a menor elemento em S.
Exerc cio 90 Pal ndromo (adj.) Diz-se da frase que quer se leia da direita para a esquerda, quer da esquerda para a direita, tem o mesmo sentido (Aurlio). Exemplos de e pal ndromos: sairam o tio e oito marias oto come mocoto socorram me subi no onibus em marrocos roma me tem amor em ingls: a man, a plan, a cat, a canal, panama e
murder for a jar of red rum rotor, radar, me v se a panela da moa de ao madalena paes e vem e c e c a diva da vida luz azul ato idiota o treco certo a base do teto desaba atila toledo mata modelo talita
131
CAP ITULO 8. VETORES E MATRIZES anotaram a data da maratona a droga da gorda o romano acata amores a damas amadas e roma ataca o namoro s d tapas e sapatadas a a Denir algoritmo capaz de ler uma frase de at 80 caracteres e decidir se a mesma e e ou no um pal a e ndromo. O algoritmo deve imprimir a letra S for, e N no for. se se a Desconsiderar os brancos que esto ` direita da frase e tambm aqueles que esto entre as a a e a palavras. Para executar este exerc valem as seguintes denies: cio co 1. inteiro Vet1[10] Vet2[10] Vetx[10] 2. inteiro I J K L 3. Vet1(10 12 15 18 2 24 40 2 4 6) 4. Vet2(20 18 16 14 12 10 8 6 4 2) 5. Vet3(1 1 1 2 2 2 5 5 5 9) 6. I3 7. JI+1 8. I5 9. K3 10. L6
Exerc cio 92 Escrever um trecho de algoritmo que dena um vetor de 7 elementos inteiros, e inicialize todos os elementos com o valor 5.
88-08, Pedro Kantek
132
Exerc cio 93 Escrever um trecho de algoritmo que dena um vetor de 365 elementos reais, e inicial todos os elementos com o valor 0. ze Exerc cio 94 Escrever um trecho de algoritmo que dena um vetor de 12 elementos
lgicos, e inicial os primeiros 6 com VERDADEIRO e os outros 6 com FALSO. o ze
Exerc cio 95 Escreva um algoritmo capaz de denir e ler um vetor de 28 reais e a seguir calcular e imprimir a somatria dos elementos do vetor. Cada elemento deste vetor o representa o valor da d vida de cada estado brasileiro para com a unio, e o que se deseja a obter impresso o valor total desta d e vida.
8.5
Tabelas
Pesquisa sequencial
Dada um vetor, uma das aes mais comuns sobre ela, a pesquisa para saber se co e determinado elemento se encontra ou no contido nela. A maneira mais simples de fazer a esta pesquisa percorrer a tabela em ordem seqencial, at que: e u e
O elemento (denominado CHAVE) seja encontrado, ou Chegue-se ao m da tabela, quando ento concluiremos que o elemento CHAVE a no existe na tabela. a
Embora seja um algoritmo simples de se imaginar e de implementar, ele no dos a e mais ecientes, principalmente para tabelas muito grandes e com muitas pesquisas por unidade de processamento. Um primeiro melhoramento que podemos fazer, classicar a tabela, para diminuir e a quantidade de acessos at chegar a uma concluso sobre a existncia ou no da chave. e a e a Com a tabela classicada em ordem (digamos ascendente), a pesquisa da chave deve ser feita at que: e
A chave seja encontrada, OU Um elemento maior do que a chave seja encontrado, quando ento concluiremos a pela no existncia da chave na tabela. a e
A seguir o algoritmo para fazer esta pesquisa: 1: inteiro V[1000] 2: inteiro I, CHAVE 3: leia V 4: leia CHAVE 5: I 1 6: enquanto I < 100 faa c 7: se VET[I] = CHAVE ento a 8: escreva encontrou 9: abandone 10: mse 11: II+1 12: menquanto 13: se I = 101 ento a 14: escreva No encontrou a 15: mse
verso de 10 de fevereiro de 2008 a
133
m?
Exerc cio 96 Como exerc indique qual a modicao que se deveria fazer no algocio, ca ritmo acima, se o vetor lido estiver em ordem ascendente, a m de no ter que percorr-lo a e at o m para certicar-se da no existncia da chave. e a e Exerc cio Resolvido 11 Imagine um poss renamento para tornar mais rpido vel a
o acesso seqencial a uma tabela (de tamanho grande) classicada. u R: Basta aumentar o tamanho do salto, de 1 linha para 10, 20 ou qualquer outro valor.
Pesquisa binria a
Trata-se da um signicativo melhoramento em termos de pesquisa a tabela. Agora a tabela percorrida aos saltos, e no elemento a elemento. A reduo de acessos grande e a ca e e garante muita ecincia ao processo. e Para poder usar esta pesquisa a tabela PRECISA estar ordenada. Se no estiver os a resultados da tcnica so imprevis e a veis. Em resumo o seguinte: e
A tabela dividida ao meio (da o nome bin ria) e A chave comparada com o elemento que dividiu a tabela. Se este for menor, e a primeira parte da tabela abandonada. Se for maior abandona-se a segunda e parte. A pesquisa prossegue pela diviso ao meio da parte que cou. a Rapidamente as sucessivas divises ao meio esgotam a tabela. O processo termina o quando a chave for encontrada, ou quando a parte que restou da diviso for nula. a
Vejamos no algoritmo abaixo 1: inteiro V[100] 2: inteiro INIC,METADE,FIM,CHAVE 3: leia VET,CHAVE 4: INIC 1 {campo delimita o limite inferior da pesquisa} 5: FIM 100 {delimita o limite superior da pesquisa} 6: repita 7: METADE int(INIC + FIM)/2 8: se CHAVE < VET[METADE] ento a 9: FIM METADE - 1 10: seno a 11: INIC METADE + 1 12: mse 13: at VET[METADE] = CHAVE INIC > FIM e 14: se VET[METADE] = CHAVE ento a 15: escreva achou na posio ,metade ca 16: seno a 17: escreva no achou a 18: mse Vamos acompanhar um exemplo, (chinesinho) neste algoritmo. Seja o vetor: 1 7 12 20 40 41 47 49 60 88 Vamos fazer uma pesquisa binria para encontrar (ou no) a chave 77 nele. a a primeira iterao: INIC 1, FIM 10, METADE 5. Como VET[5] 40, e 40 ca e < 77, temos: INIC METADE + 1 ou INIC 6.
88-08, Pedro Kantek
134
CAP ITULO 8. VETORES E MATRIZES segunda iterao: INIC 6, FIM 10, METADE 8. Como VET[8] 49, e 49 ca e < 77, temos: INIC METADE + 1 ou INIC 9. terceira iterao: INIC 9, FIM 10, METADE 9. Como VET[9] 60 e 60 < ca e 77, temos: INIC METADE + 1 ou INIC 10. quarta iterao: INIC 10, FIM 10, METADE 10. Como VET10] 88 e 88 ca e > 77, temos FIM METADE - 1 ou FIM 9. Neste ponto o ciclo se encerra, pois IN ICIO > FIM. Finalmente descobrimos que a chave no est presente pois, VET [10] 88 que diferente de 77. a a e e Note-se que o nmero mdio de acessos em uma pesquisa binria da ordem de u e a e log2 N , onde N o nmero de elementos da tabela. e u
Exerc cio 97 Mediante a regra acima, determine qual o nmero mdio de acessos em u e
uma pesquisa binria para uma tabela de: a 1. 5 elementos: 2. 10 elementos: 3. 20 elementos: 4. 50 elementos: 5. 100 elementos: 6. 1.200 elementos: 7. 15.000 elementos: 8. 1.000.000 elementso:
8.6
Este um problema tradicional em PD: Suponhamos que existam dois vetores, com as e caracter sticas:
Idnticos lay-outs e Uma chave de controle (em geral no repetida> a Ambos classicados pela chave de controle.
O objetivo intercalar os dois vetores formando um s, e que continue classicado. Por e o exemplo:
verso de 10 de fevereiro de 2008 a
135
CAP ITULO 8. VETORES E MATRIZES vetor 1 -----------------------Chave 3 Chave 8 Chave 36 Chave 87 Chave 500 vetor2 -------------------------Chave 1 Chave 9 Chave 10 Chave 11 Chave 450 Chave 490
Resultado ----------------------Chave 1 Chave 3 Chave 8 Chave 9 Chave 10 Chave 11 Chave 36 Chave 87 Chave 450 Chave 490 Chave 500
Exerc cio 99 Dadas duas datas no ano de 89, no formato dia,ms, escrever um algoe
ritmo que as leia, escreva-as e calcule e escreva a diferena em dias entre ambas. c
Exerc cio Resolvido 12 Dadas duas datas na dcada de 80, no formato dia,ms,ano, e e
escrever um algoritmo que as leia, escreva-as e calcule e escreva a diferena em dias entre c ambas. 1: d1,m1,a1,d2,m2,a2,qt1,qt2 : inteiro 2: V1, V1B [1..12] vetor de inteiro 3: V2 [80..89] vetor de inteiro 4: V1 (0,31,59,90,120,151,181,212,243,273,304,334) 5: V1B (0,31,60,91,121,152,182,213,244,274,305,335) 6: V2 (0,366,731,1096,1461,1827,2192,2557,2922,3288) 7: qt1 qt2 0 8: leia (d1,m1,a1,d2,m2,a2) 9: escreva (d1,m1,a1,d2,m2,a2) 10: se a2 = 80 a2 = 84 a2 = 88 ento a 11: qt2 d2 + v1b[m2] + v2[a2] 12: seno a 13: qt2 d2 + v1[m2] + v2[a2] 14: mse 15: se a1 = 80 a1 = 84 a1 = 88 ento a 16: qt1 d1 + v1b[m1] + v2[a1] 17: seno a 18: qt1 d1 + v1[m1] + v2[a1] 19: mse 20: escreva (qt2-qt1)
Exerc cio 100 Denir algoritmo que leia um vetor de 28 reais onde cada elemento do vetor representa o valor da d vida de cada estado brasileiro para com a unio. Os elementos a
88-08, Pedro Kantek
136
CAP ITULO 8. VETORES E MATRIZES esto colocados em ordem decrescente (isto as maiores d a e vidas na frente) e escreva a quantidade de estados que so necessrios para apresentar uma d a a vida de no m nimo 50% do total ?
Exerc cio 101 Denir um algoritmo equivalente para a leitura de um vetor de 200 elementos, seguido do clculo e impresso da soma dos elementos que so maiores que a a a 1000. Deve ser impressa tambm a quantidade de maiores de 1000. e Exerc cio 102 Escrever um algoritmo que seja capaz de ler um conjunto de 10 valores, calcular a mdia, e imprimir todos os valores do conjunto, a mdia, e a diferena entre cada e e c valor individual e a mdia calculada. e Exerc cio 103 Escreva um algoritmo que leia um vetor de 36 elementos e determine
qual maior, e qual seu ndice, imprimindo ambas as informaes, mesmo que haja mais de co um.
Exerc cio 104 Denir algoritmo que leia um vetor de 278 inteiros e escreva-o de trs a
para a frente.
Exerc cio 105 Escreva um algoritmo, que leia de uma s vez um vetor de 100 elemeno tos numricos reais, e escreva aqueles que forem maiores do que o valor 150, e tambm a e e quantidade deles. Exerc cio 106 Escreva um algoritmo que leia 200 valores (um a um), e crie um vetor
com tais valores, informando a seguir qual a mdia dos valores positivos e qual a mdia dos e e valores negativos.
Exerc cio 107 Denir algoritmo que leia uma frase de 80 caracteres e escreva a quantidade de vogais minsculas que apareceram na frase. u Exerc cio 108 Denir algoritmo que leia uma frase de 90 caracteres e escreva a quantidade de consoantes maisculas que apareceram na frase. u Exerc cio 109 Denir algoritmo que leia uma frase de 100 caracteres e escreva a quantidade de palavras que apareceram na frase.
8.7
Pesquisa sequencial
Dada um vetor, uma das aes mais comuns sobre ela, a pesquisa para saber se co e determinado elemento se encontra ou no contido nela. A maneira mais simples de fazer a esta pesquisa percorrer a tabela em ordem seqencial, at que: e u e
O elemento (denominado CHAVE) seja encontrado, ou Chegue-se ao m da tabela, quando ento concluiremos que o elemento CHAVE a no existe na tabela. a
Embora seja um algoritmo simples de se imaginar e de implementar, ele no dos a e mais ecientes, principalmente para tabelas muito grandes e com muitas pesquisas por unidade de processamento. Um primeiro melhoramento que podemos fazer, classicar a tabela, para diminuir e a quantidade de acessos at chegar a uma concluso sobre a existncia ou no da chave. e a e a Com a tabela classicada em ordem (digamos ascendente), a pesquisa da chave deve ser feita at que: e
verso de 10 de fevereiro de 2008 a
137
A seguir o algoritmo para fazer esta pesquisa: 1: inteiro V[1000] 2: inteiro I, CHAVE 3: leia V 4: leia CHAVE 5: I 1 6: enquanto I < 100 faa c 7: se VET[I] = CHAVE ento a 8: escreva encontrou 9: abandone 10: mse 11: II+1 12: menquanto 13: se I = 101 ento a 14: escreva No encontrou a 15: mse 16: m?
Exerc cio 110 Como exerc cio, indique qual a modicao que se deveria fazer no ca algoritmo acima, se o vetor lido estiver em ordem ascendente, a m de no ter que percorra e lo at o m para certicar-se da no existncia da chave. e a e Exerc cio Resolvido 13 Imagine um poss renamento para tornar mais rpido vel a
o acesso seqencial a uma tabela (de tamanho grande) classicada. u R: Basta aumentar o tamanho do salto, de 1 linha para 10, 20 ou qualquer outro valor.
Exerc cio 111 Mediante a regra acima, determine qual o nmero mdio de acessos u e em uma pesquisa binria para uma tabela de: a
1. 5 elementos: 2. 10 elementos: 3. 20 elementos: 4. 50 elementos: 5. 100 elementos: 6. 1.200 elementos: 7. 15.000 elementos: 8. 1.000.000 elementso:
Exerc cio 112 Dado o vetor: 1 4 5 6 8 10 13 18 21 60, realizar o chinez para descobrir a presena ou no das chaves, atravs do algoritmo de pesquisa binria: c a e a
1. 8 2. 9
88-08, Pedro Kantek
138
Exerc cio 114 Denir algoritmo que leia um vetor de 200 inteiros e escreva os elementos que so maiores do que seus medonhos de 10 chifres. Dene-se o medonho de n a chifresdo elemento ndice k de um vetor, ao elemento do mesmo vetor, com o menor ndice j poss (onde j k) tal que j divis por n, se este existir. vel e vel Exemplos: Dado o vetor 1 2 3 4 6 7 8 9 0 0 0 2 3, pergunta-se qual o medonho de 3 chifres do elemento 6 (quinto elemento do vetor) ? k igual a 5. O prximo j maior que cinco e e o divis por 3 (3 chifres) 6. Logo o medonho o sexto elemento, que o 7. vel e e e Se pedirmos o medonho do ultimo elemento de um vetor, ele s existir se o medonho o a for o prprio elemento (no caso de j ser igual a k). Isto s ocorrer se a ordem do ultimo o o a elemento for divis pelo nmero de chifres. vel u Exerc cio 115 Denir algoritmo que leia um vetor de 200 elementos inteiros, e a seguir calcule e escreva a somatria dos elementos do vetor DE ORDEM PAR. o Exerc cio 116 Denir algoritmo que leia um vetor de 200 elementos inteiros, e a seguir calcule e escreva a somatria dos elementos do vetor DE VALOR PAR. o Exerc cio 117 Denir algoritmo que leia um vetor de 300 inteiros, e escreva-o sujeito ` ordem de entrada, mas imprimindo primeiro os pares e depois os a mpares. Exerc cio 118 Dado um vetor VIN de 10 elementos inteiros numricos, criar o vetor e VAI contendo 30 elementos. Onde VAI[1], VAI[2] e VAI[3] recebem VIN[1], e assim por diante. Escrever algoritmo que leia VIN e escreva VAI. Exerc cio 119 Uma grande empresa tem seus preos armazenados na forma de dois c
vetores de 650 ocorrncias cada. No primeiro, a quem chamaremos COD esto os cdigos e a o dos produtos [inteiros]. No outro vetor, chamado PRE, esto os preos de cada produto, a c NA MESMA ORDEM DE APARECIMENTO do que COD. Escrever um algoritmo que leia os vetores contendo CODIGO e QUANTIDADE e escreva o valor a pagar, pela frmula VALOR = PRE [I] * QUANTIDADE [I]. o
Exerc cio 120 Dado um vetor ALFA contendo 50 nmeros inteiros e fracionrios misu a
turados, criar um vetor BETA de mesmo tamanho, onde s aparecem os nmeros inteiros no o u in cio, e com zeros ao nal. [Tantos zeros quantos eram os fracionrios em BETA]. Escrever a um algoritmo que leia o vetor ALFA e escreva BETA. Exemplo: ALFA: BETA: 3 3 1.5 4 4 10 139 2.2 11 10 0 11 0
88-08, Pedro Kantek
CAP ITULO 8. VETORES E MATRIZES E se ao nal do vetor, se colocar 99, em vez de zero, que mudana precisaria ser feita ? c
Exerc cio 121 Denir algoritmo que leia um vetor de 1500 nmeros reais positivos u sem qualquer tipo de ordenao. O algoritmo deve gerar outro vetor tambm com 1500 ca e nmeros onde os elementos que forem menores do que 10000 sero colocados na frente, e u a onde os maiores caro no m. Exceto esta mudana, a ordem original do vetor deve ser a c preservada. Exerc cio 122 Denir algoritmo que leia uma srie indeterminada de pares de valores e formados por CODIGO,VALOR referentes a arrecadaes do imposto de renda. CODIGO co um entre 137 cdigos poss e o veis, um para cada tipo de imposto. VALOR o valor em e reais efetivamente cobrado. Os dados terminam quando o cdigo 000 for lido. Ao nal do o processamento, o algoritmo deve imprimir quantos reais foram arrecadados em cada um dos cdigos que foram lidos. Os dados no tem nenhum tipo de ordenao. o a ca Exemplos de cdigos poss o veis (ct cios):
0246 0211 0192 0432 ... Taxas alfandegrias a Mensal~o a Tri-le~o a Multas por recolhimento fora de prazo,
Exerc cio 123 Desejamos analisar o mapa de uso de um disquete. Como sabemos um disquete dupla-dupla de 5 1/4, tem 2 faces, 40 trilhas e 9 setores por trilha, o que d um a total de 720 setores. Denir um algoritmo que leia 20 vetores (um de cada vez, claro), e que correspondem cada vetor a um disco diferente, e determine qual o percentual de setores livre em cada um dos discos, imprimindo tal resultado. O vetor de inteiros, e se existe um e valor zero, isto signica que o setor est livre. Qualquer valor diferente de zero, implica em a que o setor no est livre. a a Exerc cio 124 Denir um algoritmo que leia um vetor numrico real de 100 elementos, e onde esto misturados: nmeros positivos e negativos e nmeros inteiros e fracionrios. O a u u a algoritmo deve criar um vetor de sa tambm de 100 elementos, onde a ordem : da e e
Primeiro os nmeros negativos fracionrios u a Depois os positivos fracionrios a Depois os inteiros
Em cada uma das subclasses, a ordem original do vetor de entrada deve ser preservada. Exemplo: Vetor de entrada: 1.2 3.5 -8 -8.9 0 0 1.2 -3.1 Sada: -8.9 -3.1 -0.9 1.2 1.2 3.5 1.2 0 0 -4 -4 -0.9
Aps calcular o vetor de sa este deve ser impresso e o algoritmo encerrado. o da,
Exerc cio Resolvido 14 Uma empresa de departamentos, quer saber quais os produtos que ela vende e que rendem mais faturamento. As opes de vendas so: brinquedos co a (cod. 11), armarinhos (cod. 21), roupas (cod. 33) e produtos eletrnicos (cod. 40). O o cadastro de vendas da empresa tem o seguinte formato: TIPO,inteiro VALOR, real
88-08, Pedro Kantek
140
CAP ITULO 8. VETORES E MATRIZES E nele consta 1 registro para cada venda efetuada, isto , os cdigos se repetem. Escrever e o um algoritmo que leia o cadastro de vendas e totalize os quatro tipos ao nal. Soluo usando vetores: ca 1: tipo R = registro; 2: inteiro: ti; 3: real:va; 4: mregistro; 5: tipo V = vetor [1:4] R 6: V: tab; 7: R: reg; 8: inteiro: I; 9: tab[1].ti 11; 10: tab[2].ti 21; 11: tab[3].ti 33; 12: tab[4].ti 40; 13: leia (reg); 14: enquanto reg.ti = 0 faa c 15: I 1; 16: enquanto tab[I].ti = reg.ti faa c 17: I I + 1; 18: menquanto 19: tab[I].va tab[I].va + reg.va 20: leia(reg); 21: menquanto 22: escreva(tab)
Exerc cio 125 Suponha uma lista sequencial (um vetor numrico) de nome VET, e
denido globalmente, formada por nmeros inteiros positivos e contendo espao para 20 u c nmeros. O preenchimento sempre se d a partir do comeo do vetor sem lacunas. Os u a c dados vlidos se encerram quando encontrado um nmero negativo, que faz o papel de a e u sentinela e que sinaliza FIM DE DADOS. Obviamente cabem apenas 19 nmeros vlidos u a pois sempre h que se reservar espao para o sentinela. Notar que logo aps a sentinela a c o os nmeros que porventura aparecerem em VET so no conveis e no devem ser conu a a a a siderados, isto , o vetor no foi inicializado de alguma maneira antes dele comear a ser e a c usado. A seguir est o algoritmo de uma funo que recebe como parmetro um determinado a ca a nmero inteiro positivo X, e devolve a posio dele dentro de VET (caso ele de fato existisse u ca l dentro) ou devolve o valor 20 o que deve ser entendido como X no se encontra em a a VET. 1: Inteiro funo ACHANUMERO(inteiro X) ca 2: Inteiro I, J, K 3: I 1 4: J 0 5: enquanto I < 20 faa c 6: se VET[I] = X ento a 7: JI 8: I 21 9: mse 10: I++ 11: menquanto 12: se J = 0 ento a 13: Retorne (20)
verso de 10 de fevereiro de 2008 a
141
seno a Retorne J mse Fim funo ca Sobre o algoritmo acima, sero feitas 4 armaes a co 1. E desnecessrio inicializar J com o valor 0, pois J tem o valor imediatamente alterado, a logo abaixo. 2. Se em vez de fazer I 21 se zesse I 20 a funo deixaria de funcionar ca 3. Esta funo pode no funcionar no caso em que X no pertence a VET ca a a 4. Esta funo pode no funcionar no caso em que X pertence a VET ca a
Exerc cio 126 Dena um algoritmo que leia e escreva um conjunto de 200 valores numricos armazenando-os em uma vetor numrico (real). Feito isto, o algoritmo deve: e e
j e ndice que varia entre 1 calcular e imprimir a somatria dos termos: aj , onde j um o e 200, e aj a varivel que foi lida e armazenada no vetor. e a
2
Exerc cio 127 Denir algoritmo capaz de receber uma srie da datas, sempre refere entes ao ano de 1988, e no formato dd, mm. Para cada uma delas, o algoritmo deve calcular uma nova data, no mesmo formato, e que corresponda ao per odo de 180 dias posterior a data original. A srie de datas se encerra quando for lida um dia igual a zero. e Exerc cio Resolvido 15 Criar um algoritmo que leia (de uma vez) um vetor de
500 elementos inteiros. A seguir o programa deve determinar qual o valor que mais aparece neste vetor e quantas vezes ele aparece. Estas duas informaes (qual o mais repetido, e co e quantas vezes ele aparece) devem ser impressas. 1: V [1..500] de inteiro 2: MAT [1..500] [1..2] de inteiro 3: I,J,ix : inteiro 4: MAT[;1] -1 1.coluna inicializada com nmeros negativos u 5: leia(V) 6: para I de 1 at 500 faa e c 7: J1 8: enquanto (J < 500) faa c 9: se MAT[J,1] = V[I] ento a 10: MAT[J,2] MAT[J,2] + 1 11: abandone 12: mse 13: se MAT[J,1] < 0 ento a 14: MAT[J,1] V[I] 15: MAT[J,2] 1
88-08, Pedro Kantek
142
abandone mse JJ+1 menquanto mpara maior 0 I1 enquanto (I< 500) faa c se MAT[I,2] > maior ento a maior MAT[I,2] ix I mse II+1 menquanto escreva (O maior e ,mat[ix,1]) escreva (E a quantidade e ,mat[ix,2])
Exerc cio 128 Uma fazenda resolveu automatizar o processo de tomada de deciso a para escolha de sementes de trigo. Assim, a rea de plantio foi dividida em 8600 lotes distintos, que devidamente semeados, tiveram a cultura de 88/89 observada. A partir dos dados levantados no campo, foi criado um arquivo contendo o seguinte lay-out:
Identifica~o do lote, inteiro ca Tipo de semente, inteiro rea do lote plantado, em m2, real A Quantidade de trigo colhido no lote, em quilogramas, real Qualidade do produto, inteiro Existem 22 tipos de sementes, numerados de 1 a 22. A qualidade do produto um nmero e u que signica: 1=excelente, 2=razovel, 3=inferior. Supe-se que o custo de todos os tipos a o de semente o mesmo. e Deve-se denir um algoritmo que leia o arquivo e determine e escreva qual o tipo de semente mais produtiva, seguindo o critrio: e Se o trigo produzido excelente, a produtividade do lote deve ser aumentada em 20%. e Se o trigo inferior, a produtividade do lote deve ser diminu em 15%. e da Para cada tipo de semente, devem ser totalizadas as informaes de rea e peso do co a produto produzido. A semente mais produtiva aquela que tiver maior coeciente peso / e rea. a
Exerc cio 129 Uma partida de rolamentos composta de quantidades vari veis de e rolamentos tipos 1, 2 e especial. Ela aceita no TODO quando: e
pelo menos 97 % de rolamentos tipo 1 no tem defeito E a pelo menos 95 % de rolamentos tipo 2 no tem defeito E a Menos de 1000 rolamentos tipo especial tem defeito.
Os dados referentes a cada partida esto no computador na forma a NUMPAR, inteiro, TIP, caracter, QTDROL, inteiro, QTDDEF, inteiro NUMPAR um nmero que identica a partida. No arquivo existem diversas partidas, porm e u e todos os dados de uma partida esto agrupados. TIP, apenas um caracter cujo conteudo a e pode ser: 1 2 E. QTDROL a quantidade de rolamentos deste tipo que existem , ou e
verso de 10 de fevereiro de 2008 a
143
CAP ITULO 8. VETORES E MATRIZES na partilha. QTDDEF a quantidade de rolamentos deste tipo defeituosos. Deve-se denir e um algoritmo que leia todos os dados do arquivo, e para cada partida, deve-se imprimir seu nmero e a identicao ACEITAou REJEITADA u ca Um poss exemplo de arquivo poderia vel ser: 001,1,1200,10 001,E,3000,100 002,1,100,4 002,2,100,6 003,E,10000,800 004... Neste caso, o programa deveria emitir o relatrio: o 001 ACEITA 002 REJEITADA 003 ACEITA 004 ...
Exerc cio 130 Uma distribuidora de bebidas abastece o mercado com COCA-COLA. A empresa, no momento, est preparando o iminente lanamento da coca diettica. Assim, a c e resolveu fazer uma pesquisa de opinio na cidade para determinar qual a melhor estratgia a e a seguir. Os dados da pesquisa esto em um arquivo cujo lay-out : a e
Identifica~o do quarteir~o da cidade, inteiro ca a Quantidade de crianas no quarteir~o, inteiro c a Quantidade de adolescentes no quarteir~o, inteiro a Quantidade de pessoas obesas, no quarteir~o, inteiro a Quantidade de diabticos no quarteir~o, inteiro. e a Quantidade total de pessoas no quarteir~o, inteiro a Deve-se criar um algoritmo que leia e processe os dados informando: 1. Quantos quarteires tem mais de 100 obesos o 2. Qual a percentagem mdia (=mdia das percentagens) de crianas por quarteiro e e c a 3. Quantos quarteires tem mais adolescentes do que crianas o c 4. Quantos quarteires tem mais de 5 % de diabticos. o e
Exerc cio 131 Uma revenda de automveis quer fazer uma pesquisa para determinar o
se h correlao entre renda familiar e cor do automvel adquirido. Para tanto, cada venda a ca o realizada no ms passado, gerou um registro magntico contendo: e e Renda famlia, real (em R\$) Cor do carro adquirido, cadeia As cores poss veis so: amarelo, azul, branco, cinza, marrom, preto e verde. J as classes a a de renda so 3: Classe 1, vai de 0 at 50 Salrios m a e a nimos. A classe 2, vai de 50,01 SM at e 150 SM. A classe 3 de quem ganha mais que 150 SM. e Para cada registro lido, deve-se ver em qual categoria ele cai (para tanto, o programa ler no in a cio, o valor de um salrio m a nimo) e incrementar 1 em uma varivel que relacione a a cor e a classe. Ao nal, o programa deve imprimir: CLAS 1 2 3 AMARELO xxx xxx xxx AZUL xx xx xx BRANCO xx xx xx CINZA xx xx xx MARROM xx xx xx 144 PRETO xx xx xx VERDE xx xx xx
verso de 10 de fevereiro de 2008 a
Exerc cio 132 Um fabricante de margarina planeja homenagear a sua me no lanaa c mento de um novo produto no ano que vem. A nova margarina dever ter um nome formado a por alguma combinao das letras M,E,R,T,A, que o nome da me do fabricante. O exca e a erc deve criar o algoritmo que faa e escreva as 120 combinaes poss cio c co veis. Analisando o relatrio, o fabricante escolher o nome que quiser. o a Exerc cio 133 O instituto Nacional de Pesquisas Ufolgicas estuda com interesse a o ocorrncia de contactos com seres extraterrestres em 5 pa e ses: Brasil, Argentina, Canad, a Estados Unidos e Portugal. Cada contacto minuciosamente analisado e um resumo e e cadastrado no computador. Os dados so: a
M^s da ocorr^ncia, inteiro e e Ano da ocorr^ncia, inteiro e Pas, cadeia Grau do contacto, inteiro (1, 2 ou 3) Confiabilidade, (1=provvel embuste, 2=razovel, a a 3=confivel, 4=certo!) a A partir deste arquivo, deseja-se saber: 1. Qual o pa com mais relatos ? s 2. Qual o pais que proporcionalmente ao nmero de contactos apresenta mais embustes u ? 3. Qual o Pais com mais contactos do terceiro grau, con veis ou certos? 4. Qual o ms mais prop a ocorrncias ? e cio e
Exerc cio 134 Voc tem a seguir 3 funes que buscam um determinado valor que e co pode ou no estar contido em um vetor, por hiptese, GLOBAL. Considere o nome do vetor a o como VET, e considere tambm que ele tem espao de sobra no seu nal. Assim, por e c exemplo, ele pode ter espao para 1.000.000 de valores, mas atualmente usa bem menos do c que isso. Considere tambm a existncia de uma varivel GLOBAL chamada ULTIMOUSADO que e e a contm o valor do ultimo valor vlido dentro de VET. e a O algoritmo 1 o seguinte: e 1: inteiro funo BUSCALIN (inteiro CHAVE) ca 2: inteiro I 1 3: inteiro RESPOSTA -1 4: enquanto I ULTIMOUSADO faa c 5: se CHAVE = VET[I] ento a 6: RESPOSTA I 7: I ULTIMOUSADO+1 8: mse 9: I++ 10: menquanto 11: retorne RESPOSTA Para o algoritmo 2: 1: inteiro funo BUSCALINSEN (inteiro CHAVE) ca 2: inteiro I 1 3: VET[ULTIMOUSADO+1] CHAVE {note que ULTIMO no alterado} a e 4: enquanto CHAVE = VET[I] faa c 5: I++
verso de 10 de fevereiro de 2008 a
145
CAP ITULO 8. VETORES E MATRIZES menquanto se I = ULTIMOUSALDO+1 ento a retorne I seno a retorne -1 mse Olhando os 2 algoritmos (que esto corretos) podem-se fazer algumas armaes. Supondo a co que existem 800.000 valores em VET, analise as armaes a seguir e informe ao nal a co soma das armaes verdadeiras: co
6: 7: 8: 9: 10: 11:
1 O algoritmo 1 o mais rpido e a 2 O segundo nunca detecta a ausncia da chave, pois logo de cara inclui o elemento a buscar e 4 No segundo algoritmo, como a varivel ULTIMOUSADO no alterada a incluso da a a e a chave buscada no ocorre a 8 O segundo algoritmo mais rpido e a 16 A eventual ordenao em ambos os casos deixa os algoritmos mais rpidos ca a Pede-se a soma das armaes verdadeiras co
Exerc cio 135 No algoritmo a seguir, de uma funo que detecta se o nmero X ou ca u e no primo, h quatro lacunas. Informe qual comando deveria ser colocado em cada uma a e a das lacunas: 1: lgico funo PRIMO(inteiro X) o ca 2: inteiro QTD 0 3: inteiro QUO 2 4: enquanto QUO teto(raiz-quadrada(X)) QTD = 0 faa c 5: // teto(y) o prximo inteiro maior ou igual a y e o 6: se X mod QUO = 0 ento a 7: . 8: mse 9: . 10: menquanto 11: se QTD = 0 ento a 12: retorne . 13: seno a 14: retorne . 15: mse
a) b) c) d) e) QTD++; QUO++; QTD++; QTD++; QTD++; QUO++; QTD++; QUO--; QUO--; QUO++; verdadeiro; falso falso; verdadeiro falso; verdadeiro verdadeiro; falso falso; verdadeiro
Exerc cio 136 Suponha 2 pilhas, devidamente denidas para armazenarem nmeros u
inteiros, de nomes A e B. Considere que elas tem capacidades grandes (innitas, neste caso espec co). Na situao inicial A pilha A contm os seguintes elementos: 1 (o primeiro a ca e entrar), 5, 8, 14, 3, 2, 9, 6, 7 e 5 (o ultimo a entrar) e B est vazia. a Aps a execuo do trecho correto de algoritmo a seguir, qual o contedo de B (lido do o ca u primeiro a entrar para o ultimo a sair)
88-08, Pedro Kantek
146
inteiro S 10 enquanto (S 50) faa c Y desempilha (A) SS+Y empilha (B, Y) menquanto enquanto no vazia (B) faa a c Y desempilha (B) se Y mod 2 = 0 ento a empilha (A, Y) mse menquanto 1, 5, 8, 14, 2, 6 14, 2, 6 5, 7, 6, 9, 2, 3, 14 1, 5, 14, 2, 6 1, 5, 8, 14, 3, 2, 9, 6, 7, 5
a) b) c) d) e)
Exerc cio 137 Denir algoritmo que leia uma cadeia de 200 caracteres e escreva a quantidade de letras maisculas que so seguidas por uma letra minscula. u a u Exerc cio 138 Denir algoritmo que leia um vetor de 208 inteiros e escreva os elementos que esto entre nmeros maiores ou iguais. a u Exemplo: Se o vetor lido foi 1 16 4 24 23 22 10 8 8 8 7 1 2 0 3 devem ser impressos os nmeros 16, 24, 8, 8 e 2. u
Exerc cio 139 Escreva algoritmo de uma funo que leia um vetor de nmeros de ca u matr cula dos alunos aprovados em estrutura de dados (95 alunos) e que receba a matr cula de um aluno qualquer. A funo deve devolver .V. se o aluno foi aprovado e .F. se foi ca reprovado. Exerc cio 140 Denir algoritmo que implemente uma variante da linguagem do P, a seguir descrita. Toda s laba formada s por uma consoante e uma vogal considerada o e processvel. A esta, na saida, deve ser agregada outra s a laba com a consoante P a mesma e vogal. O resto do texto no deve ser alterado. Denir algoritmo que leia uma frase de 150 a caracteres, toda em maiscula e escreva o resultado com os P incluidos. u s Exemplo:
O RATO VAI AO BURACO O RAPATOPO VAPAI AO BUPURAPACOPO
Exerc cio 141 Denir algoritmo que leia um vetor de 400 elementos inteiros e gere um segundo vetor de 200 elementos, onde cada elemento a soma de dois elementos e consecutivos do vetor de entrada. Exerc cio 142 Dado um vetor DIST com 15 distribuies de freqencia estat co u sticas,
criar um vetor ACUM, tambm de 15 elementos, contendo as distribuies acumuladas. O e co algoritmo deve ler DIST e imprimir DIST e ACUM.
Exerc cio 143 Imagine 2 vetores de nomes A (com 50 elementos inteiros) e B (com 100 elementos inteiros). Dena um algoritmo que crie um terceiro vetor de nome C (com
verso de 10 de fevereiro de 2008 a
147
CAP ITULO 8. VETORES E MATRIZES 150 elementos), sujeito a seguinte C [1 3 5 ... 97 99] C [2 4 6 ... 98 100] C [101 102 103 ... 149 150] lei de formao: ca A B [1 2 3 ... 49 50] B [51 52 53 ... 99 100]
Exerc cio 144 Denir algoritmo que leia um conjunto de 20 valores reais, armazene-os em um vetor e a seguir calcule a somatria expressa pela expresso: o a
S = (A1 A20 )2 + (A2 A19 )2 + ... + (A10 + A11 )2
Exerc cio 145 Denir algoritmo que leia as notas de 120 alunos. Durante o processo de leitura devem ser calculadas a mdia e o desvio padro. Posteriormente, devem-se ime a primir as notas que estiverem fora do intervalo:
limite inferior: Media - 3 desvio padro a limite superior: Media + 3 desvio padro. a
Exerc cio 146 Existe um livro de 370 pginas que foi recentemente impresso. A editora a deseja fazer um estudo sobre poss veis erros de impresso. Desta forma, um especialista foi a convidado a levantar quantos erros existem em cada pgina. Cada valor foi digitado na a forma de um vetor, formando um conjunto de 370 valores. Denir um algoritmo que leia este conjunto de dados, armazene-o na forma de vetor, e responda:
1. Qual a pgina que tem mais erros ? (Suponha que s existe uma, isto ela unica) a o e e 2. Quantas pginas tem zero erros ? a 3. Quantas pginas tem mais de 10 erros ? a
Exerc cio 147 Denir algoritmo que leia datas (sempre referentes a 1990), no formato DD,MM. Os dados devem terminar quando for lido um dia = 0. Ao lado de cada data, o algoritmo deve imprimir o nmero de dias transcorridos desde o dia 1 de janeiro de 1990. u Exerc cio 148 Denir um algoritmo que leia valores sempre inferiores a 731. Para cada valor dia, o programa deve informar a qual dia de 89 ou de 90 ele se refere, supondo que o dia 1 corresponde a 1 jan 89 e o dia 730 a 31 dez 90. Dados terminam quando for lido um valor maior do que 730.
88-08, Pedro Kantek
148
Exerc cio 149 Denir algoritmo que leia 2 horas referentes sempre ao mesmo dia. A primeira hora indica quando um determinado processo produtivo comeou, e a segunda hora c indica quando ele terminou. Para cada par de horas, o programa deve calcular e imprimir qual a durao do processo em horas, minutos e segundos. Os dados de entrada esto no ca a formato: HH,MM,SS. O dado de sa tambm est no mesmo formato. da e a Exerc cio 150 Voc precisa resolver um problema relativo a astronomia. Neste caso, e pela magnitude dos nmeros, o tipo real no suciente. O Objetivo do exerc escrever u a e cio e um algoritmo capaz de implementar nmeros inteiros com 40 casas de preciso, e com eles u a realizar operaes de adio. Exemplo: Se o algoritmo ler os nmeros: co ca u
0000000200000300004000032000001000100000 e 0000001010000600007000010010001000800002 a resposta ser : 00000001210000900011000042010002000900002 Deve-se atentar que a resposta pode ter 41 casas.
Exerc cio 151 O ano letivo em uma pr-escola tem 125 dias de aula. Em cada dia, e e escolhido o aluno de melhor comportamento e seu nmero de matr u cula colocado em um e vetor de 125 elementos na posio correspondente ao dia espec ca co (1. elemento do vetor corresponde ao 1.dia de aula, e assim por diante). Denir algoritmo que ao nal do ano, quando o vetor estiver todo preenchido informe (escreva) qual o nmero do aluno que mais u apareceu no vetor. O nmero de matr u cula varia entre 1 e 2000 inclusive. Exerc cio 152 A Pol Rodoviria vai usar uma nova abordagem para a represso cia a a ao excesso de velocidade na estrada. Na sa de Curitiba, em direo a Paranagu, um da ca a posto vai anotar e digitar no computador as placas dos carros que passarem. Na chegada `s praias, outro posto vai fazer o mesmo trabalho. Desde que o computador tem relgio e a o sabe a que horas aconteceram os dois fatos, e conhecendo a distncia entre os dois postos, a que de 92,6 Km, o programa ir multar os mais afobados. e a O exerc pede que seja feita a rotina do programa que receber os dois horrios (no cio a a formato hh,mm ambos inteiros) e determine se o carro deve ou no ser multado. Lembrar a que a velocidade mxima permitida de 100 Km/h, com uma tolerncia de 10 %. a e a
8.8
Matriz
Pelas mesmas razes que nos levaram a criar o conceito de vetor, precisaremos agora o tratar de um outro tipo de organizao de dados: as matrizes. Trata-se de arranjos ca bi-dimensionais; de dados. Apenas para comparao, os vetores so arranjos unidimenca a sionais de dados. Excepcionalmente, podemos ter mais de duas dimenses, permitindo o algumas linguagens trs ou mais. Algumas so mais privilegiadas neste aspecto: APL e a por exemplo, permite at 256 dimenses em algumas implementaes e at 64 em outras. e o co e Nos vetores, ns precisvamos um o a ndice para referenciar um determinado elemento do vetor. No caso da matriz bi-dimensional, precisaremos 2 ndices: o ndice da linha e o da coluna. No caso de matrizes tridimensionais, so trs os a e ndices: plano, linha e coluna. O formato similar ao da denio de vetor, agora acrescentando-se apenas a quane ca tidade de elementos na segunda dimenso. O formato a e <nome> vetor de [in..] [in..] de <tipo> Por exemplo, a denio de uma matriz para conter os preos mensais (12 meses) de um ca c produto ao longo dos ultimos 5 anos, seria 1: PRECO vetor de [1..5] [1..12] de real
verso de 10 de fevereiro de 2008 a
149
CAP ITULO 8. VETORES E MATRIZES Note-se que a rigor, qual a primeira dimenso e qual a segunda um critrio do e a e e programador. No caso acima, a matriz ter 5 linhas por 12 colunas, mas nada impediria a que ela fosse declarada como 12 linhas por 5 colunas. Exemplos a) A criao de uma matriz 8 x 12 devidamente zerada, poderia ser asca sim: 1: M vetor de [1..8] [1..12] de real 2: inteiro I,J 3: para I de 1 at 8 faa e c 4: para J de 1 at 12 faa e c 5: M [I] [J] 0 6: mpara 7: mpara b) Dada uma matriz 7 x 13 devidamente preenchida, o algoritmo que encontra a transposta desta matriz e 1: M1 vetor de [1..7] [1..13] de real 2: M2 vetor de [1..13] [1..7] de real 3: inteiro I,J 4: leia(M1) 5: I 1 6: enquanto (I < 8) faa c 7: J1 8: enquanto (J < 14) faa c 9: M2 [J] [I] M1 [I] [J] 10: JJ+1 11: menquanto 12: II+1 13: menquanto
Exerc cio 153 Denir algoritmo que some duas matrizes A e B, de 7 linhas por 8 colunas cada uma, gerando a matriz C, tambm 7 x 8, onde cada elemento de C a soma e e dos dois elementos correspondentes em A e B. Exerc cio 154 Denir algoritmo que some duas matrizes A e B, de 7 linhas por 8 colunas cada uma, gerando a matriz C, tambm 7 x 8, onde cada elemento de C a soma e e dos dois elementos correspondentes em A e B, com uma restrio: S se pode usar um ca o ndice. Dica: L = f (x); C = f (x). Como so f e f ? a Exerc cio 155 Denir algoritmo onde dada uma matriz M1 de 6 x 9, devemos totaliza
la na vertical gerando um vetor de 9 elementos. Imprimir este vetor. A seguir deve-se encontrar e imprimir a mdia destes 9 valores. e
Exerc cio 156 Dena algoritmo capaz de ler uma matriz quadrada de ordem 23 e
totalizar os elementos colocados abaixo da matriz principal (exclusive esta), imprimindo o total ao nal.
Exerc cio 157 Dena um algoritmo capaz de ler duas matrizes de dimenses 4 e 9 (a o
primeira) e 9 e 7 (a segunda). Aps lidas as matrizes devem ser multiplicadas matricialmente o gerando uma sa de dimenses 4 x 7. A matriz resultado deve ser impressa ao nal. da o
Exerc cio 158 Uma matriz esparsa aquela que conta com grande nmero de elee u mentos nulos dentro dela. Podemos arbitrar que uma matriz esparsa quando apenas 5% e
88-08, Pedro Kantek
150
CAP ITULO 8. VETORES E MATRIZES dos seus elementos no so nulos. Uma maneira razovel de armazenar matrizes esparsas a a a criar matrizes comprimidasque guardam a linha e a coluna dos valores que no so zero e a a (guardam o valor tambm). e Isto posto:
Escreva algoritmo que receba matriz esparsa e devolva matriz comprimida. O inverso Supondo matrizes de inteiros, indique quais tamanhos e percentuais de valores diferentes de zero recomendam o uso de matrizes comprimidas (despreze o tempo de processamento para converso.) a Proponha pelo menos outros 2 esquemas distintos deste, de economia de espao para c matrizes esparsas
151
mse KK+1 menquanto C [I] [J] menor JJ+1 menquanto II+1 30: menquanto 31: escreva(C) 32: m{algoritmo}
Exerc cio Resolvido 17 Dada uma matriz numrica contendo 30 linhas (uma para e
cada aluno) e 5 colunas (1-matricula, 2-nota prova 1, 3-nota prova 2, 4-nota trabalho, 5media), deve-se denir um programa que:
leia a matriz (ela vir classicada em ordem ascendente de matr a cula) Reclassif que-a em ordem descendente de mdia e escreva o resultado
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: 31: 32: 33:
algoritmo {exemplo8} MAT vetor [1..30] [1..5] de real MATS vetor [1..30] [1..5] de real V vetor [1..30] de real V (1,2,3,4,5,6,... 28,29,30) inteiro I J K leia(mat) i1 limite 30 enquanto limite > 1 faa c I1 enquanto I < limite faa c se MAT[I] [5] < MAT[I+1] [5] ento a AUX MAT[I] [5] MAT[I] [5] MAT[I+1] [5] MAT[I+1] [5] AUX AUX V[I] V[I] V[I+1] V[I+1] AUX mse II+1 menquanto LIMITE LIMITE - 1 menquanto para I de 1 ate 30 faa c MATS [I][1] MAT[V[I]][1] MATS [I][2] MAT[V[I]][2] MATS [I][3] MAT[V[I]][3] MATS [I][4] MAT[V[I]][4] MATS [I][5] MAT[V[I]][5] mpara escreva(mats) m{algoritmo} 152
verso de 10 de fevereiro de 2008 a
Exerc cio 159 Denir um algoritmo que leia uma matriz 9 x 9, some-a com a sua transposta e escreva o resultado. Exerc cio 160 Denir algoritmo que leia duas matrizes (A e B) de dimenses 7 x 13 e o gere uma terceira matriz, onde cada elemento o maior entre os elementos correspondentes e em A e B. Exerc cio 161 Denir algoritmo que leia duas matrizes A e B, de 9 x 16 elementos numricos, devendo gerar uma terceira matriz sujeita as seguintes regras: e
Se A[L, C] + B[L, C] > 100 ento C[L, C] A[L, C] e a se A[L, C] + B[L, C] 100 ento C[L, C] B[L, C] a
Exerc cio 162 Denir um algoritmo que leia uma matriz 5 x 7, inverta suas linhas e a seguir, escreva-a. Exemplo: se a matriz lida for (3 x 4):
1 1 0 4 1 0 3 2 3 2 1 3 ser:
a resposta dever 0 0 3 3 1 1 2 1 1 4 3 2
Exerc cio 163 Denir um algoritmo que leia uma matriz 5 x 8, inverta suas colunas de ordem par e a seguir, escreva-a. Exemplo: se a matriz lida for (3 x 8):
1 1 0 4 1 0 3 2 3 2 1 3 1 0 2 2 0 3 3 7 7 4 8 9
a resposta dever 1 4 3 2 1 2 1 8 2 0 0 1 0 9 3 3 2 3
ser: 3 4 7 1 7 0
Exerc cio 164 Denir algoritmo que efetue a multiplicao matricial de duas matrizes, ca
que devero ser lidas de uma s vez: A primeira matriz tem forma 8 linhas por 9 colunas, e a o a segunda tem 9 linhas por 3 colunas. O resultado, depois de calculado, deve ser impresso.
Exerc cio 165 Escrever um algoritmo que leia (de uma s vez) uma matriz de 23 o linhas por 10 colunas. Esta matriz representa a populao dos 10 maiores munic ca pios de cada estado Brasileiro. Em cada linhas, as colunas esto em ordem decrescente, com exceo a ca da primeira coluna, que sempre representa a capital. O algoritmo deve imprimir:
1. Qual o nmero do estado de capital mais populosa ? u 2. Qual a mdia das populaes das capitais do Brasil ? e co 3. Quais os nmeros (de estado e de munic u pio) dos munic pios que tem populao maior ca que a capital ?
verso de 10 de fevereiro de 2008 a
153
Exerc cio 166 Uma matriz representa os valores da cotao da soja no mercado de ca Chicago em dlares por tonelada, de hora em hora (das 09:00 as 18:00 = 10 linhas), e nos o 22 dias uteis de julho/89 (22 colunas). Deseja-se um algoritmo que informe:
1. Quais as maiores cotaes dia a dia (22 valores) co 2. Qual a hora em que foi mais freqente aparecer a maior cotao (Neste caso no u ca a haver empate, por denio). a ca 3. Em quais dias a mdia da manh (primeiros 5 valores) foi maior do que a mdia da e a e tarde (5 ultimos valores).
Exerc cio 167 Dada uma matriz de dimenses 8 x 15, obter uma outra tambm de o e dimenses 8 x 15, onde cada linha foi dividida pelo menor elemento da linha correspondente o na matriz original. Exerc cio 168 Dada uma matriz de dimenses 9 x 12, obter uma outra tambm de o e dimenses 9 x 12, onde cada linha foi dividida pela somatria dos elementos da linha correo o spondente na matriz original. Exerc cio 169 Dada uma matriz de 7 linhas por 12 colunas, denir algoritmo que a leia, e a seguir classique as linhas da matriz pelos valores indicados na coluna 4. A matriz resultado deve ser impresso ao nal. a Exerc cio 170 Dada uma matriz de 8 linhas por 6 colunas, deve-se criar um algoritmo
capaz de l-la de uma s vez, e a seguir gerar uma matriz de idntica forma (8x6) onde cada e o e linha o produto acumulado da linha da matriz original. Exemplo: e Se a matriz lida for: 1 4 1 2 3 2 2 2 5 0 3 2 0 o resultado ser a 2 4 2 1 4 1 2 3 15 0 8 0 0 2 6 24 4 8 16
Porqu tudo comea com 1 ? e c A palavra digital vem do latim digitus que signica dedo, e por que temos 10 dedos, toda nossa lgica aritmtica se criou sobre um sistema decimal (de o e 10). J que so 10 d a a gitos e qualquer nmero composto por uma combinao u e ca desses d gitos seria de se esperar que cada um dos 10 d gitos tivesse uma distribuio proporcional quando vai se representar um nmero qualquer. ca u Assim, teoricamente, se analisarmos um grande conjunto de nmeros, seria u de se esperar que os d gitos 1, 2, 3, ... aparecessem em 10% das vezes, cada um iniciando os nmeros. u Anal, no existem d a gitos mais bonitos ou mais simpticos para que apaream a c no comeo dos nmeros mais do que os outros. Ou ser que existem ? c u a Em 1938, um matemtico chamado Benford, acabou descobrindo que sim, a existem d gitos iniciais mais frequentes do que outros. Ele estudou um monte de distribuies e chegou ` concluso que o d co a a gito 1 ocorre no comeo em c cerca de 30% das vezes, independente da fonte ou do fenmeno que cono e sultado. Parece estranho, mas verdade: em qualquer tabela, uma grande quantidade e de nmeros comea com o d u c gito 1. Muito mais do que os demais d gitos.
88-08, Pedro Kantek
154
CAP ITULO 8. VETORES E MATRIZES Veja-se a seguinte conjunto de dados, extra do livro de Benford. Veja na do tabela 8.1. Parece que a distribuio do primeiro d ca gito em nmeros segue a seguinte u distribuio logar ca tmica: P (n) log(n + 1) log n para n = 1, 2, ...9. Este a Lei do Primeiro D e gito.
Col.
A B C
D E F G H I J K L M N
Populaes co Constantes Exemplares aleatrios o de jornais Calores espec cos de substncias a Peso molecular Drainage Peso atmico o n1 ou n exemplares do Readers Digest Voltagem de raios X Dados da liga americana de baseball Endereos c aleatrios o n1 , n2 , ...n! Taxas de Mortalidade Mdia e
24.0 26.7 27.1 47.2 25.7 33.4 27.9 32.7 28.9 25.3 27.0 30.6
18.4 25.2 23.9 18.7 20.3 18.5 17.5 17.6 19.2 16.0 18.6 18.5
16.2 15.4 13.8 5.5 9.7 12.4 14.4 12.6 12.6 12.0 15.7 12.4
14.6 10.8 12.6 4.4 6.8 7.5 9.0 9.8 8.8 10.0 9.4 9.4
10.6 6.7 8.2 6.6 6.6 7.1 8.1 7.4 8.5 8.5 6.7 8.0
4.1 5.1 5.0 4.4 6.8 6.5 7.4 6.4 6.4 8.8 6.5 6.4
3.2 4.1 5.0 3.3 7.2 5.5 5.1 4.9 5.6 6.8 7.2 5.1
4.8 2.8 2.5 4.4 8.0 4.9 5.8 5.6 5.0 7.1 4.8 4.9
4.1 3.2 1.9 5.5 8.9 4.2 4.8 3.0 5.0 5.5 4.1 4.7
1389 1800 159 91 5000 308 707 1458 342 900 418 1011
155
156
Cap tulo 9
Registros
Este tipo indica uma estrutura complexa, formada por vrios tipos primitivos, e que a passam a ser usados conjuntamente. Ela criada em duas etapas. Na primeira, denee se do que composta a estrutura, e na segunda, quais as variveis que sero mapeadas e a a por essa estrutura. Defini~o da estrutura: ca estrutura <nome da estrutura> <tipo> <nome campo 1> <tipo> <nome campo 2> ... <tipo> <nome campo n> fim {estrutura} Utilizao da estrutura em variveis: ca a <nome da estrutura> <nome da varivel> a // exemplo: ENDEREO CLIENTE C // exemplo: estrutura ENDEREO C // alfanum RUA [30] // inteiro NMERO U // inteiro CEP // alfanum CIDADE [20] // fim {estrutura}
Obviamente, depois que um tipo estrutura foi denido, ele pode ser usado em qualquer local da linguagem onde a indicao <tipo> aparea, por exemplo, em vetores. ca c
9.1
Denio de registros ca
registro E uma coleo HETEROGENEA de coisas. As coisas so reconhecidas pelo ca a seu nome. Por exemplo, uma placa de automovel um conjunto de 3 letras e 4 nmeros. No e u a tem como denir estra estrutura usando vetores. estrutura PLACA caracter LETRA[3] inteiro NUMERO m {estrutura} PLACA VEICULO VEICULO.LETRA ABC VEICULO.NUMERO 1234 leia VEICULO leia (VEICULO.LETRA, VEICULO.NUMERO) No confunda PLACA ( apenas uma estrutura, no ocupa lugar na memria e a e a o NAO pode ser referenciada em comandos) com VEICULO (a varivel cuja estrutura a e PLACA, ocupoa lugar, pode ser referenciada... 157
CAP ITULO 9. REGISTROS Deve-se lembrar que uma matriz tambm pode ser denida com um vetor de vetores e (ou um registro). Acompanhe: estrutura LINHAS inteiro COLUNAS[10] m { estrutura } LINHAS MAT[20] Note que neste caso, existe uma matriz MAT contendo 20 linhas por 10 colunas. O acesso agora se d a MAT[3].COLUNAS[4] ... ao invs de e MAT[3] [4] ... que seria o normal de uma matriz. vetor de registros Nada impede que um registro seja vetorizado. Acompanhe. estrutura DEBITO inteiro RG pontoutuante PRESTACAO m {estrutura} DEBITO CLIENTES[100] Neste caso, existe um vetor de 100 (registros) dbitos. Para acessar a prestao do 10o e ca cliente, far amos: CLIENTES[10].PRESTACAO registro de vetores Tambm nada impede que um registro tenha vetores e estrutura ECONOMETRIA pontoutuante INFLACAO[12] inteiro POPULACAO inteirolongo PIB m { estrutura } ECONOMETRIA BRASIL, ARGENTINA, PARAGUAI Neste caso, como acessar as 2 ultimas taxas de inao de BRASIL e de PARAGUAI ? ca BRASIL.INFLACAO[12], BRASIL.INFLACAO[11] e PARAGUAI.INFLACAO[12], PARAGUAI.INFLACAO[11]
158
enquanto dia = 0 faa c acum [dia] acum [dia] + reg.valor leia(reg) menquanto escreva(acum)
tipo R = registro inteiro: dia real:valor mregistro R: reg inteiro: diaant real: total total 0 leia(reg) ant dia enquanto dia = 0 faa c enquanto dia = diaant faa c total total + valor leia(reg) menquanto escreva (total) total valor diaant dia se dia = 0 ento a leia(reg) mse menquanto
Exerc cio Resolvido 20 Uma empresa tem registros de vendas de todo o ano de
1987, na forma (dia,ms,valor). Dia e ms so inteiros, e valor real. Criar um algoe e a e ritmo que leia todo o arquivo e escreva os totais dirios. No necess rio denir rega a e istro. 1: inteiro: dia,mes 2: real: valor 3: tipo M = matriz [1:12, 1:31] real 4: M: cad 5: cad 0 6: leia (dia,mes,valor) 7: enquanto dia = 0 faa c
verso de 10 de fevereiro de 2008 a
159
Exerc cio 171 A Empresa DEUNOPE vai distribuir R$ 100.000 de prmio de m de e ano a seus vendedores. Cada vendedor receber um xo de 1.000. A diferena, isto , a c e quantia que sobrar, ser distribu proporcionalmente ao total de vendas de cada um. A a da Empresa tem no mximo 50 vendedores , e seus dados esto em um arquivo que contm o a a e lay-out Nome do vendedor, cadeia [30] total de vendas, real Para resolver este algoritmo, sem usar vetores, deve-se ler o arquivo duas vezes.
Exerc cio Resolvido 21 Existe uma turma do curso de PD que teve os dados
referentes ao bimestre transcritos em cartes na forma: o MATR,inteiro NT1,NT2:real NOTPROV,real (NT=nota trab) Os dados terminam quando for lida uma matr cula igual a zero. Escreva um algoritmo que dena o registro acima, leia o arquivo, calcule a mdia para cada aluno, usando a frmula: e o M = ((T1 2) + T2 + (Nprova 7)) 10 Aps cada clculo, deve-se imprimir, o nmero da matr o a u cula, a mdia nal e a mensagem: e PARABENS caso a mdia tenha sido maior ou igual a 7. Se a mdia foi menor que 7, a , e e mensagem PRECISAMOS ESTUDAR MAIS.... e tipo C = registro inteiro: matric real: t1, t2, pr mregistro C: cad real: media caracter: mensagem leia (cad) enquanto matric = 0 faa c media (t1 * 2) + t2 + (pr * 7) media media / 10 se media 7 ento a mensagem PARABENS seno a mensagem PRECISAMOS ESTUDAR MAIS... mse escreva (matric, media, mensagem) leia (cad) menquanto
Exerc cio Resolvido 22 Existe um arquivo que contm alunos que devero se e a
dirigir a unidades da universidade para fazer vestibular. Tais dados esto em um cadastro a que tem o formato:
88-08, Pedro Kantek
160
CAP ITULO 9. REGISTROS MATRE,inteiro Dist-unid-1,real DU2,real DU3,real Denir um algoritmo que leia tais registros e para cada um, gere um outro registro no formato MATRS,inteiro Num-uni-mais-prox,inteiro distancia,real Os dados acabam quando for lida uma matr cula zero. tipo E = registro inteiro: ME; real: U1, U2, U3; 4: mregistro 5: E: CADE; 6: tipo S = registro 7: inteiro: MS, UP; 8: real: DU; 9: mregistro 10: S: CADS; 11: leia (CADE); 12: enquanto ME = 0 faa c 13: se U1 U2 U1 U3 ento a 14: UP 1; 15: DU U1; 16: mse 17: se U2 U1 U2 U3 ento a 18: UP 2; 19: DU U2; 20: mse 21: se U3 U1 U3 U2 ento a 22: UP 3; 23: DU U3; 24: mse 25: MS ME; 26: grave (CADS); 27: leia (CADE); 28: menquanto
1: 2: 3:
161
CAP ITULO 9. REGISTROS Pede-se o desenho da rea F, com todos os seus componentes a
Exerc cio 173 Projete a estrutura necessria para comportar todas as informaes a co dos alunos do UNICENP. Veja que cada aluno tem NOME (com tamanho mximo de 40 a caracteres), idade e cdigo de matr o cula. Os alunos se agrupam em turmas de no mximo 70 a alunos. Cada turno tem 4 turmas e cada curso tem 2 turnos. Finalmente, h no UNICENP a 28 cursos. Para a estrutura acima, responda
Quantos alunos cabem no total ? Supondo que alunos no preenchidos contm idade = 0, qual o algoritmo que conta a e quantos alunos h no curso 22 ? a Qual o algoritmo que conta quantos alunos estudam pela manh (1. turno) ? a Qual o algoritmo que imprime o nome de todos os alunos do curso de informtica a (curso=8)
Exerc cio 174 Suponha a estrutura necessria para conter um romance, sujeito as a seguintes limites: linhas de 60 caracteres; pginas de 43 linhas; cap a tulos de 20 pginas; a livros de 18 cap tulos.
Dena a estrutura em questo a Escreva o algoritmo que imprime as capitulares (primeiro caractere de cada cap tulo). Escreva o algoritmo que imprime o cap tulo 2 Escreva o algoritmo que imprime as pginas a mpares dos cap tulos pares.
Exerc cio 175 Suponha que para identicar uma origem ou um destino, h que se a ter 3 informaes: nome da cidade, sigla do estado a que pertence e pa Isto posto, co s. escreva a estrutura necessria para identicar uma viagem. Uma viagem composta pelas a e informaes: origem, destino, data da viagem, durao em dias. co ca Exerc cio Resolvido 23 Na realizao da ultima feira de moda no Parque Barigi, ca u
estiveram perto de 100.000 visitantes. Cada fam informou seu estado de origem e quantos lia componentes tinha. Tais dados se encontram em um arquivo com o formato: ESTADO, cadeia[2]; NUMVIS, inteiro. ESTADO a sigla com 2 caracteres. e Criar um algoritmo que leia tal arquivo, exclua os visitantes do estado do Paran, (sigla a PR), e totalize por estado de origem, em ordem alfabtica. Os dados terminam quando e for lido um estado igual a XX que no deve ser considerado para efeito de clculo. , a a tipo R = registro estado : caracter qtd : inteiro mregistro TAB [1:24] vetor de R reg : R tab[1].estado AC 8: tab[2].estado AL 9: tab[3].estado AM 10: tab[4].estado BA
1: 2: 3: 4: 5: 6: 7:
162
tab[5].estado CE tab[6].estado DF tab[7].estado ES tab[8].estado GO tab[9].estado MA tab[10].estado MG tab[11].estado MS tab[12].estado MT tab[13].estado PA tab[14].estado PB tab[15].estado PE tab[16].estado PI tab[17].estado RJ tab[18].estado RN tab[19].estado RO tab[20].estado RS tab[21].estado SC tab[22].estado SE tab[23].estado SP leia (reg) enquanto (reg.estado = XX faa c se reg.estado = PR ento a I1 enquanto tab[I].estado = reg.estado faa c II+1 menquanto tab[i].qtd tab[i].qtd + reg.qtd mse leia (reg) menquanto escreva (tab)
Outra possibilidade se soluo seria no colocar os estados na tabela, e a medida que ca a eles fossem chegando, a tabela fosse sendo incrementada. Neste caso, se a sa tivesse da que ser ordenada este trabalho teria que ser feito a parte ao nal dos dados. A soluo ca caria: 1: tipo R = registro 2: estado : caracter 3: qtd : inteiro 4: mregistro 5: TAB [1:24] vetor de R 6: reg : R 7: tab ... {espaos e zeros} c 8: leia (reg); 9: enquanto (reg.estado = XX faa c 10: se reg.estado = PR ento a 11: I1 12: enquanto tab[I].estado = reg.estado TAB[I].ESTADO = faa c 13: II+1 14: menquanto 15: se TAB[I].ESTADO = ento a 16: TAB[I].ESTADO REG.ESTADO 17: mse
verso de 10 de fevereiro de 2008 a
163
Exerc cio Resolvido 24 Uma companhia area tem 6 tipos de avies: 737-200, e o
737-300, 727, 707, A300 e Bandeirantes. Do cadastro de viagens realizadas no ultimo ano, obteve-se o seguinte arquivo: TIPO,cadeia[6]; PASSAG,inteiro; DIST,real, onde TIPO um campo de 6 posies com a identicao de tipo de avio, PASSAG a e co ca a e quantidade de pessoas transportadas e DIST a distncia do trecho percorrido. Cada vo e a que a Companhia realizou no ano tem um correspondente registro neste arquivo. Deve-se escrever um algoritmo que leia o arquivo e crie uma tabela de 6 ocorrne cias contendo as quantidades totais de passageiros e distncias por tipo de avio. O a a objetivo nal conhecer a produtividade de cada tipo de avio, dada pela razo: pase a a sageiros / distncia. O programa deve imprimir o nome do tipo de todos os avies, e a o ao lado sua produtividade. Os dados terminam quando for lido um tipo totalmente em branco. 1: tipo R = registro 2: aviao : caracter 3: passag : inteiro 4: distancia : real 5: mregistro 6: TAB [1..6] vetor de R 7: tipo R1 = registro 8: av : caracter 9: pa : inteiro 10: di : real 11: mregistro 12: REG : R1 13: inteiro: I; 14: real: prod; 15: leia (reg) 16: enquanto (av = ) faa c 17: I 1; 18: enquanto (I < 7) faa c 19: se aviao [I] = av ento a 20: abandone 21: mse 22: se aviao [I] = ento a 23: aviao [I] av; 24: passag [I] pa; 25: distancia [I] di; 26: I 7; 27: abandone 28: mse 29: menquanto 30: se I < 7 ento a
88-08, Pedro Kantek
164
passag [I] passag [I] + pa; distancia [I] distancia[I] + di; mse leia(reg); menquanto I 1; enquanto I < 7 faa c prod passag [I] distancia [I] escreva ( Tipo , aviao [I], produtividade, prod); I I + 1; menquanto
I0 J0 K0 A [1..3] [1..4] vetor de real B [1..4] [1..5] vetor de real R [1..3] [1..5] vetor de real A[1;1] 1 A[1;2] 2 A[1;3] 3 A[1;4] 4 A[2;1] 5 A[2;2] 6 A[2;3] 7 A[2;4] 8 A[3;1] 9 A[3;2] 10 A[3;3] 11 A[3;4] 12 B[1;1] 1 B[1;2] 2 B[1;3] 3 B[1;4] 4 B[1;5] 5 B[2;1] 6 B[2;2] 7 B[2;3] 8 B[2;4] 9 B[2;5] 10 B[3;1] 11 B[3;2] 12 B[3;3] 13 B[3;4] 14 B[3;5] 15 B[4;1] 16 B[4;2] 17 B[4;3] 18 B[4;4] 19 B[4;5] 20 para I de 1 ate 3 faa c 165
88-08, Pedro Kantek
CAP ITULO 9. REGISTROS para J de 1 ate 5 faa c S0 para K de 1 ate 4 faa c S S + A[I;K] B[K;J] mpara R[I;J] S mpara 47: mpara 48: escreva R
40:
(X X)2 n
9.2
Processamento de Textos
Um cap tulo important ssimo do processamento de dados se refere ao processamento de texto. Trata-se de transformar o computador em uma super mquina de escrever a capaz de realizar todas as tarefas triviais do manuseio de textos e tambm algumas e outras facilidades desejadas. A importncia deste assunto, em um curso de lgica de a o construo de algoritmos est em que para manusear texto, desenvolvem-se inmeras ca a u tcnicas muito uteis para a interpretao e manuseio de dados na forma alfabtica, que e ca e no necessariamente precisam ser textos. a Um texto, nesta acepo um conjunto indeterminado de caracteres. Pode ser uma ca e varivel cadeia (limitada a 255), ou um vetor de caracteres, neste caso, sem limite. a Alguns caracteres inclu dos no meio do texto podem format-lo de maneira a mudar seu a visualquando o imprimirmos. Um exemplo deste tipo de caracter so o RETORNO a DE CARROe o MUDANCA DE LINHA. Quando colocados juntos no meio de um texto, eles causam a mudana de linha e o retorno ao in da prxima linha. c cio o Os caracteres ASCII referentes: retorno de carro: CR = carriage return = Cdigo o 13 do ASCII LF = line feed = Cdigo 10 do ASCII o
88-08, Pedro Kantek
166
CAP ITULO 9. REGISTROS Em outros textos, cada linha tem no seu in cio, uma vari vel numrica que indica qual e o comprimento da linha, e neste caso no h necessidade de usarem-se delimitadores. a a
Exerc cio 176 Escreva um algoritmo que leia uma frase terminada por um ponto, com tamanho inferior a 80 caracteres, e um unico espao em branco separando cada palavra, e c escreva o nmero de palavras da frase. u DESAFIO: a quantidade de palavras femininas (i. : terminadas em A e ). Exerc cio 177 Denir algoritmo capaz de receber uma frase e converter as letras minsculas lidas em maisculas, imprimindo este resultado. u u Exemplo: Se for lida a frase Ivo viu a LARANJA a resposta ser IVO VIU A LARANJA , a . Exerc cio 178 Denir um algoritmo que leia uma frase de at 80 caracteres, alinhada e ` esquerda e determine e escreva: a
1. Qual o nmero da maior palavra da frase u 2. Quantos caracteres ela tem de comprimento. Exemplo: Se for lida a frase Maria comeu a melancia o algoritmo dever imprimir 4,8. , a
Exerc cio 179 Escrever um algoritmo para criptografar textos, usando o algoritmo da
Criptograa de Cezar para k=3. ,
Exerc cio 180 Justicao: Dada uma linha com um comprimento cl, e supondo uma ca
frase com comprimento cf, e supondo mais, que cl seja maior do que cf, surge o problema de estabelecer a frase na linha ALINHADA pela esquerda e pela direita. Chama-se a isto de justicao, e os bons datilgrafos fazem isto quase instintivamente. Por exemplo,. se ca o tivermos a frase IVO.VIU.A.UVA branco), que tem um cf de 13, para ser impressa em (. e uma linha de 20 (cl=20), alinhada a esquerda e a direita, como fazer isto ? Um poss ataque para o problema estabelecer: vel e nb = nmero de brancos (nb = cl - cf). No caso: 20 - 13 = 7 u np = nmero de palavras. No caso np = 4 u
verso de 10 de fevereiro de 2008 a
167
CAP ITULO 9. REGISTROS ne = numero de locais receptores de brancos. ne = pred (np). No caso ne=3 b1 = tamanho do primeiro preenchimento. b1 = nb div ne. No caso b1 = 7 div 3 = 2 b2 = tamanho do segundo preenchimento. b2 = succ(b1). No caso b2 = 3 n2 = quantidade de b2s. n2 = nb mod ne. No caso: n2 = 7 mod 3 = 1 n1 = quantidade de b1s. n1 = ne - n2. No caso: n1 = 3 - 1 = 2 Em resumo, para justicar IVO.VIU.A.UVA 20 posies, devemos inserir 1 (n2) bloco em co de 3 (b2) espaos, e 2 (n1) blocos de 2 (b1) espaos no texto. O local de insero ca a c c ca critrio do usurio, mas pode-se sugerir a seguinte colocao: (. signica espao em branco) e a ca c IVO...VIU....A...UVA.
Exerc cio 181 Imagine um algoritmo capaz de ler uma entrada formada por at 60 e caracteres, que correspondem a uma frase. Esta frase termina quando for encontrado um ponto. O algoritmo deve ser capaz de responder:
Qual o tamanho da frase Quantas palavras existem na frase Quantas vezes a dupla ma apareceu na frase.
Exerc cio 182 Escrever um algoritmo que leia uma linha de caracteres (mximo de 60) a contendo uma frase (palavras separadas por branco). O algoritmo deve imprimir as palavras cujo comprimento for maior que 6 caracteres. Exerc cio 183 Dado um texto, sem nenhum caracter de controle, na forma de um vetor, imprimi-lo com tamanho de linha = 60, alinhado a esquerda. No quebrar palavras. a Exerc cio 184 Dado um texto, na forma de um vetor e formado por minsculas e u maisculas indistintamente, imprimi-lo todo em maisculas. u u Exerc cio 185 Dado um texto, na forma de um vetor e formado s por minsculas, o u imprimi-lo colocando cada primeira letra de todas as palavras em maisculos. u Exerc cio 186 Dado um texto, na forma de um vetor, calcular a quantidade de letras, brancos e palavras, imprimindo estes resultados ao nal. Exerc cio 187 Escrever um algoritmo para criptografar textos, usando o algoritmo da Criptograa de Cezar, para k=n, onde n deve ser lido e varivel embora xo no texto a e a criptografar. Exerc cio 188 Dado um texto, sem nenhum caracter de controle, na forma de um vetor, imprimi-lo com tamanho de linha varivel, informado no in do programa, alinhado a cio a esquerda. No quebrar palavras. a Exerc cio 189 Dado um texto, sem nenhum caracter de controle, na forma de um vetor, imprimi-lo com tamanho de linha varivel, informado no in do programa, alinhado a cio ` direita. No quebrar palavras. a a
88-08, Pedro Kantek
168
Exerc cio 190 Suponha que todas as palavras terminadas em aso femininas e todas a as terminadas em oso masculinas. Dena um algoritmo que leia uma frase de no mximo a a 80 caracteres contendo palavras separadas por um branco, e com a frase terminando por um . O algoritmo deve: .
1. Contar quantas palavras existem 2. Quantas so masculinas a 3. Quantas so femininas a Imprimir estes resultados ao nal
Exerc cio 191 Imagine um algoritmo capaz de ler uma entrada formada por at 60 e caracteres, que correspondem a uma frase. Esta frase termina quando for encontrado um ponto. O algoritmo deve ser capaz de responder: a) Qual o tamanho da frase b) Quantas palavras existem na frase c) Quantas vezes a dupla maapareceu na frase.
Correspondncia de cadeias e
Este problema surge com alguma freqncia em diversos lugares na cincia da comue e putao. O caso mais comum o de pesquisar uma palavra dentro de um texto que ca e est sendo editado. Qualquer processador de texto faz isso. Em outra aplicao buscaa ca se comparar 2 cadeias de cidos nucleicos dentro de uma molcula de DNA. Aqui so a e a apenas 4 letras (ACTG) e largas seqncias so buscadas. ue a Eis a formalizao do problema: H uma cadeia C composta por 1..n caracteres. ca a H uma palavra a buscar, P composta por 1..m caracteres. Naturalmente n m. Os a caracteres de C e de P foram tirados de algum alfabeto nito . Assim, podemos ter = {0, 1}, ou = {A, C, T, G} ou o alfabeto ASCII ou similar. Diz-se que P ocorre em T com deslocamento s, se a partir da posio s + 1 de T e ca pelos prximos m caracteres, h uma corresponncia completa entre P e T. o a e O problema da correspondncia de caracteres busca encontrar todos os delocamentos e vlidos em T que correspondem a P. a H duas classes de algoritmos de busca aqui: o primeiro, o mais simples, chamado a e de fora bruta, no realiza nenhum pr-processamento nas cadeias c a e
Fora Bruta c
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
Algoritmo Fora Bruta para busca em cadeias (padro P, texto T) c a i1 CONTADOR 0 enquanto (i < tamanho(T)-tamanho(P)) faa c aux 0; j 1 enquanto (j tamanho(P)) (T[aux + i] = P[j]) faa c CONTADOR++ aux++ j++ menquanto se j = tamanho(P) + 1 ento a escreva ocorrncia em ,i e 169
88-08, Pedro Kantek
i i + tamanho(P) {pode ser +1. Depende da denio} ca seno a i++ CONTADOR++ mse menquanto m algoritmo
Este algoritmo claramente ruim, tem complexidade no pior caso de O(tamanho(P ) e tamanho(T )). Acompanhe no exemplo, a quantidade de testes que feita: e T=o galo o gato e a gata gaguejaram e P=gato QUANTIDADE DE TESTES = 38
Algoritmos ecientes
H toda uma fam de algoritmos que diminuem o tempo de processamento nesta a lia tarefa. Todos realizam algum tipo de pr-processamento sobre as cadeias T e/ou P. e Rabin-Karp A idia deste algoritmo converter a cadeia em nmeros (ou melhor dizendo, usar e e u e a interpretao numrica das cadeias) para efeito da busca. Dado que, caracteres em ca e computador so representados usando bits, sempre ser poss este procedimento sem a a vel perda de generalidade. O algoritmo comea calculando a representao decimal de P, o que ocupa p d c ca gitos. Depois, um vetor de mesmo comprimento de T calculado. A cada p d e gitos de P a sua representao decimal calculada e este valor guardado. ca e e O processo rpido. A cada deslocamento em T, basta excluir o d e a gito de mais alta ordem e acrescentar um novo d gito ` direita. a A diculdade neste caso quanto ao tamanho dos nmeros envolvidos, sobretudo se e u P grande. A maneira de contornar esta diculdade usar a aritmtica dos ponteiros e e e do relgio, com o mdulo q. Este valor usualmente escolhido de forma que 10q caiba o o e em uma palavra do computador de modo a poder fazer toda a aritmtica inteira. e Entretanto, esta escolha introduz a possibilidade de acertos esprios. Isto ocorre u quando houver a coincidncia de P mod q com T[i..j] mod q, sem que haja P = T[i..j]. e Entretanto, pela escolha judiciosa de q, pode-se garantir que haja poucos acertos esprios. Seja como for, a igualdade numrica no garante a localizao de P em T. u e a ca H que se fazer o testye expl a cito a seguir. A vantagem do algoritmo de Rabin-Karp e excluir a grande maioria de candidatos em uma busca linear simples. Autmatos de correspondncia o e O autmato nito uma mquina de estados composto por um conjunto nito de estao e a dos, um estado inicial, um alfabeto nito de entrada e uma funo Q em Q, chamada ca funao de transio. c ca Veja-se um exemplo, extra de CLR pg. 726 (verso brasileira) do a a Cada palavra P tem o seu prprio autmato de busca. Depois que o autmato foi o o o constru ele eciente: examina-se cada caractere de T uma unica vez. O problema do e que a construo do autmato pode ser demorada principalmente se grande. e ca o e Veja-se a seguir um autmato para pesquisar P=ababaca, extra da mesma obra, o da pg. 727. a
88-08, Pedro Kantek
170
Algoritmo de Boyer-Moore
Este algoritmo, descrito na dcada de 70, usa 3 artif e cios aceleradores que permitem aumentar o tamanho do salto
a busca feita da esquerda para a direita e Pr-compila uma tabela de ocorrncias de caracteres e e Pr-compila uma tabela de ocorrncias de prexos no padro. e e a
Os algoritmos so: (referncia para todos CLR, ingls, pag 870) a e e 1: Algoritmo BOYER-MOORE (texto T, padrao P) 2: tabela1 CARACTERRUIM (padro P, alfabeto S) a 3: tabela2 SUFIXOBOM (padro P) a 4: i 0 5: enquanto (i tamanho(T) - tamanho(P)) faa c 6: j tamanho(P) 7: enquanto (j > 0) P[j] = T[i + j] faa c 8: j 9: menquanto 10: se (j = 0) ento a 11: escreva ocorrncia em ,i e 12: i i + tamanho(P) 13: seno a 14: i i + MAX ((j-tabela1[T[i+j]]), tabela2[j])
verso de 10 de fevereiro de 2008 a
171
Algoritmo CARACTERRUIM (padro P, alfabeto S) {alfabeto S contm todos os a e caracteres de T (no repetidos)} a 2: para cada caracter do alfabeto faa c 3: tabela1[indice do caracter] 0 4: mpara 5: para j de 1 at tamanho(P) faa e c 6: tabela1 [indice do caracter P[j]] j 7: mpara 8: retorne tabela1 9: m algoritmo Exemplo deste algoritmo: CARACTERRUIM (gato, o/galteujrm) 4 0 1 2 0 3 0 0 0 0 0, signicando salto de 4 para /leujrm, salto de 3 (4-1) para g, 2 (4-2) para a e 1 para t. Nenhum salto para o. A segunda tabela construida pela funo SUFIXOBOM, cujo algoritmo : e ca e 1: Algoritmo SUFIXOBOM (padro P) a 2: tabelaPI PREFIXO (P) 3: tabelaPILINHA PREFIXO (reverso P) 4: tabela2 tamanho(P) - tabelaPI [tamanho (P)] {repetir tam(P) vezes} 5: para LM de 1 at tamanho(P) faa e c 6: j tamanho(P) - tabelaPILINHA [LM] 7: se (tabela2 [j] > LM - tabelaPILINHA [LM]) ento a 8: tabela2[j] LM - tabelaPILINHA [LM] 9: mse 10: mpara 11: retorne tabela2 12: m algoritmo Funo PREFIXO (padro P) ca a tabelaPREFIXOS 0..0 (o mesmo tamanho de P) k0 para q de 2 at tamanho(P) faa e c enquanto (k > 0) (P[k+1] = P[q]) faa c k tabelaPREFIXOS [k] 7: menquanto 8: se P[k+1] = P[q] ento a 9: k++ 10: mse 11: tabelaPREFIXOS [q] k 12: mpara 13: retorne tabelaPREFIXOS 14: m algoritmo No exemplo do teste o galo o gato e a gata gaguejaram para o padro P=gato aqui, a o nmero de testes de apenas 10. Compare com os 38 da FORCA BRUTA. u e Vejamos um exemplo:
1: 2: 3: 4: 5: 6:
P O R Q U E 6 6 6 6 6 1
verso de 10 de fevereiro de 2008 a
172
CAP ITULO 9. REGISTROS Resposta 7 (contra 41 da fora bruta) c 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) Tabela 2: (Sufixo bom) Realiza um processamento apenas em P, e busca sufixos do padrao que tenham sido repetidos anteriormente no padrao. 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 =
verso de 10 de fevereiro de 2008 a
173
CAP ITULO 9. REGISTROS 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 ---------------------------------
Exerc cio 192 Segundo a f sica, quando temos diversas resistncias ligadas em pare alelo, podemos substitu -las por uma unica resistncia chamada EQUIVALENTE, que tem e uma resistncia calculada pela frmula: e o
1 1 1 1 = + + ... + Req R1 R2 Rn Denir um algoritmo que leia um conjunto indeterminado de resistncias, suponha-as e ligadas em srie, calcule e escreva a resistncia equivalente do conjunto. Dados terminam e e quando for lido um valor igual a zero. Por exemplo, se forem lidos os valores de resistncias e iguais a 5, 10, 1 e zero, a resposta da resistncia equivalente ser 10/13. e a
Exerc cio 193 De acordo com o regulamento do servio postal americano, no pode c a
seguir pelo correio, nenhum pacote cujo comprimento (maior dimenso) somado ` amarrao a a ca seja superior a 72 polegadas. Amarrao o comprimento do menor barbante que possa toda ca e a volta ao pacote. Construa um algoritmo portugol que leia 3 dimenses e escreva PODE o se o pacote puder ser mandado via correio, ou NAO PODE no puder. As dimenses esto se a o a em cent metros, e deve ser usada a converso: 1 polegada = 2,5 cm. a
Exerc cio 194 Escreva uma funo capaz de receber dois nmeros (inteiros) e devolver ca u a mdia geomtrica entre eles (real). e e Exerc cio 195 Escreva uma funo capaz de receber um valor representativo de uma ca
distncia medida em polegadas, e retorne a mesma distncia medida em metros (1pol = a a 2,54cm)
Exerc cio 196 Suponha um algoritmo para clculo de um D.V. para cdigos de 4 a o d gitos assim formulado: cdigo o XYZT-d clculo de Q Q = X + Y + Z + T a clculo de d d = Q mod 10 a Escreva um algoritmo para calcular o DV de uma srie de cdigos lidos, na forma de 4 e o inteiros positivos. Para cada cdigo lido, o algoritmo deve imprimi-lo junto com o DV. Os o dados terminam quando for lido um nmero negativo. O clculo do DV deve ser feito por u a uma funo. ca Exerc cio 197 Suponha um algoritmo para clculo de um D.V. para cdigos de 4 a o d gitos assim formulado:
88-08, Pedro Kantek
174
CAP ITULO 9. REGISTROS cdigo o XYZT-d clculo de Q Q = 2X + 3Y + 4Z + 5T a clculo de d d = Q mod 7 a Escreva um algoritmo para calcular o DV de uma srie de cdigos lidos, na forma de 4 e o inteiros positivos. Para cada cdigo lido, o algoritmo deve imprimi-lo junto com o DV. Os o dados terminam quando for lido um nmero negativo. O clculo do DV deve ser feito por u a uma funo. ca
Exerc cio 198 Suponha um algoritmo para clculo de um D.V. para cdigos de 4 a o d gitos assim formulado: cdigo o XYZT-d clculo de Q Q = 3X + 5Y + 7Z + 9T a clculo de w w = Q mod 11 a clculo de d Se w = 10, ento d = 0, seno d = w. a a a Escreva um algoritmo para calcular o DV de uma srie de cdigos lidos, na forma de 4 e o inteiros positivos. Para cada cdigo lido, o algoritmo deve imprimi-lo junto com o DV. Os o dados terminam quando for lido um nmero negativo. O clculo do DV deve ser feito por u a uma funo. ca Exerc cio 199 Suponha um algoritmo para clculo de um D.V. para cdigos de 4 a o
d gitos assim formulado: cdigo o XYZT-d clculo de q1 q1 = 2X + 3Z a clculo de q2 a q2 = 2Y + 3T clculo de Q a q = q1 + q2 clculo de d a d = q mod 10 Escreva um algoritmo para calcular o DV de uma srie de cdigos lidos, na forma de 4 e o inteiros positivos. Para cada cdigo lido, o algoritmo deve imprimi-lo junto com o DV. Os o dados terminam quando for lido um nmero negativo. O clculo do DV deve ser feito por u a uma funo. ca
Exerc cio 200 Denir algoritmo capaz de gerar um d gito vericador alfabtico, para e um cdigo formado por 7 d o gitos numricos. A regra deve ser: dv = ((d1 8) + (d2 7) + e (d3 6) + (d4 5) + (d5 4) + (d6 3) + (d7 2)) mod 26 dv deve ser transformado de letra em nmero e a seguir impresso. O algoritmo deve ler u inmeros cdigos (na forma cadeia[7]) at ler a cadeia 0000000. u o e Exerc cio 201 Denir algoritmo que leia um conjunto indeterminado, mas menor do que 129, de triplas formadas por:
nmero do bimestre: inteiro de 1 a 4 u nmero do aluno: inteiro de 1 a 32 u Nota do aluno: real de 0,0 a 10,0.
Os dados terminam quando for lido um nmero de bimestre diferente daqueles valores vlidos. u a Aps ler o conjunto, o algoritmo deve imprimir: o 1. Qual a mdia anual de cada aluno (32 valores) e 2. Qual a mdia da turma em cada bimestre (4 valores) e 3. Qual o nmero do aluno e o nmero do bimestre em que ocorreu a MAIOR NOTA u u absoluta do ano.
verso de 10 de fevereiro de 2008 a
175
CAP ITULO 9. REGISTROS 4. Qual o bimestre em que ocorreram mais zeros 5. Qual o bimestre com menor amplitude de notas
Exerc cio 202 Denir um algoritmo que calcule o d gito vericador do nmero de u matr cula dos alunos das FACULDADES NEUTRAS. Tal nmero formado por 4 d u e gitos e o vericador assim calculado: e nmero: d1 d2 d3 d4 u res = (d1 * 2) + (d2 * 3) + (d3 * 5) + (d4 * 7) d gito = resto da diviso de res por 9. a O algoritmo deve ler uma srie de nmeros e para cada um, deve imprimir o nmero e o e u u correspondente d gito. A srie termina quando for lido o nmero 0. e u 9.2.1 Calendrios a
Em 1347 a peste negra devastou a Europa. Esta doena na verdade uma pneumonia que c e causa bubes (inchaos nas axilas e virilhas), sendo tambm chamada de peste bubnica. o c e o Os bubes eram caldos de cultura da bactria causadora, que tambm era transmitida o e e por pulgas dos ratos. O nome negra, vem do fato de que (supostamente) a carne das v timas enegrecia pouco antes da morte. A histria comea quando uma tribo Mogol o c de nome Kipchak resolve atacar um posto comercial genovs no Mar Negro. Usaram e para isso uma das primeiras armas biolgicas que a histria registra: cadveres humanos o o a contaminados com a doena eram atirados atravs de catapultas para dentro da cidade. c e Esta embora armada e provisionada para resistir ao cerco, ao ver-se impotente para enfrentar esta arma resolveu fugir de navio de volta a Gnova, abandonando o posto e comercial. Junto com eles, foi a doena. Durante os 4 anos seguintes a peste foi para a c Sic lia, Africa, Itlia, Espanha, Frana, Inglaterra e depois toda a Europa. Vinte e cinco a c milhes de pessoas, um quarto da populao europia, morreram. Dois sculos passariam o ca e e antes que a populao retornasse ao nmero de 100 milhes. A devastao da peste negra ca u o ca encerrou um ciclo na histria da humanidade. Levantes sociais e pol o ticos espoucaram, a mo de obra escasseou, o campo foi abandonado, os alimentos rarearam. At aqui, o a e universo era governado por regras estabelecidas por duas autoridades: Aristteles (384o 322 aC) e o eg pcio Cludio Ptolomeu (100-170 dC). No milnio anterior, a Igreja havia a e mesclado essas regras ` sua viso de mundo, resultando um bloco homogneo: Deus a a e havia criado a Terra no centro do Universo. Estrelas e planetas giravam em rbitas o circulares em volta da terra. Oito esferas concntricas feitas de material imutvel e e a eterno continham a Lua, o Sol, Marte, Mercrio, Jpiter, Vnus e Saturno. A ultima u u e esfera continha as estrelas. Apenas na terra a matria se decompunha e morria. Nas e esferas tudo era eterno. Veja-se o reexo disso nos nomes dos dias de semana, nos principais idiomas ocidentais: Corpo Celeste Sol Lua Marte Mercrio u Jpiter u Vnus e Saturno Ingls e Sunday Monday Tuesday Wednesday Thursday Friday Saturday Francs e dimanche lundi mardi mercredi jeudi vendredi samedi Italiano domenica lunedi martedi mercoledi giovedi venerdi sabato Espanhol domingo lunes martes mircoles e jueves viernes sbado a
A reao ` peste foi um novo cenrio que buscou enterrar e esquecer aquele o mais ca a a rpido poss a vel: a renascena. A Itlia, pela localizao central iniciou o movimento do c a ca comrcio entre oriente e ocidente. Nasceram aqui os primeiros sistemas administrativos, e o conhecimento nanceiro e os bancos. A cincia (a matemtica) comeou a ser usada: e a c
88-08, Pedro Kantek
176
CAP ITULO 9. REGISTROS na arquitetura, no comrcio, na cartograa. Sabemos hoje que a Terra demora 365 e 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 diferena de 11 minutos e 14 segundos). Com a adoo do calendrio eg c ca a pcio por Jlio Czar no sculo I dC, esta disparidade foi se acumulando ano aps ano, afastando u e e o as datas do calendrio das estaes. Em meados do sculo XV ja havia dez dias de a co e atraso. Em 1475 o papa Sisto IV pedira um estudo para determinar a causa do erro. No houve quem conseguisse compatibilizar Aristteles e Ptolomeu com o calendrio. a o a Podiam garantir estabilidade pol tica, mas estavam cada vez mais incapazes de calcular a data da Pscoa corretamente. a Coprnico (1473-1543) comeou a desenvolver em 1506 um sistema astronmico e c o baseado em suas prprias observaes e clculos. Na tentativa de tirar a Terra do centro o co a do universo e colocar a o Sol, a diculdade era explicar como as coisas no ca a amem direo ao sol. Achava-se na poca, que a matria era naturalmente atra para o cenca e e da tro do universo (embaixo da terra). Quando recrutado pelo secretrio do papa, em 1514 a para resolver o problema do calendrio, Coprnico viu-se num dilema: ou rearmava a a e teoria que a vaidade, o medo e a B blia haviam montado (estamos no centro do universo) e no resolvia o problema, ou chutava o pau da barraca para propor um novo calendrio. a a Ele, que bobo no era, recusou o convite, embora continuando a estudar o problema a em segredo. Convencido pela correo de seus clculos e encorajado por amigos, esboou ca a c um rascunho de suas idias em 1530. Este escrito provocou reaes mistas. Finalmente, e co em 1543, autorizou a publicao de De Revolutionibus Orbium Coelestium, comumenteca mente conhecido como As Revolues. Coprnico recebeu o primeiro exemplar em 24 co e de maio de 1543 e morreu poucas horas depois. O prximo personagem desta histria Galileu Galilei. Pulamos Giordano Bruno, o o e 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 Aristteles que armara chegar a mais pesada antes. o H dvidas se isso de fato ocorreu. Mais modernamente supe-se que tenha sido uma a u o experincia intelectual apenas. O argumento intelectual notvel1 Este o melhor jeito e e a e de fazer f sica, ` la Einstein... a Galileu freqentou diversas universidades na Itlia, sempre conitando com os demais u a professores. Escreveu inmeros livros, inventou o telescpio 2 Ao usar os telescpios, u o o viu quatro satlites orbitando Jpiter e os anis de Saturno e relatou isso no livro Sidereus e u e Nuncius(O Mensageiro Celeste). Escreveu de leve, ainda sem adotar completamente o modelo copernicano. A Igreja j comeou a enviar mensagens de que no concordava a c a com as idias desse livro. Em 21 de dezembro de 1614, o padre Toms Caccini, em e a Florena criticou Galileu aformando que se Deus parou o sol a pedido de Josu para que c e os israelitas derrotassem os amoritas, como o sol poderia ser o centro do universo ? O padre foi mais longe: acusou Galileu, a matemtica e todos os matemticos de hereges a a pol ticos e religiosos. A defesa de Galileu perfeita: e No me sinto na obrigao de acreditar que o mesmo Deus que nos dotou a ca de sentidos, razo e intelecto, tencionava descartar o uso destes e por algum a outro meio nos dar o conhecimento que com eles podemos obter [...] A
1 Suponha jogar as 2 bolas e suponha que Aristteles estava certo: a mais pesada chega antes. Agora o suponha as mesmas duas bolas porm ligadas por o. Por um lado pode-se argumentar que a mais leve e segura a mais pesada e esta demora mais a chegar. Por outro lado, pode-se supor que o o transforma as duas massas em uma s, que passa a ser mais pesada que a bola anterior. O resultado que agora o e as bolas chegam antes do que chegavam. Para que ambos os racioc nios estejam certos e esto, a unica a possibilidade elas chegarem juntas. e 2 Ele assim considerado pois construiu os maiores telescpios em uso na Europa, ultrapassando seus e o modelos anteriores por diversas vezes.
177
CAP ITULO 9. REGISTROS inteno do Esp ca rito Santo ensinar-nos como se vai para o cu e no como e e a o cu funciona. e Em 5 de maro de 1616 o cardeal Belarmino da Santa Inquisio decretou que o c ca sistema copernicano era falso e errneo armando que Deus xou a Terra em seus o alicerces para jamais ser movida. Galileu nunca se conformou com este decreto, buscando incessantemente a sua revogao. Em 1624, obteve do papa uma autorizao para ca ca escrever seu livro mais famoso Dilogo sobre os dois mximos sistemas do mundo, que a a foi publicado em 1632 e recebido com louvores por acadmicos de toda a Europa. Pouco e depois, foi acusado pela inquisio de herege. No pode ver as acusaes ou as provas. ca a co Ficou no dilema: ou se retratava ou morria como Giordano Bruno. Em deciso que a alguns criticaram como prejudicial a cincia, ele resolveu pela vida. Em 22 de junho de e 1633, fez uma longa retratao. Diz a lenda que depois de terminada a leitura, ao se ca erguer da posio de joelhos onde estava,Galileu teria dito E pur, si muove . S em ca o 1757 a Igreja retirou a proibio sobre a obra. Em 1992, o papa Joo Paulo II reconheceu ca a formalmente o erro da Igreja. Depois vem Isaac Newton, um dos 5 maiores cientistas que a Humanidade produziu (decomposio da luz, clculo diferencial e integral, gravitao entre outros). Ao escrever ca a ca sobre a lei universal da gravitao, ele acabou de consolidar o modelo copernicano, que ca j havia sido engordado com as leis de Kepler sobre o deslocamento dos planetas. a
Novas propostas
Em 1954, a ONU props um novo calendrio. Ele tem 52 semanas de 7 dias = 364 dias. o a O dia 365 no nal do ano e no tem nmero nem nome. Os quadrimestres sempre tem e a u 31 + 30 + 30 + 30 dias. Outra proposta foi o do calendrio xo, com 13 meses de 28 dias cada um. Aqui, as a segundas sempre sero dias 1, 8, 15 e 22. Falta 1 dia, que ca no nal do ano. O dia do a bissexto aps 28 de junho. O novo ms o SOL que ca entre junho e julho. e o e e Finalmente, h uma nova proposta de estabelecer um tempo mundial, (desvinculado a do sol), orientado a negcios e com divises decimais. o o
88-08, Pedro Kantek
178
Regra do bissexto
Sejam R4 resto da diviso do ano por 4; R100 resto da diviso do ano por 100 e a a R400 resto da diviso do ano por 400. a SE R4=0 ((R100 = 0) (R400 = 0)) o ano bissexto seno no . e a a e
Exerc cio 203 Imagine um cilindro cujo dimetro da base tem o mesmo comprimento a
de sua altura. Dentro dele est inscrita uma esfera, cujo raio o mesmo raio da base a e do cilindro. Escrever algoritmo que leia uma srie de raios, e para cada um deles, calcule e e escreva a diferena de volume entre o cilindro e a esfera. Os raios so lidos em cm e a c a diferena deve ser expressa em cm3. O ultimo raio zero, e indica m. Denir duas funes: c e co uma para o clculo do volume da esfera, e outra para o clculo do volume do cilindro. a a Vesf era = 4 R3 3
Vcilindro = R2 h
Exerc cio 204 Denir algoritmo que calcule e escreva a soma dos primeiros 50 nmeros u pares acima de 1000 (1000 inclu do), com os 60 primeiros nmeros mpares acima de 500 u (501 includo). Exerc cio 205 Denir algoritmo que determine se uma seqncia contendo 1000 eleue
mentos, ESTA ou NAO ESTA classicado em ordem descendente. Ao nal do algoritmo, este deve imprimir as mensagens EM ORDEM FORA DE ORDEM ou conforme o caso.
179
CAP ITULO 9. REGISTROS Neste segundo caso, ser muito bom se o dono do sistema disponibilizar um balance a line. Neste caso, o operador preparar uma massa de atualizao (possivelmente usando a ca o notepad ou similar), far as vericaes e correes, e quando a massa estiver OK, a co co submete-la-, eventualmente via upload para atualizao serializada. Ao invs de 400 a ca e transaes, o operador ter que se preocupar com apenas 1. O resto ca por conta do co a algoritmo Balance Line.
180
Cap tulo 10
Suponha que sua vida dependa de obter a raiz quadrada de um determinado nmero, u por exemplo 54.768,87. O que voc faria ? e 1. A soluo mais bvia seria buscar uma calculadora capaz de extrair uma raiz ca o quadrada. Por azar de nossa simulao, no h calculadoras, computadores, celuca a a lar, etc. Nenhuma traquitana dispon vel. 2. Considerando que a operao de multiplicao razoavelmente conhecida, outra ca ca e possibilidade, seria avanar na base da tentativa-e-erro, usando o seguinte algoc ritmo. (a) Chute um nmero u (b) Multiplique-o por ele mesmo (c) Se o resultado for igual ao nmero procurado, parabns! u e (d) Se for menor, aumente o chute (e) Se for maior, diminua o chute (f) Volte ` etapa da multiplicao a ca 3. Outra possibilidade, esta trazida pela teoria dos logaritmos (no confunda logara itmo com algoritmo) achar o logaritmo do nmero dado, dividir este e u valor por 2 e depois achar o antilogaritmo. Por exemplo, se no soubermos que 64 = 8, a podemos fazer o log2 64 = 6. Dividindo 6 2 = 3. E 23 = 8. O problema est que a poucas pessoas tem uma tboa de logaritmos na cabea, ou mesmo conhecem as a c propriedades dos logaritmos. 4. A resposta exata vem atravs do algoritmo de extrao de raiz quadrada, posto ` e ca a nossa disposio pela matemtica. ca a Algoritmo para raiz quadrada Por denio, dado y = x, onde x no negativo, deve-se achar o real y, tal que ca e a y 2 = x. Embora o nmero localizado seja positivo, deve-se lembrar que em tese ele u 181
CAP ITULO 10. EXERC ICIOS PRATICOS: 003 -RAIZ QUADRADA tambm pode ser negativo, mas com o mesmo valor absoluto. Se no for poss obter e a vel a igualdade (y 2 = x), espera-se que y 2 seja menor que x e to prximo quanto poss a o vel. As etapas do algoritmo so: a 1. Pegue uma folha de papel e escreva uma cruz grande, divindo a rea de trabalho a em 4 quadrantes. 2. Escreva o nmero do qual se quer achar a raiz quadrada (a quem chamaremos u ), no quadrante superior esquerdo. Ao nal do processo, a raiz vai aparecer no quadrante superior direito. 3. Separe o nmero em grupos de 2 d u gitos, a partir de sua v rgula decimal, ` a direita e ` esquerda, completando com zeros no signicativos quando necessrio. a a a 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 Esta tabela importante pois todos os grupos acima formados so menores do que e a 100. 5. Busque o nmero que elevado ao quadrado gere um nmero menor ou igual do que u u G1. Coloque este nmero no quadrante superior direito. Chame-se este nmero u u 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 nmero A2 de P1 . u 1 7. Faa G1 menos P1 e escreva o resultado da subtrao embaixo de P1 (no quadrante c ca G1.G2.G3. ... A P1 inferior esquerdo). Chamemos este nmero de T1 . Fica u T1 8. (aaa) Baixe o prximo grupo (neste caso o G2 , colocando-o ao lado de T1 , junte-os o e obtenha um novo nmero (T1 G2 ). u 9. Dobre o nmero A1 (multiplicando-o por 2) e escreva-o no quadrante inferior u direito, embaixo de A1 . Chame-se este nmero de D1 . u 10. (***) Divida (diviso inteira) T1 G2 por D1 10. Este resultado deve ser escrito a em 3 lugares:
Ao lado de A1 , j que ele o prximo nmero da raiz a e o u Ao lado de D1 . Imediatamente depois, escreva um sinal de (vezes) Ao lado do sinal de (vezes) escrito acima
11. Calcule a multiplicao posta acima. Se o resultado for menor ou igual a T1 G2 , ca prossiga. Se for maior, OPS!, Volte ` etapa (***) e repita o processo com um a resultado uma unidade menor. 12. Escreve-se o resultado da multiplicao embaixo de T1 G2 e efetua-se a subtrao. ca ca 13. Volte a (aaa)
88-08, Pedro Kantek
182
CAP ITULO 10. EXERC ICIOS PRATICOS: 003 -RAIZ QUADRADA Exemplo Seja calcular 14796, 5 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 --------------
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 Treino
-------------
----------------
-------------------
CAP ITULO 10. EXERC ICIOS PRATICOS: 003 -RAIZ QUADRADA / = x = --------------
10.2
Exerc cio 1
Simule a execuo do algoritmo acima da raiz quadrada para os valores abaixo e em ca cada um, descubra o quinto nmero que subtra no algoritmo. Por exemplo, no u e do exemplo dado acima, o quinto nmero seria 97296 e no que zemos junto seria 355925. u 24681 52543 26008 Nos 3 casos, ache o QUINTO NUMERO QUE E SUBTRA IDO na parte esquerda da tabela acima. 1 2 3
10.3
Exerc cio 2
Simule a execuo do algoritmo acima da raiz quadrada para os valores abaixo e em ca cada um, descubra o quinto nmero que subtra no algoritmo. Por exemplo, no u e do exemplo dado acima, o quinto nmero seria 97296 e no que zemos junto seria 355925. u 44431 28819 37226 Nos 3 casos, ache o QUINTO NUMERO QUE E SUBTRA IDO na parte esquerda da tabela acima. 1 2 3
10.4
Exerc cio 3
Simule a execuo do algoritmo acima da raiz quadrada para os valores abaixo e em ca cada um, descubra o quinto nmero que subtra no algoritmo. Por exemplo, no u e do exemplo dado acima, o quinto nmero seria 97296 e no que zemos junto seria 355925. u 38692 26660 55802 Nos 3 casos, ache o QUINTO NUMERO QUE E SUBTRA IDO na parte esquerda da tabela acima. 1 2 3
184
10.5
Exerc cio 4
Simule a execuo do algoritmo acima da raiz quadrada para os valores abaixo e em ca cada um, descubra o quinto nmero que subtra no algoritmo. Por exemplo, no u e do exemplo dado acima, o quinto nmero seria 97296 e no que zemos junto seria 355925. u 46951 41068 14107 Nos 3 casos, ache o QUINTO NUMERO QUE E SUBTRA IDO na parte esquerda da tabela acima. 1 2 3
10.6
1 2 3 4
Respostas
0 337184 0 346624 91684 203676 228529 202625 193476 154336 94484 166229
185
186
Cap tulo 11
Um algoritmo um mtodo nito, escrito em um vocabulrio simblico xo, e e a o regido por instrues precisas, que se movem em passos discretos, cuja execo cuo no requer insight, esperteza, intuio, inteligncia, ou clareza e lucidez ca a ca e e que mais cedo ou mais tarde chega a um m. (David Berlinski) O algoritmo o que est por trs de todos os programas de computadores. Fazendo e a a
uma analogia com a Rose (a empregada robot da fam Jetson). lia Quando ela apresenta uma bela torta de mas, a torta o produto nal, a Rose o computador ca e e e a receita da torta o algoritmo. e Algoritmos so bem antigos na histria do mundo. Provavelmente o mais antigo que a o conhecido devido a Euclides. Para poder observ-lo, vamos relembrar uma operao e e a ca da aritmtica bsica. Trata-se da diviso inteira. Quando os nmeros inteiros A e B e a a u so divididos em diviso inteira, dois resultados aparecem: o quociente e o resto. a a Por exemplo, na diviso inteira 10 7, o quociente (resultado) 1, enquanto o resto a e 3. e Nos nossos algoritmos, o quociente da diviso inteira vai ser representado pela palavra a div, j que o s a mbolo e mesmo a barra simples / caro reservados para a diviso real. a a Portanto poderemos armar que 10 div 7 = 1 Da mesma maneira, o resto da diviso inteira, ser representado pela palavra mod, a a e aqui podemos armar que 10 mod 7 = 3 . Para treinar Procure calcular e responder: 1. 10 div 2 = . 187
CAP ITULO 11. EXERC ICIOS PRATICOS: 004-INTRODUCAO 2. 10 mod 2 = 3. 100 div 33 = 4. 100 mod 33 = 5. 8 div 2 = 6. 8 mod 2 = 7. 45 div 11 = 8. 45 mod 11 = 9. 2 div 13 = 10. 2 mod 13 = . . . . . . . . .
11.1.1
Dene-se o mximo divisor comum entre dois nmeros inteiros A e B como sendo o a u maior nmero inteiro que divide simultaneamente tanto A como B sem deixar resto. u Por exemplo, se quisermos achar o MDC entre 10 e 14, teremos que achar os divisores de 10 (que so: 1, 2, 5 e 10) e de 14 (que so 1, 2, 7, 14) e localizar o maior nmero que a a u comum `s duas listas, no caso 2. Assim, 2 o MDC entre 10 e 14. e a e 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 nmeros primo, o MDC u e e sempre 1. Isto decorre da denio dos nmeros primos: Um nmero inteiro primo, ca u u e quando seus unicos divisores inteiros so a unidade e ele prprio. a o
11.1.2
Este algoritmo sempre chamado com dois inteiros. Note que o primeiro nmero deve e u ser maior ou igual do que o segundo. Se esta condio no estiver satisfeita, os nmeros ca a u devem ser INVERTIDOS antes de serem entregues ao algoritmo. Este algoritmo recursivo devido a Euclides e 1: inteiro funo MDC(inteiro a, b) {obrigatoriamente: a b} ca 2: se b = 0 ento a 3: devolva a 4: \\ esta outra maneira de identicar comentrios e a 5: seno a 6: devolva MDC(b, (a mod b)) 7: mse 8: m {funo} ca Suponha que far-se- a chamada ao algoritmo acima, como segue: a
88-08, Pedro Kantek
188
CAP ITULO 11. EXERC ICIOS PRATICOS: 004-INTRODUCAO 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 3 e
11.1.3
Na nossa vida, tambm usamos muitos algoritmos. Aqui eles tm uma caracter e e stica to a restrita como os algoritmos computacionais, porque supostamente eles sero seguidos a por seres inteligentes. Mas, vale a experincia: acompanhe o algoritmo que um de ns e o poderia usar para ir do Unicenp at a Praa Tiradentes e c 1: Algoritmo para ir do Unicenp at a Praa Tiradentes e c 2: se tenho dinheiro ? ento a 3: se tenho pressa ? ento a 4: chamo um taxi 5: mando ele ir para a Praa c 6: seno a 7: procuro uma carona OU 8: vou para o ponto do nibus o 9: ao desembarcar, pergunto qual a direo da Praa ca c 10: sigo andando at chegar nela e 11: seno a 12: saio do Unicenp pela JK, pegando ` direita a 13: pego a BR277 ` direita, sigo at a Pe Agostinho a e 14: pego a Pe Agostinho ` esquerda e sigo at a Al. Cabral a e 15: viro ` direita at a Carlos de Carvalho a e 16: viro ` esquerda e sigo at a Praa Tirandentes a e c 17: mse 18: mse
11.1.4
Exerc cio 1
11.1.5
Exerc cio 2
189
11.1.6
Exerc cio 3
1224
Chame o algoritmo mdc com os valores 1370 Responda no quadro prprio, qual o MDC pedido o
11.1.7
Exerc cio 4
1037
Chame o algoritmo mdc com os valores 1939 Responda no quadro prprio, qual o MDC pedido o
11.1.8
Exerc cio 5
1434
Chame o algoritmo mdc com os valores 1659 Responda no quadro prprio, qual o MDC pedido o
11.1.9
Exerc cio 6
1471
Chame o algoritmo mdc com os valores 1777 Responda no quadro prprio, qual o MDC pedido o
11.1.10
1808
Exerc cio 7
1104
Chame o algoritmo mdc com os valores Responda no quadro prprio, qual o MDC pedido o
11.1.11
1380
Exerc cio 8
1234
Chame o algoritmo mdc com os valores Responda no quadro prprio, qual o MDC pedido o
190
11.1.12
1876
Exerc cio 9
1721
11.1.13
1724
Exerc cio 10
1707
11.1.14
1 2 3 4 5 6 7 8 9 10 1 2 2 1 3 1 16 2 1 1
Respostas
191
192
Cap tulo 12
O Jogo da vida foi desenvolvido pelo matemtico britnico John Horton Conway em a a 1970. Comeou com uma brincadeira mas depois virou coisa sria. c e O jogo foi criado de modo a reproduzir, atravs de regras simples, as alteraes e e co mudanas em grupos de seres vivos, tendo aplicaes em diversas reas da cincia. c co a e As regras denidas so aplicadas a cada nova gerao; assim, a partir de uma a ca imagem em um tabuleiro bi-dimensional denida pelo jogador, percebem-se mudanas c muitas vezes inesperadas e belas a cada nova gerao, variando de padres xos a catica o o cos. Origem Um dos problemas matemticos mais famosos dos anos 40 era o de achar a uma mquina que fosse capaz de construir cpias de si mesma, que teve uma soluo a o ca baseada em um autmato celular extremamente engenhoso e complicado inventado pelo o renomado matemtico John von Neumann. Conway inventou o Jogo da Vida (ou Game a of Life) ao utilizar suas descobertas anteriores relacionadas com o problema de encontrar um grupo simtrico de esferas em 24 dimenses, proposto por John Leech para simplicar e o a soluo de von Neumann. ca O jogo fez sua primeira apario na edio de Outubro de 1970 da Scientic America ca can, na coluna de jogos matemticos de Martin Gardner. De um ponto de vista terico, a o ele interessante, pois tem o poder de uma mquina de Turing universal: tudo pode ser e a computado atravs de algoritmos no Jogo da Vida de Conway. Tambm era dito desde e e 1970 que foi destinado mais tempo de computao ao Jogo da Vida do que a qualquer ca outra atividade. Desde sua publicao, ele tem atra muito interesse devido aos caminhos surpreenca do dentes que pode tomar. Life um exemplo de auto-organizao. Ele interessante para e ca e bilogos, matemticos, economistas, lsofos e outros a observar o modo como imagens o a o complexas podem surgir de implementaes de regras muito simples. co O Jogo da Vida tem um nmero de imagens reconhecidas que emergem de posies u co iniciais particulares. Antes da publicao, muitas imagens interessantes j haviam sido ca a descobertas, incluindo o sempre envolvente R-pentomin, o auto propulsionado glider, o e vrias guns(armas) que geravam um uxo sem m de novas imagens, todas aumena tando o interesse no jogo. Sua popularidade foi ajudada pelo fato de ele ter vindo justo no momento em que uma nova gerao de minicomputadores de baixo custo estavam ca 193
CAP ITULO 12. EXERC ICIO PRATICO: 006-JOGO DA VIDA sendo disponibilizados no mercado, signicando que o jogo poderia ser rodado por horas nessa mquinas que no eram utilizadas de noite. Isto escondeu a popularidade posterior a a dos fractais gerados por computador. Para muitos accionados, Life era simplesmente um desao de programao, um mtodo divertido de gastar os ciclos da CPU. Para ca e alguns, no entanto, Life tinha conotaes mais loscas. Ele desenvolveu um culto co o atravs dos anos 70 e no meio dos 80; os desenvolvimentos atuais foram to longe a e a ponto de criar emulaes tericas de sistemas de computadores com as regras de um co o tabuleiro de Life. Regras do Jogo da Vida As regras so simples e elegantes: a
Qualquer clula viva com menos de dois vizinhos vivos morre de solido. e a Qualquer clula viva com mais de trs vizinhos vivos morre de superpopulao. e e ca Qualquer clula com exatamente trs vizinhos vivos se torna uma clula viva. e e e Qualquer clula com dois vizinhos vivos continua no mesmo estado para a prxima e o gerao. ca
E importante entender que todos os nascimentos e mortes ocorrem simultaneamente. Juntos eles constituem uma gerao ou, como podemos cham-los, um instantena ca a histria da vida completa da congurao inicial. o ca Descrio Este jogo na realidade um jogo sem jogador, o que quer dizer que sua ca e evoluo determinada pelo seu estado inicial, no necessitando de nenhuma entrada ca e a de jogadores humanos. Ele jogado em um conjunto de clulas quadradas que seguem e e ao innito em todas as direes. Cada clula tem oito vizinhos, que so as clulas co e a e adjacentes, incluindo as diagonais. Cada clula pode estar em dois estados: vivaou e morta. (Tambm so usados os termos ligadoe desligado.) O estado do tabuleiro e a evolui e se modica em pequenas passagens de tempo. Os estado de todas as clulas e em um instante so considerados para calcular o estado de todas as clulas no instante a e seguinte. Todas as clulas so atualizadas simultaneamente. As transies dependem e a co apenas do nmero de vizinhos vivos (ver as regras acima). u A idia bsica do jogo comear com uma congurao simples de clulas vivas e a e c ca e (organismos) que so colocadas em um tabuleiro 2D de vrios mtodos. Isto constitui a a a e primeira gerao. As leis genticasde Conway para nascimentos, mortes e sobrevivncia ca e e (as quatro regras acima) so ento aplicadas e a nova gerao ento colocada de acordo. a a ca e a Gerao a gerao os jogador(es)observam as vrias imagens que surgem. ca ca a A vida sempre segue De uma imagem inicial de clulas vivas no tabuleiro, percebe-se e que, conforme passam as geraes, a populao anda constantemente de modo no usual, co ca a algumas vezes belo e quase sempre inesperado, porm muda. Em muitos poucos casos e a sociedade eventualmente morre (todas as clulas se tornam clulas mortas), apesar de e e que isso pode no acontecer at que ocorram uma srie de novas geraes. A maioria a e e co das imagens iniciais chegam a guras estveis - Conway chama-as de vida parada- que a no podem mudar ou imagens que oscilam para sempre. Imagens sem simetria inicial a tendem a se tornar simtricas. Uma vez que isto ocorre, a simetria no pode mais ser e a perdida, apesar de poder crescer em riqueza. Conway originalmente sups que nenhuma imagem poderia crescer ilimitadamente. o Em outras palavras, qualquer congurao com um nmero nito de clulas no pode ca u e a crescer alm de um limite nito superior ao nmero de clulas do campo. Esta foi e u e provavelmente a mais profunda e mais dif questo colocada pelo jogo atualmente. cil a Conway ofereceu um prmio de $50 ` primeira pessoa que pudesse provar a armao e a ca
88-08, Pedro Kantek
194
CAP ITULO 12. EXERC ICIO PRATICO: 006-JOGO DA VIDA ou seu contrrio antes do m de 1970. Um caminho para provar seu contrrio era ser a a capaz de descobrir imagens que continuassem adicionando contadores ao campo: Uma gun(uma congurao que constantemente atira objetos que se movimentam, como o ca glider) ou um puer train(uma congurao que se move mas deixa atrs uma trilha ca a de fumaa). O prmio foi ganho em novembro do mesmo ano por um time do MIT, c e a congurao inicial (mostrada no topo da pgina) cresce como um gun, emitindo seu ca a primeiro glider na 40a gerao. A gun emite ento um novo glider a cada 30 geraes. ca a co Imagens Existe uma srie de diferentes imagens que podem ocorrer no Jogo da Vida, e incluindo imagens paradas (vidas paradas), imagens repetitivas (osciladores- o conjunto de vidas paradas), e imagens que se movimentam atravs do tabuleiro (naves e espaciais). Imagens chamadas Matusalenspodem evoluir por longos per odos de tempo antes de se repetir. Diehard uma imagem que eventualmente desaparece aps 130 geraes, e o co ou passos. Acornleva 5206 geraes para criar 13 gliders depois se estabiliza como co vrios osciladores. a Desde ento, uma srie de construes complicadas tm sido feitas, incluindo portas a e co e lgicas de gliders, um somador, um gerador de nmeros primos e uma unidade de clula o u e que emula o Jogo da Vida em uma escala muito maior e a passos lentos. E poss vel construir portas lgicas AND, OR e NOT usando gliders. E poss o vel construir uma imagem que aja como uma mquina de estado nito conectada a dois a contadores. Isto possui o mesmo poder computacional de uma mquina de Turing a universal (veja contador para a prova), Jogo da Vida to poderoso quanto qualquer e a computador com memria ilimitada: o Turing completo. Alm disso, uma imagem o e e pode conter um conjunto de guns que se combina para construir novos objetos, incluindo cpias da imagem original. Um construtor universalpode ser constru que contenha o do um computador Turing completo, e que pode construir uma srie de objetos complexos, e incluindo mais cpias de si mesma. o Para este exerc considere que o tabuleiro est rodeado por clulas mortas. cio a e Filosoa O Jogo da Vida de Conway cria um universo complicado a partir de poucas regras. E imaginvel que todo o universo real seja um jogo similar, jogado em alguma a dimenso mais alta. Esta possibilidade pode inuenciar o debate de vivermos em um a universo perfeitamente ajustado que requer um projeto inteligente. (texto fortemente baseado em pr.wikipedia.org)
12.2
. . . X . X . . . . . . . X . . X X . . X . X . . X . . . .
Exerc cio 1
. . . . . . . . X . X X X X X . . X . . . X . . . . . X X . . . . . . . . . X . . . . X . X . . . . . . X . . X . . . X X . . X . . . . . . 195
88-08, Pedro Kantek
Seja o seguinte tabuleiro inicial, onde . signica clula morta e X signica clula viva. e e
CAP ITULO 12. EXERC ICIO PRATICO: 006-JOGO DA VIDA Informe a seguir se a posio pedida, aps 4 geraes, est viva ou morta. Indique que ca o co a ela est viva escrevendo 1 e que est morta escrevendo 0. a a L= 7 , C= L= 7 , C= L= 7 , C= L= 7 , C= 1 2 3 6
12.3
. . . . . . X X . X . X X X . . X . X . . X . X . . . . . .
Exerc cio 2
. . . . . . . . . . X X . . . . . . . . . . X . . . X . . . X X . . . . . . . . X X . . X . . . . . X . X . . . . . X . . . . . X X . . X .
Seja o seguinte tabuleiro inicial, onde . signica clula morta e X signica clula viva. e e
Informe a seguir se a posio pedida, aps 4 geraes, est viva ou morta. Indique que ca o co a ela est viva escrevendo 1 e que est morta escrevendo 0. a a L= 9 , C= L= 2 , C= L= 2 , C= L= 3 , C= 2 2 5 1
12.4
. X X . . . . . . X . . X . . . X X . X . . . . X . . . X X
Exerc cio 3
. . . X . . . . X . X . . . . X . . . . X . . . . . . . . . . . X . X . . . X . . . . . . X . X . . X . . X X . X . . . . . . X X X X . . .
Seja o seguinte tabuleiro inicial, onde . signica clula morta e X signica clula viva. e e
Informe a seguir se a posio pedida, aps 4 geraes, est viva ou morta. Indique que ca o co a ela est viva escrevendo 1 e que est morta escrevendo 0. a a L= 8 , C= L= 8 , C= L= 9 , C= L= 10 , 8 9 4 C= 2
196
12.5
. . . . . . . . . . X . . X . . . . . X . . . . . . . . . .
Exerc cio 4
. . . X . X X X . . . X . . . . . . X . . X . . . . X X X . X X . . . . . X . . . . X X . . . . . X . X X X X . . X . . . . X . X . . . . .
Seja o seguinte tabuleiro inicial, onde . signica clula morta e X signica clula viva. e e
Informe a seguir se a posio pedida, aps 4 geraes, est viva ou morta. Indique que ca o co a ela est viva escrevendo 1 e que est morta escrevendo 0. a a 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
197
198
Cap tulo 13
CAP ITULO 13. EXERC ICIO PRATICO:007-GPS Decodicando as localizaes dos satlites a partir dos sinais de microondas (tipo de onda co e electromagntica) e de uma base de dados interna, e sabendo a velocidade de propagao e ca do sinal, o receptor, pode situar-se na interseco de quatro esferas, uma para cada satlite. ca e
Coordenadas com um GPS com B ssula e Alt u metro integrado Alm de sua e aplicao bvia na aviao geral e comercial e na navegao mar ca o ca ca tima, qualquer pessoa que queira saber a sua posio, encontrar o seu caminho para determinado local (ou de ca volta ao ponto de partida), conhecer a velocidade e direco do seu deslocamento pode-se ca beneciar com o sistema. Atualmente o sistema est sendo muito difundido em automveis a o com sistema de navegao de mapas, que possibilita uma viso geral da rea que voc est ca a a e a percorrendo. A comunidade cient ca utiliza-o pelo seu relgio altamente preciso. Durante expero incias cient e cas de captura de dados, pode-se registrar com preciso de micro-segundos a (0,000001 segundo) quando a amostra foi obtida. Naturalmente a localizao do ponto ca onde a amostra foi recolhida tambm pode ser importante. Agrimensores diminuem custos e e obtm levantamentos precisos mais rapidamente com o GPS. Unidades espec e cas tm e custo aproximado de 3.000 dlares e preciso de 1 metro, mas existem receptores mais caros o a com preciso de 1 cent a metro. A captura de dados por estes receptores mais lenta. e Guardas orestais, trabalhos de prospeco e explorao de recursos naturais, gelogos, ca ca o arquelogos, bombeiros, so enormemente beneciados pela tecnologia do sistema. O GPS o a tem-se tornado cada vez mais popular entre ciclistas, balonistas, pescadores, ecoturistas, geocachers (uma diverso bem moderna: uma caixa lacrada cheia de pinduricalhos e de a um livro escondida em algum lugar no planeta e suas coordenadas publicadas. Veja mais e em http://www.geocaching.com), ou por leigos que queiram apenas orientao durante as ca suas viagens. Com a popularizao do GPS, um novo conceito surgiu na agricultura: a ca agricultura de preciso. Uma mquina agr a a cola dotada de receptor GPS armazena dados relativos ` produtividade em um carto magntico que, tratados por programa espec a a e co, produz um mapa de produtividade da lavoura. As informaes permitem tambm otimizar co e a aplicao de corretivos e fertilizantes. ca
Tipos de receptores Existem diferentes receptores GPS, desde diversas marcas que comercializam solues tudo-em-um, at os externos que so ligados por cabo ou ainda co e a por bluetooth. Geralmente categorizados em termos de demandas de uso em Geodsicos, Toe pogrcos e de Navegao. A diferenciao entre essas categorias, que a princ pode parea ca ca pio cer meramente de preo de aquisio principalmente devido ` preciso alcanada, ou seja c ca e a a c a razo da igualdade entre o dado real do posicionamento, e o oferecido pelo equipamento. a Sendo os mais acurados, com valores na casa dos mil metros, os receptores Geodsicos so e a capazes de captar as duas freqncias emitidas pelos satlites (L1 e L2), possibilitando assim ue e a eliminao dos efeitos da refrao ionosfrica. Os topogrcos, que tem caracter ca ca e a sticas de trabalho semelhantes ` categoria anterior, porm somente captam a portadora L1, tambm a e e possuem elevada preciso, geralmente na casa dos cent a metros. Ambas as categorias tem aplicaes tcnicas, e caracter co e sticas prprias como o ps-processamento, o que signica que o o geralmente no informam o posicionamento instantaneamente. a No caso da categoria de maior uso, a de navegao, embora possua menor preciso ca a de posicionamento, tem inmeras vantagens como o baixo preo de aquisio e inmeras u c ca u aplicaes, onde v-se uma innidade de modelos, tanto aqueles que integram diversos co e equipamentos como computadores de mo, celulares, relgios, etc., como aqueles dedicados a o exclusivamente ao posicionamento GPS, onde tambm encontramos aplicaes para uso do e co dado de posicionamento em outros equipamentos como notebooks, rastreadores de ve culos, etc.
88-08, Pedro Kantek
200
CAP ITULO 13. EXERC ICIO PRATICO:007-GPS Dia 3 de setembro de 1989 Maracan lotado para assistir ao Brasil X Chile, pelas a eliminatrias da Copa do Mundo de 90. Longe dali, em algum ponto a princ o pio entre Marab e Belm, Cezar Augusto Garcez comanda um vo cego. Perdido em pleno ar, a e o tenta se posicionar. Localiza, em vo, uma rdio que transmitia a partida que entraria a a para a histria como o jogo da fogueteira. Aquele vo tambm estaria nos jornais no o o e dia seguinte: Avio desaparece na Amaznia, publicou O Globo. a o Heri e vilo, ao mesmo tempo, o comandante Garcez a principal personagem do o a e RG-254 que caiu na selva amaznica em 1989. O que deveria ser um vo rotineiro se o o transformou numa tragdia. Desorientado, Garcez permaneceu durante trs horas em e e vo cego. Temendo que o erro fosse descoberto, passou diversas informaes truncadas o co para a base, armou estar onde no estava. Sem combust a vel, arriscou o aparentemente imposs vel: um pouso na copa das rvores, em plena noite, com visibilidade praticamente a nula. Garcez foi acusado de negligenciar rotinas bsicas da aviao. Por outro lado, a ca salvou a vida de muitos passageiros ao conseguir aterrissar a aeronave e cuidar dos feridos. Ainda hoje, aguarda julgamento.
13.1
GPS
Na dcada de 70, os EUA comearam a projetar e implementar o sistema conhecido como e c GPD (Global Positioning System). O primeiro satlite Navstar foi lanado em 1978. O e c objetivo principal era permitir que os estimados 40.000 usurios militares americanos se a orientassem sobre a terra. Os civis comearam a usar o sistema a partir da dcada de c e 80. Hoje, estima-se em mais de 50.000.000 de dispositivos capazes de receber os sinais de GPS e apresentar uma estimativa de localizao. ca Alm do sistema americano, existe o russo Glonass de uso exclusivo pelos militares e e a partir da ultima semana de 2005, o sistema Galileu constru e operado pela Agncia do e Espacial Europia. e A grande exploso de uso, dever vir quando celulares e automveis comearem a a a o c vir de fbrica com a possibilidade de informar sua localizao. Associados a sistemas a ca de mapas embarcados, podero informar ao motorista qual caminho tomar para ir vira tualmente a qualquer lugar sobre a superf terrestre. Associados a telefones celulares, cie podero informar a localizao do telefone. Associados a sistemas de proteo contra a ca ca roubo de automveis, informaro a localizao em tempo real e assim por diante. A o a ca lista de aplicaes poss co veis parece inesgotvel. a Todos os sistemas acima se baseiam na triangulao (ou quadrangulao) do receptor ca ca em relao a 3 ou 4 (ou mais) satlites em rbita da terra. ca e o O sistema comea pela identicao de diversos pontos xos sobre a superf terc ca cie restre. Tais pontos contam com estaes transmissoras e permitem a cada satlite a co e recepo de diversos pontos. Medindo o tempo gasto por cada sinal desde a estao ca ca terrena at o satlite, e fazendo isso com diversas estaes, o satlite conhece sua real e e co e posio com preciso de cent ca a metros. Cada satlite possui um relgio atmico, integrado ` rede GPS e que garante preciso e o o a a de tempo de 1 bilionsimo de segundo. e Todos os satlites emitem 2 mensagens: A primeira, envia a identicao do satlite, e ca e sua posio no espao e sua hora interna. Uma segunda mensagem uma seqncia de ca c e ue impulsos digitais em um padro inconfund a vel. Tudo funciona como se o receptor tambm gerasse no mesmo instante de tempo a e mesma seqncia de impulsos digitais. Da anlise dos dois sinais (o gerado pelo satlite ue a e e o gerado internamente no receptor) poss e vel medir o retardo do sinal do satlite. e Conhecendo a velocidade da luz (xa e igual a 299.729.458 m/seg) e conhecendo o tempo gasto pelo sinal do satlite ao receptor, poss estabelecer a distncia entre e e vel a satlite e receptor. e
verso de 10 de fevereiro de 2008 a
201
CAP ITULO 13. EXERC ICIO PRATICO:007-GPS Daqui, pode-se inferir que o receptor est sobre a esfera de centro x, y, z (as coa ordenadas no espao do satlite) e de raio R, que a distncia entre o receptor e o c e e a satlite. e Ao fazer o mesmo clculo com um segundo satlite, obtem-se uma segunda esfera, e a e o receptor est sobre o c a rculo de interseco das duas esferas. ca Finalmente ao fazer o clculo com um terceiro satlite, obtm-se uma terceira esfera. a e e O receptor ainda pertence `s 3 esferas, e a interseco das 3 apresenta apenas 2 pontos a ca no espao. Um deles apenas sobre a superf c cie terrestre, e logo esta a posio do e ca receptor, com preciso de metros. a
13.1.1
Problemas
Se os receptores pudessem ter um relgio atmico 3 satlites bastariam. Como um o o e relgio atmico muito caro e pesado, os receptores usam relgios de quartzo comum o o e o (sujeitos a erros de 1 seg/dia). Ento usa-se um quarto satlite para refazer os clculos e permitir acertar o atraso/adiantamento a e a do relgio local ao relgio da rede. o o Se o usurio estiver em movimento, os sinais ainda vm afetados pelo efeito Doppler, a e que precisa ser analiticamente corrigido antes de estabelecer a posio do receptor. Idem ca para os efeitos relativ sticos associados. O sistema americano usa duas radiofrequencias: L1 e L2. A L1 chamada Sinal e Civil, embora os militares tambm a usem. A L2 de uso exclusivo militar, j que e e a seus cdigos (a segunda parte das mensagens) no so pblicos e so protegidos por o a a u a criptograa. Ao usar apenas o sinal L1, receptores conseguem determinar sua posio ca com erros de 5 a 10 m, causados pela ao da ionosfera. A camada de ar sobre a terra ca aumenta a densidade da atmosfera, causando refrao nos sinais. E como um lpis ca a colocado dentro de um copo de gua. a A potncia de um satlite de 500W, o equivalente a 5 lmpadas de 100W. Apenas e e e a para efeito de comparao, o sinal de TV de um satlite 1 bilho de vezes mais forte. ca e e a Este fato permite que interferncias (`s vezes propositais) obscuream ou at invalidem e a c e o sinal dos satlites. Este fato usado em teatros de guerra, quando as foras americanas e e c introduzem geradores locais de ru centrados na banda usada pelo sistema. Essa a do e razo pela qual embora o sistema seja pblico, russos e europeus tratam de ter cada um a u o seu.
13.2
Dois amigos
Vamos simular o clculo de uma posio desconhecida usando triangulao, mas vamos a ca ca trabalhar apenas em 2D, que ningum aqui est a m de enlouquecer por causa da e a geometria anal tica. ;-) Suponhamos uma regio plana, na qual dois pontos tem coordenadas conhecidas. a Voc vai colocar 2 amigos, um em cada ponto, todos munidos de relgios absolutamente e o acertados at o milsimo do segundo, e completamente precisos. e e Voc combinou que `s 14h00, um dos seus amigos dar um tiro de espoleta. Nessa e a a mesma hora, voc ligar um cronmetro. Alguns dcimos de segundos depois, voc e a o e e ouvir o tiro e desligar o cronmetro, obtendo um tempo gasto pelo barulho para a a o percorrer a distncia entre o seu primeiro amigo e voc. Vamos chamar esta distncia a e a de D1 . Lembrando que o som se propaga a 340m/seg, voc conseguir uma medida convel e a a entre voc e seu amigo 1. e O procedimento ser repetido `s 14h15 com seu amigo nmero 2. Pelo mesmo a a u mecanismo voc obter a distncia entre voc e seu amigo 2. Ser a distncia D2 . e a a e a a
88-08, Pedro Kantek
202
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 , tambm no centro e de um c rculo de raio D2 , e que voc se encontra sobre os dois c e rculos, pede-se que voc e calcule a sua posio. ca Obs: se voc no tiver muita intimidade com a geometria anlitica, um bom mtodo e a a e e o grco. Use um papel milimetrado, disponha os dois pontos, trace duas circunferncias a e de raios D1 e D2 e nos encontros das duas circunferncias voc estar. e e a Obs:
Este procedimento tambm pode ser usado para vericar o acerto/erro das contas e e a vericao nal do ponto. ca Como s usaremos 2 amigos (ao invs de 3), haver 2 pontos candidatos, ambos o e a na superf da terra. Responda os 2. cie
13.2.1
Exemplo
Seja um caso em que x1 = 264m, y1 = 141m. x2 = 520m, y2 = 291m. Os tempos so: a t1 = 0, 4749seg e t2 = 0, 4017seg. Obtem-se d1 = 161, 48m e d2 = 136, 6m. A frmula do circulo 1 x2 + y 2 528x o e 282y + 63501.21 = 0 A frmula do circulo 2 x2 + y 2 1040x 582y + 336421 = 0 o e Subtraindo uma equao da outra, ca-se com 512x + 300y 272920 = 0 e ca y= 272920 512x = 909.7 1.7x 300
Substituindo o y obtido em qualquer uma das equaes, chega-se ao valor correto do co observador que xo = 410m, yo = 210m. e
13.2.2
Como fazer
Para entender o funcionamento do sistema, necessrio relembrar um pouco de f e a sica e de geometria anlitica. a Da f sica: distncia = velocidade tempo. Sabendo que a velocidade do som 340 a e m/seg, obtm-se as duas distncias. e a Da geometria anal tica, um c rculo no plano perfeitamente determinada se soubere mos as coordenadas , do seu centro, bem como o raio dele, usualmente representada por R. Da geometria anal tica, a frmula o e (x )2 + (y )2 = R2 Do problema, so conhecidos 1 , 2 , 1 , 2 , D1 e D2 . Obtem-se agora duas frmulas a o em x2 , x, y 2 e y. Operando com elas obtem-se dois pares de x, y que so os pontos a candidatos.
13.2.3
Dados:
Problema 1
Seu amigo 1 est em x1 = 253 e y1 = 169. a Seu amigo 2 est em x2 = 671 e y2 = 225. a O tiro do amigo 1 demorou t1 = .675453 segundos. O tiro do amigo 2 demorou t2 = .568409 segundos.
verso de 10 de fevereiro de 2008 a
203
CAP ITULO 13. EXERC ICIO PRATICO:007-GPS Os dois pontos candidatos a serem sua localizao so: ca a x,y x,y
13.2.4
Dados:
Problema 2
Seu amigo 1 est em x1 = 392 e y1 = 173. a Seu amigo 2 est em x2 = 696 e y2 = 210. a O tiro do amigo 1 demorou t1 = .395137 segundos. O tiro do amigo 2 demorou t2 = .507112 segundos.
13.2.5
Dados:
Problema 3
Seu amigo 1 est em x1 = 283 e y1 = 130. a Seu amigo 2 est em x2 = 507 e y2 = 275. a O tiro do amigo 1 demorou t1 = .449615 segundos. O tiro do amigo 2 demorou t2 = .335990 segundos.
13.2.6
Dados:
Problema 4
Seu amigo 1 est em x1 = 310 e y1 = 170. a Seu amigo 2 est em x2 = 679 e y2 = 256. a O tiro do amigo 1 demorou t1 = .614903 segundos. O tiro do amigo 2 demorou t2 = .499585 segundos.
204
13.2.7
Dados:
Problema 5
Seu amigo 1 est em x1 = 201 e y1 = 163. a Seu amigo 2 est em x2 = 627 e y2 = 251. a O tiro do amigo 1 demorou t1 = .593287 segundos. O tiro do amigo 2 demorou t2 = .686965 segundos.
13.2.8
Dados:
Problema 6
Seu amigo 1 est em x1 = 288 e y1 = 109. a Seu amigo 2 est em x2 = 619 e y2 = 205. a O tiro do amigo 1 demorou t1 = .443191 segundos. O tiro do amigo 2 demorou t2 = .570475 segundos.
13.2.9
Dados:
Problema 7
Seu amigo 1 est em x1 = 308 e y1 = 157. a Seu amigo 2 est em x2 = 561 e y2 = 204. a O tiro do amigo 1 demorou t1 = .330474 segundos. O tiro do amigo 2 demorou t2 = .429059 segundos.
13.2.10
Dados:
Problema 8
Seu amigo 1 est em x1 = 274 e y1 = 105. a Seu amigo 2 est em x2 = 511 e y2 = 264. a O tiro do amigo 1 demorou t1 = .473127 segundos. O tiro do amigo 2 demorou t2 = .366280 segundos.
verso de 10 de fevereiro de 2008 a
205
CAP ITULO 13. EXERC ICIO PRATICO:007-GPS Os dois pontos candidatos a serem sua localizao so: ca a x,y x,y
13.2.11
Dados:
Problema 9
Seu amigo 1 est em x1 = 313 e y1 = 195. a Seu amigo 2 est em x2 = 506 e y2 = 279. a O tiro do amigo 1 demorou t1 = .367376 segundos. O tiro do amigo 2 demorou t2 = .256153 segundos.
13.2.12
Dados:
Problema 10
Seu amigo 1 est em x1 = 329 e y1 = 145. a Seu amigo 2 est em x2 = 519 e y2 = 219. a O tiro do amigo 1 demorou t1 = .231924 segundos. O tiro do amigo 2 demorou t2 = .372242 segundos.
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
206
Cap tulo 14
14.1
Cada um dos exerc cios a seguir apresenta uma resposta numrica unica. Descubra-a e e coloque o seu valor no quadrado duplo que segue a denio. ca
14.1.1
Problema 1
Um certo espetculo musical no Japo, tem um custo para entrar de 3500 ienes para a a adultos e 1200 ienes para estudantes. No sbado passado havia 608 pessoas, e a renda a da noite foi de 1.707.100 ienes. Quantos estudantes havia ? 207
14.1.2
Problema 2
Em um tanque h 4000 bolinhas de pingue-pongue. Um menino comeou a retirar as a c bolinhas, uma por uma, com velocidade constante quando eram 10h. Aps 6 horas, h o a no tanque 3520 bolinhas. Se o menino continuasse no mesmo ritmo, a que horas do dia seguinte o tanque caria com 2000 bolinhas ? (OBM 2006)
14.1.3
Problema 3
Uma processadora de alimentos desenvolveu uma marca de salada de fruta enlatada de muito sucesso. A frmula desta salada, envolve as seguintes frutas e ingredientes nas o seguintes propores: 1 Kg de banana; 0,5 Kg de abacaxi; 2 Kg de laranja e 250 gramas co de aucar. c Suponha que em um determinado dia, existem dispon veis as seguintes quantidades no depsito: 100 Kg de aucar, 300 Kg de abacax 800 Kg de bananas e 1 tonelada de o c , laranja. Pergunta-se quantos quilos de salada de fruta podero ser produzidos preservando a as propores da frmula original ? co o
14.1.4
Problema 4
A soma de dois nmeros primos a e b 34 e a soma dos primos a e c 33. Quanto vale u e e a + b + c ? (OBM 2004)
14.1.5
1 a b b 3 --------* * * * * * --------1 c c 0 1
Problema 5
Qual o valor de a + b + c
208
14.1.6
Problema 6
O per metro de determinado retngulo 16 vezes maior do que o menor lado do retna e a gulo. O comprimento do maior lado 12 cent e metros maior do que o menor lado. Qual o comprimento do maior lado, em cent metros?
14.1.7
Problema 7
As letras O, B e M representam nmeros inteiros. Se OBM = 240, (OB)+M = 46 u e O + (B M ) = 64, quanto vale O + B + M ? (OBM 2005)
14.1.8
Problema 8
Na ocina mecnica do Z Tio, nesta semana foram reparados 40 ve a e a culos, entre motos e carros. Como curiosidade, o auxiliar do Z Tio contou que o nmero total de rodas e a u 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 aceita transportar pacotes com peso inferior a 3 s o Kg e comprimento master menor que 250 cent metros. O comprimento master o maior e barbante que d a volta completa ao pacote. Supondo um pacote de 2,85 Kg e cujas a dimenses em metros so: 0,3 x 0,7 x 1,1 m, pergunta-se Este pacote pode (responda 1) o a ou no pode (responda 0) ser mandado pelo correio ? a
14.1.11
1 2 3 4 5
Respostas
CAP ITULO 14. EXERC ICIO PRATICO: 008 - PROBLEMAS 6 7 8 9 10 14.0 20.0 30.0 14.0 0
210
Cap tulo 15
Neste folha de exerc cios, sero apresentadas diversas seqncias de 11 nmeros. Os a ue u nmeros iniciais (1, 2 ou 3) a depender da seqncia so aleatrios. Os prximos at o u ue a o o e nal seguem uma determinada lei de formao. Um dos nmeros do nal da seqncia ca u ue representado por um sinal de ?. Voc deve descobrir que nmero esse e e u e
8 211 ? ? 131 207 212 60 206 1941 137 158 147 125 ? 212 211
11 513 895 822 555 509 514 254 508 27312 581 987 913 529 390 514
resposta
some em 3
+ + + + + + + + + +
CAP ITULO 15. EXERC ICIO PRATICO: 009-ACHAR O NUMERO QUE FALTA
15.2
Exerc cio 1
N. 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
1 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
2 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
3 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
4 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
6 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
7 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
8 886
10
11 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
resposta
some em 3
?
390
? ?
293 4616 262 459 360 1591 120 2238
? ? ?
+ + + + + + + + + + + + + + + + + + + +
? ?
281
? ? ?
927 1591 277 165
? ?
?
9273 740
? ?
?
6388
? ? ?
?
3602 8527 325
? ? ? ?
200
? ? ?
385 1361
CAP ITULO 15. EXERC ICIO PRATICO: 009-ACHAR O NUMERO QUE FALTA
15.3
Exerc cio 2
N. 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
1 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
2 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
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
4 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
5 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
7 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
8 206
10
11 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
resposta
some em 3
? ? ?
?
389 435 457 391 323 534
+ + + + + + + + + + + + + + + + + + + +
?
291
? ?
? ? ? ? ?
?
249 8597
? ? ?
222 939
?
1877 387 386
? ?
210 210 112 828
? ?
?
1574 243 213
? ? ?
239
651
CAP ITULO 15. EXERC ICIO PRATICO: 009-ACHAR O NUMERO QUE FALTA
15.4
Exerc cio 3
N. 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
1 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 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
3 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
4 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
5 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
7 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
8 758 90
10
11 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
resposta
some em 3
? ?
2387
+ + + + + + + + + + + + + + + + + + + +
? ? ? ?
?
390
210 240 3800 152 155 230 272 196 1198 238 221
? ? ? ? ? ? ?
1876
? ? ? ? ?
107
? ?
?
610
? ? ?
214
? ? ?
CAP ITULO 15. EXERC ICIO PRATICO: 009-ACHAR O NUMERO QUE FALTA
15.5
N. 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 1 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
Exerc cio 4
2 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 3 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 4 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 5 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 6 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 7 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 8 215 299 1702 210 207 133 249 114 9 10 568 11 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 resposta some em 3 3
?
597
? ? ? ? ? ? ? ?
+ + + + + + + + + + + + + + + + + + + +
405 334
?
302 543 723 1875 388
? ?
291 596
?
1196 386 651 1192 325 554
? ? ?
353
?
225 679
?
469 265
? ? ?
? ? ?
?
204
?
386
15.6
Respostas
1060 2820 658 1060 7066 10503 794 1048 953 995 913 1622 9698 4027 932 977 1970 1115 1103 993 2097 1501 492 3653 3347 1255 1535 1787 1005 5510 7188 624 8685 9663 526 8219
215
CAP ITULO 15. EXERC ICIO PRATICO: 009-ACHAR O NUMERO QUE FALTA
216
Cap tulo 16
Note que a operao x mod y, quando y = 0, matematicamente no est denida. ca a a Entretanto, para esta folha, combinar-se- que x mod y = x quando y = 0. Da mesma a maneira, x 0 no est denido. O caso particular, vlido apenas aqui 0 0 que aqui a a a e dar 1. a
16.1.1
Resolva as 6 linhas abaixo e some (aritmticamente) os resultados encontrados, lanando e c o total no quadro abaixo
((27 div 7) mod 2)+( (((9 + 4) - (3 - 5)) (3 + 6))) ((26 div 5) mod 3)-(((8 + 3) ( (9 7))) + (9 + 3)) (((4 + 7) - (5 5)) + (7 - 2))-(6 + 8) ((27 div 3) div 5)+(((8 + 3) + (3 3)) (8 - 4)) ((30 div 6) div 3)-(((3 4) + (9 + 2)) (8 - 3)) (2 - 3)+(((3 - 4) - (7 + 5)) + (7 3))
16.1.2
Resolva as 6 linhas abaixo e some (aritmticamente) os nmeros das linhas que respone u dem VERDADEIRO, lanando o total no quadro abaixo c 1 ((29 div 4) div 6)<(((7 + 7) + (3 + 9)) (6 - 4)) 2 (21 div 1)>(((6 - 5) (5 + 2)) + (5 + 4)) 4 ((.F. .V.))(((.F. .F.)) .F.) 8 (28 div 10)>( (((8 + 7) (9 8)) (6 + 6))) 217
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
16.1.3
Resolva as 6 linhas abaixo e some (aritmticamente) os resultados encontrados, lanando e c 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)+(( ((9 + 7) (2 + 5))) + (8 + 4)) (((30 div 10) mod 5) mod (16 div 6))-(((6 + 4) + (8 - 7)) - (8 - 3)) (((24 div 7) mod 6) mod (22 div 3))+(((5 + 2) + (3 + 3)) (3 + 5)) (9 + 2)+(((8 + 8) (3 - 2)) - (5 + 2))
16.1.4
Resolva as 6 linhas abaixo e some (aritmticamente) os nmeros das linhas que respone u dem VERDADEIRO, lanando o total no quadro abaixo c 1 ((26 div 5) mod 4)>(((5 - 3) + (4 + 5)) + (6 + 2)) 2 (23 mod 10)>(((6 8) - (6 - 9)) - (5 - 4)) 4 (.F. .V.)((.V. .V.) .F.) 8 (20 div 6)<( (((3 + 2) + (2 5)) (4 + 8))) 16 (18 mod 4)<(((4 - 2) + (8 - 2)) (2 - 7)) 32 (.F. .V.)((.F. .F.) .F.) soma das linhas
16.1.5
Resolva as 6 linhas abaixo e some (aritmticamente) os resultados encontrados, lanando e c o total no quadro abaixo
(((18 div 9) div 1) div (11 div 6))-(((3 + 7) (2 + 3)) - (7 - 2)) ((26 div 7) div 1)-(((4 9) - (9 - 5)) (7 - 6)) (((5 + 9) - (6 - 4)) - (6 - 9))-(6 9) (((11 mod 4) mod 5) div (25 mod 6))-(((3 - 7) + (8 6)) + (4 - 2))
88-08, Pedro Kantek
218
CAP ITULO 16. EXERC ICIOS PRATICOS: 011 - MATEMATICA E LOGICA BASICAS
((19 mod 3) mod 4)-(((8 - 3) (4 2)) + (5 4)) (( ((7 3) (2 + 8))) (8 + 9))-(2 + 3)
16.1.6
Resolva as 6 linhas abaixo e some (aritmticamente) os nmeros das linhas que respone u dem VERDADEIRO, lanando o total no quadro abaixo c 1 ((26 mod 7) mod 6)>(((7 - 6) + (7 9)) - (5 + 5)) 2 (18 div 10)>( (((9 8) + (7 + 7)) (2 6))) 4 (.F. .F.)((.F. .V.) (.V.)) 8 (27 div 8)>(((9 - 2) ( (8 7))) - (7 + 8)) 16 (13 mod 7)>((( (7 4)) + (7 + 8)) + (3 8)) 32 (.V. .F.)((.F. .V.) .F.) soma das linhas
16.1.7
Resolva as 6 linhas abaixo e some (aritmticamente) os resultados encontrados, lanando e c 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))-( (8 4)) ((19 mod 3) mod 5)+(((7 + 7) + (3 - 4)) + (9 5)) ((25 div 6) div 3)-(((5 + 8) (9 + 5)) + (6 + 8)) (((8 6) - (7 + 9)) (3 + 7))-(3 - 2)
16.1.8
Resolva as 6 linhas abaixo e some (aritmticamente) os nmeros das linhas que respone u dem VERDADEIRO, lanando o total no quadro abaixo c 1 ((14 div 1) div 5)>( (((3 - 5) - (2 + 7)) (2 + 5))) 2 (22 div 4)>(((7 - 2) + (8 + 5)) (8 + 7)) 4 (.V. .V.)((.F. .V.) .F.) 8 (14 div 2)<(((6 4) (6 - 5)) - ( (4 3)))
verso de 10 de fevereiro de 2008 a
219
CAP ITULO 16. EXERC ICIOS PRATICOS: 011 - MATEMATICA E LOGICA BASICAS 16 (22 mod 6)<(((4 + 2) - (7 + 7)) + ( (8 3))) 32 (.F. .V.)((.V. .F.) .F.) soma das linhas
16.1.9
Resolva as 6 linhas abaixo e some (aritmticamente) os resultados encontrados, lanando e c o total no quadro abaixo
(((13 mod 9) mod 6) mod (19 mod 4))-(((7 - 2) + (5 + 2)) + (2 + 6)) (((26 div 3) mod 5) mod (15 div 1))+(((6 + 8) + (8 + 2)) + (4 5)) (3 + 7)+(((9 + 6) (2 + 6)) (6 - 3)) ((11 mod 2) mod 3)+(((2 - 5) + (5 - 4)) - (3 + 8)) (((12 mod 9) mod 6) mod (13 mod 7))+(((4 + 9) - (3 9)) - (3 - 6)) (((6 - 7) + ( (8 2))) - (4 - 6))-(2 + 2)
16.1.10
Resolva as 6 linhas abaixo e some (aritmticamente) os nmeros das linhas que respone u dem VERDADEIRO, lanando o total no quadro abaixo c 1 ((23 div 8) mod 6)>(( ((3 + 7) (2 + 8))) + (4 - 7)) 2 (24 div 10)<(((5 - 2) - (3 + 7)) - (6 + 8)) 4 (.F. .V.)((.V. .F.) .V.) 8 (15 div 3)>(((4 + 4) + (9 - 2)) + (9 - 3)) 16 (28 mod 6)<(((8 + 9) (8 + 5)) + (9 - 3)) 32 (.F. .F.)((.V. .F.) (.V.)) soma das linhas
16.2
16.2.1
Exerc cio 2
Exerc cio 2.1
Resolva as 6 linhas abaixo e some (aritmticamente) os resultados encontrados, lanando e c o total no quadro abaixo
(((19 div 3) div 4) mod (21 div 2))-(((9 - 2) + (3 - 8)) + (9 + 6)) ((20 div 6) div 3)-(((4 + 6) (2 3)) + (4 + 3))
88-08, Pedro Kantek
220
CAP ITULO 16. EXERC ICIOS PRATICOS: 011 - MATEMATICA E LOGICA BASICAS
( (((7 + 6) + (4 + 4)) (9 - 4)))-(4 + 8) (((23 div 6) div 2) mod (18 div 3))-(((5 + 3) - (4 - 6)) - (8 + 6)) ((24 div 9) div 2)-(((5 + 8) - (4 - 5)) + (8 - 5)) (2 + 7)+(( ((2 - 4) (5 - 3))) + (2 - 8))
16.2.2
Resolva as 6 linhas abaixo e some (aritmticamente) os nmeros das linhas que respone u dem VERDADEIRO, lanando o total no quadro abaixo c 1 ((23 div 1) div 4)<(((9 + 6) + (3 + 7)) + (4 - 2)) 2 (19 div 1)>( (((2 + 4) (4 + 5)) (7 + 3))) 4 (.V. .F.)((.V. .F.) (.F.)) 8 (26 div 4)<(((7 - 5) + (2 + 6)) + (5 - 2)) 16 (14 div 1)<( (((3 - 7) + (2 + 4)) (7 - 9))) 32 (.V. .V.)((.V. .V.) .F.) soma das linhas
16.2.3
Resolva as 6 linhas abaixo e some (aritmticamente) os resultados encontrados, lanando e c o total no quadro abaixo
(((28 mod 5) mod 5) mod (27 mod 10))-(((9 + 7) + (7 - 4)) + (3 + 6)) (((16 div 1) mod 3) mod (18 div 2))+(((5 + 7) (3 + 4)) - (9 + 9)) (2 - 9)+(((4 - 7) + (8 - 3)) + (4 - 5)) ((15 div 4) div 2)+(((6 + 8) - (3 - 5)) + (3 + 2)) (((20 mod 9) div 1) mod (29 mod 8))+(((3 + 7) (2 + 8)) + (3 - 6)) (6 + 7)+(((8 - 5) (5 + 9)) + (8 - 7))
221
CAP ITULO 16. EXERC ICIOS PRATICOS: 011 - MATEMATICA E LOGICA BASICAS
16.2.4
Resolva as 6 linhas abaixo e some (aritmticamente) os nmeros das linhas que respone u dem VERDADEIRO, lanando o total no quadro abaixo c 1 ((26 mod 4) mod 3)>(((8 + 2) + (6 + 2)) - (7 - 2)) 2 (13 mod 8)<(((2 - 5) + (9 + 7)) - (3 - 2)) 4 (.V. .F.)((.F. .F.) .V.) 8 (28 mod 6)<(((8 + 5) (2 - 8)) - ( (7 5))) 16 (30 div 7)<(((6 + 7) + (2 - 6)) - ( (6 3))) 32 (.V. .F.)((.F. .V.) .V.) soma das linhas
16.2.5
Resolva as 6 linhas abaixo e some (aritmticamente) os resultados encontrados, lanando e c o total no quadro abaixo
(((16 mod 10) mod 5) mod (29 mod 8))-(((5 + 7) - (6 + 2)) - (3 8)) ((26 mod 5) mod 5)-(((7 + 6) + (5 8)) - (5 + 8)) ((( (5 5)) - (5 + 5)) + (8 + 7))-(9 - 7) (((25 mod 6) div 1) mod (18 mod 7))-(((8 - 4) + (6 3)) + (9 + 5)) (((19 mod 10) div 6) mod (12 mod 3))+(((8 + 2) - (9 - 3)) + (9 6)) (5 - 3)+(( ((3 - 8) (7 - 8))) - (6 3))
16.2.6
Resolva as 6 linhas abaixo e some (aritmticamente) os nmeros das linhas que respone u dem VERDADEIRO, lanando o total no quadro abaixo c 1 ((20 mod 8) mod 5)<(((9 + 9) + (2 - 6)) + (8 + 3)) 2 (23 div 8)<(((4 - 6) - (4 + 8)) + (2 + 6)) 4 (.V. .F.)((.F. .V.) .V.) 8 (23 div 6)>( (((9 - 2) - (7 + 7)) (8 - 2))) 16 (25 mod 9)>(( ((2 + 9) (2 + 8))) - (7 2)) 32 (.V. .F.)((.F. .F.) (.V.)) soma das linhas
222
CAP ITULO 16. EXERC ICIOS PRATICOS: 011 - MATEMATICA E LOGICA BASICAS
16.2.7
Resolva as 6 linhas abaixo e some (aritmticamente) os resultados encontrados, lanando e c o total no quadro abaixo
((16 mod 5) mod 5)+(((2 3) (2 + 9)) (3 + 6)) ((16 div 10) mod 3)-(((9 + 6) - (6 + 4)) - (6 + 2)) (((5 + 3) - ( (9 8))) - (6 + 2))-(5 7) (((27 mod 7) div 5) mod (16 mod 10))-(((3 8) + (8 + 2)) - (2 + 5)) ((30 div 6) div 3)-(((6 - 7) - (2 + 4)) + (2 + 6)) (4 - 8)+(((2 + 7) (9 + 8)) - ( (8 3)))
16.2.8
Resolva as 6 linhas abaixo e some (aritmticamente) os nmeros das linhas que respone u dem VERDADEIRO, lanando o total no quadro abaixo c 1 ((29 div 7) div 4)>((( (9 4)) - (8 + 6)) - (8 + 7)) 2 (18 div 4)>(((6 - 9) (6 + 6)) + (6 - 2)) 4 (.F. .F.)((.V. .V.) .F.) 8 (17 div 3)<(((4 + 4) - (2 + 9)) + (2 + 8)) 16 (22 mod 6)<((( (9 7)) (4 + 2)) - (7 - 9)) 32 (.F. .V.)((.F. .F.) .F.) soma das linhas
16.2.9
Resolva as 6 linhas abaixo e some (aritmticamente) os resultados encontrados, lanando e c o total no quadro abaixo
(((18 div 6) mod 6) mod (27 div 5))-(((3 + 3) - (2 + 6)) (2 + 5)) (((19 div 2) div 1) div (23 div 7))+(((5 + 4) + (2 + 4)) + (2 + 4)) (((6 - 2) + (5 + 6)) + (8 - 2))-(2 + 9) ((28 div 8) div 3)+(((3 - 4) + (6 + 2)) + (2 - 5)) ((20 div 2) div 1)-(((3 + 3) - (4 + 9)) + (6 + 4)) (((3 + 2) - (3 + 9)) + (4 - 2))-(6 - 2)
223
CAP ITULO 16. EXERC ICIOS PRATICOS: 011 - MATEMATICA E LOGICA BASICAS
16.2.10
Resolva as 6 linhas abaixo e some (aritmticamente) os nmeros das linhas que respone u dem VERDADEIRO, lanando o total no quadro abaixo c 1 ((20 mod 8) mod 3)>((( (7 3)) - (6 + 8)) + (6 + 7)) 2 (26 div 5)>(((8 + 7) (6 + 5)) - (7 + 9)) 4 ((.V. .F.))((.V. .F.) .F.) 8 (16 div 1)<(((7 4) + (3 - 2)) - (9 - 5)) 16 (17 div 5)<(((7 6) (8 + 3)) - (9 9)) 32 (.V. .F.)(((.V. .F.)) (.F.)) soma das linhas
16.2.11
1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 1.10 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 2.10 -68 19 222 4 -184 8 168 41 379 17 -99 43 213 50 -1 25 684 31 54 24
Respostas
224
Cap tulo 17
Permite executar uma ou mais instrues caso uma condio seja verdadeira. Opcionalco ca mente, pode ter a alternativa inversa, ou seja, executar outros comandos, se a condio ca for falsa. Comandos internos ao comando sedevem estar identados de 3 espaos, para c clareza. se <condi~o> ca <comando-1> <comando-2> ... [sen~o <comando-11> a <comando-12> ...] fim {se} Alternativa Simples S possui a primeira parte do comando (comandos so execuo a tados se a condio for verdadeira) ca se <condi~o> ca comando-1 comando-2 ... fim {se} Alternativa Composta Possui as duas partes. A primeira, se a condio for verca dadeira e a segunda se for falsa. se condi~o ca c1 c2 ... sen~o a c10 c11 225
CAP ITULO 17. EXERC ICIOS PRATICOS: 017-SES COMPOSTOS E ENCADEADOS ... fim {se condi~o} ca A seguir diversos algoritmos envolvendo apenas o comando de alternativa. Siga cada um dos algoritmos e ao nal responda qual o valor impresso por cada um deles.
17.1.1
Suponha a chamada EX1 ( 1, 6, 6, 6, 1, 6 ), com a seguinte denio ca 1: funo EX1 (inteiro A, B, C, D, E, F) ca 2: se ((E = 5) (B < 4)) ento a 3: se (F = 1) ento a 4: DE5 5: seno a 6: FE4 7: mse 8: FA+D 9: seno a 10: ACD 11: se ((B 5) (A = 6)) ento a 12: BC-D 13: mse 14: mse 15: imprima A + B + C + D + E 16: m {funo} ca
17.1.2
Suponha a chamada EX2 ( 4, 2, 3, 2, 1, 2 ), com a seguinte denio ca 1: funo EX2 (inteiro A, B, C, D, E, F) ca 2: se ((F 1) (C 5)) ento a 3: se (D > 5) ento a 4: FAC 5: seno a 6: DCF 7: mse 8: DB+5 9: seno a 10: EB+5 11: se (( (B = 2)) ( (A 1))) ento a 12: CC+2 13: mse 14: mse 15: imprima A + B + C + D + E 16: m {funo} ca
17.1.3
Suponha a chamada EX3 ( 3, 1, 2, 1, 3, 4 ), com a seguinte denio ca 1: funo EX3 (inteiro A, B, C, D, E, F) ca 2: se (((D 5) (F 5)) (A = 3)) ento a 3: se ((F > 6) ( (D 2))) ento a
88-08, Pedro Kantek
226
BA-E seno a CD-E mse EC-2 seno a DA4 se ((A = 4) (A < 4)) ento a FDB mse mse imprima A + B + C + D + E m {funo} ca
17.1.4
Suponha a chamada EX4 ( 2, 4, 5, 1, 2, 5 ), com a seguinte denio ca 1: funo EX4 (inteiro A, B, C, D, E, F) ca 2: se (((E < 5) ( (C = 1))) ( (D < 3))) ento a 3: se ((E = 2) (E = 4)) ento a 4: CC+B 5: seno a 6: CBE 7: mse 8: CF-C 9: seno a 10: CAE 11: se (A 6) ento a 12: CD-4 13: mse 14: mse 15: imprima A + B + C + D + E 16: m {funo} ca
17.1.5
Suponha a chamada EX5 ( 5, 3, 3, 3, 3, 6 ), com a seguinte denio ca 1: funo EX5 (inteiro A, B, C, D, E, F) ca 2: se (( (D 3)) ( (A = 4))) ento a 3: se (( (B < 6)) (E = 4)) ento a 4: DC-E 5: seno a 6: FB2 7: mse 8: AA+5 9: seno a 10: FB-4 11: se (((D > 4) (C 2)) (C = 5)) ento a 12: FA3 13: mse 14: mse 15: imprima A + B + C + D + E
verso de 10 de fevereiro de 2008 a
227
m {funo} ca
17.1.6
Suponha a chamada EX6 ( 1, 4, 3, 5, 2, 3 ), com a seguinte denio ca 1: funo EX6 (inteiro A, B, C, D, E, F) ca 2: se (( (F 2)) ( (B 6))) ento a 3: se ((D < 3) ( (B = 6))) ento a 4: CD-E 5: seno a 6: BCF 7: mse 8: BA+2 9: seno a 10: BC-2 11: se (F = 4) ento a 12: FB-F 13: mse 14: mse 15: imprima A + B + C + D + E 16: m {funo} ca Respostas
1 2 3 4 5 6
17.2
Exerc cio 2
A seguir diversos algoritmos envolvendo apenas o comando de alternativa. Siga cada um dos algoritmos e ao nal responda qual o valor impresso por cada um deles.
17.2.1
Suponha a chamada EX1 ( 3, 2, 2, 3, 2, 1 ), com a seguinte denio ca 1: funo EX1 (inteiro A, B, C, D, E, F) ca 2: se ((( (D 1)) (B < 1)) (A > 6)) ento a 3: se (D = 2) ento a 4: DCD 5: seno a 6: AC+4 7: mse 8: AF+E 9: seno a 10: BC3 11: se (((B = 5) (F = 1)) (B > 4)) ento a 12: CE5 13: mse 14: mse 15: imprima A + B + C + D + E 16: m {funo} ca
88-08, Pedro Kantek
228
17.2.2
Suponha a chamada EX2 ( 1, 4, 6, 3, 3, 2 ), com a seguinte denio ca 1: funo EX2 (inteiro A, B, C, D, E, F) ca 2: se (( (D 6)) ( (D > 5))) ento a 3: se (( (D > 1)) ( (C > 1))) ento a 4: AD5 5: seno a 6: DC-3 7: mse 8: AE-4 9: seno a 10: CA-3 11: se ((C < 2) (F = 5)) ento a 12: DE-B 13: mse 14: mse 15: imprima A + B + C + D + E 16: m {funo} ca
17.2.3
Suponha a chamada EX3 ( 4, 1, 2, 3, 3, 1 ), com a seguinte denio ca 1: funo EX3 (inteiro A, B, C, D, E, F) ca 2: se ( (F 1)) ento a 3: se ((E = 3) (E > 4)) ento a 4: BF2 5: seno a 6: FE+F 7: mse 8: CB3 9: seno a 10: EC+E 11: se ((D 1) (E 6)) ento a 12: DFE 13: mse 14: mse 15: imprima A + B + C + D + E 16: m {funo} ca
17.2.4
Suponha a chamada EX4 ( 6, 4, 6, 4, 2, 4 ), com a seguinte denio ca 1: funo EX4 (inteiro A, B, C, D, E, F) ca 2: se (( (D 2)) (E = 6)) ento a 3: se (((D < 6) (A = 6)) ( (F 6))) ento a 4: AC-B 5: seno a 6: BFD 7: mse 8: CA-5 9: seno a
verso de 10 de fevereiro de 2008 a
229
FF2 se (((A < 6) ( (B = 6))) ( (A = 6))) ento a DB+4 mse mse imprima A + B + C + D + E m {funo} ca
17.2.5
Suponha a chamada EX5 ( 1, 2, 4, 2, 6, 6 ), com a seguinte denio ca 1: funo EX5 (inteiro A, B, C, D, E, F) ca 2: se (((B = 1) (B > 1)) ( (F > 4))) ento a 3: se ( (A < 4)) ento a 4: CA+E 5: seno a 6: CE2 7: mse 8: EB-4 9: seno a 10: FF2 11: se (C > 2) ento a 12: AFD 13: mse 14: mse 15: imprima A + B + C + D + E 16: m {funo} ca
17.2.6
Suponha a chamada EX6 ( 6, 2, 6, 1, 5, 3 ), com a seguinte denio ca 1: funo EX6 (inteiro A, B, C, D, E, F) ca 2: se ((( (A > 4)) ( (A 1))) ( (A > 6))) ento a 3: se ( (F 4)) ento a 4: BF+2 5: seno a 6: CD4 7: mse 8: AC+3 9: seno a 10: DA-C 11: se (( (A = 4)) (E 3)) ento a 12: FC-4 13: mse 14: mse 15: imprima A + B + C + D + E 16: m {funo} ca
88-08, Pedro Kantek
230
CAP ITULO 17. EXERC ICIOS PRATICOS: 017-SES COMPOSTOS E ENCADEADOS Respostas
1 2 3 4 5 6
17.2.7
1.1 1.2 17 1.3 21 1.4 5 1.5 17 1.6 14 2.1 2.2 15 2.3 15 2.4 29 2.5 38 2.6 19
Respostas
49
24
231
232
Cap tulo 18
A seguir, so apresentados um uxograma e a seguir um trecho em pseudo-cdigo. a o Ambos devem ser analisados e deve-se chegar a uma concluso: so equivalentes ? Se a a forem, os nmeros que identicam cada exerc devem ser somados. Ao nal da srie, u cio e a soma deve ser respondida.
18.1.1
ex001 A>4 v ZZ-3
Exerc cio 1
KL-7
TY5
MM4
TZ+6 m
MK+2
CAP ITULO 18. EXERC ICIOS PRATICOS: 018-FLUXOGRAMAS MM4 MK+2 fim{se} Se os trechos acima forem equivalentes, some 1 ` resposta. a ex002 A>5 B=9 v ZY-8 m KN+2
ex002 se (A5)(B=9) ent~o a ZY-8 sen~o a KN+2 fim{se} Se os trechos acima forem equivalentes, some 2 ` resposta. a ex004 A>8 v C2 v TZ+2 MK+9 TT6
YT4 m
KM9
SP5
234
CAP ITULO 18. EXERC ICIOS PRATICOS: 018-FLUXOGRAMAS KM9 sen~o a TT6 SP5 fim{se} fim{se} Se os trechos acima forem equivalentes, some 4 ` resposta. a ex008 A=1 v C=4 v MK-7 E=5 v PS7
TY-4
NN6
SR-7
XT-8 m
KK-2
RT6
UH+1
ex008 se (A=1) ent~o a se (E=5) ent~o a PS7 SR-7 RT6 sen~o a UH+1 fim{se} sen~o a se (C=4) ent~o a MK-7 NN6 KK-2 sen~o a TY-4 XT-8 fim{se} fim{se} Se os trechos acima forem equivalentes, some 8 ` resposta. a
verso de 10 de fevereiro de 2008 a
235
YZ5
NK3
SR9
XT9 m
MM7
SP2
ex016 se (A=7)(B<3) ent~o a se (C=5) ent~o a SP-6 SR9 SP2 sen~o a LL8 NK3 MM7 fim{se} sen~o a YZ5 YZ5 XT9 fim{se}
236
YX-6
ML+4
TP8
JG5
TY+9 m
MK2
RT7
HU3
ex032 se (A=6)(B<1) ent~o a se (C6) ent~o a YZ2 YX-6 TY+9 sen~o a ML+4 MK2 fim{se} sen~o a se (E=6) ent~o a SP+9 TP8 RT7 sen~o a JG5 HU3 fim{se} fim{se}
237
ZY+7 m
LM4
RT6
ex064 se (A2)(B3) ent~o a se (C1)(D>2) ent~o a SS-6 RT6 sen~o a LM4 fim{se} sen~o a ZX-2 ZY+7 fim{se}
238
E3 F<1 v RP5
ZZ9
TR8
XY7 m
NM8
TP+2
JU+9
ex128 se (A=6)(B<9) ent~o a se (E<3)(F1) ent~o a RP5 TR8 TP+2 sen~o a JU+9 fim{se} sen~o a se (C>9)(D=4) ent~o a NM8 sen~o a YX4 ZZ9 XY7 fim{se} fim{se}
Se os trechos acima forem equivalentes, some 128 ` resposta. a Responda a soma dos exerc cios que so equivalentes a
18.1.2
Exerc cio 2
A seguir, some o nmero dos exerc u cios em que o trecho de pseudocdigo 100% equivo e alente ao uxograma apresentado
verso de 10 de fevereiro de 2008 a
239
ex001 A5 v KM-2
ZX3 m
LM9
Se os trechos acima forem equivalentes, some 1 ` resposta. a ex002 A1 B<2 v TX+4 m MK3
240
TT-8 m
LK+7
RS+7
ex004 se (A=6) ent~o a se (C>7) ent~o a TT-9 RS+7 sen~o a LK+7 fim{se} sen~o a TT-8 fim{se} Se os trechos acima forem equivalentes, some 4 ` resposta. a ex008 A9 v E>1 v C=4 v XZ+4 JH3 GU2
XT-5 m
LL-9
PT5
JJ3
241
ex008 se (A<9) ent~o a se (E1) ent~o a PT5 sen~o a GU2 JH3 JJ3 fim{se} sen~o a se (C=4) ent~o a LL-9 sen~o a XZ+4 XT-5 fim{se} fim{se} Se os trechos acima forem equivalentes, some 8 ` resposta. a ex016 A=5 B=8 v TY2 C>8 v TY-8 KN2
XX-6 m
NM-3
PT5
ex016 se (A=5)(B=8) ent~o a TY2 TY-8 XX-6 sen~o a se (C>8) ent~o a KN2 NM-3 sen~o a PT5 fim{se}
88-08, Pedro Kantek
242
Se os trechos acima forem equivalentes, some 16 ` resposta. a ex032 A=4 B<2 v C<5 v LK2 E>4 v TR-9
ML-4
PP+9
ZT+3 m
LM9
PS6
GG9
ex032 se (A=4)(B<2) ent~o a se (C<5) ent~o a TR-9 PP+9 PS6 sen~o a GG9 fim{se} sen~o a se (E>4) ent~o a LK2 ML-4 LM9 sen~o a ZT+3 fim{se} fim{se}
243
XT2
MM5
ST-2
TZ6 m
LK+9
RP3
ex064 se (A=2)(B3) ent~o a se (C5)(D>5) ent~o a TR-6 ST-2 RP3 sen~o a MM5 LK+9 fim{se} sen~o a XT2 TZ6 fim{se}
244
XT2 m
LL+4
ex128 se (A>5)(B7) ent~o a se (C=4)(D=4) ent~o a TS5 sen~o a JG-8 fim{se} sen~o a se (E=3)(F3) ent~o a KM9 LL+4 sen~o a XT2 fim{se} fim{se} Se os trechos acima forem equivalentes, some 128 ` resposta. a Responda a soma dos exerc cios que so equivalentes a
18.1.3
1 2
Respostas
153 93
245
246
Cap tulo 19
19.0.4
ex001
Exerc cio 1
ex001 se (A=1) ent~o a ZZ+4 TZ5 ZX9 sen~o a MK8 KN5 KM2 fim{se}
YZ3
ex002 se (A=5)(B>5) ent~o a LM3 KN4 LN2 sen~o a YZ3 fim{se} Se os trechos acima forem equivalentes, some 2 ` resposta. a ex004 A=1 v C=7 PP-5 SP8 RT4
f f
YZ9 XX-4
KL2
ex004 se (A=1) ent~o a se (C=7) ent~o a PP-5 SP8 RT4 sen~o a KL2 fim{se} sen~o a YZ9 XX-4 fim{se}
88-08, Pedro Kantek
248
Se os trechos acima forem equivalentes, some 4 ` resposta. a ex008 A1 C4 KN3 NK+3 f v RR-7 E>1 HH4 GJ-5
v v
f f
ZX4
ex008 se (A<1) ent~o a se (E1) ent~o a RR-7 sen~o a HH4 GJ-5 fim{se} sen~o a se (C<4) ent~o a KN3 NK+3 sen~o a ZX4 fim{se} fim{se} Se os trechos acima forem equivalentes, some 8 ` resposta. a ex016 A<8 B=5 v C<6 RR+7 SP5
v TZ-5
f f
NM+8
249
CAP ITULO 19. EXERC ICIOS PRATICOS: 018 - NASSI se (C6) ent~o a NM+8 sen~o a RR+7 SP5 fim{se} fim{se}
Se os trechos acima forem equivalentes, some 16 ` resposta. a ex032 A2 B4 C3 KK3 NM+8 f v E7 UG-3 JU-2
v v
f f
YT1
ex032 se (A<2)(B<4) ent~o a se (C3) ent~o a YT1 sen~o a KK3 NM+8 fim{se} sen~o a se (E>7) ent~o a RS9 TR-3 PT+6 sen~o a UG-3 JU-2 fim{se} fim{se}
250
v ZZ-1
f f
ex064 se (A<2)(B>6) ent~o a ZZ-1 sen~o a se (C5)(D=3) ent~o a NK8 KM5 KM3 sen~o a RS+2 fim{se} fim{se} Se os trechos acima forem equivalentes, some 64 ` resposta. a ex128 A6 B>6 C=4 D<1 MM7 f v E7 F>2 HG+6
v v
f f
TT+6 TT2
251
CAP ITULO 19. EXERC ICIOS PRATICOS: 018 - NASSI sen~o a MM7 fim{se} sen~o a se (E>7)(F2) ent~o a TT+6 TT2 sen~o a HG+6 fim{se} fim{se} Se os trechos acima forem equivalentes, some 128 ` resposta. a Responda a soma dos exerc cios que so equivalentes a
19.0.5
ex001
Exerc cio 2
v XX-9
A=8 KK6
XZ8
ex001 se (A=8) ent~o a XX-9 XZ8 sen~o a KK6 fim{se} Se os trechos acima forem equivalentes, some 1 ` resposta. a ex002 A4 B=8 LM4 NM4 NK+2 252
TZ6 TZ5
ex002 se (A4)(B=8) ent~o a LM4 NM4 NK+2 sen~o a TZ6 TZ5 fim{se}
Se os trechos acima forem equivalentes, some 2 ` resposta. a ex004 A>8 v C<6 TP6
v XX-2
f f
ex004 se (A>8) ent~o a XX-2 sen~o a se (C6) ent~o a NN+6 MK+4 ML-6 sen~o a TP6 fim{se} fim{se}
253
v v
f f
ex008 se (A=5) ent~o a se (C1) ent~o a ZY+2 ZT+5 XY7 sen~o a LL7 KL+5 fim{se} sen~o a se (E=1) ent~o a RS8 PS+3 RR+5 sen~o a JG+7 GU6 fim{se} fim{se} Se os trechos acima forem equivalentes, some 8 ` resposta. a ex016 A>6 B=1 v NL-7 NK3 C3 RT4
f f
TZ9
ex016
88-08, Pedro Kantek
254
CAP ITULO 19. EXERC ICIOS PRATICOS: 018 - NASSI se (A>6)(B=1) ent~o a se (C3) ent~o a RT4 sen~o a NL-7 NK3 fim{se} sen~o a TZ9 fim{se}
Se os trechos acima forem equivalentes, some 16 ` resposta. a ex032 A=8 B7 C<4 NK+2 LN8 LK+6 f v TS-9 E3 UG-3 UJ+4 HH+5
v v
f f
YZ7
ex032 se (A=8)(B>7) ent~o a se (E>3) ent~o a TS-9 sen~o a UG-3 UJ+4 HH+5 fim{se} sen~o a se (C4) ent~o a NK+2 LN8 LK+6 sen~o a YZ7 fim{se} fim{se}
255
ex064 A>1 B=4 v NN-2 NK3 C=3 D=1 RS-9 SR5 PR4
f f
YX7 TX8
ex064 se (A1)(B=4) ent~o a se (C=3)(D=1) ent~o a RS-9 SR5 PR4 sen~o a NN-2 NK3 fim{se} sen~o a YX7 TX8 fim{se} Se os trechos acima forem equivalentes, some 64 ` resposta. a ex128 A7 B=7 C=9 D=8 LM5 ML+7 f v E=2 F4 GH+2 HU-2 GJ8
v v
f f
YX4 XY-9
RS2 TP-2
256
CAP ITULO 19. EXERC ICIOS PRATICOS: 018 - NASSI XY-9 sen~o a LM5 ML+7 fim{se} sen~o a se (E=2)(F4) ent~o a RS2 TP-2 sen~o a GH+2 HU-2 GJ8 fim{se} fim{se} Se os trechos acima forem equivalentes, some 128 ` resposta. a Responda a soma dos exerc cios que so equivalentes a
19.0.6
1 2
Respostas
12 232
257
258
Cap tulo 20
Os exerc cios a seguir implementam funes. Em todas, as variveis A, B e C so co a a inicializadas no in cio da funo. Voc deve seguir a funo at o nal e neste ponto ca e ca e informar os valores de A, B e C.
20.1.1
Exerc cio 1
Exerc cio 1.1 Suponha a chamada ` funo CALC, com a seguinte denio a ca ca 1: funo CALC ca 2: inteiro A, B, C 3: A 1 4: B 8 5: C 7 6: se (B > 5) ento a 7: se (C = A) ento a 8: se (A B) ento a 9: CC5 10: seno a 11: BB-B 12: mse 13: seno a 14: se (B C) ento a 15: AB-3 16: seno a 17: BB+2 18: mse 259
mse seno a se ( (C = B)) ento a AC2 seno a BA-3 mse 26: mse 27: imprima A, B, C 28: m{funo} ca
Exerc cio 1.2 Suponha a chamada ` funo CALC, com a seguinte denio a ca ca 1: funo CALC ca 2: inteiro A, B, C 3: A 5 4: B 2 5: C 2 6: se (B < C) ento a 7: se (A C) ento a 8: se (C = B) ento a 9: AC-4 10: seno a 11: AA-A 12: mse 13: seno a 14: se ( (C = B)) ento a 15: BA-4 16: seno a 17: BC+3 18: mse 19: mse 20: seno a 21: se (A < 6) ento a 22: CB+5 23: seno a 24: AC4 25: mse 26: mse 27: imprima A, B, C 28: m{funo} ca Exerc cio 1.3 Suponha a chamada ` funo CALC, com a seguinte denio a ca ca 1: funo CALC ca 2: inteiro A, B, C 3: A 1 4: B 9 5: C 9 6: se ( (C > A)) ento a
88-08, Pedro Kantek
260
se (C B) ento a se (B = C) ento a CB5 seno a BB+B mse seno a se (B > A) ento a CB-2 seno a CC+B mse mse seno a se ( (A = 2)) ento a AA5 seno a BA-2 mse mse imprima A, B, C m{funo} ca
Exerc cio 1.4 Suponha a chamada ` funo CALC, com a seguinte denio a ca ca 1: funo CALC ca 2: inteiro A, B, C 3: A 4 4: B 8 5: C 7 6: se ( (B < A)) ento a 7: se ( (C < B)) ento a 8: se (B < C) ento a 9: BC+4 10: seno a 11: BAB 12: mse 13: seno a 14: se (B < A) ento a 15: CA-B 16: seno a 17: BC+3 18: mse 19: mse 20: seno a 21: se (B = 1) ento a 22: AA+A 23: seno a 24: BC-4 25: mse 26: mse
verso de 10 de fevereiro de 2008 a
261
imprima A, B, C m{funo} ca
Exerc cio 1.5 Suponha a chamada ` funo CALC, com a seguinte denio a ca ca 1: funo CALC ca 2: inteiro A, B, C 3: A 7 4: B 8 5: C 8 6: se (A = C) ento a 7: se (C < 3) ento a se (A 4) ento a 8: 9: BA+2 10: seno a 11: CCC 12: mse 13: seno a 14: se ( (B = 1)) ento a 15: AA+2 16: seno a 17: CC+4 18: mse 19: mse 20: seno a 21: se ( (B 3)) ento a 22: BC-4 23: seno a 24: BCA 25: mse 26: mse 27: imprima A, B, C 28: m{funo} ca Respostas Exerc 1 Var. B Exerc 2 Var. C Exerc 3 Var. B Exerc 4 Var. B Exerc 5 Var. B
20.1.2
Exerc cio 2
Exerc cio 2.1 Suponha a chamada ` funo CALC, com a seguinte denio a ca ca 1: funo CALC ca 2: inteiro A, B, C 3: A 8 4: B 4
88-08, Pedro Kantek
262
C5 se (A < C) ento a se ( (B > C)) ento a se (C < B) ento a BB-2 seno a BA+B mse seno a se ( (C A)) ento a CA+5 seno a BB+B mse mse seno a se (B = A) ento a AAA seno a CB+C mse mse imprima A, B, C m{funo} ca
Exerc cio 2.2 Suponha a chamada ` funo CALC, com a seguinte denio a ca ca 1: funo CALC ca 2: inteiro A, B, C 3: A 4 4: B 5 5: C 7 6: se (A = 1) ento a 7: se ( (B 2)) ento a 8: se ( (B = C)) ento a 9: BA+4 10: seno a 11: BC5 12: mse 13: seno a 14: se (A > C) ento a 15: CC+C 16: seno a 17: CC3 18: mse 19: mse 20: seno a 21: se (B = 2) ento a 22: BC-B 23: seno a 24: AC2
verso de 10 de fevereiro de 2008 a
263
Exerc cio 2.3 Suponha a chamada ` funo CALC, com a seguinte denio a ca ca 1: funo CALC ca 2: inteiro A, B, C 3: A 9 4: B 8 5: C 7 6: se (B > C) ento a 7: se ( (A = 4)) ento a 8: se ( (B < 5)) ento a 9: BC4 10: seno a 11: AB-2 12: mse 13: seno a 14: se (C < A) ento a 15: CB-3 16: seno a 17: AB5 18: mse 19: mse 20: seno a 21: se ( (A 1)) ento a 22: BA-5 23: seno a 24: AA-5 25: mse 26: mse 27: imprima A, B, C 28: m{funo} ca Exerc cio 2.4 Suponha a chamada ` funo CALC, com a seguinte denio a ca ca 1: funo CALC ca 2: inteiro A, B, C 3: A 3 4: B 2 5: C 9 6: se (A = 2) ento a 7: se ( (C > 1)) ento a 8: se (C 5) ento a 9: CA2 10: seno a 11: BB5 12: mse
88-08, Pedro Kantek
264
seno a se (C = 1) ento a AAA seno a BA-4 mse mse seno a se (C = 2) ento a AA+C seno a CCA mse mse imprima A, B, C m{funo} ca
Exerc cio 2.5 Suponha a chamada ` funo CALC, com a seguinte denio a ca ca 1: funo CALC ca 2: inteiro A, B, C 3: A 1 4: B 6 5: C 6 6: se ( (C = 2)) ento a 7: se (C = 3) ento a 8: se (A = 2) ento a 9: BA4 10: seno a 11: BA-5 12: mse 13: seno a 14: se (A > C) ento a 15: CA+3 16: seno a 17: CC+5 18: mse 19: mse 20: seno a 21: se (B = A) ento a 22: BB+B 23: seno a 24: AAB 25: mse 26: mse 27: imprima A, B, C 28: m{funo} ca
verso de 10 de fevereiro de 2008 a
265
CAP ITULO 20. EXERC ICIOS PRATICOS: 021 - 5 FUNCOES SIMPLES Respostas Exerc 1 Var. C Exerc 2 Var. B Exerc 3 Var. B Exerc 4 Var. C Exerc 5 Var. B
20.1.3
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
Respostas
266
Cap tulo 21
Segurana da informao c ca Segurana de Informao est relacionada com a proteo existente ou necessria sobre c ca a ca a dados que possuem valor para algum ou uma organizao. e ca Possui aspectos bsicos como condencialidade, integridade e disponibilidade da ina formao e no se aplica ou est restrita a sistemas computacionais, nem a informaes ca a a co eletrnicas ou qualquer outra forma mecnica de armazenamento. Ela se aplica a todos o a os aspectos de proteo e armazenamento de informaes e dados, em qualquer forma. ca co Um dos padres de segurana mais conhecidos o BS7799, que estabelece melhores o c e prticas para implementao e na gesto da segurana da informao. A srie de nora ca a c ca e mas ISO 27000, encabeadas pela ISO 27001 esto sendo elaboradas para substituir e c a completar os padres denidos pela BS7799. o Algumas normas denem aspectos que devem ser levados em considerao ao elaborar ca pol ticas de segurana. Entre essas normas esto a BS 7799 (elaborada pela British c a Standards Institution) e a NBR ISO/IEC 17799 (a verso brasileira desta primeira). A a ISO comeou a publicar a srie de normas 27000, em substituio ` ISO 17799 (e por c e ca a conseguinte ` BS 7799), das quais a primeira, ISO 27001, foi publicada em 2005. a Entende-se por informao todo e qualquer contedo ou dado que tenha valor para ca u alguma organizao ou pessoa. Ela pode estar guardada para uso restrito ou exposta ao ca pblico para consulta ou aquisio. u ca A segurana de uma determinada informao pode ser afetada por fatores comporc ca tamentais 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 modicar a informao. ca A tr ade CIA (Condentiality, Integrity and Availability) Condencialidade, Integridade e Disponibilidade representa as principais propriedades que, atualmente, orientam a anlise, o planejamento e a implementao da segurana para um determia ca c nado grupo de informaes que se deseja protejer. co Outras propriedades esto sendo apresentadas (legitimidade e autenticidade) na mea dida em que o uso de transaes comerciais em todo o mundo, atravs de redes eletrnicas co e o (pblicas ou privadas) se desenvolve. u
Condencialidade - propriedade que limita o acesso a informao to somente `s ca a a entidades leg timas, ou seja, `quelas autorizadas pelo proprietrio da informao. a a ca Integridade - propriedade que garante que a informao manipulada mantenha ca
267
CAP ITULO 21. EXERC ICIOS PRATICOS: 024 -DVS todas as caracter sticas originais estabelecidas pelo proprietrio da informao, ina ca cluindo controle de mudanas e garantia do seu ciclo de vida (nascimento, manuteno c ca e destruio). ca
Disponibilidade - propriedade que garante que a informao esteja sempre dispon ca vei para o uso leg timo, ou seja, por aqueles usurios autorizados pelo proprietrio da a a informao. ca
Mecanismos de segurana O suporte para as recomendaes de segurana pode ser c co c encontrado em:
Controles f sicos: so barreiras que limitam o contato ou acesso direto a informao a ca ou a infra-estrutura (que garante a existncia da informao)que a suporta. e ca
Existem mecanismos de segurana que apiam os controles f c o sicos: Portas / trancas / paredes / blindagem / guardas / etc ..
Controles lgicos: so barreiras que impedem ou limitam o acesso a informao, o a ca que est em ambiente controlado, geralmente eletrnico, e que, de outro modo, a o caria exposta a alterao no autorizada por elemento mal intencionado. ca a
Existem mecanismos de segurana que apiam os controles lgicos: c o o Mecanismos de encriptao. Permitem a transformao revers ca ca vel da informao de forma a torn-la inintelig ca a vel a terceiros. Utiliza-se para tal, algoritmos determinados e uma chave secreta para, a partir de um conjunto de dados no encriptados, produzir uma sequncia de dados encriptados. A a e operao inversa a desencriptao. ca e ca Assinatura digital. Um conjunto de dados encriptados, associados a um documento do qual so funo, garantindo a integridade do documento associado, a ca mas no a sua condencialidade. a Mecanismos de garantia da integridade da informao. Usando funes de ca co Hashingou de checagem, consistindo na adio. ca Mecanismos de controle de acesso. Palavras-chave, sistemas biomtricos, ree walls, cartes inteligentes. o Mecanismos de certicao. Atesta a validade de um documento. ca Integridade. Medida em que um servio/informao genuino, isto , esta c ca e e protegido contra a personicao por intrusos. ca Existem duas losoas por trs de qualquer pol a tica de segurana: a proibitiva (tudo c que no expressamente permitido proibido) e a permissiva (tudo que no proibido a e e a e permitido). e Integridade
erros poss veis em digitao ca
Pela simples anlise do DV poss detectar grande parte dos erros acima dea e vel scritos.
A funo mais usada MOD, j que uma funo de mo unica. (no tem inversa) ca e a e ca a a Por exemplo DOBRO de 2 4. Logo A METADE de 4 2. J 8 MOD 7 1. Mas e e a e no poss determinar x em X mod 7 = 1. x pode ser 8, 22, 29,... a e vel
Exemplos UPC=Cdigo de produto universal E o cdigo de barras que encontramos nos o o produtos do supermercado. As 3 primeiras posies do cdigo indicam o pa de produo co o s ca do bem. Neste caso, o Brasil 789. e O ultimo d gito (0 13o ) assim obtido: 1. Soma-se os d e gitos que ocupam posies co mpares (1, 3, 5...) e multiplica-se o resultado por 3. 2. Soma-se os d gitos que ocupam posies pares, e soma-se este resultado ao da etapa anterior 3. Subtrai-se o resultado co do prximo mltiplo de 10. O resultado o DV. o u e Sejam exemplos de um recipiente de tinta de carimbo, marca Japan Stamp. Seu cdigo 7898076820584. o e Calcule e ache o resultado correto (4). Outro exemplo, um tubo de cola Tenaz. Seu cdigo 7891200304295. o e Note-se que `s vezes, a indstria procede diferente. Ao invs do cdigo do produto a u e o ocupar as posies 4 a 12, sendo o DV a posio 13, o cdigo do produto passa a ocupar co ca o as posies 5 a 13, e o DV (de maneira a que o ultimo d co gito do produto na posio 13) ca seja correto, o 5 d gito convenientemente estabelecido. e ISBN 10 (International Standard Book Number) O ultimo d gito da srie de 10 e do ISBN o DV. Ele calculado de maneira a que multiplicando cada d e e gito do cdigo o pela sua posio (comeando da direita e em 1) e somando tudo, o resto desta soma por ca c 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 240. e Dividindo 240 por 11 tem-se 21.8, e portanto o prximo inteiro divis por 11 11 o vel e vezes 22, que 242. e Fazendo-se 242-240=2 que o DV procurado. e O ISBN 13 (em uso a partir de Janeiro de 2007) gera seu d gito da mesma maneira que o UPC. Cdigos de carto de crdito Usa-se o algoritmo de Luhn, (Hans Peter Luhn, o a e funcionrio da IBM, 1896-1964), tambm conhecido como mdulo 10, foi desenvolvido a e o nos anos 60, como um mtodo para validar cdigos. Ele usado nos nmeros de carto e o e u a de crdito e no cdigo de seguro social do Canad. O algoritmo de dom e o a e nio pblico. u Ele protege contra o erro acidental e no contra o ataque malicioso. a Comeando com o d c gito mais a direita (que o DV), dobre o valor dos d e 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=161+6=7). Some todos os d gitos juntos. Por exemplo, 1111 vira 2121 ento 2+1+2+1 6. J a e a 8763 torna-se 7733, ento 7+7+3+3 20. a e Se o total termina em zero ( mltiplo de 10) o cdigo completo vlido de acordo e u o e a com a frmula de Luhn, seno no . Ento 1111 no vlido enquanto 8763 . o a a e a a e a e
verso de 10 de fevereiro de 2008 a
269
CAP ITULO 21. EXERC ICIOS PRATICOS: 024 -DVS Para testar o algoritmo de Luhn, calcule o DV do carto 4931 4701 2604 479?. A a resposta deve ser 2. Este algoritmo tambm usado no sistema bancrio da Noruega, no cdigo ISSN e e a o (peridicos), no nmero de identicao do ve o u ca culo em alguns estados americanos, no carto de identicao de israelenses e no Yugoslav Unique Master Citizen Number a ca (JMBG). Cdigo de barras da FEBRABAN Este cdigo est presente no sistema bancrio o o a a brasileiro e ele permite o intercmbio de pagamentos entre os bancos (ou seja, um t a tulo de um banco pode ser pago em qualquer outro, at o vencimento). e Alm do cdigo de barras, adequado para uma leitura mecnica, existe um cdigo e o a o numrico, que contm as mesmas informaes, mas no na mesma ordem. Note-se e e co a tambm que os d e gitos vericadores s aparecem no cdigo numrico a digitar, mas no o o e a no cdigo de barras. Aqui eles so desnecessrios. o a a O cdigo numrico formado por 5 campos. O primeiro, de 10 d o e e gitos formado e pelo cdigo do banco (3 posies, B1 , B2 , B3 ), cdigo da moeda (9=real, M4 ), e pelas o co o posies L20 , L21 ,L22 ,L23 ,L24 do contedo livre (rea do cliente), alm de um DV obtido co u a e pelo mtodo de base 10. e O segundo campo contendo 11 d gitos formado pelo conjunto L25 ,...,L34 alm de e e um novo DV base 10. O terceiro campo contendo 11 d gitos formado pelo conjunto L35 ,...,L44 alm de e e um novo DV base 10. O quarto campo o DV do conjunto completo, calculado com o d e gito 11 e pesos 2345678923... onde o 2 inicial corresponde ao caracter mais ` direita. Nesta represena taao ele o D5 . c e Finalmente, o quinto campo formado por 14 d e gitos, sendo os 4 primeiros o fator de vencimento (dias decorridos desde 07/10/1997) at o dia de vencimento, ou seja F6 , e 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 cdigo de barras, apresenta os dados na ordem em que eles foram apresentados o 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 . Alm destes sinais, o cdigo de barra comea por um start e termina e o c por um stop. Este cdigo o chamado entrelado 5-2, j que os d o e ca a gitos so calculados a de 5 em 5 sinais, e tanto as barras quanto os espaos so usados para o reconhecimento. c a No clculo do DV mod 11, ao subtrair 11 menos o resto da diviso, se a resposta for a a 0, 1 ou maior do que 9, o d gito vericador 1. e O que obliterao ? e ca
- 2 Na acepo 2 do Aurlio, obliterar destruir, eliminar, suprimire sobre isto que ca e e e nos fala esta histria. Quantas vezes ao escrever uma palavra qualquer no micro ecreveo mos (ateno reviso: ecrevemos e no escrevemos) errado ? Voc acabou de ver uma ca a e a e obliterao, algum (meus dedos ?) sumiu com a letra sde escrevemos. ca e Isto comum quando o pensamento mais rpido que os dedos que digitam, isto quase e e a e 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 obliteraes so em geral descobertas e co a corrigidas. Quando o texto muito importante, comum pedir-se a outra pessoa que faa a e e c reviso, j que muitos erros cometidos pelo digitador no podem ser facilmente descobertos a a a por esse mesmo revisor. H necessidade de um terceiro. a So cuidados m a nimos para no pagar mico, e na sua falta, o implacvel impondervel a a a sempre d as suas caras, como vai-se ver a seguir. a
88-08, Pedro Kantek
270
CAP ITULO 21. EXERC ICIOS PRATICOS: 024 -DVS A cena o exame nal do curso de informtica em uma universidade bem conceituada e a de Curitiba. Nesse curso, os alunos para se formarem precisam construir um software desde a sua concepo at sua operao sem nenhum erro grave. Eles tm 1 ano para essa ca e ca e tarefa e acreditem-me, geralmente pouco tempo. e H alguns anos, uma equipe estava na ultima banca para aprovao. Ns chamamos esta a ca o banca de magna, pois por ser a ultima composta por todos os professores orientadores, e que naquele ano eram em nmero de 9. A equipe em questo era formada por 3 alunas, u a bonitas, charmosas e tambm competentes, no esqueamos de armar. e a c Estavam as 3 nervosas, roendo os dedos que as unhas j haviam acabado, numa espera a imensa e infernal quando chegou a vez delas: Entraram na sala, instalaram o software, os micros, eram 3 que aquilo rodava em rede, o canho, enm todas essas parafernlias que a a todos to bem conhecemos. a Rolava a apresentao, sem maiores problemas, o que por s s j devia ser srio ind ca o a e cio de que alguma coisa grave ia acontecer, essas coisas nunca rolam sem maiores problemas, quando... Mostrou-se uma transparncia imensa cujo t e tulo era processamento de pedidos , anal o software era para automatizar uma pequena lojinha de bairro. Nessa hora a obliterao (a maldita) introduziu-se na histria. O digitador (o maldito) ca o esquecera-se de digitar, obliterara uma letra no t tulo. Maior gravidade no haveria se fosse a qualquer letra, mas qual o qu: a letra roubada fora a terceira letra da terceira palavra, as e alunas estavam apresentando uma transparncia onde em letras garrafais se dizia processae mento de peidos. No preciso descrever como terminou a banca. Apenas informo que as alunas foram a aprovadas, o software estava muito bom. Pedro Kantek Os principais mtodos usados: e
21.1.1
Mdulo 10 o
Separe os d gitos do cdigo a processar. Ex: se o cdigo 13865, tem-se d1 = 1, o o e d2 = 3, d3 = 8, d4 = 6 e d5 = 5. Crie um vetor de pesos P, com o mesmo nmero de d u gitos, e contendo 2 e 1, comeando com 2 e alternando. Ex: p1 = 2, p2 = 1, p3 = 2, p4 = 1, p5 = 2. c Multiplique os dois vetores, tirando NOVES FORA em cada multiplicao. Ex: ca 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 multiplicao. Ex:2 + 3 + 7 + 6 + 1 = 19 ca O que faltar para completar a prxima dezena ser o DV mod 10. No exemplo, o o a que falta a 19 para completar 20 1. Logo DV = 1. e Obs: 1: noves fora: se x > 9, x x 9 ; 2:se deu a dezena, a resposta 0. e
21.1.2
Mdulo 11 o
Separe os d gitos. Crie vetor P. O menor peso 2, alocado ao d e gito mais a direita. A seqncia de ue pesos cresce para a esquerda. Ex: 7, 6, 5, 4, 3, 2. A lei de formao destes pesos ca PODE VARIAR em cada mtodo. e O DV = 11 resto da soma dividido por 11.
verso de 10 de fevereiro de 2008 a
271
Letra Chave Este mtodo tem como resposta uma letra e no um d e a gito.
Separe os d gitos e crie um vetor de pesos adequado. Some e ache o resto de uma diviso por 26. a A LC obtida pela equivalncia: R = 0, LC = A; R = 1, LC = B; ... R = e e 25,LC = Z.
21.1.3
a) So 2 DVs. a b) O primeiro calculado pelo MOD 11, com pesos = 10, 9, 8, 7, 6, 5, 4, 3, 2. e c) O DV calculado colocado no seu lugar e o processo refeito, agora com os pesos: e 11, 10, 9, 8, 7, 6, 5, 4, 3, 2. d) O segundo d gito colocado no seu lugar. e Obs: O nono d gito de um CPF a regio onde foi criado. 6=MG, 7=ES/RJ, 8=SP, e a 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 diviso por 11 a tem como resto 4. Logo o primeiro DV 11 4 = 7. e Refazendo 111+710+69+28+97+46+35+34+83+72 = 303,cujo resto da diviso por 11 6. Assim, o DV 11 6 = 5. O CPF completo ca sendo a e e 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 999 999 999 - 99 e 000 000 000 - 00. e Veja se acerta: CPF = 357 432 754 . Resposta: 40. CPF = 247 212 764 . Resposta: 27.
21.1.4
a) So 3 DVs. a b) O DV1 ocupa a 8.posio do cdigo e um MOD 10 dos 7 d ca o e gitos iniciais. c) O DV2 ocupa a 13.posio e um MOD 11 de todos os anteriores com o vetor de ca e pesos = 543298765432. d) O DV3 ocupa a 14.posio e um MOD 11 de todos os ca e 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 o que falta para a prxima dezena, NESTE CASO 50, ou DV1=7. Com e o isso o primeiro cdigo : 76.483.817. Continuando: o e A lial 0001, e ca: 76.483.817/0001. e O DV2 igual a: = 7 5 + 6 4 + 4 3 + 8 2 + 3 9 + 8 8 + 1 7 + 7 6 + e 0 5 + 0 4 + 0 3 + 1 2 = 229. O DV2 11 menos o resto de 229 por 11 que 2. e e DV3=76+65+44+83+32+89+18+77+06+05+04+13+22 = 254. O resto de 254 dividido por 11 1, logo o DV3=11-1=10 ou zero. Assim, o CNPJ e completo da COPEL : 76.483.817/0001-20. e
88-08, Pedro Kantek
272
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. Observao: Alguns CNPJs inexplicavelmente no seguem o aqui escrito. Aparenteca a mente foram criados antes da regra. Por exemplo, o CGC da Light: 66 444 437/0001-46.
21.2
Exerc cio 1
3= 7 4 7 7 8 3 4 4= 8 1 6 0 4 0 0
/0094/0069-
. .
Exerc cio 2
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 3= 3 0 6 8 0 0 2 4= 5 2 1 3 4 8 6
. . /0005/0099. .
Exerc cio 3
Calcule os d gitos dos Cadastros de Pessoa F sica:
1= 5 5 2 9 5 1 3 3 4 2= 4 3 1 7 3 8 3 0 2 3= 5 6 5 2 2 6 4 4= 2 4 8 7 9 6 3
. . /0045/0042. .
Exerc cio 4
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 3= 8 0 9 9 4 8 2 4= 9 8 8 2 7 6 7
. . /0093/0059. .
Exerc cio 5
Calcule os d gitos dos Cadastros de Pessoa F sica:
. 273
88-08, Pedro Kantek
Exerc cio 6
Calcule os d gitos dos Cadastros de Pessoa F sica:
1= 4 9 6 9 5 5 5 0 2 2= 8 5 3 7 8 0 6 4 3 3= 6 1 5 6 4 0 3 4= 3 4 8 9 2 5 7
. . /0041/0002. .
Exerc cio 7
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 3= 6 6 9 5 0 0 3 4= 3 3 9 7 7 2 1
. . /0005/0003. .
Exerc cio 8
Calcule os d gitos dos Cadastros de Pessoa F sica:
1= 5 2 2 8 4 2 5 3 4 2= 6 8 2 9 1 8 2 0 6 3= 7 2 0 8 7 2 7 4= 6 0 1 1 5 1 5
. . /0006/0028. .
Exerc cio 9
Calcule os d gitos dos Cadastros de Pessoa F sica:
1= 8 0 5 4 5 2 6 7 3 2= 8 1 5 9 7 1 9 3 1 3= 6 0 8 8 8 3 2 4= 9 2 6 9 8 9 4
. . /0005/0086. .
Exerc cio 10
Calcule os d gitos dos Cadastros de Pessoa F sica:
1= 4 5 1 2 4 4 4 0 2 2= 4 1 7 0 9 9 8 8 6 -
. .
274
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
275
276
Cap tulo 22
A aritmtica, tal como a conhecemos, no sofre nenhuma mudana conceitual ou operae a c cional se passarmos a usar bases no decimais. O sistema de numerao usado, desde a ca que posicional, funciona legal. Para as operaes a seguir, considere um conjunto de d co gitos sujeito as seguintes regras: 1. O primeiro digito sempre ZERO. e 2. Existem tantos d gitos quanto o valor da base. e 3. Se forem necessrios mais de 10 d a gitos, o 11o ser a letra A, o 12o a letra B e a o assim por diante at o 36 d e gito que ser o Z. a Na soma individual, d gito a d gito, a regra simples: se a soma for maior que a base, e retira-se uma base do total e vai um... Na subtrao individual, d ca gito a d gito, se o nmero a subtrair maior do que o u e nmero do qual vai ser feita a subtrao, empresta-se uma base do vizinho esquerdo. u ca Exemplos: 27(10) + 45(10) = + 2 7 4 5 ----7 2
Como 7 + 5 = 12 e 12 maior do que a base, subtrai-se uma base (10) e o resultado e e 2, e vai um. A resposta nal 72. e 94(10) - 59(10) = 9 4 5 9 ----3 5 Como 4 9 no pode ser feito (pois 9 > 4), a soluo emprestar uma base do vizinho. a ca e Com isto, tem-se 4 + 10 = 14, e agora pode-se fazer 14 9, cujo resultado 5. e O um que foi emprestado do 9, deixa-o valendo apenas 8, e agora tem-se 8 5 = 3. O resultado nal 35. e Para facilitar, use a seguinte tabela: 277
CAP ITULO 22. EXERC ICIOS PRATICOS: 027 - ARITMETICA NAO DECIMAL 0..9 A B C D = = = = = 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 converses e as operaes solicitadas: o co 1. Conversoes de Base Q para base 10 00122(18) = ________________________(10) 000O7(32) = ________________________(10) 00510(12) = ________________________(10) 001C4(24) = ________________________(10) 02120(07) = ________________________(10) 2. Conversoes de base 10 para base Q 00868(10) = ________________________(22) 00772(10) = ________________________(18) 00642(10) = ________________________(21) 00703(10) = ________________________(09) 00232(10) = ________________________(25) 3. Somas em base diferente de 10 01402(06) + 01113(06) = ________________(06) 01343(05) + 01104(05) = ________________(05) 001A1(15) + 001B9(15) = ________________(15) 0013I(22) + 00103(22) = ________________(22) 000I2(19) + 00138(19) = ________________(19) 4. Subtraoes em base diferente de 10 c 00176(18) - 00128(18) = ________________(18) 00297(12) - 00181(12) = ________________(12) 000LF(26) - 000GP(26) = ________________(26) 000DD(27) - 00080(27) = ________________(27)
88-08, Pedro Kantek
278
CAP ITULO 22. EXERC ICIOS PRATICOS: 027 - ARITMETICA NAO DECIMAL
22.1.1
Programa VISUALG
A seguir um programa escrito em VISUALG que resolve as adies e subtraes em co co bases no decimais. Note-se que o programa no faz nenhuma consistncia, e se algum a a e erro aparecer, o programa abortar. Eis alguns dos poss a veis erros:
Usar nmeros de comprimento maior que 9 d u gitos Usar bases maiores do que 36 Escrever operaes de subtrao cujo resultado seja negativo co ca Incluir caracteres diferentes de 0..Znos operandos Usar operaes diferentes de + e co Usar espaos em branco entre os d c 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 <- 1 enquanto (copia(let;k,1) <> ind) faca k <- k + 1 fimenquanto retorne k fimfuncao inicio let <- "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" escreval ("Soma e subtracao de numeros de base qualquer - v.1.1 - P.kantek - ago/07") escreval ("escreva o operador 1: ") leia (c1) escreval ("mais (+) ou menos (-) ? ") leia(sinal) escreval ("escreva o operador 2: ") leia (c2) escreval ("a base: ") leia(b)
279
CAP ITULO 22. EXERC ICIOS PRATICOS: 027 - ARITMETICA NAO DECIMAL i <- compr(c1) j <- 10 enquanto (i >= 1) faca op1[j] <- achaind (copia(c1;i,1)) - 1 i <- i - 1 j <- j - 1 fimenquanto i <- compr(c2) j <- 10 enquanto (i >= 1) faca op2[j] <- achaind (copia(c2;i,1)) - 1 i <- i - 1 j <- j - 1 fimenquanto se sinal = "+" entao i <- 10 enquanto (i>=1) faca Se (op1[i] + op2[i]) >= b entao res[i] <- op1[i] + op2[i] - b op1[i-1] <- op1[i-1] + 1 senao res[i] <- op1[i] + op2[i] fimse i <- i - 1 fimenquanto senao i <- 10 enquanto (i>=1) faca Se op1[i]<op2[i] entao res[i] <- b + op1[i] - op2[i] op1[i-1] <- op1[i-1] - 1 senao res[i] <- op1[i] - op2[i] fimse i <- i - 1 fimenquanto fimse para i de 1 ate 10 faca escreva (copia(let;(res[i]+1),1)) fimpara fimalgoritmo Algoritmo de converso de base qualquer para base 10 a algoritmo "convers~oQ10" a var c1 : caracter b : inteiro op1 : vetor [1..10] de inteiro let : caracter i, j : inteiro resu : real funcao achaind (ind:caracter) : inteiro
88-08, Pedro Kantek
280
CAP ITULO 22. EXERC ICIOS PRATICOS: 027 - ARITMETICA NAO DECIMAL var k : inteiro inicio k <- 1 enquanto (copia(let;k,1) <> ind) faca k <- k + 1 fimenquanto retorne k fimfuncao inicio let <- "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" escreval ("Conversao de numeros de base qualquer para base 10 - v.1.1 - P.kantek - ago/07") escreval ("escreva o valor a converter ") leia (c1) escreval ("a base: ") leia(b) i <- compr(c1) j <- 10 enquanto (i >= 1) faca op1[j] <- achaind (copia(c1;i,1)) - 1 i <- i - 1 j <- j - 1 fimenquanto resu <- 0 para i de 1 ate 10 faca resu <- resu + op1[i] * b ^ (10-i) fimpara escreva (resu) fimalgoritmo Algoritmo de converso de base 10 para base qualquer a algoritmo "convers~o10Q" a var c1 : inteiro b : inteiro op1 : vetor [1..10] de inteiro let : caracter i : inteiro resto : inteiro funcao achaind (ind:caracter) : inteiro var k : inteiro inicio k <- 1 enquanto (copia(let;k,1) <> ind) faca k <- k + 1 fimenquanto retorne k fimfuncao inicio let <- "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
verso de 10 de fevereiro de 2008 a
281
CAP ITULO 22. EXERC ICIOS PRATICOS: 027 - ARITMETICA NAO DECIMAL escreval ("Conversao de numeros de base 10 para base qualquer - v.1.1 - P.kantek - ago/07") escreval ("escreva o valor a converter ") leia (c1) escreval ("a base: ") leia(b) resto <- 1 i <- 10 enquanto (resto <> 0) faca resto <- c1 mod b op1[i] <- resto c1 <- c1 div b i <- i - 1 fimenquanto para i de 1 ate 10 faca escreva (copia(let;(op1[i]+1),1)) fimpara fimalgoritmo
22.2
460 A3
Exerc cio 1
(15) = (27) =
= =
(11) (12)
+ GN
(29)
= =
(29) (19)
+ 1A6
(19)
- F8 - I0
(17) (20)
= =
(17) (20)
282
CAP ITULO 22. EXERC ICIOS PRATICOS: 027 - ARITMETICA NAO DECIMAL
22.3
Exerc cio 2
= =
(13) (32)
+ 7F + 7A
(22) (29)
= =
(22) (29)
- 151 - 172
(13) (11)
= =
(13) (11)
22.4
Exerc cio 3
= =
(13) (30)
283
CAP ITULO 22. EXERC ICIOS PRATICOS: 027 - ARITMETICA NAO DECIMAL 3. Somas em base diferente de 10 7J
(24)
+ D3
(24)
= =
(24) (14)
152
(14)
+ 180
(14)
- 173
(18)
(18) (25)
(25)
- BG
(25)
22.4.1
Respostas
13R 2G9 181 Q3 KM 2D2 5C 8C 6F 5A 93 7M
1 990 273 738 410 2 985 1175 573 9V 3 883 516 483 72
284
Cap tulo 23
Srie de algoritmos e truques para calcular dias de semana e datas de feriados mveis e o em nosso calendrio. a
23.1.1
O algoritmo seguinte devido ao astrnomo napolitano Aloysius Lilius e ao matemtico e o a alemo e jesuita Cristopher Clavius. Escrito no sculo XVI usado pelas igrejas ocia e e dentais para calcular o dia do domingo de Pscoa. Existiram outros algoritmos antes a deste. Por exemplo o Canon Paschalis devido a Victorius de Aquitania escrito em cerca de 450 a.C. Dada uma data no formato dia, mes, ano (onde ano > 1587), calcula-se o dia da semana usando a seguinte formulao: ca A ((12 mes) 10) B ano A C mes + (12 A) D (B 100) E (D 4) F E+2D G (365.25 B) H (30.6001 (C + 1)) I F + G + H + dia + 5 R I mod 7 Se R = 0, dia, mes, ano sbado, R = 1 domingo, R = 2 segunda, R = 3 tera e a e e e c R = 4 quarta, R = 5 quinta e R = 6 sexta-feira. e e e Exemplo: Calculemos o dia da semana de hoje, / / 285
dia
CAP ITULO 23. EXERC ICIOS PRATICOS: 031 - MANIPULACAO DE DATAS A B C D E como R = F G H I R , o dia em questo a e .
23.1.2
Os 3 feriados mveis (tera de carnaval, sexta feira santa e Corpus Christi) so baseados o c a todos no dia do domingo de Pscoa. Portanto, a primeira coisa a fazer calcular em a e que dia cai a Pscoa. a Dado um ano com quatro digitos (maior que 1587), a Pscoa : a e A ano mod 19 B (ano 100) C ano mod 100 D (B 4) E B mod 4 F (B + 8) 25 G (1 + B F ) 3 H ((19 A) + B + 15 (D + G)) mod 30 I (C 4) K C mod 4 L (32 + (2 E) + (2 I) (H + K)) mod 7 M ((A + (11 H) + (22 L)) 451) P ((H + L + 114 (7 M )) 31) Q (H + L + 114 (7 M )) mod 31 A Pscoa o dia Q+1 do ms P. a e e
23.1.3
Bissexto
A regra do bissexto pode ser assim descrita: sejam R4 resto da diviso do ano por 4 a R100 resto da diviso do ano por 100 e a R400 resto da diviso do ano por 400. a SE R4=0 ((R100 = 0) (R400 = 0)) o ano bissexto seno no . e a a e Outra maneira de descrever o algoritmo usando SEs encadeados e 1: se (ANO mod 400) = 0 ento a 2: ... bissexto e 3: seno a 4: se (ANO mod 100) = 0 ento a e 5: ... NAO bissexto 6: seno a 7: se (ANO mod 4) = 0 ento a 8: ... bissexto e 9: seno a e 10: NAO bissexto 11: mse 12: mse
88-08, Pedro Kantek
286
CAP ITULO 23. EXERC ICIOS PRATICOS: 031 - MANIPULACAO DE DATAS mse Se lembrarmos que os dias de cada ms so 31, (28/29), 31, 30, 31, 30, 31, 31, 30, e a 31, 30, 31. A partir daqui pode-se criar um vetor auxiliar VA com os seguintes valores V A 1, 32, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335 (anos no bissextos) ou a V A 1, 32, 61, 92, 122, 153, 183, 214, 245, 275, 306, 336 (anos bissextos) e calcularmos dc V A[P ] + Q ento dc o dia absoluto a partir de 1/janeiro desse ano. a e A Sexta feira santa dc 2, o carnaval dc 47 e Corpus Christi dc + 60 Note e e e que os dias da semana sempre sero sexta, tera e quinta respectivamente. a c dccarn dc 47, dcsexs dc 2 e dccorp dc + 60 O ms de cada uma dessas datas, deve ser lido em VA vis-a-vis o valor de dcxxxx. e Assim, se dcxxxx 94, essa data corresponde a 4/abril, para um ano no bissexto. e a Mais formalmente: A passagem de dd,mm,aa para dc dc = V A[mes] + dia 1. A e passagem de dc para dd,mm,aa : O dia corresponde a dc MENOS o maior elemento e de VA menor ou igual a dc MAIS 1. Por exemplo, se dc 100 e VA 1 32 60 91 121... e e o dia ser (100-91)+1= dia 10. O ms, por sua vez, corresponde ao a e ndice do elemento acima.
13:
23.2
Exerc cio 1
(0=sab, 1=dom,...6=sex)
1. Calcule dia da semana do dia 25/10/2112 e informe: 2. Calcule o Carnaval de 2112 E o Corpus-Christi de 2112 / /
23.3
Exerc cio 2
(0=sab, 1=dom,...6=sex)
1. Calcule dia da semana do dia 28/ 2/1605 e informe: 2. Calcule o Carnaval de 1605 E o Corpus-Christi de 1605
verso de 10 de fevereiro de 2008 a
/ / 287
88-08, Pedro Kantek
23.4
Exerc cio 3
(0=sab, 1=dom,...6=sex)
1. Calcule dia da semana do dia 21/ 7/1893 e informe: 2. Calcule o Carnaval de 1893 E o Corpus-Christi de 1893 / /
23.5
Exerc cio 4
(0=sab, 1=dom,...6=sex)
1. Calcule dia da semana do dia 10/ 7/2143 e informe: 2. Calcule o Carnaval de 2143 E o Corpus-Christi de 2143 / /
23.6
Exerc cio 5
(0=sab, 1=dom,...6=sex)
1. Calcule dia da semana do dia 20/12/2131 e informe: 2. Calcule o Carnaval de 2131 E o Corpus-Christi de 2131 / /
23.7
Exerc cio 6
(0=sab, 1=dom,...6=sex)
1. Calcule dia da semana do dia 17/10/2180 e informe: 2. Calcule o Carnaval de 2180 E o Corpus-Christi de 2180 / /
23.8
Exerc cio 7
(0=sab, 1=dom,...6=sex)
1. Calcule dia da semana do dia 11/ 4/2114 e informe: 2. Calcule o Carnaval de 2114 E o Corpus-Christi de 2114 / /
23.9
Exerc cio 8
(0=sab, 1=dom,...6=sex)
1. Calcule dia da semana do dia 16/ 7/1941 e informe: 2. Calcule o Carnaval de 1941 E o Corpus-Christi de 1941
88-08, Pedro Kantek
/ / 288
verso de 10 de fevereiro de 2008 a
23.10
Exerc cio 9
(0=sab, 1=dom,...6=sex)
1. Calcule dia da semana do dia 20/ 6/1884 e informe: 2. Calcule o Carnaval de 1884 E o Corpus-Christi de 1884 / /
23.11
Exerc cio 10
(0=sab, 1=dom,...6=sex)
1. Calcule dia da semana do dia 29/10/1999 e informe: 2. Calcule o Carnaval de 1999 E o Corpus-Christi de 1999 / /
23.12
1 2 3 4 5 6 7 8 9 10 3 2 6 4 5 3 4 4 6 6
Respostas
(tera) c (segunda) (sexta) (quarta) (quinta) (tera) c (quarta) (quarta) (sexta) (sexta) 1/3/2112 22/2/1605 14/2/1893 12/2/2143 27/2/2131 29/2/2180 6/3/2114 25/2/1941 26/2/1884 16/2/1999 16/6/2112 9/6/1605 1/6/1893 30/5/2143 14/6/2131 15/6/2180 21/6/2114 12/6/1941 12/6/1884 3/6/1999
289
290
Cap tulo 24
Suponha que voc tem um terreno de 100 km 100 km contendo um certo nmero de e u poos de petrleo. O terreno ir ser atravessado integralmente por um duto mestre, c o a ao qual iro se ligar (sempre de maneira transversal, isto , fazendo 90 graus) ramais a e auxiliares que conectaro cada um dos poos ao duto mestre. a c
O objetivo do exerc descobrir por onde dever passar o duto mestre, de maneira cio e a a minimizar a quantidade de duto auxiliar necessrio. O duto mestre sempre ser instaa a lado no sentido NORTE-SUL ou no LESTE-OESTE, conforme explicitado no exerc cio. Outra coisa que voc deve calcular a quantidade de duto auxiliar necessrio (medido e e a em kilmetros). o Os poos sero identicados pelas suas coordenadas (x, y), sendo que a origem dos c a ndices, o ponto 0, 0, estar localizado no canto inferior esquerdo do terreno. A primeira a medida de cada poo (o x) indicar a distncia no sentido leste-oeste e o segundo nmero c a a u (o y) indicar a distncia no norte-sul. a a Assim, se um poo estiver nas coordenadas (12,78), ele se encontrar 12 metros ` c a a direita da origem e 78 metros acima da mesma origem. Veja-se o seguinte exemplo: Suponha-se a seguinte ditribuio de poos: ca c x 11 10 17 5 16 13 1 26 15 y 9 26 19 14 22 20 12 4 25 291
CAP ITULO 24. EXERC ICIOS PRATICOS: 035 - LOCALIZACAO DE OLEODUTO Supondo que o duto principal deva ser extendido no sentido leste-oeste, em qual ordenada ele deveria estar ? Proposta de soluo ca 1. Como o sentido leste-oeste, podem-se desprezar as abcissas. e 2. Ficando apenas com as ordenadas, tm-se: 9, 26, 19, 14, 22, 20, 12, 4, 25. e 3. Deslocando a origem dos indices, a m de diminuir o trabalho braal por meio de c uma translao, ca: 5, 22, 15, 10, 18, 16, 8, 0, 21 ca 4. E razovel se supor que o duto esteja entre o ponto 0 e o ponto 22. Na realidade, a entre 4 e 26, antes da translao. ca 5. Para descobrir onde deve passar suponha-o localizado em cada um dos 9 poos e c mea a quantidade de duto auxiliar necessrio. Neste caso temos: 80, 83, 54, 59, 61, 55, 65, 115, 76 c a 6. Como se pode ver o menor valor de 54 km, correspondendo ` ordenada 19, do e a terceiro poo. c 7. A resposta esperada, portanto 54,19, signicando que so necessrios 54m de e a a duto auxiliar e que o duto principal deve estar entre os pontos 0,19 e 100,19. Se o mesmo valor m nimo for encontrado para 2 poos, a resposta dever ser a mdia c a e entre as duas ordenadas. Por exemplo, no problema x y 19 13 10 12 4 17 1 5 7 23 18 20 8 16 21 11
Percebe-se que as distncias m a nimas so: 35, 37, 37, 77, 67, 49, 35, 41 que correspona dem aos poos 1 e 7. Com isso, a ordenada do duto principal deve ser a mdia das duas c e ordenadas dos poos: 13 + 16 = 29 2 = 14.5 km. A resposta deveria ser 35, 14.5. c Lembrando, o valor 35 corresponde a quantidade de duto auxiliar necessria. a Observaes co Lembre que se o duto principal estiver na direo norte-sul, vale o mesmo racioc ca nio visto acima, apenas mudando ordenadas por abcissas, e desprezando-se o segundo nmero das coordenadas de cada poo. u c Finalmente, o algoritmo aqui esboado, a quem poder c amos chamar de fora bruta, c funciona e apresenta o resultado correto. Entretanto voc livre para procurar outro ee algoritmo que seja mais eciente, (mas que funcione tambm, claro.) e e
24.2 24.3
x y
Suponha o duto principal no eixo L-W . Os poos se encontram nas seguintes posies: c co
Para este caso, a metragem de duto auxiliar de e e a posio do duto principal deve ser ca .
88-08, Pedro Kantek
292
CAP ITULO 24. EXERC ICIOS PRATICOS: 035 - LOCALIZACAO DE OLEODUTO Mais, um: Suponha o duto principal no eixo N-S . Os poos se encontram nas seguintes posies: c co x y 20 6 1 3 2 21 10 18 9 11 5 27 16 15 13 17 24 8
Para este caso, a metragem de duto auxiliar de e e a posicao do duto principal deve ser . Este exerc cio foi adaptado de CORMEN, T. et alli, Algoritmos, pg 155 (edio a ca brasileira).
24.4
Exerc cio 2
Suponha o duto principal no eixo N-S . Os poos se encontram nas seguintes posies: c co x y 16 15 5 2 14 22 24 8 23 18 1 3 6 19 21 10
Para este caso, a metragem de duto auxiliar de e e a posio do duto principal deve ser ca .
Mais, um: Suponha o duto principal no eixo L-W . Os poos se encontram nas seguintes posies: c co x y 19 18 5 8 2 17 14 7 20 16 21 27 23 22 9 3 15 11
Para este caso, a metragem de duto auxiliar de e e a posicao do duto principal deve ser .
24.5
Exerc cio 3
Suponha o duto principal no eixo N-S . Os poos se encontram nas seguintes posies: c co x y 13 24 1 5 19 11 10 23 12 14 3 18 22 2 4 15 20 7
Para este caso, a metragem de duto auxiliar de e e a posio do duto principal deve ser ca .
Mais, um: Suponha o duto principal no eixo L-W . Os poos se encontram nas seguintes posies: c co x y 23 16 10 14 17 27 18 25 2 26 20 8 22 13 30 1 5 21 4 12
Para este caso, a metragem de duto auxiliar de e e a posicao do duto principal deve ser .
verso de 10 de fevereiro de 2008 a
293
24.6
1 2 3
Respostas
82.0 13.5 56.0 10.0 58.0 15.0 55.0 16.0 56.0 12.0 67.0 15.0
294
Cap tulo 25
Nos trechos de algoritmos a seguir, voc deve seguir a lgica de cada trecho descobrindo e o qual o valor que impresso ao nal. e
25.2
1.
1: 2: 3: 4:
Exerc cio 1
funo A11 ca X 15 enquanto X >8 faa c XX-4 5: menquanto 6: imprima X 7: mfuno ca
2.
1: 2: 3: 4: 5: 6: 7:
3.
1: 2: 3: 4: 5:
funo A32 ca X0 para Y de 5 a 19 passo 3 faa c XX+Y mpara 6: imprima X 7: mfuno ca funo A12 ca 295
4.
1:
CAP ITULO 25. EXERC ICIOS PRATICOS: 054 - KUMON DE ALGORITMOS X 14 Y4 enquanto X >7 faa c YY+3 XX-4 menquanto imprima Y 9: mfuno ca
2: 3: 4: 5: 6: 7: 8:
5.
1: 2: 3: 4: 5: 6:
funo A33 ca X5 para Y de 6 a 20 passo 3 faa c X X + Y +9 mpara imprima X ca 7: mfuno funo A13 ca X 20 Y 19 enquanto X > 4 faa c YY+X+3 XX-3 menquanto imprima Y mfuno ca funo A41 ca X3 Y2 se X > 5 ento a YY+X+4 seno a Y Y - (X + 12) mse imprima Y mfuno ca funo A22 ca X4 Y6 repita YY+2 XX+4 at X >17 e imprima Y mfuno ca funo A34 ca 296
verso de 10 de fevereiro de 2008 a
6.
1: 2: 3: 4: 5: 6: 7: 8: 9:
7.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
8.
1: 2: 3: 4: 5: 6: 7: 8: 9:
9.
1:
CAP ITULO 25. EXERC ICIOS PRATICOS: 054 - KUMON DE ALGORITMOS X5 para Y de 3 a 21 passo 3 faa c se (Y mod 2) = 0 ento a XX+Y+4 seno a XX+Y+1 mse 9: mpara 10: imprima X 11: mfuno ca
2: 3: 4: 5: 6: 7: 8:
10.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
funo A41 ca X4 Y4 se X > 8 Y>9 ento a YY+X+3 seno a Y Y - (X + 12 ) mse imprima Y mfuno ca funo A23 ca X6 Y9 repita YY+X+3 XX+2 at X 17 e imprima Y mfuno ca funo A11 ca X 18 enquanto X >5 faa c XX-3 menquanto imprima X mfuno ca funo A32 ca X1 para Y de 17 a 4 passo -3 faa c XX+Y mpara imprima X mfuno ca funo A21 ca 297
88-08, Pedro Kantek
11.
1: 2: 3: 4: 5: 6: 7: 8: 9:
12.
1: 2: 3: 4: 5: 6: 7:
13.
1: 2: 3: 4: 5: 6: 7:
14.
1:
X6 repita XX+4 at X >13 e imprima X mfuno ca funo A41 ca X3 Y4 se X 8 ento a YY+X+5 seno a Y Y - (X + 12) mse imprima Y mfuno ca
15.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
16.
1: 2: 3: 4: 5: 6: 7:
funo A13 ca X7 Y5 enquanto X 16 faa c YY+X+4 XX+4 menquanto 8: imprima Y 9: mfuno ca funo A33 ca X5 para Y de 3 a 17 passo 3 faa c XX+Y+5 mpara imprima X 7: mfuno ca
1 2 3 4 5 6
17.
1: 2: 3: 4: 5: 6:
10
11
12
Respostas
13 14 15 16 17
25.3
1.
1: 2:
Exerc cio 2
funo A11 ca X 19 298
verso de 10 de fevereiro de 2008 a
3.
1: 2: 3: 4: 5:
funo A32 ca X0 para Y de 3 a 18 passo 3 faa c XX+Y mpara 6: imprima X 7: mfuno ca funo A12 ca X4 Y4 enquanto X 18 faa c YY+2 XX+3 menquanto imprima Y mfuno ca
4.
1: 2: 3: 4: 5: 6: 7: 8: 9:
6.
1: 2: 3: 4: 5:
mfuno ca funo A41 ca X7 Y1 se X = 5 ento a YY+X+7 seno a Y Y - (X + 11) mse imprima Y mfuno ca
7.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
9.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
funo A34 ca X7 para Y de 4 a 19 passo 2 faa c se (Y mod 2) = 0 ento a XX+Y+5 seno a XX+Y+1 mse mpara imprima X mfuno ca funo A41 ca X1 Y6 se X = 4 Y<4 ento a YY+X+4 seno a Y Y - (X + 10) mse imprima Y mfuno ca funo A23 ca X 19 Y 19 300
verso de 10 de fevereiro de 2008 a
10.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
11.
1: 2: 3:
repita YY+X+4 XX-4 at X <10 e imprima Y mfuno ca funo A11 ca X9 enquanto X 13 faa c XX+2 menquanto imprima X mfuno ca
12.
1: 2: 3: 4: 5: 6: 7:
13.
1: 2: 3: 4:
15.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
funo A41 ca X1 Y2 se X > 2 ento a YY+X+5 seno a Y Y - (X + 12) mse imprima Y mfuno ca
16.
1: 2: 3: 4:
imprima Y mfuno ca funo A33 ca X4 para Y de 5 a 14 passo 3 faa c X X + Y +7 mpara imprima X mfuno ca
1 2 3 4 5 6
17.
1: 2: 3: 4: 5: 6: 7:
10
11
12
Respostas
13 14 15 16 17
25.4
1.
1: 2: 3: 4: 5: 6:
Exerc cio 3
funo A11 ca X6 enquanto X <17 faa c XX+4 menquanto imprima X 7: mfuno ca funo A21 ca X 18 repita XX-2 at X 7 e imprima X mfuno ca funo A32 ca X0 para Y de 3 a 18 passo 3 faa c XX+Y mpara imprima X mfuno ca funo A12 ca X 14 302
verso de 10 de fevereiro de 2008 a
2.
1: 2: 3: 4: 5: 6: 7:
3.
1: 2: 3: 4: 5: 6: 7:
4.
1: 2:
Y9 enquanto X 7 faa c YY+4 XX-4 menquanto imprima Y mfuno ca funo A33 ca X4 para Y de 5 a 14 passo 3 faa c XX+Y+9 mpara imprima X mfuno ca funo A13 ca X 15 Y 16 enquanto X 6 faa c YY+X+4 XX-2 menquanto imprima Y mfuno ca funo A41 ca X5 Y5 se X = 1 ento a YY+X+8 seno a Y Y - (X + 11) mse imprima Y mfuno ca funo A22 ca X 20 Y 14 repita YY+4 XX-4 at X <10 e imprima Y mfuno ca funo A34 ca X5 303
88-08, Pedro Kantek
5.
1: 2: 3: 4: 5: 6: 7:
6.
1: 2: 3: 4: 5: 6: 7: 8: 9:
7.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
8.
1: 2: 3: 4: 5: 6: 7: 8: 9:
9.
1: 2:
CAP ITULO 25. EXERC ICIOS PRATICOS: 054 - KUMON DE ALGORITMOS para Y de 4 a 16 passo 2 faa c se (Y mod 2) = 0 ento a XX+Y+4 seno a XX+Y+2 mse mpara 10: imprima X 11: mfuno ca
3: 4: 5: 6: 7: 8: 9:
10.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
funo A41 ca X1 Y7 se X 9Y<4 ento a YY+X+4 seno a Y Y - (X + 11) mse imprima Y mfuno ca funo A23 ca X 19 Y 18 repita YY+X+2 XX-2 at X < 9 e imprima Y mfuno ca funo A11 ca X7 enquanto X <13 faa c XX+3 menquanto imprima X mfuno ca funo A32 ca X0 para Y de 4 a 18 passo 3 faa c XX+Y mpara imprima X mfuno ca funo A21 ca X8 304
verso de 10 de fevereiro de 2008 a
11.
1: 2: 3: 4: 5: 6: 7: 8: 9:
12.
1: 2: 3: 4: 5: 6: 7:
13.
1: 2: 3: 4: 5: 6: 7:
14.
1: 2:
repita XX+4 at X >16 e imprima X mfuno ca funo A41 ca X7 Y6 se X > 9 ento a YY+X+9 seno a Y Y - (X + 12) mse imprima Y mfuno ca funo A13 ca X7 Y8 enquanto X 15 faa c YY+X+4 XX+4 menquanto imprima Y mfuno ca
15.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
16.
1: 2: 3: 4: 5: 6: 7: 8: 9:
17.
1: 2: 3: 4:
10
11
12
Respostas
13 14 15 16 17
25.5
1 2 3
Respostas
7 7 18 21 13 6 55 63 63 10 110 112 -13 14 77 66 -17 17 78 91 -11 305 14 105 -12 93 29 135 -5 76 26 103 -5 114 3 15 13 56 54 50 14 12 19 -11 20 -13 50 75 85 70 53 160
306
Cap tulo 26
26.1
Por exemplo
Seja o seguinte algoritmo: 1: funo seq1 (inteiro n incr) ca 2: ct 1 3: enquanto ct < 9 faa c 4: y2 5: x2 6: enquanto y < n faa c 7: se 0=n mod y ento a 8: x x+1 9: mse 10: y y+1 11: menquanto 12: imprima x 13: n n+incr 14: ct++ 15: menquanto 16: mfuno ca Este algoritmo, se chamado seq1(3,7) dar como resposta 2, 4, 2, 8, ..., e o oitavo a elemento ser 6. Se chamado com seq1(4,8) a resposta ser 3, 6, 6, 6, ... 12 e se a a chamado com seq1(33,55) dar 4, 8, 4, 12, ... 8. a
26.2
1.
1: 2:
Exerc cio 1
funo seq1 (inteiro n incr) ca ct 1 3: enquanto ct < 9 faa c 4: y2 5: x2 307
enquanto y < n faa c se 0=n mod y ento a x x+1 mse y y+1 menquanto imprima x n n+incr ct++ menquanto mfuno ca
funo seq2 (inteiro alfa xn2 xn1) ca ct 1 enquanto ct < 9 faa c ax (alfa xn2) + xn1 xn2 xn1 xn1 ax imprima ax ct++ menquanto mfuno ca
Sendo chamado com seq2( 3 , 3 , 6 ) Gerando os 4 primeiros nmeros: 15, 33, 78, 177 u 3.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
funo seq3 (inteiro xn2 xn1) ca ct 1 enquanto ct < 9 faa c ax (teto(sqrt(xn1))) xn2 xn2 xn1 xn1 ax imprima ax ct++ menquanto mfuno ca
Sendo chamado com seq3( 6 , 7 ) Gerando os 4 primeiros nmeros: 18, 35, 108, 385 u 4.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
funo seq4 (inteiro xn) ca ct 1 enquanto ct < 9 faa c se xn mod 2 = 0 ento a ax 1 + 3 xn seno a ax (4 xn)-1 mse imprima ax xn ax ct++ menquanto mfuno ca 308
verso de 10 de fevereiro de 2008 a
CAP ITULO 26. EXERC ICIOS PRATICOS: 057 - CONTINUAR SEQUENCIAS Sendo chamado com seq4( 3 ) Gerando os 4 primeiros nmeros: 11, 43, 171, 683 u 5.
1: 2: 3: 4: 5: 6: 7: 8: 9:
funo seq5 (inteiro xn1) ca ct 1 enquanto ct < 9 faa c ax xn1 + (ct-1)ct mod 3 imprima ax xn1 ax ct++ menquanto mfuno ca
funo seq6 (inteiro xn2 xn1) ca ct 1 repita ax chao(sqrt(xn1)) bx 3 xn2 cx ax + bx imprima cx xn2 xn1 xn1 cx ct++ at ct > 8 e mfuno ca
Sendo chamado com seq6( 5 , 4 ) Gerando os 4 primeiros nmeros: 17, 16, 55, 55 u 7.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
funo seq7 (inteiro x) ca ct 1 repita se ct < 3 ento a ax x 4 seno a se ct<6 ento a ax x 3 seno a ax x 2 mse mse imprima ax x ax ct ct+2 at ct > 16 e mfuno ca
Sendo chamado com seq7( 5 ) Gerando os 4 primeiros nmeros: 20, 60, 180, 360 u 8.
1: 2: 3: 4:
funo seq8 (inteiro zz) ca ct 1 enquanto ct < 9 faa c se ct mod 2 = 0 ento a 309
88-08, Pedro Kantek
CAP ITULO 26. EXERC ICIOS PRATICOS: 057 - CONTINUAR SEQUENCIAS x (ct mod 3)+(ct mod 4)+(ct mod 5) seno a x (ct mod 2)+(ct mod 3)+(ct mod 4) mse x x+zz imprima x ct ct+1 12: menquanto 13: mfuno ca
5: 6: 7: 8: 9: 10: 11:
Sendo chamado com seq8( 9 ) Gerando os 4 primeiros nmeros: 12, 15, 13, 14 u
1 2 3 4 5 6 7 8
Respostas
26.3
1.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
Exerc cio 2
funo seq1 (inteiro n incr) ca ct 1 enquanto ct < 9 faa c y2 x2 enquanto y < n faa c se 0=n mod y ento a x x+1 mse y y+1 menquanto imprima x n n+incr ct++ menquanto mfuno ca
Sendo chamado com seq1( 4 , 5 ) Gerando os 4 primeiros nmeros: 3, 3, 4, 2 u 2. funo seq2 (inteiro alfa xn2 xn1) ca ct 1 enquanto ct < 9 faa c ax (alfa xn2) + xn1 xn2 xn1 xn1 ax imprima ax 8: ct++ 9: menquanto 10: mfuno ca
1: 2: 3: 4: 5: 6: 7:
Sendo chamado com seq2( 5 , 4 , 5 ) Gerando os 4 primeiros nmeros: 25, 50, 175, 425 u 3.
1: 2:
CAP ITULO 26. EXERC ICIOS PRATICOS: 057 - CONTINUAR SEQUENCIAS enquanto ct < 9 faa c ax (teto(sqrt(xn1))) xn2 xn2 xn1 xn1 ax imprima ax ct++ menquanto 10: mfuno ca
3: 4: 5: 6: 7: 8: 9:
Sendo chamado com seq3( 5 , 7 ) Gerando os 4 primeiros nmeros: 15, 28, 90, 280 u 4.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
funo seq4 (inteiro xn) ca ct 1 enquanto ct < 9 faa c se xn mod 2 = 0 ento a ax 1 + 3 xn seno a ax (4 xn)-1 mse imprima ax xn ax ct++ menquanto mfuno ca
Sendo chamado com seq4( 8 ) Gerando os 4 primeiros nmeros: 25, 99, 395, 1579 u 5.
1: 2: 3: 4: 5: 6: 7: 8: 9:
funo seq5 (inteiro xn1) ca ct 1 enquanto ct < 9 faa c ax xn1 + (ct-1)ct mod 3 imprima ax xn1 ax ct++ menquanto mfuno ca
funo seq6 (inteiro xn2 xn1) ca ct 1 repita ax chao(sqrt(xn1)) bx 3 xn2 cx ax + bx imprima cx xn2 xn1 xn1 cx ct++ at ct > 8 e mfuno ca
Sendo chamado com seq6( 9 , 4 ) Gerando os 4 primeiros nmeros: 29, 17, 91, 60 u
verso de 10 de fevereiro de 2008 a
311
funo seq7 (inteiro x) ca ct 1 repita se ct < 3 ento a ax x 4 seno a se ct<6 ento a ax x 3 seno a ax x 2 mse mse imprima ax x ax ct ct+2 at ct > 16 e mfuno ca
Sendo chamado com seq7( 5 ) Gerando os 4 primeiros nmeros: 20, 60, 180, 360 u 8.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
funo seq8 (inteiro zz) ca ct 1 enquanto ct < 9 faa c se ct mod 2 = 0 ento a x (ct mod 3)+(ct mod 4)+(ct mod 5) seno a x (ct mod 2)+(ct mod 3)+(ct mod 4) mse x x+zz imprima x ct ct+1 menquanto mfuno ca
Sendo chamado com seq8( 10 ) Gerando os 4 primeiros nmeros: 13, 16, 14, 15 u
1 2 3 4 5 6 7 8
Respostas
26.4
1.
1: 2: 3: 4: 5: 6: 7:
Exerc cio 3
funo seq1 (inteiro n incr) ca ct 1 enquanto ct < 9 faa c y2 x2 enquanto y < n faa c se 0=n mod y ento a 8: x x+1 9: mse 10: y y+1 312
verso de 10 de fevereiro de 2008 a
funo seq2 (inteiro alfa xn2 xn1) ca ct 1 enquanto ct < 9 faa c ax (alfa xn2) + xn1 xn2 xn1 xn1 ax imprima ax ct++ menquanto mfuno ca
Sendo chamado com seq2( 5 , 4 , 6 ) Gerando os 4 primeiros nmeros: 26, 56, 186, 466 u 3.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
funo seq3 (inteiro xn2 xn1) ca ct 1 enquanto ct < 9 faa c ax (teto(sqrt(xn1))) xn2 xn2 xn1 xn1 ax imprima ax ct++ menquanto mfuno ca
Sendo chamado com seq3( 6 , 7 ) Gerando os 4 primeiros nmeros: 18, 35, 108, 385 u 4.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
funo seq4 (inteiro xn) ca ct 1 enquanto ct < 9 faa c se xn mod 2 = 0 ento a ax 1 + 3 xn seno a ax (4 xn)-1 mse imprima ax xn ax ct++ menquanto mfuno ca
Sendo chamado com seq4( 6 ) Gerando os 4 primeiros nmeros: 19, 75, 299, 1195 u 5.
1: 2: 3:
funo seq6 (inteiro xn2 xn1) ca ct 1 repita ax chao(sqrt(xn1)) bx 3 xn2 cx ax + bx imprima cx xn2 xn1 xn1 cx ct++ at ct > 8 e mfuno ca
Sendo chamado com seq6( 6 , 5 ) Gerando os 4 primeiros nmeros: 20, 19, 64, 65 u 7.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
funo seq7 (inteiro x) ca ct 1 repita se ct < 3 ento a ax x 4 seno a se ct<6 ento a ax x 3 seno a ax x 2 mse mse imprima ax x ax ct ct+2 at ct > 16 e mfuno ca
Sendo chamado com seq7( 7 ) Gerando os 4 primeiros nmeros: 28, 84, 252, 504 u 8. funo seq8 (inteiro zz) ca ct 1 enquanto ct < 9 faa c se ct mod 2 = 0 ento a x (ct mod 3)+(ct mod 4)+(ct mod 5) seno a 7: x (ct mod 2)+(ct mod 3)+(ct mod 4) 8: mse 9: x x+zz
1: 2: 3: 4: 5: 6:
314
Respostas
26.5
1 2 3
Respostas
7 4 12 5001 27050 29336 9771300 4513600 9771300 174763 404139 305835 85 85 81 557 617 651 5760 5760 8064 14 15 11
315
316
Cap tulo 27
Se a programao fosse mais engenharia e menos arte, talvez no precisssemos tanto ca a a usar os dons de Sherlock Holmes para corrigir programas. Infelizmente (ou ser feliza mente ??) tal no ocorre, e um programador prossional gasta mais de 50% do seu a tempo procurando e corrigindo erros em programas. ` E tarefa dif cil, sutil, complexa e delicada. As vezes um ponto fora do lugar pe a o a perder um imenso projeto. E to importante a tarefa que se diz que bom programador no aquele de programa bem, mas aquele que depura bem. A propsito, depurar a e o e identicar, localizar e corrigir erros, de maneira continuada e integrada para produzir software de qualidade. O exerc de hoje, visa estimular esta habilidade. Voc vai receber alguns cdigos e cio e o alguns resultados, e dever inferir quais as inicializaes originais das variveis em cada a co a cdigo. o Por exemplo, no algoritmo 1: funo EXEMPLO ca 2: A . 3: B 2 4: C 3 5: enquanto A < 10 faa c 6: se (B mod 3) = 0 ento a 7: AA+1 8: seno a 9: AA+2 10: mse 11: se (C mod 4) = 0 ento a 12: BB+2 13: seno a 14: AA+1 15: mse 16: imprima A, B, C 17: menquanto Analisando as sa das, que so: a 423 317
CAP ITULO 27. EXERC ICIOS PRATICOS: 062 - ENGENHARIA REVERSA 723 10 2 3 Percebe-se que a inicializao original do A foi 1. A resposta deste exemplo portanto, ca e 1.
27.2
Exerc cio 1
A seguir, diversos algoritmos. Em cada um deles, voc deve dizer qual o valor inicial da e varivel A. a 1 funo A1 ca A . 3: B 7 4: C 13 5: enquanto (A + B) > 4 faa c 6: se A > C ento a 7: AA-1 8: seno a 9: AA+1 10: mse 11: BB-2 12: imprima A, B, C 13: menquanto Esta execuo deu como resultado ca 6 5 13 7 3 13 8 1 13 9 -1 13 10 -3 13 11 -5 13 12 -7 13 13 -9 13
1: 2:
2
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
funo A2 ca A . B9 C 11 enquanto (C = 0) (C = 1) faa c se (B mod 5) = 0 ento a BB-1 mse se (A mod 3) = 0 ento a AA+1 mse se (A > B) ento a AA+2 mse CC-1 318
verso de 10 de fevereiro de 2008 a
13 15 18 21 24 27 30 33 36 39
3 funo A3 ca A . B3 C5 repita AA+1 7: BB+1 8: CC+1 9: enquanto C > 10 faa c 10: CC-2 11: menquanto 12: se (C = 3) (B = 2) ento a 13: AA+2 14: mse 15: imprima A, B, C 16: at (A + B + C ) > 30 e Esta execuo deu como resultado ca 646 957 12 6 8 15 7 9
1: 2: 3: 4: 5: 6:
4
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
funo A4 ca A . B 15 C 13 enquanto (A>10) (B>10) (C>10) faa c se A > B ento a CC-1 mse se (B mod 3) = 1 ento a AA-1 mse 319
88-08, Pedro Kantek
CAP ITULO 27. EXERC ICIOS PRATICOS: 062 - ENGENHARIA REVERSA se C > B ento a BB-3 mse imprima A, B, C AA-1 BB-1 CC-2 19: menquanto Esta execuo deu como resultado ca 11 15 13 10 14 11 8 13 9 7 12 7 6 11 5
12: 13: 14: 15: 16: 17: 18:
Respostas Escreva aqui os valores presumidos para as 4 variveis A de cada um dos a 4 algoritmos
1 2 3 4
27.3
Exerc cio 2
A seguir, diversos algoritmos. Em cada um deles, voc deve dizer qual o valor inicial da e varivel A. a 1 funo A1 ca A . B7 C 11 enquanto (A + B) > 4 faa c 6: se A > C ento a 7: AA-1 8: seno a 9: AA+1 10: mse 11: BB-2 12: imprima A, B, C 13: menquanto Esta execuo deu como resultado ca 7 5 11 8 3 11 9 1 11 10 -1 11 11 -3 11 12 -5 11 11 -7 11
1: 2: 3: 4: 5:
320
funo A2 ca . A B 10 C9 enquanto (C = 0) (C = 1) faa c se (B mod 5) = 0 ento a BB-1 mse se (A mod 3) = 0 ento a AA+1 mse se (A > B) ento a AA+2 mse CC-1 imprima A, B, C menquanto Esta execuo deu como resultado ca 10 8 10 7 10 6 10 5 10 4 10 3 10 2 10 1
16 18 21 24 27 30 33 36
3
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
funo A3 ca A . B2 C5 repita AA+1 BB+1 CC+1 enquanto C > 10 faa c CC-2 menquanto se (C = 3) (B = 2) ento a AA+2 mse imprima A, B, C at (A + B + C ) > 30 e
321
4 funo A4 ca A . B 12 C 13 enquanto (A>10) (B>10) (C>10) faa c se A > B ento a CC-1 8: mse 9: se (B mod 3) = 1 ento a 10: AA-1 11: mse 12: se C > B ento a 13: BB-3 14: mse 15: imprima A, B, C 16: AA-1 17: BB-1 18: CC-2 19: menquanto Esta execuo deu como resultado ca 12 9 13 11 5 10
1: 2: 3: 4: 5: 6: 7:
Respostas Escreva aqui os valores presumidos para as 4 variveis A de cada um dos a 4 algoritmos
1 2 3 4
27.4
Exerc cio 3
A seguir, diversos algoritmos. Em cada um deles, voc deve dizer qual o valor inicial da e varivel A. a 1
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
funo A1 ca A . B8 C9 enquanto (A + B) > 4 faa c se A > C ento a AA-1 seno a AA+1 mse BB-2 imprima A, B, C 322
verso de 10 de fevereiro de 2008 a
CAP ITULO 27. EXERC ICIOS PRATICOS: 062 - ENGENHARIA REVERSA menquanto Esta execuo deu como resultado ca 769 849 929 10 0 9 9 -2 9 10 -4 9 9 -6 9
13:
2 funo A2 ca A . B9 C 10 5: enquanto (C = 0) (C = 1) faa c 6: se (B mod 5) = 0 ento a 7: BB-1 8: mse 9: se (A mod 3) = 0 ento a 10: AA+1 11: mse 12: se (A > B) ento a 13: AA+2 14: mse 15: CC-1 16: imprima A, B, C 17: menquanto Esta execuo deu como resultado ca 13 8 9 15 7 8 18 6 7 21 5 6 24 5 5 27 5 4 30 5 3 33 5 2 36 5 1
1: 2: 3: 4:
323
CAP ITULO 27. EXERC ICIOS PRATICOS: 062 - ENGENHARIA REVERSA CC-2 menquanto se (C = 3) (B = 2) ento a AA+2 mse imprima A, B, C at (A + B + C ) > 30 e Esta execuo deu como resultado ca 843 11 5 4 14 6 5 17 7 6 20 8 7
10: 11: 12: 13: 14: 15: 16:
4 funo A4 ca . A B 14 C 15 enquanto (A>10) (B>10) (C>10) faa c se A > B ento a CC-1 8: mse 9: se (B mod 3) = 1 ento a 10: AA-1 11: mse 12: se C > B ento a 13: BB-3 14: mse 15: imprima A, B, C 16: AA-1 17: BB-1 18: CC-2 19: menquanto Esta execuo deu como resultado ca 15 14 14 13 13 11 12 12 9 11 11 7
1: 2: 3: 4: 5: 6: 7:
Respostas Escreva aqui os valores presumidos para as 4 variveis A de cada um dos a 4 algoritmos
1 2 3 4
27.5
1
Respostas
5 11 3 11 324
verso de 10 de fevereiro de 2008 a
325
326
Cap tulo 28
Exerc cio 1
funo programa11 ca inteiro A,B,C,D,U,V,T,I,G,S,Q inteiro F,W,L A1; B3; C3;D2;U2 V1; T1; I1;G3;S3 Q2; F3; W3;L1;U2 repita V1 enquanto V<7 faa c C2 se C=4 ento a T2 enquanto T<2 faa c II+2 GG+3 SS+A+3 TT+1 menquanto seno a Q3 repita FF+D+3 WW+1 LL+2 QQ+2 at Q9 e mse VV+1 menquanto UU+1 at U>5 e 327
CAP ITULO 28. EXERC ICIOS PRATICOS: 065 - SE, ENQUANTO, REPITA
32: 33:
2
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: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45:
funo programa12 ca inteiro A,B,C,D,P,H,M,T,E,O,K inteiro X,Y,N,G,R,I,V A2; B1; C2;D3;P3 H2; M3; T2;E2;O3 K3; X1; Y2;N3;G1 R3 I2 V2 D8 se D=4 ento a P1 repita H2 enquanto H8 faa c C3 se C=3 ento a MM+3 TT+2 seno a EE+3 OO+C+2 KK+A+1 XX+D+3 YY+D+1 mse HH+1 menquanto PP+1 at P>6 e seno a N3 enquanto N<8 faa c G2 enquanto G<5 faa c RR+B+1 II+1 VV+3 GG+2 menquanto NN+1 menquanto mse imprima K+P+M+V mfuno ca
3
1:
CAP ITULO 28. EXERC ICIOS PRATICOS: 065 - SE, ENQUANTO, REPITA
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: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42:
inteiro A,B,C,D,S,Q,U,Z,F,V,P inteiro I,O,K A3; B3; C3;D1;S3 Q1; U1; Z2;F3;V3 P2; I3; O3;K1;A5 se A=3 ento a S2 enquanto S3 faa c Q2 enquanto Q<8 faa c U3 enquanto U<3 faa c ZZ+3 FF+1 VV+B+3 UU+2 menquanto QQ+2 menquanto SS+2 menquanto seno a P1 repita I1 repita O2 repita K3 repita KK+1 at K8 e OO+2 at O9 e II+2 at I2 e PP+1 at P6 e mse imprima Z+D+I+F mfuno ca
4
1: 2: 3: 4: 5: 6:
funo programa14 ca inteiro A,B,C,D,Z,V,W,F,N,H,K inteiro S,R,I,P,Q,E,Y A2; B1; C3;D1;Z1 V2; W1; F2;N2;H3 K3; S3; R3;I1;P2 7: Q3 8: E1 9: Y3 329
88-08, Pedro Kantek
CAP ITULO 28. EXERC ICIOS PRATICOS: 065 - SE, ENQUANTO, REPITA
10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51:
A8 se A>6 ento a A7 se A>9 ento a Z1 repita V3 enquanto V2 faa c D8 se D9 ento a WW+B+1 FF+A+1 NN+C+3 HH+C+2 KK+1 seno a SS+B+2 RR+D+3 II+A+1 PP+B+1 QQ+2 mse VV+1 menquanto ZZ+1 at Z8 e mse seno a B7 se B=9 ento a E2 repita Y2 repita YY+2 at Y2 e EE+2 at E>8 e mse mse imprima K+B+F+P mfuno ca
1 2 3 4
Respostas
28.2
1
1:
Exerc cio 2
CAP ITULO 28. EXERC ICIOS PRATICOS: 065 - SE, ENQUANTO, REPITA
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: 31: 32: 33:
inteiro A,B,C,D,M,S,V,Q,Z,T,H inteiro K,I,J A3; B3; C1;D3;M2 S2; V1; Q1;Z2;T3 H3; K3; I3;J2;M2 repita S2 enquanto S8 faa c C1 se C>7 ento a V2 enquanto V<1 faa c QQ+D+3 ZZ+A+1 TT+A+3 VV+1 menquanto seno a H3 repita KK+C+1 II+D+1 JJ+B+3 HH+2 at H>7 e mse SS+1 menquanto MM+1 at M>9 e imprima T+A+Z+H mfuno ca
2
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
funo programa12 ca inteiro A,B,C,D,K,R,X,I,P,V,E inteiro F,H,G,L,M,J,S A1; B3; C2;D2;K2 R3; X3; I2;P2;V1 E3; F3; H2;G3;L2 M2 J1 S3 A5 se A=1 ento a K2 repita R1 enquanto R4 faa c A4 se A8 ento a XX+B+3 331
88-08, Pedro Kantek
CAP ITULO 28. EXERC ICIOS PRATICOS: 065 - SE, ENQUANTO, REPITA
19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45:
II+A+1 seno a PP+B+1 VV+2 EE+3 FF+1 HH+1 mse RR+1 menquanto KK+1 at K8 e seno a G2 enquanto G<5 faa c L2 enquanto L<7 faa c MM+A+2 JJ+B+2 SS+1 LL+2 menquanto GG+1 menquanto mse imprima F+E+J+B mfuno ca
3
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
funo programa13 ca inteiro A,B,C,D,M,U,N,J,V,E,X inteiro R,I,K A2; B2; C3;D1;M2 U3; N2; J2;V3;E3 X3; R2; I1;K1;C4 se C<6 ento a M2 enquanto M<9 faa c U3 enquanto U<2 faa c N3 enquanto N6 faa c JJ+1 VV+3 EE+3 NN+2 menquanto UU+2 menquanto MM+2 menquanto seno a 332
verso de 10 de fevereiro de 2008 a
CAP ITULO 28. EXERC ICIOS PRATICOS: 065 - SE, ENQUANTO, REPITA
24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42:
X3 repita R3 repita I3 repita K3 repita KK+2 at K>7 e II+1 at I8 e RR+2 at R8 e XX+2 at X4 e mse imprima M+K+C+R mfuno ca
4
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: 31:
funo programa14 ca inteiro A,B,C,D,N,F,V,H,G,E,Z inteiro X,O,M,I,W,S,Y A2; B2; C1;D3;N3 F2; V3; H1;G3;E1 Z1; X2; O3;M3;I2 W3 S2 Y1 C3 se C7 ento a C5 se C3 ento a N2 repita F2 enquanto F8 faa c D8 se D=1 ento a VV+3 HH+1 GG+D+3 EE+1 ZZ+D+1 seno a XX+C+1 OO+3 MM+3 II+2 WW+2 mse 333
88-08, Pedro Kantek
CAP ITULO 28. EXERC ICIOS PRATICOS: 065 - SE, ENQUANTO, REPITA
32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51:
FF+2 menquanto NN+1 at N4 e mse seno a C4 se C=4 ento a S2 repita Y2 repita YY+2 at Y>2 e SS+2 at S8 e mse mse imprima Z+O+D+Y mfuno ca
1 2 3 4
Respostas
28.3
1
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
Exerc cio 3
funo programa11 ca inteiro A,B,C,D,E,M,F,L,G,Y,N inteiro X,K,V A2; B1; C1;D2;E1 M1; F2; L2;G2;Y1 N3; X2; K3;V2;E1 repita M1 enquanto M7 faa c D3 se D<1 ento a F3 enquanto F<1 faa c LL+C+3 GG+C+1 YY+A+1 FF+2 menquanto seno a N3 repita XX+A+3 KK+B+1 334
verso de 10 de fevereiro de 2008 a
CAP ITULO 28. EXERC ICIOS PRATICOS: 065 - SE, ENQUANTO, REPITA VV+C+2 NN+1 at N>3 e mse MM+2 menquanto EE+1 31: at E2 e 32: imprima M+K+C+F 33: mfuno ca
24:
2
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: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40:
funo programa12 ca inteiro A,B,C,D,N,M,O,I,J,G,K inteiro P,E,T,F,U,Q,W A2; B2; C3;D3;N3 M1; O3; I2;J2;G1 K2; P2; E1;T2;F2 U3 Q2 W2 D5 se D=6 ento a N2 repita M3 enquanto M7 faa c D5 se D6 ento a OO+2 II+1 seno a JJ+2 GG+B+2 KK+C+1 PP+1 EE+1 mse MM+2 menquanto NN+1 at N9 e seno a T3 enquanto T<5 faa c F2 enquanto F3 faa c UU+B+2 QQ+C+2 WW+3 FF+1 menquanto 335
88-08, Pedro Kantek
CAP ITULO 28. EXERC ICIOS PRATICOS: 065 - SE, ENQUANTO, REPITA
41: 42: 43: 44: 45:
3
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: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42:
funo programa13 ca inteiro A,B,C,D,P,N,U,M,Y,I,V inteiro F,H,S A1; B2; C2;D2;P1 N1; U3; M1;Y2;I1 V2; F3; H1;S3;D3 se D<7 ento a P3 enquanto P<9 faa c N3 enquanto N<2 faa c U3 enquanto U6 faa c MM+A+1 YY+1 II+1 UU+2 menquanto NN+2 menquanto PP+2 menquanto seno a V3 repita F2 repita H3 repita S2 repita SS+1 at S4 e HH+2 at H>9 e FF+1 at F6 e VV+2 at V3 e mse imprima V+M+A+D mfuno ca
4
1:
CAP ITULO 28. EXERC ICIOS PRATICOS: 065 - SE, ENQUANTO, REPITA
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: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51:
inteiro A,B,C,D,X,T,Y,L,I,H,Z inteiro Q,U,M,O,J,N,K A2; B2; C1;D1;X1 T2; Y3; L1;I3;H3 Z2; Q1; U2;M2;O3 J2 N1 K3 C8 se C8 ento a D7 se D=6 ento a X1 repita T3 enquanto T<3 faa c D4 se D4 ento a YY+D+3 LL+1 II+2 HH+D+1 ZZ+2 seno a QQ+2 UU+3 MM+3 OO+2 JJ+3 mse TT+1 menquanto XX+2 at X1 e mse seno a B8 se B<3 ento a N3 repita K1 repita KK+1 at K6 e NN+2 at N7 e mse mse imprima Y+D+X+Q mfuno ca
337
CAP ITULO 28. EXERC ICIOS PRATICOS: 065 - SE, ENQUANTO, REPITA
1 2 3 4
Respostas
28.4
1 2 3
Respostas
12 17 23 41 10 9 9 17 7 8 11 14
338
Cap tulo 29
A seguir existem 4 algoritmos que foram gerados de maneira aleatria. Todos esto o a corretos, no entram em loop, geram valores perfeitamente determinados e todos tm a e complexidade aceitvel. Execute os testes de mesa pedidos e ao nal calcule as 4 somas a pedidas. Algoritmo 1 1: Algoritmo 1 2: inteiro A, B, C, D, E 3: A 5 4: B 3 5: C 0 6: D 16 7: E 17 8: enquanto (D > 0) faa c 9: se (A < 7) ento a 10: B B+1 11: mse 12: enquanto (A > (4 6)) faa c 13: B A+B+2 14: AA2 15: E E+7 16: se (D > (E 13)) ento a 17: C C + 1 18: mse 19: menquanto 20: D D4 21: menquanto 22: imprima (A + B + C + D + E) SOMA = (A+B+C+D+E)
339
CAP ITULO 29. EXERC ICIOS PRATICOS: 069 - 4 ALGORITMOS Algoritmo 2 1: Algoritmo 2 2: inteiro F, G, H, I, J 3: F 1 4: G 3 5: H 14 6: I 6 7: J 12 8: enquanto ((H + J) (3 J)) faa c 9: se (F < 1) ento a 10: GG+1 11: mse 12: enquanto ((F > 4) (G 16)) faa c 13: GG+2 14: F F 2 15: se (I > 13) ento a 16: J J +3F 17: mse 18: menquanto 19: H H +3 20: menquanto 21: imprima (F + G + H + I + J) SOMA = (F+G+H+I+J)
Algoritmo 3 1: Algoritmo 3 2: inteiro K, L, M, N, P 3: K 10 4: L 1 5: M 7 6: N 9 7: P 20 8: enquanto (K 4) faa c 9: LL+1 10: se (N 3) ento a 11: enquanto (M 12) faa c 12: M M +6 13: menquanto 14: M M +1 15: mse 16: K K 3 17: N N +1 18: P P +2K 19: enquanto (N mod 3 = 0) faa c 20: N N +1 21: menquanto 22: menquanto 23: imprima (K + L + M + N + P ) Algoritmo 4
88-08, Pedro Kantek
340
(K+L+M+N+P)
Algoritmo 4 inteiro Q, R, S, T, U Q 1 R 13 S 18 T 3 U 9 repita se (Q < 5) ento a RR+1 mse se (T > 11) ento a S S+2 mse enquanto (U 17) faa c U U +4 se (S > 10) ento a T T +1 mse menquanto QQ+2 at ((Q > 0) (R = 0)) e imprima (Q + R + S + T + U ) (Q+R+S+T+U)
SOMA =
29.2
Exerc cio 2
A seguir existem 4 algoritmos que foram gerados de maneira aleatria. Todos esto o a corretos, no entram em loop, geram valores perfeitamente determinados e todos tm a e complexidade aceitvel. Execute os testes de mesa pedidos e ao nal calcule as 4 somas a pedidas. Algoritmo 1 1: Algoritmo 1 2: inteiro A, B, C, D, E 3: A 1 4: B 5 5: C 7 6: D 11 7: E 3 8: enquanto (D > 0) faa c 9: se (A < 1) ento a 10: B B+1 11: mse 12: enquanto (A > (6 6)) faa c 13: B A+B+2 14: AA2
verso de 10 de fevereiro de 2008 a
341
CAP ITULO 29. EXERC ICIOS PRATICOS: 069 - 4 ALGORITMOS E E + 7 se (D > (E 0)) ento a C C +8 mse menquanto D D4 menquanto 22: imprima (A + B + C + D + E)
15: 16: 17: 18: 19: 20: 21:
SOMA =
(A+B+C+D+E)
Algoritmo 2 1: Algoritmo 2 2: inteiro F, G, H, I, J 3: F 17 4: G 0 5: H 9 6: I 2 7: J 14 8: enquanto ((H + J) (3 J)) faa c 9: se (F < 20) ento a 10: GG+1 11: mse 12: enquanto ((F > 3) (G 5)) faa c 13: GG+2 14: F F 2 15: se (I > 5) ento a 16: J J +3F 17: mse 18: menquanto 19: H H +3 20: menquanto 21: imprima (F + G + H + I + J) SOMA = (F+G+H+I+J)
Algoritmo 3 1: Algoritmo 3 2: inteiro K, L, M, N, P 3: K 16 4: L 2 5: M 12 6: N 8 7: P 15 8: enquanto (K 0) faa c 9: LL+1 10: se (N 17) ento a 11: enquanto (M 3) faa c 12: M M +6 13: menquanto
88-08, Pedro Kantek
342
CAP ITULO 29. EXERC ICIOS PRATICOS: 069 - 4 ALGORITMOS M M +1 mse K K 3 N N +1 P P +2K enquanto (N mod 3 = 0) faa c N N +1 21: menquanto 22: menquanto 23: imprima (K + L + M + N + P )
14: 15: 16: 17: 18: 19: 20:
SOMA =
(K+L+M+N+P)
Algoritmo 4 1: Algoritmo 4 2: inteiro Q, R, S, T, U 3: Q 6 4: R 1 5: S 3 6: T 11 7: U 9 8: repita 9: se (Q < 12) ento a 10: RR+1 11: mse 12: se (T > 17) ento a 13: S S+2 14: mse 15: enquanto (U 19) faa c 16: U U +4 17: se (S > 5) ento a 18: T T +1 19: mse 20: menquanto 21: QQ+2 22: at ((Q > 0) (R = 0)) e 23: imprima (Q + R + S + T + U ) SOMA = (Q+R+S+T+U)
29.3
Exerc cio 3
A seguir existem 4 algoritmos que foram gerados de maneira aleatria. Todos esto o a corretos, no entram em loop, geram valores perfeitamente determinados e todos tm a e complexidade aceitvel. Execute os testes de mesa pedidos e ao nal calcule as 4 somas a pedidas. Algoritmo 1 1: Algoritmo 1
verso de 10 de fevereiro de 2008 a
343
inteiro A, B, C, D, E A 14 B 4 C 1 D3 E 5 enquanto (D > 0) faa c se (A < 17) ento a B B+1 mse enquanto (A > (2 6)) faa c B A+B+2 AA2 E E + 3 se (D > (E 20)) ento a C C + 10 mse menquanto D D4 menquanto imprima (A + B + C + D + E) (A+B+C+D+E)
SOMA =
Algoritmo 2 1: Algoritmo 2 2: inteiro F, G, H, I, J 3: F 15 4: G 7 5: H 1 6: I 13 7: J 4 8: enquanto ((H + J) (3 J)) faa c 9: se (F < 16) ento a 10: GG+1 11: mse 12: enquanto ((F > 2) (G 18)) faa c 13: GG+2 14: F F 2 15: se (I > 8) ento a 16: J J +3F 17: mse 18: menquanto 19: H H +3 20: menquanto 21: imprima (F + G + H + I + J) SOMA = (F+G+H+I+J)
Algoritmo 3
88-08, Pedro Kantek
344
Algoritmo 3 inteiro K, L, M, N, P K 13 L 9 M 0 N 19 P 15 enquanto (K 1) faa c LL+1 se (N 4) ento a enquanto (M 18) faa c M M +6 menquanto M M +1 mse K K 3 N N +1 P P +2K enquanto (N mod 3 = 0) faa c N N +1 menquanto menquanto imprima (K + L + M + N + P ) (K+L+M+N+P)
SOMA =
Algoritmo 4 1: Algoritmo 4 2: inteiro Q, R, S, T, U 3: Q 8 4: R 1 5: S 12 6: T 9 7: U 7 8: repita 9: se (Q < 14) ento a 10: RR+1 11: mse 12: se (T > 17) ento a 13: S S+2 14: mse 15: enquanto (U 18) faa c 16: U U +4 17: se (S > 2) ento a 18: T T +1 19: mse 20: menquanto 21: QQ+2 22: at ((Q > 0) (R = 0)) e 23: imprima (Q + R + S + T + U )
verso de 10 de fevereiro de 2008 a
345
CAP ITULO 29. EXERC ICIOS PRATICOS: 069 - 4 ALGORITMOS SOMA = (Q+R+S+T+U)
29.4
Exerc cio 4
A seguir existem 4 algoritmos que foram gerados de maneira aleatria. Todos esto o a corretos, no entram em loop, geram valores perfeitamente determinados e todos tm a e complexidade aceitvel. Execute os testes de mesa pedidos e ao nal calcule as 4 somas a pedidas. Algoritmo 1 1: Algoritmo 1 2: inteiro A, B, C, D, E 3: A 3 4: B 2 5: C 20 6: D 11 7: E 1 8: enquanto (D > 0) faa c 9: se (A < 4) ento a 10: B B+1 11: mse 12: enquanto (A > (9 6)) faa c 13: B A+B+2 14: AA2 15: E E + 5 16: se (D > (E 12)) ento a 17: C C +7 18: mse 19: menquanto 20: D D4 21: menquanto 22: imprima (A + B + C + D + E) SOMA = (A+B+C+D+E)
Algoritmo 2 1: Algoritmo 2 2: inteiro F, G, H, I, J 3: F 12 4: G 15 5: H 3 6: I 6 7: J 2 8: enquanto ((H + J) (3 J)) faa c 9: se (F < 17) ento a 10: GG+1 11: mse 12: enquanto ((F > 4) (G 1)) faa c 13: GG+2 14: F F 2
88-08, Pedro Kantek
346
SOMA =
Algoritmo 3 1: Algoritmo 3 2: inteiro K, L, M, N, P 3: K 16 4: L 6 5: M 5 6: N 13 7: P 19 8: enquanto (K 7) faa c 9: LL+1 10: se (N 17) ento a 11: enquanto (M 12) faa c 12: M M +6 13: menquanto 14: M M +1 15: mse 16: K K 3 17: N N +1 18: P P +2K 19: enquanto (N mod 3 = 0) faa c 20: N N +1 21: menquanto 22: menquanto 23: imprima (K + L + M + N + P ) SOMA = (K+L+M+N+P)
Algoritmo 4 1: Algoritmo 4 2: inteiro Q, R, S, T, U 3: Q 8 4: R 7 5: S 6 6: T 5 7: U 9 8: repita 9: se (Q < 14) ento a 10: RR+1 11: mse 12: se (T > 6) ento a
verso de 10 de fevereiro de 2008 a
347
S S+2 mse enquanto (U 18) faa c U U +4 se (S > 2) ento a T T +1 mse menquanto QQ+2 at ((Q > 0) (R = 0)) e imprima (Q + R + S + T + U ) (Q+R+S+T+U)
SOMA =
29.5
1 2 3 4
Respostas
67 -27 121 -4 32 76 16 32 48 36 32 50 61 47 41 31
348
Cap tulo 30
30.1
Exemplos
Para este exerc cio, so apresentadas diversas seqncias de 7 nmeros. Naturalmente, a ue u elas so objeto de um programa de computador. O programa apresentado, mas faltam a e nele certos parmetros (x, y e z), cujos valores sero inteiros e sempre estaro entre a a a 2 e 7, inclusive. Pelo aspecto da seqncia e do programa mostrado, voc deve inferir ue e tais valores. Depois disso, a seqncia j impressa deve ser vericada (preferencialmente ue a pelo computador). Estando os 7 primeiros valores corretos, devem estar os seguintes. Para cada seqncia, voc deve responder qual ser o dcimo valor. ue e a e Sequncia 1 e 1: para I de 1 at 10 faa e c 2: imprima x + (I 2 ) 3: mpara Para a seqncia 5 8 13 20 29 40 53 68 85 104, pode-se ver que o 10o valor da seqncia ue ue 104, j que x = 4. e a Sequncia 2 e 1: para I de 1 at 10 faa e c 2: imprima x + (I 3 ) 3: mpara Para a seqncia 4 11 30 67 128 219 346 515 732 1003, pode-se ver que o 10o valor da ue seqncia 1003, j que x = 3. ue e a Sequncia 3 e 1: para I de 1 at 10 faa e c 2: imprima (x + I)2 3: mpara Para a seqncia 16 25 36 49 64 81 100 121 144 169, pode-se ver que o 10o valor da ue seqncia 169, j que x = 3. ue e a Sequncia 4 e 349
CAP ITULO 30. EXERC ICIOS PRATICOS: 073 - ACHAR O DECIMO TERMO para I de 1 at 10 faa e c imprima (x + I)3 mpara Para a seqncia 512 729 1000 1331 1728 2197 2744 3375 4096 4913, pode-se ver que o ue 10o valor da seqncia 4913, j que x = 7. ue e a
1: 2: 3:
Sequncia 5 e 1: para I de 1 at 10 faa e c 2: imprima (x I)2 3: mpara Para a seqncia 36 144 324 576 900 1296 1764 2304 2916 3600, pode-se ver que o 10o ue valor da seqncia 3600, j que x = 6. ue e a Sequncia 6 e 1: para I de 1 at 10 faa e c 2: imprima (x I)3 3: mpara Para a seqncia 8 64 216 512 1000 1728 2744 4096 5832 8000, pode-se ver que o 10o ue valor da seqncia 8000, j que x = 2. ue e a Sequncia 7 e 1: para I de 1 at 10 faa e c 2: imprima xI 3: mpara Para a seqncia 2 4 8 16 32 64 128 256 512 1024, pode-se ver que o 10o valor da ue seqncia 1024, j que x = 2. ue e a Sequncia 8 e 1: para I de 1 at 10 faa e c 2: imprima ((I 2 ) + x) y 3: mpara Para a seqncia 12 18 28 42 60 82 108 138 172 210, pode-se ver que o 10o valor da ue seqncia 210, j que x = 5 e y = 2. ue e a Sequncia 9 e 1: para I de 1 at 10 faa e c 2: imprima ((I 3 ) + x) y 3: mpara Para a seqncia 15 50 145 330 635 1090 1725 2570 3655 5010, pode-se ver que o 10o ue valor da seqncia 5010, j que x = 2 e y = 5. ue e a Sequncia 10 e 1: para I de 1 at 10 faa e c 2: imprima ((x + I)2 ) y 3: mpara Para a seqncia 180 245 320 405 500 605 720 845 980 1125, pode-se ver que o 10o valor ue da seqncia 1125, j que x = 5 e y = 5. ue e a Sequncia 11 e 1: para I de 1 at 10 faa e c 2: imprima ((x + I)3 ) y 3: mpara Para a seqncia 2401 3584 5103 7000 9317 12096 15379 19208 23625 28672, pode-se ver ue que o 10o valor da seqncia 28672, j que x = 6 e y = 7. ue e a
88-08, Pedro Kantek
350
CAP ITULO 30. EXERC ICIOS PRATICOS: 073 - ACHAR O DECIMO TERMO Sequncia 12 e 1: para I de 1 at 10 faa e c 2: imprima ((x + I)2 ) + y 3: mpara Para a seqncia 22 31 42 55 70 87 106 127 150 175, pode-se ver que o 10o valor da ue seqncia 175, j que x = 3 e y = 6. ue e a Sequncia 13 e 1: para I de 1 at 10 faa e c 2: imprima ((x + I)3 ) + y 3: mpara Para a seqncia 131 222 349 518 735 1006 1337 1734 2203 2750, pode-se ver que o 10o ue valor da seqncia 2750, j que x = 4 e y = 6. ue e a Sequncia 14 e 1: para I de 1 at 10 faa e c 2: imprima (xI ) + y 3: mpara Para a seqncia 8 10 14 22 38 70 134 262 518 1030, pode-se ver que o 10o valor da ue seqncia 1030, j que x = 2 e y = 6. ue e a Sequncia 15 e 1: para I de 1 at 10 faa e c 2: imprima xI+y 3: mpara Para a seqncia 32 64 128 256 512 1024 2048 4096 8192 16384, pode-se ver que o 10o ue valor da seqncia 16384, j que x = 2 e y = 4. ue e a Sequncia 16 e 1: para I de 1 at 10 faa e c 2: imprima ((x + (I 2 )) y) + z 3: mpara Para a seqncia 25 37 57 85 121 165 217 277 345 421, pode-se ver que o 10o valor da ue seqncia 421, j que x = 4, y = 4 e z = 5. ue e a Sequncia 17 e 1: para I de 1 at 10 faa e c 2: imprima ((x + (I 3 )) y) + z 3: mpara Para a seqncia 31 59 135 283 527 891 1399 2075 2943 4027, pode-se ver que o 10o ue valor da seqncia 4027, j que x = 6, y = 4 e z = 3. ue e a Sequncia 18 e 1: para I de 1 at 10 faa e c 2: imprima (((x + I)2 ) y) + z 3: mpara Para a seqncia 255 346 451 570 703 850 1011 1186 1375 1578, pode-se ver que o 10o ue valor da seqncia 1578, j que x = 5, y = 7 e z = 3. ue e a Sequncia 19 e 1: para I de 1 at 10 faa e c 2: imprima (((x + I)3 ) y) + z 3: mpara Para a seqncia 2061 3075 4377 6003 7989 10371 13185 16467 20253 24579, pode-se ver ue
verso de 10 de fevereiro de 2008 a
351
CAP ITULO 30. EXERC ICIOS PRATICOS: 073 - ACHAR O DECIMO TERMO que o 10o valor da seqncia 24579, j que x = 6, y = 6 e z = 3. ue e a Sequncia 20 e 1: para I de 1 at 10 faa e c 2: imprima ((xI ) + y) z 3: mpara
Para a seqncia 10 14 22 38 70 134 262 518 1030 2054, pode-se ver que o 10o valor da ue seqncia 2054, j que x = 2, y = 3 e z = 2. ue e a
30.2
Exerc cio 1
seq 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
v4 18 69 36 343 144 4096 81 115 330 196 1372 40 1333 86 128 59 332 207 1376 54
v5 27 130 49 512 225 8000 243 160 635 256 2048 53 1730 248 256 86 637 249 2052 102
v6 38 221 64 729 324 13824 729 215 1090 324 2916 68 2199 734 512 119 1092 295 2920 198 352
v7 51 348 81 1000 441 21952 2187 280 1725 400 4000 85 2746 2192 1024 158 1727 345 4004 390
10o ?
CAP ITULO 30. EXERC ICIOS PRATICOS: 073 - ACHAR O DECIMO TERMO
30.3
seq 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Exerc cio 2
v1 8 8 25 27 9 64 2 20 6 112 81 28 514 4 64 16 18 74 140 20 v2 11 15 36 64 36 512 4 32 20 175 192 39 731 6 128 25 53 100 325 28 v3 16 34 49 125 81 1728 8 52 58 252 375 52 1002 10 256 40 148 130 630 44 v4 23 71 64 216 144 4096 16 80 132 343 648 67 1333 18 512 61 333 164 1085 76 v5 32 132 81 343 225 8000 32 116 254 448 1029 84 1730 34 1024 88 638 202 1720 140 v6 43 223 100 512 324 13824 64 160 436 567 1536 103 2199 66 2048 121 1093 244 2565 268 v7 56 350 121 729 441 21952 128 212 690 700 2187 124 2746 130 4096 160 1728 290 3650 524 10o ?
30.4
seq 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Exerc cio 3
v1 5 6 25 64 4 64 3 28 42 98 81 30 127 7 16 35 20 348 85 49 v2 8 13 36 125 16 512 9 40 91 128 192 41 218 13 32 53 41 453 196 63 v3 13 32 49 216 36 1728 27 60 224 162 375 54 345 31 64 83 98 572 379 91 v4 20 69 64 343 64 4096 81 88 483 200 648 69 514 85 128 125 209 705 652 147 v5 29 130 81 512 100 8000 243 124 910 242 1029 86 731 247 256 179 392 852 1033 259 v6 40 221 100 729 144 13824 729 168 1547 288 1536 105 1002 733 512 245 665 1013 1540 483 353 v7 53 348 121 1000 196 21952 2187 220 2436 338 2187 126 1333 2191 1024 323 1046 1188 2191 931 10o ?
CAP ITULO 30. EXERC ICIOS PRATICOS: 073 - ACHAR O DECIMO TERMO
30.5
seq 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Exerc cio 4
v1 3 7 9 64 36 27 2 35 16 144 1372 54 66 4 128 22 45 38 256 24 v2 6 14 16 125 144 216 4 56 30 196 2048 69 127 6 256 40 94 66 438 36 v3 11 33 25 216 324 729 8 91 68 256 2916 86 218 10 512 70 227 102 692 60 v4 18 70 36 343 576 1728 16 140 142 324 4000 105 345 18 1024 112 486 146 1030 108 v5 27 131 49 512 900 3375 32 203 264 400 5324 126 514 34 2048 166 913 198 1464 204 v6 38 222 64 729 1296 5832 64 280 446 484 6912 149 731 66 4096 232 1550 258 2006 396 v7 51 349 81 1000 1764 9261 128 371 700 576 8788 174 1002 130 8192 310 2439 326 2668 780 10o ?
30.6
1 2 3 4
Respostas
102 1005 144 2197 900 64000 59049 4915 59054 8192 311 5012 519 8792 107 1007 196 1728 900 64000 1024 4915 1026 32768 313 5013 452 8645 104 1005 196 2197 400 64000 59049 59053 8192 629 3017 1797 5188 7203 102 1006 144 2197 3600 27000 1024 2199 1026 65536 616 7038 578 5494 535 5010 3078 416 2004 4108 424 7035 728 2014 6156 676 1183 512 8788 5184 5184 148 199 201 261 2746
900 16384
354
Cap tulo 31
31.1
31.1.1
1: 2: 3:
Exerc cio 1
Algoritmo 1
Algoritmo U M cadeia C[80] inteiro I, J 4: leia(C) 5: I 0 6: J 1 7: enquanto I < 2 faa c 8: se C[J] = ento a 9: I ++ 10: mse 11: J ++ 12: menquanto 13: enquanto C[J] = O faa c 14: imprima C[J] 15: J ++ 16: menquanto Para os dados ONDE-ORA-SE-ADUNA-O-CONCILIO-GUERREIRO O algoritmo UM deve imprimir
31.1.2
1:
Algoritmo 2
CAP ITULO 31. EXERC ICIOS PRATICOS: 077 - ALGORITMOS inteiro V ET [6] inteiro SOM A, I pontoutuante M ED leia(V ET ) SOM A 0 I1 enquanto I < 7 faa c 9: SOM A SOM A + V ET [I] 10: I ++ 11: menquanto 12: M ED SOM A 6 13: I 1 14: enquanto (I < 7) faa c 15: se V ET [I] > (M ED 5) ento a 16: imprima V ET [I] 17: mse 18: I ++ 19: menquanto Para os dados
2: 3: 4: 5: 6: 7: 8:
117 190 121 108 167 198 O algoritmo DOIS dever imprimir a
31.1.3
1: 2: 3:
Algoritmo 3
Algoritmo T RES inteiro V ET [6] inteiro I, J 4: I 2 5: enquanto I 6 faa c 6: leia V ET [I] 7: I ++ 8: menquanto 9: I 3 10: enquanto (I 6) faa c 11: V ET [1] V ET [I] 12: J I 1 13: enquanto (V ET [J] > V ET [1]) faa c 14: V ET [J + 1] V ET [J] 15: J 16: menquanto 17: V ET [J + 1] V ET [1] 18: I ++ 19: menquanto 20: imprima V ET [3] Para os dados 53 43 44 55 68
356
Algoritmo 4
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
Algoritmo QU AT RO inteiro M AT [4][5] inteiro C, I, J, LIN, COL leia (C, LIN, COL) I1 enquanto I 4 faa c J 1 enquanto (J 5) faa c M AT [I][J] C C C +9 J ++ menquanto I ++ menquanto imprima M AT [LIN ][COL]
Soluo ca 1 2 2
31.2
31.2.1
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
Exerc cio 2
Algoritmo 1
Algoritmo U M cadeia C[80] inteiro I, J leia(C) I0 J 1 enquanto I < 2 faa c se C[J] = O ento a I ++ mse J ++ menquanto enquanto C[J] = A faa c imprima C[J] J ++ menquanto Para os dados
357
31.2.2
1: 2: 3:
Algoritmo 2
Algoritmo DOIS inteiro V ET [6] inteiro SOM A, I 4: pontoutuante M ED 5: leia(V ET ) 6: SOM A 0 7: I 1 8: enquanto I < 7 faa c 9: SOM A SOM A + V ET [I] 10: I ++ 11: menquanto 12: M ED SOM A 6 13: I 1 14: enquanto (I < 7) faa c 15: se V ET [I] > (M ED 2) ento a 16: imprima V ET [I] 17: mse 18: I ++ 19: menquanto Para os dados 154 142 112 120 173 114 O algoritmo DOIS dever imprimir a
31.2.3
1: 2:
Algoritmo 3
Algoritmo T RES inteiro V ET [6] 3: inteiro I, J 4: I 2 5: enquanto I 6 faa c 6: leia V ET [I] 7: I ++ 8: menquanto 9: I 3 10: enquanto (I 6) faa c 11: V ET [1] V ET [I] 12: J I 1 13: enquanto (V ET [J] < V ET [1]) faa c 14: V ET [J + 1] V ET [J] 15: J 16: menquanto 17: V ET [J + 1] V ET [1] 18: I ++ 19: menquanto 20: imprima V ET [3] Para os dados 56 70 75 82 79 358
verso de 10 de fevereiro de 2008 a
CAP ITULO 31. EXERC ICIOS PRATICOS: 077 - ALGORITMOS O algoritmo TRES dever imprimir a
31.2.4
1: 2:
Algoritmo 4
Algoritmo QU AT RO inteiro M AT [4][5] 3: inteiro C, I, J, LIN, COL 4: leia (C, LIN, COL) 5: I 1 6: enquanto I 4 faa c 7: J 1 8: enquanto (J 5) faa c 9: M AT [I][J] C 10: C C +7 11: J ++ 12: menquanto 13: I ++ 14: menquanto 15: imprima M AT [LIN ][COL] Para os dados 7 3 5
31.3
31.3.1
1: 2: 3:
Exerc cio 3
Algoritmo 1
Algoritmo U M cadeia C[80] inteiro I, J 4: leia(C) 5: I 0 6: J 1 7: enquanto I < 3 faa c 8: se C[J] = ento a 9: I ++ 10: mse 11: J ++ 12: menquanto 13: enquanto C[J] = A faa c 14: imprima C[J] 15: J ++ 16: menquanto Para os dados DOS-VENCIDOS-TAPUIAS-INDA-CHOREM O algoritmo UM deve imprimir
359
31.3.2
1: 2: 3:
Algoritmo 2
Algoritmo DOIS inteiro V ET [6] inteiro SOM A, I 4: pontoutuante M ED 5: leia(V ET ) 6: SOM A 0 7: I 1 8: enquanto I < 7 faa c 9: SOM A SOM A + V ET [I] 10: I ++ 11: menquanto 12: M ED SOM A 6 13: I 1 14: enquanto (I < 7) faa c 15: se V ET [I] > (M ED + 3) ento a 16: imprima V ET [I] 17: mse 18: I ++ 19: menquanto Para os dados 169 186 105 179 160 187 O algoritmo DOIS dever imprimir a
31.3.3
1: 2:
Algoritmo 3
Algoritmo T RES inteiro V ET [6] 3: inteiro I, J 4: I 2 5: enquanto I 6 faa c 6: leia V ET [I] 7: I ++ 8: menquanto 9: I 3 10: enquanto (I 6) faa c 11: V ET [1] V ET [I] 12: J I 1 13: enquanto (V ET [J] > V ET [1]) faa c 14: V ET [J + 1] V ET [J] 15: J 16: menquanto 17: V ET [J + 1] V ET [1] 18: I ++ 19: menquanto 20: imprima V ET [4] Para os dados 55 45 42 37 59 360
verso de 10 de fevereiro de 2008 a
CAP ITULO 31. EXERC ICIOS PRATICOS: 077 - ALGORITMOS O algoritmo TRES dever imprimir a subsectionAlgoritmo 4 1: Algoritmo QU AT RO 2: inteiro M AT [4][5] 3: inteiro C, I, J, LIN, COL 4: leia (C, LIN, COL) 5: I 1 6: enquanto I 4 faa c 7: J 1 8: enquanto (J 5) faa c 9: M AT [I][J] C 10: C C +8 11: J ++ 12: menquanto 13: I ++ 14: menquanto 15: imprima M AT [LIN ][COL] Para os dados 4 2 5
O algoritmo QUATRO dever imprimir a sectionRespostas 1 SE-ADUNA190 167 198 44 55 -COIT 154 142 173 79 105 IND 169 186 179 187 45 76
361
362
Cap tulo 32
SAI ENT imprima (SAI) CC LECAD seno a se (CM < CC) ento a se (ME.CODMOV = A) ento a Erro: , ME.DA.CODIGO, nao existe para alterar seno a se (ME.CODMOV =E) ento a Erro: , ME.DA.CODIGO, nao existe p/ excluir seno a SAI.CODIGO ME.DA.CODIGO SAI.NOME ME.DA.NOME SAI.IDADE ME.DA.IDADE SAI.DIVIDA ME.DA.DIVIDA imprima (SAI) mse mse CM LEMOV seno a se (ME.CODMOV = I) ento a Erro: ,ME.DA.CODIGO,ja existente SAI ENT imprima (SAI) seno a se (ME.CODMOV = A) ento a SAI ENT se (ME.DA.NOME = ) ento a SAI.NOME ME.DA.NOME mse se (ME.DA.IDADE = 0) ento a SAI.IDADE ME.DA.IDADE mse se (ME.DA.DIVIDA = 0.0) ento a SAI.DIVIDA ME.DA.DIVIDA mse imprime (SAI) mse mse CC LECAD CM LEMOV mse mse menquanto m algoritmo
CAP ITULO 32. EXERC ICIO PRATICO: 084 BALANCE LINE 12carmem 13felipe 15jorge 17antonio 19elaine 20luis 24kica 26ana 27sara 28paulo 30sara 31jose 32paula 37felipe 39zuza 43kica 44carmem 46luis 48kica 49kica 50pedro 16 609.00 15 922.00 21 117.00 20 377.00 21 609.00 23 1015.00 15 602.00 15 972.00 28 1016.00 16 372.00 16 406.00 16 766.00 27 384.00 16 279.00 26 259.00 15 232.00 17 1082.00 19 296.00 25 792.00 16 991.00 29 791.00 E E E I A A A A A A A I I I I A I E E I I 9 11 12 14 15 20 21 23 24 25jorge 26 29 30 34 35 39biba 42 43 44 45 46carmem 0 .00 0 .00 0 .00 22 1041.00 15 .00 21 .00 24 .00 18 466.00 27 1049.00 19 .00 15 919.00 19 283.00 19 791.00 23 444.00 22 440.00 21 .00 28 825.00 0 .00 0 .00 21 594.00 26 440.00
4. Considere os seguintes dados: ==== CADASTRO 5joao 22 7jane 25 8paulo 29 10jane 24 16elaine 27 17paulo 20 18biba 23 22paula 16 23kica 28 24carmem 29 29hugo 16 31biba 19 32helio 21 33sara 29 34zuza 20 35pedro 24 ==== 558.00 431.00 673.00 228.00 669.00 855.00 885.00 558.00 556.00 934.00 685.00 126.00 932.00 537.00 615.00 745.00 ==== MOVIMENTO ==== E 1 0 .00 I 2 27 1058.00 A 3hugo 18 .00 A 4jorge 22 .00 E 9 0 .00 I 10 25 364.00 E 11 0 .00 I 12jose 25 971.00 I 15 22 736.00 I 18 21 963.00 E 19 0 .00 E 20 0 .00 I 25sara 28 694.00 E 27 0 .00 A 31 23 927.00 I 32 17 694.00 365
88-08, Pedro Kantek
CAP ITULO 32. EXERC ICIO PRATICO: 084 BALANCE LINE 37felipe 38jane 40ana 41hugo 43felipe 46sara 47paula 48carmem 49elaine 21 745.00 16 406.00 18 1097.00 25 971.00 29 491.00 27 615.00 15 212.00 27 331.00 24 685.00 I A I E I E I I A 34 36 37 40 44 47 48 49 50 29 1075.00 18 .00 17 856.00 0 .00 22 492.00 0 .00 25 764.00 19 930.00 15 .00
6. Considere os seguintes dados: ==== CADASTRO ==== 1jose 19 629.00 2jose 18 736.00 5zuza 23 191.00 6elaine 16 653.00 8joao 15 211.00 10kica 18 764.00 11helio 28 578.00 12joao 18 533.00 13hugo 20 250.00 17carmem 24 440.00 18zuza 16 218.00 19kica 19 218.00 20elaine 18 861.00 23zuza 29 466.00 24jane 27 861.00 25luis 19 218.00 27paula 18 767.00 38helio 28 368.00 39paula 16 498.00 40sara 27 465.00 41jorge 24 528.00 43paulo 23 549.00 47biba 22 250.00 49luis 16 528.00 50biba 24 1060.00 ==== MOVIMENTO E 1 0 E 2 0 E 3 0 E 4 0 A 11 21 I 14hugo 19 E 15 0 E 19 0 A 22hugo 23 I 23 26 A 26 24 A 27joao 29 I 28 29 E 33 0 A 34 16 A 36 29 E 38 0 A 41 27 E 43 0 E 44 0 E 45 0 E 46 0 I 47 18 A 48 18 I 49 26 ==== .00 .00 .00 .00 650.00 232.00 .00 .00 .00 922.00 932.00 .00 740.00 .00 .00 112.00 .00 .00 .00 .00 .00 .00 506.00 .00 424.00
366
8. Considere os seguintes dados: ==== CADASTRO 2antonio 29 3helio 29 5zuza 24 6carmem 24 7jose 15 8carmem 29 9elaine 18 10hugo 28 15ana 26 16ana 26 18pedro 20 20ana 28 21paulo 21 23felipe 25 25felipe 29 31joao 23 32antonio 25 35sara 26 39jorge 16 40pedro 22 41sara 25 42hugo 21 44paula 27 45kica 27 46ana 21 ==== 653.00 868.00 539.00 392.00 963.00 807.00 704.00 454.00 217.00 796.00 563.00 231.00 886.00 617.00 430.00 724.00 994.00 388.00 614.00 621.00 307.00 228.00 358.00 706.00 563.00 ==== MOVIMENTO I 3 23 E 4 0 E 6 0 A 8 21 E 10 0 A 11 26 E 14 0 I 15 29 I 19jose 22 E 20 0 A 23 21 E 24 0 I 30 26 E 31 0 I 33ana 18 E 34 0 E 36 0 E 37 0 E 39 0 A 40 18 A 43 24 I 45 28 I 46 21 I 48 21 E 50 0 ==== 775.00 .00 .00 .00 .00 781.00 .00 941.00 389.00 .00 538.00 .00 945.00 .00 805.00 .00 .00 .00 .00 523.00 .00 538.00 600.00 693.00 .00
32.1
Respostas
367
CAP ITULO 32. EXERC ICIO PRATICO: 084 BALANCE LINE 2 / 13felipe / 24kica / 50pedro
22 21 24
27 27 21
368
Cap tulo 33
4. Z [ Z [ 5. V [ V [
3 + A 5 ] ]
6. T [ T [ Z [ 10 + 7. T [ 16 8. Z [ T [ 2 ]
8 ] ] - 5 6 + 1
9. Z [ Z [ T [ 10. V [ 3 + 1 3 +
] - 6 2 8 + ] - M ] ] + 3 1 ] +
11. T [ V [
12. Z [ T [ T [ 13. V [ 6 + H
14. Z [ V [
7 ] +
] + 7 ] ] - M ] - A
11 1 14
15. Z [ V [ Z [ 13 + E 16. V [ 8 + 2 ] ] +
2 1
] + E ] + 8
1 9 8
3 ] ] ] - K 2 ] + 2
] + E 1 ] - K
0 -7 10
21. T [ V [ V [ 12 ] 22. V [ 4 1 ] - M ] +
] -
23. V [ V [
4 - M
2 ] -
] - 9 1 ] - M ]
-4 8
24. T [ Z [ T [
4 - E
33.1
Exerc cio 1
5 3 2 3 6 5 4 4 7 8 3 2 8 3 1 4 9 2 7 15 10 2 12 14 11 6 10 11 12 2 9 10 13 14 1 12 14 8 19 16 15 12 16 6 16 20 19 18
Sejam os vetores: 1 2 3 4 V 6 8 8 5 T 6 4 6 8 Z 8 4 2 5
E, sejam ainda A = 1; E = 5; H = 7; K = 1; M = 1 Resolva, Z [ V [ 8 ] + M 2 ] - 8 ________ ________ ________ 2 1 ] - H ] - A ] - 1 ] ] + 4 ________ ________ ________ ________ 2 ] - K ] + 1 ] + 4 ________1.________ ________ ________
V [ 12 ] - 7 V [ T [ Z [ Z [ 7 8 +
T [ V [ Z [ 10 ] - A V [ 13 + K V [ Z [ ] + 5 ] +
] + M
3 + E
T [ T [ V [ V [ 5 - H
3 + A ]
] - A
370
CAP ITULO 33. EXERC ICIOS PRATICOS: 110 - INDEXACAO E INDIRECAO V [ V [ 2 - A ] + A 1 ] ] ] + 6 ________ ________ ________ 1 ] + M ] ] ] - H ________ ________ ________2.________ ] - 6 ] + E ] ] ________ ________ ________ ________ 1 ] ] - 6 ________ ________ ] 2 ] ] 1 ] + 3 ________ ________3.________ ________ ________ 2 ] + 1 ] ________ ________ ________ 2 ] 1 ] ________ ________ ] ] + 2 ] - 8 ________4.________ ________ ________ 1 ] + A ] ] - 3 2 ] + K ] + A ________ ________
V [ T [ Z [ Z [ 11 - K V [ T [
4 ] ]
2 ] -
T [ V [ V [ T [ 13 + A
3 + M ] - A 2
Z [ V [ 14 ] + V [ V [ V [ Z [ 5 + 1 3 -
2 + A ] - H 1
T [ V [
] ] ] +
Z [ T [ V [ T [ 6 1
5 + K ] + A 2
T [ V [ 10 ] +
V [ V [ T [ 13 V [ 10 - E ] + E
T [ Z [ 11 ] ] + 6 T [ V [ Z [ Z [ 10 + M T [ T [ 6 ] + ]
7 ] ] - K
Z [ Z [ T [ 10 ] Z [ 18 + H V [ T [ ] - 1
9 - E
] + A
T [ Z [ Z [ V [ 1 ] - 9 7 +
2 ] - M
V [ V [
Z [ V [ Z [
9 - K
371
CAP ITULO 33. EXERC ICIOS PRATICOS: 110 - INDEXACAO E INDIRECAO T [ 8 - K ] - 7 2 ] ] + M 1 ] ] ________ ________ ________ ________5.________ ] - E ] 1 ] 2 ] ________ ________ ________ 2 ] + 1 ] 1 ] ________ ________ ________ ] + A 2 3 ] + 8 ] + 4 2 5 ] - H 6 ________ ________6.________
V [ Z [
3 -
T [ Z [ V [ V [ 5 ] + 5
5 ] +
V [ V [ 10 + A T [ V [ T [ V [ 17 V [ T [ 2 7 -
3 + K ] - 3 1 6 ] 2 2 + 2
] -
] + 1
Z [ Z [ V [ V [ 8 + 2 9 +
] + E
V [ Z [
Z [ V [ V [ Respostas 1
] + E
33.2
Exerc cio 2
7 8 9 10 11 12 13 2 2 13 9 8 20 13 3 1 20 18 11 4 6 6 5 2 8 7 17 19 E = 1; H = 7; K = 8; 14 7 2 6 M 15 16 7 7 7 9 14 20 = 0 Resolva, ________ ________ 2 ] - 8 ] + 2 ] - A ________ ________ ________ 2 ] ________ ________ ________1.________
T [ 13 -
T [ Z [ 15 + A T [ V [
1 ] + E 7 ] + 8
] + 7 1 ] ] +
V [ Z [ V [ T [ 4 + E
V [ V [
9 - M
] ]
372
CAP ITULO 33. EXERC ICIOS PRATICOS: 110 - INDEXACAO E INDIRECAO T [ Z [ T [ T [ 10 ] + 7 V [ T [ 11 ] - E Z [ V [ V [ Z [ 16 2 ] + 7 6 + 1 ] + 1 ] + E ] ________ ________ ________ ________ ________ ] + 2 1 ] ] - A ] ________ ________ ________2.________ 2 ] - A ] - K ] + 3 ________ ________ ________ 1 ] ] ] + A ________ ________ ________ 2 ] - 2 ] + 2 ] ] ________ ________3.________ ________ ] - M ] + E ] - M ________ ________ ________ 1 ] + E ] 1 ] + H ________ ________ ________ ________4.________ ] ] ________ ________
4 ] ] ] ]
V [ T [ 10 - E Z [ V [ V [ Z [ 15 + M V [ Z [
3 + ] - M 1 6 -
] - M
8 -
] 1
V [ T [ Z [ Z [ 16 1
] + K
] + K 1 ] 2
V [ V [ 17 -
Z [ T [ T [ 10 + Z [ 13 ] T [ Z [ 11 ] +
] + M
V [ T [ V [ 15 - H V [ 10 + T [ Z [ 2 8 ] - 6 2 1 + ] - H ] +
] + M 2
V [ Z [ T [ V [ 12 + A
] - A
V [ T [ 15 + E T [ Z [ Z [ T [ 1 + 1
2 - E ] + 6 1
] + H
Z [ V [ 10 -
] ] - E 1 ] - K
V [ V [ Z [ 13 Z [ 6 ]
373
CAP ITULO 33. EXERC ICIOS PRATICOS: 110 - INDEXACAO E INDIRECAO T [ V [ 6 2 ] ] + A ] + 2 ] 1 ] + 8 ________ ________ ________ ] + 7 1 ] - M ] + M ] ________ ________ ________5.________ 1 + 1 ] - A ] ________ ________ ________ ________ ] ________ ________ ] - 8 ] + 2 4 ] 5 6 ________ ________6.________
Z [ V [ V [ 15 - E V [ 6 ]
V [ T [ 13 ] + H V [ Z [ Z [ Z [ 14 ] T [ V [ 6 +
T [ T [ T [ 16 ] + H V [ 17 - H ] + 8
] ] - E
T [ T [ 10 - H T [ Z [ Z [ T [ 11 + T [ V [ 2
] ] + K
6 ] ] + M ] + E 2
4 ] +
V [ V [ Z [ Respostas 1 2
4 ] - M 3
33.3
Exerc cio 3
5 3 3 6 6 5 8 5 7 4 5 3 8 5 3 3 9 5 15 18 10 18 13 9 11 20 18 11 12 2 6 14 13 5 10 1 14 14 9 14 15 14 15 7 16 4 19 5
Sejam os vetores: 1 2 3 4 V 3 4 3 2 T 3 2 7 2 Z 4 7 2 5
E, sejam ainda A = 3; E = 6; H = 3; K = 3; M = 5 Resolva, V [ 13 + H V [ V [ 4 - H 8 2 7 + ] ] - H ] + M 1 ] ] - A 1 1 ] - H ________ ________ ________ ________ ________ ] - A 374 ________
verso de 10 de fevereiro de 2008 a
V [ V [ Z [ V [
8 - M
] + 6
T [ V [ V [
5 -
] ] - A
V [ 16 -
] ] + A ] - 9 1 ] + K ]
________ ________1.________ ________ ________ ________ ] + M ] ] - A ________ ________ 1 ] + ] 1 ] - E ] ________ ________ ________2.________
T [ T [ 11 + E T [ Z [ T [ Z [ 7 + 1
8 - K ] + 5 ]
] -
V [ V [ 14 ] - K
V [ T [ Z [ 18 - A T [ 2 + 2 6 + ] + 5 2
T [ Z [
] + 2
T [ Z [ T [ 10 + V [ 12 ] V [ V [ 14 T [ V [ V [ V [ 4 + 2 8 + 1
] +
] 2 ] + 4
7 ] + A ] 2 ] ] 1
] +
V [ Z [
T [ T [ Z [ 15 Z [ 16 ] V [ Z [ 6 - E
] -
] ]
Z [ T [ T [ 12 ] - K V [ 9 2 ]
] + K
V [ V [
8 ] ] - H ] ] 2 ] - K
Z [ Z [ V [ 13 + A V [ 7 ] + E 6 ] + K
________ ________
V [ Z [
] + 1 2 ] - H ] - M ]
V [ T [ V [ 15 V [ 2 + A ]
V [ V [
7 - H
] - K
] - 5 375
________4.________
88-08, Pedro Kantek
T [ Z [ V [ V [ 3 ]
1 ] ] ] + H
________ ________
T [ V [
1 + A
] ] + 5 ] + A ]
Z [ Z [ T [ V [ 13 - H
4 ] - E ] + A ] +
T [ T [ 17 - K
] - E ]
T [ V [ Z [ 14 ] ] + H Z [ 8 ] - E 8 + E ] 1
V [ V [
] + 1 1 ]
Z [ Z [ Z [ 12 + M V [ 13 ] - K T [ V [ 19 - A Z [ Z [ V [ Z [ 5 - A
] ] +
] - H 1
] ] ] - 8
1 + ] - M
] - A
Z [ Z [ 18 + H Z [ T [ V [ Respostas 1 2
] - K
] - M 2 4 ] + 2 5 ] 6
________ ________6.________
8 + E
] 3
33.4
1 2 3
Respostas
37 64 56 82 99 68 47 89 48 72 72 30 17 78 67 51 69 37
376
Cap tulo 34
A tabela uma excelente ferramenta para ajudar na programao. Sempre que se e ca necessita consultar, acumular, separar em classes e tarefas similares, a tabela a soluo. e ca A tabela pode ser de 1 dimenso e neste caso chamada vetor. Por exemplo, Se a e sabendo existirem 1200 alunos no curso, quisermos saber quantos alunos h em cada um a dos 5 anos do curso, e supondo que cada aluno assim identicado e informao ca signicado cdigo o de o nmero unico que identica o u matricula aluno na instituio ca nome do aluno srie e do em que ano do curso ele est (ina aluno teiro?) Como fazer ? Basta criar um vetor 1: inteiro QTDAL [5] 2: QTDAL 0 E, ao processar cada aluno, incluir o seguinte comando 1: QTDAL [serie-aluno] QTDAL [serie-aluno] + 1 Um segundo caso, algo mais complexo, ocorre quando os identicadores da classe no so conhecidos de antemo. Por exemplo, suponhamos querer saber qual o local de a a a nascimento (munic pio) mais freqente entre os 1200 alunos do curso. u Aqui, uma esperteza: E de se esperar que existam uns poucos munic pios que concentrem a maioria das pessoas (esta regra conhecida como Regra de Pareto). O problema e que no sabemos quais so. Naturalmente, no precisamos criar um vetor com 5000 e a a a nmeros (5000 so os munic u a pios brasileiros, nmero aproximado. u Agora, o ndice de acesso no mais conhecido de antemo e precisa ser localizado. a e a Suponhamos existir o campo MUNALU, como sendo o cdigo numrico do munic o e pio onde o aluno nasceu. Suponhamos que um limite exagerado (para a quantidade de munic pios) seja 200. Criaremos dois vetores, o primeiro contendo os cdigos de munic o pio que forem surgindo e o segundo para guardar os contadores. Ambos os vetores sero acessados a pelo mesmo ndice. 377
A partir deste ponto, os dois vetores esto prontos para receber os dados. Para cada a MUNALU lido, deve-se pesquisar o vetor MUNICIPIO da matriz at que uma das trs e e coisas acontea: a) Achar um MUNICIPIO = MUNALU; b) Achar um MUNICIPIO = c 0; c) Ultrapassar o limite de I = 200. A primeira indica que este munic pio j havia aparecido e seu contador deve ser a incrementado em uma unidade. A segunda, informa ser a primeira vez que este munic pio est aparecendo e seu contador deve ser 1. A terceira, no deveria ocorrer e se acontecer a a indicar um erro. a Eis o algoritmo inteiro MUNICIPIO[200], CONTADOR[200] para I de 1 at 200 faa e c MUNICIPIO[I] CONTADOR[I] 0 mpara leia MUNALU enquanto MUNALU 0 faa c I1 enquanto MUNALU = MUNICIPIO[I] MUNICIPIO[I] = 0 faa c I++ se I> 200 ento a ...erro... mse menquanto CONTADOR[I] CONTADOR[I] + 1 leia MUNALU menquanto // achar o mais freqente u MELHOR QUAL 0 I1 enquanto I 200 MUNICIPIO[I] = 0 faa c se CONTADOR[I] > MELHOR ento a MELHOR CONTADOR[I] QUAL I mse I++ menquanto imprima MUNICIPIO[QUAL] Operaes fundamentais: incluso Para incluir um novo elemento em uma tabela, co a duas condies devem ocorrer: co a) Deve haver espao na estrutura; b) A chave a incluir deve ser nova (isto conhecido c e como atributo UNIQUE). Em geral, o primeiro ponto controlado por uma varivel global, por exemplo QTe a DUSADA, que comea com zero, incrementada a cada incluso e pode crescer at o c e a e limite (200 no exemplo acima). Note-se que na incluso de tabelas que sofrero busca a a linear ordenada, a tabela dever ser mantida ordenada, o que talvez implique reordea naoes. c
88-08, Pedro Kantek
378
CAP ITULO 34. EXERC ICIOS PRATICOS: 116 - MANUSEIO DE TABELAS Excluso Se necessita diminuir o contador de linhas vlidas e eventualmente reagrupar a a as linhas (caso a linha a excluir no seja a ultima), para evitar a existncia de buracos a e na tabela Pesquisa Busca Linear Para este algoritmo o conjunto de chaves no mantido ordenado. O a e algoritmo bsico : a e 1: funo BUSCALIN(inteiro CHAVE, inteiro TABELA[num]) ca 2: inteiro i 1; qtd 0 3: enquanto i tamanho(TABELA) faa c 4: qtd qtd + 1 5: se CHAVE = TABELA[i] ento a 6: ...ACHOU... 7: i tamanho(TABELA) 8: mse 9: qtd qtd + 1 10: i++ 11: menquanto 12: devolva qtd 37 BUSCALIN 98 BUSCALIN 3 BUSCALIN 62 45 61 78 1 94 30 28 4 31 33 92 37 2 23 e 70 98 81 46 29 12 65 40 72 14 20 4 82 2 30 e 29 66 71 42 48 44 69 35 30 37 94 68 36 19 21 e 25 3 30
Busca linear ordenada Neste algoritmo, o conjunto de chaves dever estar ordenado. a Eis o algoritmo: 1: funo BUSCALINORD (inteiro CHAVE, inteiro TABELA[num]) ca 2: inteiro i 1; qtd 0 3: enquanto (i tamanho(TABELA)) (CHAVE > TABELA[i]) faa c 4: qtd qtd + 2 5: i++ 6: menquanto 7: se CHAVE = TABELA[i] ento a 8: ...ACHOU... 9: mse 10: devolva qtd 96 BUSCALINORD 5 10 26 34 39 48 56 60 68 70 73 89 92 93 96 e 58 BUSCALINORD 1 2 8 10 12 41 42 47 49 53 58 59 60 62 85 e 96 BUSCALINORD 2 12 21 26 27 37 43 46 52 54 65 79 83 84 89 e 28 20 30
Busca linear com sentinela A tabela no precisa estar ordenada, e a busca gasta a apenas a metade dos testes da busca linear. A sentinela a chave que se busca e que forosamente inclu ao nal da tabela. Assim, a sa do lao sempre e c da da c se dar pela igualdade de chaves. Se a chave procurada for encontrada no meio a da tabela, ...ACHOU... Se for encontrada no nal da tabela, (onde foi explicitamente colocada) porque ela no se encontrava l antes do in e a a cio do algoritmo. 1: funo BUSCALINSEN (inteiro CHAVE, inteiro TABELA[num]) ca 2: inteiro i 1; qtd 0 3: TABELA[ULTIMO+1] CHAVE {note que ULTIMO no alterado} a e
verso de 10 de fevereiro de 2008 a
379
CAP ITULO 34. EXERC ICIOS PRATICOS: 116 - MANUSEIO DE TABELAS enquanto CHAVE = TABELA[i]) faa c qtd++ i++ menquanto se i = (ULTIMO + 1) ento a ...ACHOU... mse 11: devolva qtd
4: 5: 6: 7: 8: 9: 10:
38 BUSCALINSEN 24 35 91 18 8 72 10 88 27 54 28 34 43 3 38 e 14 54 BUSCALINSEN 63 17 35 68 27 86 54 53 5 78 41 58 44 51 25 e 6 61 BUSCALINSEN 75 67 51 60 85 38 49 74 73 78 66 35 24 4 2 e 15 Alguns dados experimentais Para o teste a seguir, z 6 passagens de 1000 chaves. Para cada mtodo, em cada passagem foram 3 tentativas: as primeiras 2 com sucesso e a e passagem Lin Lin Ord Lin Sen 1 1265.3 1063.3 817.3 2 1777.3 749.3 621.7 3 1832.0 1314.0 674.0 ultima para uma chave inexistente. Eis os dados: 4 1244.7 613.3 634.7 5 1200.7 1186.7 607.3 6 948.0 832.7 770.3 mdia e 1378.0 959.9 687.6
34.2
Calcule:
Exerc cio 1
2 44 67 37 73 12 60 17 65 62 54 97 6 83 81 5 8 14 18 25 31 32 41 62 65 66 71 73 76 99 65 86 60 18 10 67 87 98 56 5 80 8 16 52 37
34.3
Calcule:
Exerc cio 2
77 92 70 35 89 31 59 48 64 80 9 37 11 41 72 1 4 24 25 27 28 29 30 33 35 40 43 50 53 56 3 69 18 25 88 28 97 35 13 72 39 38 52 51 73
34.4
Calcule:
Exerc cio 3
39 38 52 71 53 23 41 15 66 89 4 48 22 21 11 4 6 14 15 20 46 50 51 59 60 77 80 87 90 92 63 52 64 99 60 20 28 81 8 49 30 26 50 10 68 380
34.5
1 2 3
Respostas
13 3 19 10 10 24 7 15 4
381
382
Cap tulo 35
Excluso de itens em tabelas desordenadas H duas estratgias aqui: a primeira a a e eliminar o item puxando os que caram abaixo da excluso para tampar o e a buraco. 1: funo EXCLUSAO1NORD (inteiro CHAVE) ca 2: inteiro i 1 3: enquanto TABELA[i] = CHAVE faa c 4: i++ 5: se i > ULTIMO ento a 6: ...erro... 383
mse menquanto enquanto i < ULTIMO faa c TABELA[i] TABELA [i+1] i++ menquanto ULTIMO ULTIMO - 1
Qual a quantidade de operaes para fazer uma excluso do tipo 1; qual o nmero co a u mdio de operaes para achar um item que est na tabela e qual o nmero mdio e co a u e de operaes para concluir que um dado nmero no est na tabela co u a a elementos ops para ops para ops para excluso a achar concluir que no a est a 100 10.000 1.000.000 n
A segunda estratgia incluir algum indicador (f iller) que informe que o item e e foi eliminado. 1: funo EXCLUSAO2NORD (inteiro CHAVE) ca 2: inteiro i 1 3: enquanto TABELA[i] = CHAVE faa c 4: i++ 5: se i > ULTIMO ento a 6: ...erro... 7: mse 8: menquanto 9: TABELA[i] 9999999 Qual a quantidade de operaes para fazer uma excluso do tipo 2; qual o nmero co a u mdio de operaes para achar um item que est na tabela e qual o nmero mdio e co a u e de operaes para concluir que um dado nmero no est na tabela co u a a elementos ops para ops para ops para excluso a achar concluir que no a est a 100 10.000 1.000.000 n
A vantagem desta segunda alternativa que a excluso mais rpida, mas em e a e a compensao as buscas tendem a car mais demoaradas. ca Busca binria Conjunto ordenado, timo desempenho a o 1: funo BUSCABIN(inteiro CHAVE) ca
88-08, Pedro Kantek
384
inteiro INIC,METADE,FIM INIC 1 FIM ULTIMO repita METADE ((INIC + FIM)/2) se CHAVE TABELA[METADE] ento a FIM METADE - 1 seno a INIC METADE + 1 mse at TABELA[METADE] = CHAVE INIC > FIM e se TABELA[METADE] = CHAVE ento a devolva METADE seno a devolva -1 mse
Qual a quantidade de operaes para fazer pesquisa e qual o nmero mdio de co u e operaes para concluir que um dado nmero no est na tabela co u a a elementos ops para ops para conpesquisa cluir que no a est a 100 10.000 1.000.000 n
Incluso em tabela ordenada A contrapartida para poder fazer a busca ordenada a criar e manter a tabela em ordem. Para isso, a incluso de novos elemene a tos deve ocorrer em seus locais espec cos e no no nal, como vimos acima. a
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
funo INCLUSAOORD (inteiro CHAVE) ca ULTIMO ULTIMO + 1 se ULTIMO > num ento a ...erro... mse inteiro i 1 enquanto TABELA[i] < CHAVE faa c i++ menquanto k ULTIMO enquanto k > i faa c TABELA[k] TABELA[k-1] k menquanto TABELA[k] CHAVE
Qual a quantidade de operaes para fazer uma incluso em tabela ordenada no caso co a de uma tabela de
verso de 10 de fevereiro de 2008 a
385
CAP ITULO 35. EXERC ICIO PRATICO: 119 - MANUSEIO DE TABELAS II elementos 100 10.000 1.000.000 n operaoes c
35.1
Exerc cio 1
Escreva a seguir um algoritmo de uma funo que Receba uma matriz global, de nome ca MAT-ENT, cujo contedo : u e MAT-ENT uma matriz de 3 colunas, sendo todas inteiros, formada por e cdigo da transao valor da transao cdigo da cidade o ca ca o O algoritmo dever criar e imprimir uma segunda matriz, de apenas duas colunas a MAT-SAI uma matriz de 2 colunas, sendo ambos inteiros, formada por e cdigo da cidade total dos valores de transaes o co Nesta matriz de sa da, os valores de dbito (cd 2) devero ser totalizados, e quando e o a houver quebra de cidade, uma nova linha deve ser introduzida na matriz de saida com o total. Note que a matriz de entrada est ordenada por cidade. (ENUNCIADO 2) a
35.2
Exerc cio 2
Escreva a seguir um algoritmo de uma funo que Receba uma matriz global, de nome ca MAT-VENDAS, cujo contedo : u e MAT-ENT uma matriz de 3 colunas, sendo todas inteiros, formada por e nmero de parcelas valor da transao cdigo da cidade u ca o O nmero de parcelas pode ser de 1 a 6. u O algoritmo dever criar e imprimir uma segunda matriz, de apenas duas colunas a MAT-SAI uma matriz de 2 colunas, por 2 linhas sendo ambos inteiros, formada por e nmero de parcelas quantidade de vendas u Nesta matriz de sa da, devero ser mostrados o nmero de parcelas campeo positivo a u a (em quantidade de vendas) e o campeo negativo (idem), associado ao nmero de vendas a u de cada um. (ENUNCIADO 3)
35.3
Exerc cio 3
Escreva a seguir um algoritmo de uma funo que Receba uma matriz global, de nome ca MAT-ENT, cujo contedo : u e MAT-ENT uma matriz de 3 colunas, sendo todas inteiros, formada por e cdigo do estado rea do estado populao do estado o a ca O algoritmo dever imprimir o cdigo do estado de maior densidade populacional e o a o cdigo do estado de menor densidade populacional, imprimindo tambm quantas vezes o e o primeiro mais populoso do que o segundo. (ENUNCIADO 4) e
88-08, Pedro Kantek
386
35.4
Exerc cio 4
Escreva a seguir um algoritmo de uma funo que Receba duas matrizes globais, de ca nomes MAT1 e MAT2, cujos contedos so: u a MAT1 uma matriz de 3 colunas, sendo todas inteiros, formada por e cdigo da transao valor da transao cdigo da cidade o ca ca o o MAT2 uma matriz de 2 colunas, sendo ambos inteiros, formada por cdigo da cidade e O algoritmo dever criar e imprimir uma terceira matriz, de apenas duas colunas a MATSAIDA uma matriz de 2 colunas, sendo ambos inteiros, formada por e estado onde foi efetuada a transao valor da transao ca ca Nesta segunda matriz, apenas as transaes de dbito devero ser inclu co e a das. (ENUNCIADO 1) estado a que pertence
387
388
Cap tulo 36
Voc no precisa determinar onde est o erro (se bem que isso um interessante e a a e desao), mas precisa apenas determinar que o algoritmo est errado. a Uma boa maneira de vericar isto acompanhar as 3 execues do algoritmo (correto) e co que acompanham o enunciado. Trata-se de algo similar a um chines reverso. Identique qual(is) dos 5 algoritmos esto corretos denindo An como: A1 1 se o a algoritmo 1 est correto e A1 0 seno. Idem para A2 , A3 , A4 e A5 . a a Responda o resultado R R = (A1 1) + (A2 2) + (A3 4) + (A4 8) + (A5 16) Algoritmo 1 Escreva uma funo que receba um nmero N (inteiro e positivo, no ca u a e preciso testar) e devolva a cadeia primo se ele for PRIMO e no primo seno. a a 1: funcao A01PRIM (N : inteiro) : inteiro 2: M,X,T : inteiro 3: M 0 4: X teto(N 0.5 ) 5: para T de AAA a X faa c 6: Z BBB mod T 7: se Z = CCC ento a 8: MM+1 9: mse 10: mpara 389
CAP ITULO 36. EXERC ICIOS PRATICOS: 125A - CORRECAO DE ALGORITMOS se DDD = 0 ento a devolva EEE seno a devolva FFF mse mfuncao Esta funcao correta, deu os seguintes resultados: A01PRIM(30) = NAOPRIMO ; A01PRIM(39) = NAOPRIMO ; A01PRIM(31) = PRIMO . As substituies a fazer so: co a AAA=2 ; BBB=N ; CCC=0 ; DDD=M ; EEE=primo e FFF=nao primo .
11: 12: 13: 14: 15: 16:
Algoritmo 2 Escreva uma funo que receba um nmero N (inteiro e positivo, no ca u a preciso testar) e devolva um inteiro contendo a soma dos divisores inteiros de N, e excluindo-se desta soma ele mesmo e a unidade. 1: funcao A02SOMD (N : inteiro) : inteiro 2: M,T,Z : inteiro 3: M AAA 4: para T de BBB a CCC faa c 5: Z DDD mod EEE 6: se FFF = Z ento a 7: M GGG + HHH 8: mse 9: mpara 10: devolva III 11: mfuncao Esta funcao correta, deu os seguintes resultados: A02SOMD(16) = 14 ; A02SOMD(89) = 0 ; A02SOMD(29) = 0 . As substituies a fazer so: co a AAA=0 ; BBB=2 ; CCC=N-1 ; DDD=N ; EEE=T ; FFF=0 ; GGG=M ; HHH=T ; III=M . Algoritmo 3 Escreva uma funo que receba dois inteiros N e X Se X for maior que ca zero, a funcao deve calcular e devolver o nmero N X e se no for deve devolver -1. u a 1: funcao A03POTE (N,X : inteiro) : inteiro 2: R : inteiro 3: R AAA 4: se X > 0 ento a 5: enquanto BBB >0 faa c 6: R R CCC N 7: X X DDD 1 8: menquanto 9: devolva EEE 10: seno a 11: devolva FFF 12: mse 13: mfuncao Esta funcao correta, deu os seguintes resultados: A03POTE(3 4) = 81 ; A03POTE(5 6) = 15625 ; A03POTE(4 6) = 4096 . As substituies a fazer so: co a
88-08, Pedro Kantek
390
CAP ITULO 36. EXERC ICIOS PRATICOS: 125A - CORRECAO DE ALGORITMOS AAA=0 ; BBB=X ; CCC=vezes (multiplicacao) ; DDD=- (subtracao) ; EEE=R ; FFF=-1 . Algoritmo 4 Escreva uma funo que receba trs inteiros D, M e A representando ca e uma data (D o dia, M o ms e A o ano). O algoritmo deve devolver 1 se a data e e e e estiver errada e 0 seno. a 1: funcao A04DATA (D, M, A : inteiro) : inteiro 2: biss, erro : inteiro 3: se 0 = (A mod AAA) ento a 4: biss1 5: seno a 6: se 0 = (BBB mod 100) ento a 7: biss0 8: seno a 9: se 0 = (A mod 4) ento a 10: bissCCC 11: seno a 12: bissDDD 13: mse 14: mse 15: mse 16: erro 0 17: se M = EEE ento a 18: se biss = 1 ento a 19: se D > FFF ento a 20: erro 1 21: mse 22: seno a 23: se D > GGG ento a 24: erro 1 25: mse 26: mse 27: seno a 28: se (M=4)(M=6)(M=9)(M=11) ento a 29: se D > HHH ento a 30: erro 1 31: mse 32: seno a 33: se D > III ento a 34: erro 1 35: mse 36: mse 37: mse 38: se M > JJJ ento a 39: erro 1 40: mse 41: retorne erro 42: mfuncao Esta funcao correta, deu os seguintes resultados: A04DATA(29 10 7202) = 0 ; A04DATA(29 2 2012) = 0 ; A04DATA(29 2 1800) = 1 . As substituies a fazer so: co a
verso de 10 de fevereiro de 2008 a
391
CAP ITULO 36. EXERC ICIOS PRATICOS: 125A - CORRECAO DE ALGORITMOS AAA=400 ; BBB=A (ano) ; CCC=1 e DDD=0 ; EEE=2 ; FFF=29 ; GGG=28 ; HHH=30 ; III=31 ; JJJ=12 .
Brinquedos PIRRALHOS ENDIABRADOS um grande distribuidor de pree sentes em todo o pa Recentemente, a empresa teve a oportunidade de comprar pes. quenos brinquedos, todos embalados em caixas retangulares. O objetivo da compra, foi colocar cada brinquedo em uma esfera colorida, para revend-los como surpresa, mais e ou menos como o Kinder ovo. Existem esferas de raios 10, 20 e 30 cm. Cada brinquedo, tem as suas 3 dimenses A, B e C, medidas em cent o metros. Escreva uma funo que ca receba A,B,C e retorne e o raio da menor esfera poss vel. Todos os brinquedos cabero a em uma das esferas. 1: funcao A05DIAG (X, Y, Z : inteiro) : inteiro 2: inteiro diag 3: diag (X AAA ) + (Y AAA ) + (Z AAA ) 4: diag diag 5: se diag > BBB ento a 6: devolva 30 7: seno a 8: se diag > CCC ento a 9: devolva 20 10: seno a 11: devolva 10 12: mse 13: mse 14: mfuncao Esta funcao correta, deu os seguintes resultados: A05DIAG(8 5 5) = 10 ; A05DIAG(28 25 29) = 30 ; A05DIAG(4 5 10) = 10 . As substituies a fazer so: co a AAA=3 ; BBB=40 ; CCC=20 .
Responda
R=
392
36.2
Exerc cio 2
Voc no precisa determinar onde est o erro (se bem que isso um interessante e a a e desao), mas precisa apenas determinar que o algoritmo est errado. a Uma boa maneira de vericar isto acompanhar as 3 execues do algoritmo (correto) e co que acompanham o enunciado. Trata-se de algo similar a um chines reverso. Identique qual(is) dos 5 algoritmos esto corretos denindo An como: A1 1 se o a algoritmo 1 est correto e A1 0 seno. Idem para A2 , A3 , A4 e A5 . a a Responda o resultado R R = (A1 1) + (A2 2) + (A3 4) + (A4 8) + (A5 16) Algoritmo 1 Escreva uma funo que receba um nmero N (inteiro e positivo, no ca u a e preciso testar) e devolva a cadeia primo se ele for PRIMO e no primo seno. a a 1: funcao A01PRIM (N : inteiro) : inteiro 2: M,X,T : inteiro 3: M 0 4: X teto(N 0.5 ) 5: para T de AAA a X faa c 6: Z BBB mod T 7: se Z = CCC ento a 8: MM+1 9: mse 10: mpara 11: se DDD = 0 ento a 12: devolva EEE 13: seno a 14: devolva FFF 15: mse 16: mfuncao Esta funcao correta, deu os seguintes resultados: A01PRIM(17) = PRIMO ; A01PRIM(39) = NAOPRIMO ; A01PRIM(23) = PRIMO . As substituies a fazer so: co a AAA=2 ; BBB=N ; CCC=0 ; DDD=M ; EEE=nao primo e FFF=primo . Algoritmo 2 Escreva uma funo que receba um nmero N (inteiro e positivo, no ca u a preciso testar) e devolva um inteiro contendo a soma dos divisores inteiros de N, e excluindo-se desta soma ele mesmo e a unidade. 1: funcao A02SOMD (N : inteiro) : inteiro 2: M,T,Z : inteiro
verso de 10 de fevereiro de 2008 a
393
CAP ITULO 36. EXERC ICIOS PRATICOS: 125A - CORRECAO DE ALGORITMOS M AAA para T de BBB a CCC faa c Z DDD mod EEE se FFF = Z ento a M GGG + HHH mse mpara 10: devolva III 11: mfuncao Esta funcao correta, deu os seguintes resultados: A02SOMD(16) = 14 ; A02SOMD(86) = 45 ; A02SOMD(29) = 0 . As substituies a fazer so: co a AAA=0 ; BBB=2 ; CCC=N-1 ; DDD=N ; EEE=T ; FFF=0 ; GGG=M ; HHH=T ; III=M .
3: 4: 5: 6: 7: 8: 9:
Algoritmo 3 Escreva uma funo que receba dois inteiros N e X Se X for maior que ca zero, a funcao deve calcular e devolver o nmero N X e se no for deve devolver -1. u a 1: funcao A03POTE (N,X : inteiro) : inteiro 2: R : inteiro 3: R AAA 4: se X > 0 ento a 5: enquanto BBB >0 faa c 6: R R CCC N 7: X X DDD 1 8: menquanto 9: devolva EEE 10: seno a 11: devolva FFF 12: mse 13: mfuncao Esta funcao correta, deu os seguintes resultados: A03POTE(3 6) = 729 ; A03POTE(6 3) = 216 ; A03POTE(6 5) = 7776 . As substituies a fazer so: co a AAA=0 ; BBB=X ; CCC=vezes (multiplicacao) ; DDD=- (subtracao) ; EEE=R ; FFF=-1 . Algoritmo 4 Escreva uma funo que receba trs inteiros D, M e A representando ca e uma data (D o dia, M o ms e A o ano). O algoritmo deve devolver 1 se a data e e e e estiver errada e 0 seno. a 1: funcao A04DATA (D, M, A : inteiro) : inteiro 2: biss, erro : inteiro 3: se 0 = (A mod AAA) ento a 4: biss1 5: seno a 6: se 0 = (BBB mod 100) ento a 7: biss0 8: seno a 9: se 0 = (A mod 4) ento a 10: bissCCC 11: seno a 12: bissDDD
88-08, Pedro Kantek
394
CAP ITULO 36. EXERC ICIOS PRATICOS: 125A - CORRECAO DE ALGORITMOS mse mse mse erro 0 se M = EEE ento a se biss = 1 ento a se D > FFF ento a 20: erro 1 21: mse 22: seno a 23: se D > GGG ento a 24: erro 1 25: mse 26: mse 27: seno a 28: se (M=4)(M=6)(M=9)(M=11) ento a 29: se D > HHH ento a 30: erro 1 31: mse 32: seno a 33: se D > III ento a 34: erro 1 35: mse 36: mse 37: mse 38: se M > JJJ ento a 39: erro 1 40: mse 41: retorne erro 42: mfuncao Esta funcao correta, deu os seguintes resultados: A04DATA(28 11 7636) = 0 ; A04DATA(27 2 1852) = 0 ; A04DATA(29 2 2000) = 0 . As substituies a fazer so: co a AAA=400 ; BBB=A (ano) ; CCC=1 e DDD=0 ; EEE=2 ; FFF=29 ; GGG=28 ; HHH=30 ; III=30 ; JJJ=12 .
13: 14: 15: 16: 17: 18: 19:
Brinquedos PIRRALHOS ENDIABRADOS um grande distribuidor de pree sentes em todo o pa Recentemente, a empresa teve a oportunidade de comprar pes. quenos brinquedos, todos embalados em caixas retangulares. O objetivo da compra, foi colocar cada brinquedo em uma esfera colorida, para revend-los como surpresa, mais e ou menos como o Kinder ovo. Existem esferas de raios 10, 20 e 30 cm. Cada brinquedo, tem as suas 3 dimenses A, B e C, medidas em cent o metros. Escreva uma funo que ca receba A,B,C e retorne e o raio da menor esfera poss vel. Todos os brinquedos cabero a em uma das esferas. 1: funcao A05DIAG (X, Y, Z : inteiro) : inteiro 2: inteiro diag 3: diag (X AAA ) + (Y AAA ) + (Z AAA ) 4: diag diag 5: se diag > BBB ento a 6: devolva 30 7: seno a
verso de 10 de fevereiro de 2008 a
395
se diag > CCC ento a devolva 20 seno a devolva 10 mse mse mfuncao Esta funcao correta, deu os seguintes resultados: A05DIAG(2 6 8) = 10 ; A05DIAG(25 27 28) = 30 ; A05DIAG(5 1 7) = 10 . As substituies a fazer so: co a AAA=2 ; BBB=40 ; CCC=20 . Responda
R=
36.3
Exerc cio 3
396
Voc no precisa determinar onde est o erro (se bem que isso um interessante e a a e desao), mas precisa apenas determinar que o algoritmo est errado. a Uma boa maneira de vericar isto acompanhar as 3 execues do algoritmo (correto) e co que acompanham o enunciado. Trata-se de algo similar a um chines reverso. Identique qual(is) dos 5 algoritmos esto corretos denindo An como: A1 1 se o a algoritmo 1 est correto e A1 0 seno. Idem para A2 , A3 , A4 e A5 . a a Responda o resultado R R = (A1 1) + (A2 2) + (A3 4) + (A4 8) + (A5 16) Algoritmo 1 Escreva uma funo que receba um nmero N (inteiro e positivo, no ca u a e preciso testar) e devolva a cadeia primo se ele for PRIMO e no primo seno. a a 1: funcao A01PRIM (N : inteiro) : inteiro 2: M,X,T : inteiro 3: M 0 4: X teto(N 0.5 ) 5: para T de AAA a X faa c 6: Z BBB mod T 7: se Z = CCC ento a 8: MM+1 9: mse 10: mpara 11: se DDD = 0 ento a 12: devolva EEE 13: seno a 14: devolva FFF 15: mse 16: mfuncao Esta funcao correta, deu os seguintes resultados: A01PRIM(26) = NAOPRIMO ; A01PRIM(71) = PRIMO ; A01PRIM(37) = PRIMO . As substituies a fazer so: co a AAA=2 ; BBB=N ; CCC=0 ; DDD=N ; EEE=primo e FFF=nao primo . Algoritmo 2 Escreva uma funo que receba um nmero N (inteiro e positivo, no ca u a preciso testar) e devolva um inteiro contendo a soma dos divisores inteiros de N, e excluindo-se desta soma ele mesmo e a unidade. 1: funcao A02SOMD (N : inteiro) : inteiro 2: M,T,Z : inteiro 3: M AAA 4: para T de BBB a CCC faa c 5: Z DDD mod EEE 6: se FFF = Z ento a 7: M GGG + HHH 8: mse 9: mpara 10: devolva III 11: mfuncao
verso de 10 de fevereiro de 2008 a
397
CAP ITULO 36. EXERC ICIOS PRATICOS: 125A - CORRECAO DE ALGORITMOS Esta funcao correta, deu os seguintes resultados: A02SOMD(20) = 21 ; A02SOMD(27) = 12 ; A02SOMD(71) = 0 . As substituies a fazer so: co a AAA=0 ; BBB=2 ; CCC=N-1 ; DDD=N ; EEE=T ; FFF=0 ; GGG=M ; HHH=T ; III=2 vezes M . Algoritmo 3 Escreva uma funo que receba dois inteiros N e X Se X for maior que ca zero, a funcao deve calcular e devolver o nmero N X e se no for deve devolver -1. u a 1: funcao A03POTE (N,X : inteiro) : inteiro 2: R : inteiro 3: R AAA 4: se X > 0 ento a 5: enquanto BBB >0 faa c 6: R R CCC N 7: X X DDD 1 8: menquanto 9: devolva EEE 10: seno a 11: devolva FFF 12: mse 13: mfuncao Esta funcao correta, deu os seguintes resultados: A03POTE(4 4) = 256 ; A03POTE(6 4) = 1296 ; A03POTE(5 3) = 125 . As substituies a fazer so: co a AAA=1 ; BBB=X ; CCC=+ (adicao) ; DDD=- (subtracao) ; EEE=R ; FFF=-1 . Algoritmo 4 Escreva uma funo que receba trs inteiros D, M e A representando ca e uma data (D o dia, M o ms e A o ano). O algoritmo deve devolver 1 se a data e e e e estiver errada e 0 seno. a 1: funcao A04DATA (D, M, A : inteiro) : inteiro 2: biss, erro : inteiro 3: se 0 = (A mod AAA) ento a 4: biss1 5: seno a 6: se 0 = (BBB mod 100) ento a 7: biss0 8: seno a 9: se 0 = (A mod 4) ento a 10: bissCCC 11: seno a 12: bissDDD 13: mse 14: mse 15: mse 16: erro 0 17: se M = EEE ento a 18: se biss = 1 ento a 19: se D > FFF ento a 20: erro 1 21: mse 22: seno a
88-08, Pedro Kantek
398
CAP ITULO 36. EXERC ICIOS PRATICOS: 125A - CORRECAO DE ALGORITMOS se D > GGG ento a erro 1 mse mse seno a se (M=4)(M=6)(M=9)(M=11) ento a se D > HHH ento a 30: erro 1 31: mse 32: seno a 33: se D > III ento a 34: erro 1 35: mse 36: mse 37: mse 38: se M > JJJ ento a 39: erro 1 40: mse 41: retorne erro 42: mfuncao Esta funcao correta, deu os seguintes resultados: A04DATA(25 12 8360) = 0 ; A04DATA(28 2 1968) = 0 ; A04DATA(29 2 2000) = 0 . As substituies a fazer so: co a AAA=400 ; BBB=A (ano) ; CCC=1 e DDD=0 ; EEE=2 ; FFF=29 ; GGG=28 ; HHH=30 ; III=31 ; JJJ=12 .
23: 24: 25: 26: 27: 28: 29:
Brinquedos PIRRALHOS ENDIABRADOS um grande distribuidor de pree sentes em todo o pa Recentemente, a empresa teve a oportunidade de comprar pes. quenos brinquedos, todos embalados em caixas retangulares. O objetivo da compra, foi colocar cada brinquedo em uma esfera colorida, para revend-los como surpresa, mais e ou menos como o Kinder ovo. Existem esferas de raios 10, 20 e 30 cm. Cada brinquedo, tem as suas 3 dimenses A, B e C, medidas em cent o metros. Escreva uma funo que ca receba A,B,C e retorne e o raio da menor esfera poss vel. Todos os brinquedos cabero a em uma das esferas. 1: funcao A05DIAG (X, Y, Z : inteiro) : inteiro 2: inteiro diag 3: diag (X AAA ) + (Y AAA ) + (Z AAA ) 4: diag diag 5: se diag > BBB ento a 6: devolva 30 7: seno a 8: se diag > CCC ento a 9: devolva 20 10: seno a 11: devolva 10 12: mse 13: mse 14: mfuncao Esta funcao correta, deu os seguintes resultados: A05DIAG(4 2 8) = 10 ; A05DIAG(27 26 28) = 30 ; A05DIAG(9 7 7) = 10 .
verso de 10 de fevereiro de 2008 a
399
CAP ITULO 36. EXERC ICIOS PRATICOS: 125A - CORRECAO DE ALGORITMOS As substituies a fazer so: co a AAA=2 ; BBB=20 ; CCC=20 .
Responda
R=
36.4
Exerc cio 4
Voc no precisa determinar onde est o erro (se bem que isso um interessante e a a e desao), mas precisa apenas determinar que o algoritmo est errado. a Uma boa maneira de vericar isto acompanhar as 3 execues do algoritmo (correto) e co que acompanham o enunciado. Trata-se de algo similar a um chines reverso. Identique qual(is) dos 5 algoritmos esto corretos denindo An como: A1 1 se o a algoritmo 1 est correto e A1 0 seno. Idem para A2 , A3 , A4 e A5 . a a
88-08, Pedro Kantek
400
CAP ITULO 36. EXERC ICIOS PRATICOS: 125A - CORRECAO DE ALGORITMOS Responda o resultado R R = (A1 1) + (A2 2) + (A3 4) + (A4 8) + (A5 16) Algoritmo 1 Escreva uma funo que receba um nmero N (inteiro e positivo, no ca u a e preciso testar) e devolva a cadeia primo se ele for PRIMO e no primo seno. a a 1: funcao A01PRIM (N : inteiro) : inteiro 2: M,X,T : inteiro 3: M 0 4: X teto(N 0.5 ) 5: para T de AAA a X faa c 6: Z BBB mod T 7: se Z = CCC ento a 8: MM+1 9: mse 10: mpara 11: se DDD = 0 ento a 12: devolva EEE 13: seno a 14: devolva FFF 15: mse 16: mfuncao Esta funcao correta, deu os seguintes resultados: A01PRIM(20) = NAOPRIMO ; A01PRIM(54) = NAOPRIMO ; A01PRIM(67) = PRIMO . As substituies a fazer so: co a AAA=1 ; BBB=N ; CCC=0 ; DDD=M ; EEE=primo e FFF=nao primo . Algoritmo 2 Escreva uma funo que receba um nmero N (inteiro e positivo, no ca u a preciso testar) e devolva um inteiro contendo a soma dos divisores inteiros de N, e excluindo-se desta soma ele mesmo e a unidade. 1: funcao A02SOMD (N : inteiro) : inteiro 2: M,T,Z : inteiro 3: M AAA 4: para T de BBB a CCC faa c 5: Z DDD mod EEE 6: se FFF = Z ento a 7: M GGG + HHH 8: mse 9: mpara 10: devolva III 11: mfuncao Esta funcao correta, deu os seguintes resultados: A02SOMD(24) = 35 ; A02SOMD(85) = 22 ; A02SOMD(29) = 0 . As substituies a fazer so: co a AAA=0 ; BBB=2 ; CCC=N-1 ; DDD=N ; EEE=T ; FFF=0 ; GGG=N ; HHH=T ; III=M . Algoritmo 3 Escreva uma funo que receba dois inteiros N e X Se X for maior que ca zero, a funcao deve calcular e devolver o nmero N X e se no for deve devolver -1. u a 1: funcao A03POTE (N,X : inteiro) : inteiro
verso de 10 de fevereiro de 2008 a
401
CAP ITULO 36. EXERC ICIOS PRATICOS: 125A - CORRECAO DE ALGORITMOS R : inteiro R AAA se X > 0 ento a enquanto BBB >0 faa c R R CCC N X X DDD 1 menquanto 9: devolva EEE 10: seno a 11: devolva FFF 12: mse 13: mfuncao Esta funcao correta, deu os seguintes resultados: A03POTE(6 3) = 216 ; A03POTE(5 3) = 125 ; A03POTE(3 3) = 27 . As substituies a fazer so: co a AAA=1 ; BBB=X ; CCC=vezes (multiplicacao) ; DDD=+ (adicao) ; EEE=R ; FFF=-1 .
2: 3: 4: 5: 6: 7: 8:
Algoritmo 4 Escreva uma funo que receba trs inteiros D, M e A representando ca e uma data (D o dia, M o ms e A o ano). O algoritmo deve devolver 1 se a data e e e e estiver errada e 0 seno. a 1: funcao A04DATA (D, M, A : inteiro) : inteiro 2: biss, erro : inteiro 3: se 0 = (A mod AAA) ento a 4: biss1 5: seno a 6: se 0 = (BBB mod 100) ento a 7: biss0 8: seno a 9: se 0 = (A mod 4) ento a 10: bissCCC 11: seno a 12: bissDDD 13: mse 14: mse 15: mse 16: erro 0 17: se M = EEE ento a 18: se biss = 1 ento a 19: se D > FFF ento a 20: erro 1 21: mse 22: seno a 23: se D > GGG ento a 24: erro 1 25: mse 26: mse 27: seno a 28: se (M=4)(M=6)(M=9)(M=11) ento a 29: se D > HHH ento a 30: erro 1 31: mse
88-08, Pedro Kantek
402
seno a se D > III ento a erro 1 mse mse mse se M > JJJ ento a erro 1 mse retorne erro mfuncao
Esta funcao correta, deu os seguintes resultados: A04DATA(25 10 32) = 0 ; A04DATA(29 2 2080) = 0 ; A04DATA(29 2 1900) = 1 . As substituies a fazer so: co a AAA=400 ; BBB=A (ano) ; CCC=1 e DDD=0 ; EEE=2 ; FFF=29 ; GGG=28 ; HHH=31 ; III=31 ; JJJ=12 .
Brinquedos PIRRALHOS ENDIABRADOS um grande distribuidor de pree sentes em todo o pa Recentemente, a empresa teve a oportunidade de comprar pes. quenos brinquedos, todos embalados em caixas retangulares. O objetivo da compra, foi colocar cada brinquedo em uma esfera colorida, para revend-los como surpresa, mais e ou menos como o Kinder ovo. Existem esferas de raios 10, 20 e 30 cm. Cada brinquedo, tem as suas 3 dimenses A, B e C, medidas em cent o metros. Escreva uma funo que ca receba A,B,C e retorne e o raio da menor esfera poss vel. Todos os brinquedos cabero a em uma das esferas. 1: funcao A05DIAG (X, Y, Z : inteiro) : inteiro 2: inteiro diag 3: diag (X AAA ) + (Y AAA ) + (Z AAA ) 4: diag diag 5: se diag > BBB ento a 6: devolva 30 7: seno a 8: se diag > CCC ento a 9: devolva 20 10: seno a 11: devolva 10 12: mse 13: mse 14: mfuncao Esta funcao correta, deu os seguintes resultados: A05DIAG(2 9 2) = 10 ; A05DIAG(28 28 26) = 30 ; A05DIAG(2 6 3) = 10 . As substituies a fazer so: co a AAA=2 ; BBB=40 ; CCC=20 .
Responda
R=
403
36.5
1 2 3 4
Respostas
0 5 4 1 0 0 9 7 1 1 3 4 0 8 0 7 1 0 2 0 11 18 8 16
404
Cap tulo 37
Voc no precisa determinar onde est o erro (se bem que isso um interessante e a a e desao), mas precisa apenas determinar que o algoritmo est errado. a Uma boa maneira de vericar isto acompanhar as 3 execues do algoritmo (correto) e co que acompanham o enunciado. Trata-se de algo similar a um chines reverso. Identique qual(is) dos 5 algoritmos esto corretos denindo An como: A1 1 se o a algoritmo 1 est correto e A1 0 seno. Idem para A2 , A3 , A4 e A5 . a a Responda o resultado R R = (A1 1) + (A2 2) + (A3 4) + (A4 8) + (A5 16) Algoritmo 1 Escreva uma funo que receba um vetor de 10 nmeros inteiros e deca u volva a posio daquele nmero que o maior do vetor. Se houver dois ou mais iguais ca u e a este maior, deve-se retornar o endereo do primeiro. Por exemplo, se o vetor for 4, 7, c 2, 19, 21, 8, 7, 19, 8, 6 a resposta deve ser 5, j que o 21 (o maior) o quinto elemento. a e Se o vetor for 4, 12, 5, 7, 12, 7, 1, 2, 3, 8, a resposta deve ser 2. 1: funcao B01ACHM (N[10] : inteiro) : inteiro 2: MAI,QUA,I : inteiro 3: I AAA 4: BBB -99999 5: enquanto CCC < 11 faa c 6: se N[I] > DDD ento a 7: MAI N[I] 405
CAP ITULO 37. EXERC ICIOS PRATICOS: 125B - CORRECAO DE ALGORITMOS EEE I mse FFF I + 1 menquanto devolva GGG mfuncao Esta funcao correta, deu os seguintes resultados: B01ACHM(1 1 6 5 3 4 7 5 7 4) = 7 ; B01ACHM(18 8 17 12 4 7 19 10 13 6) = 7 ; B01ACHM(1 3 4 3 4 4 1 3 3 1) = 3 . As substituies a fazer so: co a AAA=1 ; BBB=MAI ; CCC=I ; DDD=MAI ; EEE=QUA ; FFF=I ; GGG=QUA .
8: 9: 10: 11: 12: 13:
Algoritmo 2 Escreva uma funo que receba um nmero K (inteiro, no preciso ca u a e testar) e um vetor N de 10 inteiros e e devolva a posio de K em N. Se houver mais de ca 1 valor de K em N, deve retornar o primeiro. Se no houver K em N, retornar -1. a Por exemplo, Se K=8 e N=1 3 5 7 9 2 4 6 8 10, a resposta deve ser 9. Se K=7 e N o mesmo, a resposta 4. Se K=13 e N o mesmo, a resposta -1. e e e e 1: funcao B02ACHKK (K, N[10] : inteiro) : inteiro 2: inteiro RES,I 3: RES AAA 4: I BBB 5: enquanto CCC < 11 faa c 6: se N[I] = DDD ento a 7: RES EEE 8: I FFF 9: mse 10: II+1 11: menquanto 12: devolva GGG 13: mfuncao Esta funcao correta, deu os seguintes resultados: B02ACHK(12,20 30 25 26 21 23 12 14 15 27)=7 ; B02ACHK(15,23 30 11 12 25 24 19 15 20 18)=8 ; B02ACHK(17,13 37 38 26 34 20 15 33 27 32)=-1 . As substituies a fazer so: co a AAA=-1 ; BBB=1 ; CCC=I ; DDD=K ; EEE=I ; FFF=11 (ou qualquer > 10) ; GGG=RES . Algoritmo 3 Escreva uma funcao que receba um vetor N de 10 elementos inteiros, em princ pio sem nenhuma ordem (ou seja, desordenado) e uma chave K tambm inteira e e devolva a quantidade de vezes que K aparece em N. Por exemplo, se N=1 3 5 7 2 3 4 5 6 10 e K=5 a resposta 2. Se K=18, a resposta e 0 e se K=1, a reposta 1. e e 1: funcao B03CONK (K,N[10] : inteiro) : inteiro 2: inteiro QTD,I 3: QTD AAA 4: para I de BBB a CCC passo DDD faa c 5: se N[I] = EEE ento a 6: QTD FFF+ 1 7: mse 8: mpara 9: devolva GGG
88-08, Pedro Kantek
406
CAP ITULO 37. EXERC ICIOS PRATICOS: 125B - CORRECAO DE ALGORITMOS mfuncao Esta funcao correta, deu os seguintes resultados: B03CONK(18,12 15 13 12 18 14 18 13 15 12)=2 ; B03CONK(15,12 18 13 16 16 15 12 15 13 18)=2 ; B03CONK(17,15 31 16 34 33 25 38 37 17 11)=1 . As substituies a fazer so: co a AAA=0 ; BBB=1 ; CCC=10 ; DDD=1 ; EEE=K ; FFF=QTD ; GGG=QTD .
10:
Algoritmo 4 Escreva uma funo que receba um vetor ordenado de 11 inteiros. A ca funo deve devolver 3 valores (um real e dois inteiros), a saber: ca mdia A soma dos elementos dividido por 11 e moda o valor mais freqente no vetor u mediana O valor do meio (neste caso o N[6]) funcao B04ESTA (N[11] : inteiro) : real,inteiro,inteiro MED : real I,J,MOD,MAN,SOM,ASA,CTDR[11] : inteiro 4: I 1 5: SOM AAA 6: enquanto I < BBB faa c 7: SOM CCC + N[I] 8: II+1 9: menquanto 10: DDD SOM 11 11: EEE N[6] 12: para I de 1 a 11 faa c 13: SOM 0 14: para J de 1 a 11 faa c 15: se N[I] = N[J] ento a 16: SOM SOM + 1 17: mse 18: mpara 19: CTDR[I] FFF 20: mpara 21: MAI -9999 22: para J de 1 a 11 faa c 23: se CTDR[J] > GGG ento a 24: MAI CTDR[J] 25: ASA HHH 26: mse 27: mpara 28: III N[ASA] 29: devolva MED,MOD,MAN 30: mfuncao Esta funcao correta, deu os seguintes resultados: B04ESTA(1 2 2 4 4 6 6 7 7 7 8) = 4.9 7 6 ; B04ESTA(1 4 5 5 6 6 6 6 7 7 8) = 5.5 6 6 ; B04ESTA(1 2 2 2 3 3 4 4 6 6 6) = 3.5 2 3 . As substituies a fazer so: co a AAA=0 ; BBB=12 ; CCC=SOM ; DDD=MED ; EEE=MAN ; FFF=SOM ; GGG=MAI ; HHH=J ; III=MOD .
1: 2: 3:
verso de 10 de fevereiro de 2008 a
407
CAP ITULO 37. EXERC ICIOS PRATICOS: 125B - CORRECAO DE ALGORITMOS O vetor est em ordem ? Escreva o algoritmo de uma funo que receba um vetor a ca de 10 inteiros e devolva 0 se o vetor est em ordem crescente e 1 seno. Um vetor V a a est em ordem crescente para quaisquer i e j, sendo que j > i, vlida a expresso a e a a V [j] V [i]. Note a presena da igualdade na condio. Alm disso, essa expresso tem c ca e a que ser vlida para todos os pares dentro do vetor. a Por exemplo se o vetor for 1,3,4,5,6,7,9,10,16,21 a resposta 0. Se o vetor for e 1,3,4,5,6,8,7,10,16,21 a resposta 1 e se for 2,2,2,2,2,2,2,2,2,2 a resposta 0. e e 1: funcao B05ESORN (N[10] : inteiro) : inteiro27 2: inteiro I, RES 3: RES AAA 4: I 1 5: enquanto I < BBB faa c 6: se N[I] >N[I+1] ento a 7: RES 1 8: mse 9: II+1 10: menquanto 11: devolva CCC 12: mfuncao
Esta funcao correta, deu os seguintes resultados: B05ESOR(2 5 6 7 12 27 35 44 60 86) = 0 ; B05ESOR(1 4 17 22 29 41 95 51 92 93) = 1 ; B05ESOR(5 7 20 35 37 38 68 55 78 79) = 1 . As substituies a fazer so: co a AAA=0 ; BBB=10 ; CCC=I .
Responda
R=
408
37.2
Exerc cio 2
Voc no precisa determinar onde est o erro (se bem que isso um interessante e a a e desao), mas precisa apenas determinar que o algoritmo est errado. a Uma boa maneira de vericar isto acompanhar as 3 execues do algoritmo (correto) e co que acompanham o enunciado. Trata-se de algo similar a um chines reverso. Identique qual(is) dos 5 algoritmos esto corretos denindo An como: A1 1 se o a algoritmo 1 est correto e A1 0 seno. Idem para A2 , A3 , A4 e A5 . a a Responda o resultado R R = (A1 1) + (A2 2) + (A3 4) + (A4 8) + (A5 16) Algoritmo 1 Escreva uma funo que receba um vetor de 10 nmeros inteiros e deca u volva a posio daquele nmero que o maior do vetor. Se houver dois ou mais iguais ca u e a este maior, deve-se retornar o endereo do primeiro. Por exemplo, se o vetor for 4, 7, c 2, 19, 21, 8, 7, 19, 8, 6 a resposta deve ser 5, j que o 21 (o maior) o quinto elemento. a e Se o vetor for 4, 12, 5, 7, 12, 7, 1, 2, 3, 8, a resposta deve ser 2. 1: funcao B01ACHM (N[10] : inteiro) : inteiro 2: MAI,QUA,I : inteiro 3: I AAA 4: BBB -99999 5: enquanto CCC < 11 faa c 6: se N[I] > DDD ento a 7: MAI N[I] 8: EEE I 9: mse 10: FFF I + 1 11: menquanto 12: devolva GGG 13: mfuncao Esta funcao correta, deu os seguintes resultados: B01ACHM(2 4 6 6 1 2 6 4 1 7) = 10 ; B01ACHM(14 16 5 18 17 8 11 2 19 20) = 10 ; B01ACHM(4 2 1 5 4 2 5 1 2 2) = 4 . As substituies a fazer so: co a AAA=1 ; BBB=MAI ; CCC=I ; DDD=MAI ; EEE=MAI ; FFF=I ; GGG=QUA . Algoritmo 2 Escreva uma funo que receba um nmero K (inteiro, no preciso ca u a e testar) e um vetor N de 10 inteiros e e devolva a posio de K em N. Se houver mais de ca 1 valor de K em N, deve retornar o primeiro. Se no houver K em N, retornar -1. a Por exemplo, Se K=8 e N=1 3 5 7 9 2 4 6 8 10, a resposta deve ser 9. Se K=7 e N o mesmo, a resposta 4. Se K=13 e N o mesmo, a resposta -1. e e e e
verso de 10 de fevereiro de 2008 a
409
CAP ITULO 37. EXERC ICIOS PRATICOS: 125B - CORRECAO DE ALGORITMOS funcao B02ACHKK (K, N[10] : inteiro) : inteiro inteiro RES,I RES AAA I BBB enquanto CCC < 11 faa c se N[I] = DDD ento a RES EEE 8: I FFF 9: mse 10: II+1 11: menquanto 12: devolva GGG 13: mfuncao Esta funcao correta, deu os seguintes resultados: B02ACHK(17,14 28 27 21 11 18 12 13 15 17)=10 ; B02ACHK(14,16 17 14 23 22 28 27 25 12 30)=3 ; B02ACHK(17,21 40 26 16 38 28 15 20 17 19)=9 . As substituies a fazer so: co a AAA=-1 ; BBB=1 ; CCC=I ; DDD=K ; EEE=I ; FFF=11 (ou qualquer > 10) ; GGG=I .
1: 2: 3: 4: 5: 6: 7:
Algoritmo 3 Escreva uma funcao que receba um vetor N de 10 elementos inteiros, em princ pio sem nenhuma ordem (ou seja, desordenado) e uma chave K tambm inteira e e devolva a quantidade de vezes que K aparece em N. Por exemplo, se N=1 3 5 7 2 3 4 5 6 10 e K=5 a resposta 2. Se K=18, a resposta e 0 e se K=1, a reposta 1. e e 1: funcao B03CONK (K,N[10] : inteiro) : inteiro 2: inteiro QTD,I 3: QTD AAA 4: para I de BBB a CCC passo DDD faa c 5: se N[I] = EEE ento a 6: QTD FFF+ 1 7: mse 8: mpara 9: devolva GGG 10: mfuncao Esta funcao correta, deu os seguintes resultados: B03CONK(18,14 18 16 18 16 13 13 16 11 17)=2 ; B03CONK(17,18 12 11 13 17 15 17 11 17 11)=3 ; B03CONK(17,23 29 14 24 37 26 15 36 30 20)=0 . As substituies a fazer so: co a AAA=0 ; BBB=1 ; CCC=10 ; DDD=1 ; EEE=I ; FFF=QTD ; GGG=QTD . Algoritmo 4 Escreva uma funo que receba um vetor ordenado de 11 inteiros. A ca funo deve devolver 3 valores (um real e dois inteiros), a saber: ca mdia A soma dos elementos dividido por 11 e moda o valor mais freqente no vetor u mediana O valor do meio (neste caso o N[6])
1: 2: 3:
funcao B04ESTA (N[11] : inteiro) : real,inteiro,inteiro MED : real I,J,MOD,MAN,SOM,ASA,CTDR[11] : inteiro 410
verso de 10 de fevereiro de 2008 a
CAP ITULO 37. EXERC ICIOS PRATICOS: 125B - CORRECAO DE ALGORITMOS I1 SOM AAA enquanto I < BBB faa c SOM CCC + N[I] II+1 menquanto DDD SOM 11 11: EEE N[6] 12: para I de 1 a 11 faa c 13: SOM 0 14: para J de 1 a 11 faa c 15: se N[I] = N[J] ento a 16: SOM SOM + 1 17: mse 18: mpara 19: CTDR[I] FFF 20: mpara 21: MAI -9999 22: para J de 1 a 11 faa c 23: se CTDR[J] > GGG ento a 24: MAI CTDR[J] 25: ASA HHH 26: mse 27: mpara 28: III N[ASA] 29: devolva MED,MOD,MAN 30: mfuncao Esta funcao correta, deu os seguintes resultados: B04ESTA(1 2 3 3 4 4 4 4 6 7 7) = 4.1 4 4 ; B04ESTA(1 1 1 2 6 6 6 7 7 7 8) = 4.7 1 6 ; B04ESTA(1 1 2 3 4 5 6 6 7 8 8) = 4.6 1 5 . As substituies a fazer so: co a AAA=1 ; BBB=12 ; CCC=SOM ; DDD=MED ; EEE=MAN ; FFF=SOM ; GGG=MAI ; HHH=J ; III=MOD .
4: 5: 6: 7: 8: 9: 10:
O vetor est em ordem ? Escreva o algoritmo de uma funo que receba um vetor a ca de 10 inteiros e devolva 0 se o vetor est em ordem crescente e 1 seno. Um vetor V a a est em ordem crescente para quaisquer i e j, sendo que j > i, vlida a expresso a e a a V [j] V [i]. Note a presena da igualdade na condio. Alm disso, essa expresso tem c ca e a que ser vlida para todos os pares dentro do vetor. a Por exemplo se o vetor for 1,3,4,5,6,7,9,10,16,21 a resposta 0. Se o vetor for e 1,3,4,5,6,8,7,10,16,21 a resposta 1 e se for 2,2,2,2,2,2,2,2,2,2 a resposta 0. e e 1: funcao B05ESORN (N[10] : inteiro) : inteiro27 2: inteiro I, RES 3: RES AAA 4: I 1 5: enquanto I < BBB faa c 6: se N[I] >N[I+1] ento a 7: RES 1 8: mse 9: II+1 10: menquanto 11: devolva CCC
verso de 10 de fevereiro de 2008 a
411
CAP ITULO 37. EXERC ICIOS PRATICOS: 125B - CORRECAO DE ALGORITMOS mfuncao Esta funcao correta, deu os seguintes resultados: B05ESOR(7 8 36 47 48 50 65 70 89 90) = 0 ; B05ESOR(32 38 42 53 59 66 65 74 83 89) = 1 ; B05ESOR(12 13 41 47 52 66 21 87 90 97) = 1 . As substituies a fazer so: co a AAA=0 ; BBB=10 ; CCC=RES .
12:
Responda
R=
37.3
Exerc cio 3
Voc no precisa determinar onde est o erro (se bem que isso um interessante e a a e desao), mas precisa apenas determinar que o algoritmo est errado. a
88-08, Pedro Kantek
412
CAP ITULO 37. EXERC ICIOS PRATICOS: 125B - CORRECAO DE ALGORITMOS Uma boa maneira de vericar isto acompanhar as 3 execues do algoritmo (correto) e co que acompanham o enunciado. Trata-se de algo similar a um chines reverso. Identique qual(is) dos 5 algoritmos esto corretos denindo An como: A1 1 se o a algoritmo 1 est correto e A1 0 seno. Idem para A2 , A3 , A4 e A5 . a a Responda o resultado R R = (A1 1) + (A2 2) + (A3 4) + (A4 8) + (A5 16) Algoritmo 1 Escreva uma funo que receba um vetor de 10 nmeros inteiros e deca u volva a posio daquele nmero que o maior do vetor. Se houver dois ou mais iguais ca u e a este maior, deve-se retornar o endereo do primeiro. Por exemplo, se o vetor for 4, 7, c 2, 19, 21, 8, 7, 19, 8, 6 a resposta deve ser 5, j que o 21 (o maior) o quinto elemento. a e Se o vetor for 4, 12, 5, 7, 12, 7, 1, 2, 3, 8, a resposta deve ser 2. 1: funcao B01ACHM (N[10] : inteiro) : inteiro 2: MAI,QUA,I : inteiro 3: I AAA 4: BBB -99999 5: enquanto CCC < 11 faa c 6: se N[I] > DDD ento a 7: MAI N[I] 8: EEE I 9: mse 10: FFF I + 1 11: menquanto 12: devolva GGG 13: mfuncao Esta funcao correta, deu os seguintes resultados: B01ACHM(4 1 4 3 2 5 4 5 2 5) = 6 ; B01ACHM(9 8 18 16 1 13 3 5 14 11) = 3 ; B01ACHM(2 5 5 4 5 2 3 1 5 2) = 2 . As substituies a fazer so: co a AAA=1 ; BBB=MAI ; CCC=N[I] ; DDD=MAI ; EEE=QUA ; FFF=I ; GGG=QUA . Algoritmo 2 Escreva uma funo que receba um nmero K (inteiro, no preciso ca u a e testar) e um vetor N de 10 inteiros e e devolva a posio de K em N. Se houver mais de ca 1 valor de K em N, deve retornar o primeiro. Se no houver K em N, retornar -1. a Por exemplo, Se K=8 e N=1 3 5 7 9 2 4 6 8 10, a resposta deve ser 9. Se K=7 e N o mesmo, a resposta 4. Se K=13 e N o mesmo, a resposta -1. e e e e 1: funcao B02ACHKK (K, N[10] : inteiro) : inteiro 2: inteiro RES,I 3: RES AAA 4: I BBB 5: enquanto CCC < 11 faa c 6: se N[I] = DDD ento a 7: RES EEE 8: I FFF 9: mse 10: II+1 11: menquanto 12: devolva GGG 13: mfuncao
verso de 10 de fevereiro de 2008 a
413
CAP ITULO 37. EXERC ICIOS PRATICOS: 125B - CORRECAO DE ALGORITMOS Esta funcao correta, deu os seguintes resultados: B02ACHK(20,29 21 12 23 26 20 16 13 28 24)=6 ; B02ACHK(29,28 14 30 25 17 20 16 18 13 29)=10 ; B02ACHK(17,26 24 27 34 23 11 37 25 39 31)=-1 . As substituies a fazer so: co a AAA=-1 ; BBB=1 ; CCC=I ; DDD=K ; EEE=I ; FFF=11 (ou qualquer > 10) ; GGG=RES . Algoritmo 3 Escreva uma funcao que receba um vetor N de 10 elementos inteiros, em princ pio sem nenhuma ordem (ou seja, desordenado) e uma chave K tambm inteira e e devolva a quantidade de vezes que K aparece em N. Por exemplo, se N=1 3 5 7 2 3 4 5 6 10 e K=5 a resposta 2. Se K=18, a resposta e 0 e se K=1, a reposta 1. e e 1: funcao B03CONK (K,N[10] : inteiro) : inteiro 2: inteiro QTD,I 3: QTD AAA 4: para I de BBB a CCC passo DDD faa c 5: se N[I] = EEE ento a 6: QTD FFF+ 1 7: mse 8: mpara 9: devolva GGG 10: mfuncao Esta funcao correta, deu os seguintes resultados: B03CONK(14,13 13 11 17 12 11 14 15 15 14)=2 ; B03CONK(18,18 15 17 14 14 17 18 14 12 18)=3 ; B03CONK(17,18 31 14 23 40 13 17 24 28 16)=1 . As substituies a fazer so: co a AAA=0 ; BBB=1 ; CCC=10 ; DDD=1 ; EEE=K ; FFF=QTD ; GGG=I . Algoritmo 4 Escreva uma funo que receba um vetor ordenado de 11 inteiros. A ca funo deve devolver 3 valores (um real e dois inteiros), a saber: ca mdia A soma dos elementos dividido por 11 e moda o valor mais freqente no vetor u mediana O valor do meio (neste caso o N[6])
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
funcao B04ESTA (N[11] : inteiro) : real,inteiro,inteiro MED : real I,J,MOD,MAN,SOM,ASA,CTDR[11] : inteiro I1 SOM AAA enquanto I < BBB faa c SOM CCC + N[I] II+1 menquanto DDD SOM 11 EEE N[6] para I de 1 a 11 faa c SOM 0 para J de 1 a 11 faa c se N[I] = N[J] ento a SOM SOM + 1 414
verso de 10 de fevereiro de 2008 a
CAP ITULO 37. EXERC ICIOS PRATICOS: 125B - CORRECAO DE ALGORITMOS mse mpara CTDR[I] FFF mpara MAI -9999 para J de 1 a 11 faa c se CTDR[J] > GGG ento a 24: MAI CTDR[J] 25: ASA HHH 26: mse 27: mpara 28: III N[ASA] 29: devolva MED,MOD,MAN 30: mfuncao Esta funcao correta, deu os seguintes resultados: B04ESTA(1 1 2 3 3 4 4 5 6 7 8) = 4.0 1 4 ; B04ESTA(2 3 4 5 5 5 6 6 8 8 8) = 5.5 5 5 ; B04ESTA(1 2 3 3 4 4 4 4 7 7 7) = 4.2 4 4 . As substituies a fazer so: co a AAA=1 ; BBB=12 ; CCC=SOM ; DDD=MED ; EEE=MAN ; FFF=SOM ; GGG=MAI ; HHH=J ; III=MOD .
17: 18: 19: 20: 21: 22: 23:
O vetor est em ordem ? Escreva o algoritmo de uma funo que receba um vetor a ca de 10 inteiros e devolva 0 se o vetor est em ordem crescente e 1 seno. Um vetor V a a est em ordem crescente para quaisquer i e j, sendo que j > i, vlida a expresso a e a a V [j] V [i]. Note a presena da igualdade na condio. Alm disso, essa expresso tem c ca e a que ser vlida para todos os pares dentro do vetor. a Por exemplo se o vetor for 1,3,4,5,6,7,9,10,16,21 a resposta 0. Se o vetor for e 1,3,4,5,6,8,7,10,16,21 a resposta 1 e se for 2,2,2,2,2,2,2,2,2,2 a resposta 0. e e 1: funcao B05ESORN (N[10] : inteiro) : inteiro27 2: inteiro I, RES 3: RES AAA 4: I 1 5: enquanto I < BBB faa c 6: se N[I] >N[I+1] ento a 7: RES 1 8: mse 9: II+1 10: menquanto 11: devolva CCC 12: mfuncao Esta funcao correta, deu os seguintes resultados: B05ESOR(11 14 26 43 50 56 63 66 73 96) = 0 ; B05ESOR(3 5 6 11 12 23 72 58 63 75) = 1 ; B05ESOR(23 26 44 46 49 50 20 61 69 70) = 1 . As substituies a fazer so: co a AAA=0 ; BBB=10 ; CCC=RES .
Responda
R=
415
37.4
Exerc cio 4
Voc no precisa determinar onde est o erro (se bem que isso um interessante e a a e desao), mas precisa apenas determinar que o algoritmo est errado. a Uma boa maneira de vericar isto acompanhar as 3 execues do algoritmo (correto) e co que acompanham o enunciado. Trata-se de algo similar a um chines reverso. Identique qual(is) dos 5 algoritmos esto corretos denindo An como: A1 1 se o a algoritmo 1 est correto e A1 0 seno. Idem para A2 , A3 , A4 e A5 . a a Responda o resultado R R = (A1 1) + (A2 2) + (A3 4) + (A4 8) + (A5 16) Algoritmo 1 Escreva uma funo que receba um vetor de 10 nmeros inteiros e deca u volva a posio daquele nmero que o maior do vetor. Se houver dois ou mais iguais ca u e a este maior, deve-se retornar o endereo do primeiro. Por exemplo, se o vetor for 4, 7, c 2, 19, 21, 8, 7, 19, 8, 6 a resposta deve ser 5, j que o 21 (o maior) o quinto elemento. a e Se o vetor for 4, 12, 5, 7, 12, 7, 1, 2, 3, 8, a resposta deve ser 2. 1: funcao B01ACHM (N[10] : inteiro) : inteiro 2: MAI,QUA,I : inteiro 3: I AAA 4: BBB -99999 5: enquanto CCC < 11 faa c 6: se N[I] > DDD ento a 7: MAI N[I] 8: EEE I 9: mse 10: FFF I + 1 11: menquanto 12: devolva GGG 13: mfuncao Esta funcao correta, deu os seguintes resultados: B01ACHM(4 4 3 2 1 2 6 3 1 4) = 7 ; B01ACHM(11 10 13 12 19 7 5 16 6 17) = 5 ; B01ACHM(5 3 3 1 4 1 1 2 2 1) = 1 . As substituies a fazer so: co a AAA=1 ; BBB=MAI ; CCC=I ; DDD=MAI ; EEE=QUA ; FFF=I ; GGG=QUA . Algoritmo 2 Escreva uma funo que receba um nmero K (inteiro, no preciso ca u a e testar) e um vetor N de 10 inteiros e e devolva a posio de K em N. Se houver mais de ca 1 valor de K em N, deve retornar o primeiro. Se no houver K em N, retornar -1. a Por exemplo, Se K=8 e N=1 3 5 7 9 2 4 6 8 10, a resposta deve ser 9. Se K=7 e N o mesmo, a resposta 4. Se K=13 e N o mesmo, a resposta -1. e e e e
88-08, Pedro Kantek
416
CAP ITULO 37. EXERC ICIOS PRATICOS: 125B - CORRECAO DE ALGORITMOS funcao B02ACHKK (K, N[10] : inteiro) : inteiro inteiro RES,I RES AAA I BBB enquanto CCC < 11 faa c se N[I] = DDD ento a RES EEE 8: I FFF 9: mse 10: II+1 11: menquanto 12: devolva GGG 13: mfuncao Esta funcao correta, deu os seguintes resultados: B02ACHK(27,13 30 25 23 18 27 24 16 20 11)=6 ; B02ACHK(11,25 15 23 16 17 11 20 19 13 27)=6 ; B02ACHK(17,25 38 30 12 34 15 33 14 21 32)=-1 . As substituies a fazer so: co a AAA=-1 ; BBB=1 ; CCC=I ; DDD=K ; EEE=I ; FFF=11 (ou qualquer > 10) ; GGG=RES .
1: 2: 3: 4: 5: 6: 7:
Algoritmo 3 Escreva uma funcao que receba um vetor N de 10 elementos inteiros, em princ pio sem nenhuma ordem (ou seja, desordenado) e uma chave K tambm inteira e e devolva a quantidade de vezes que K aparece em N. Por exemplo, se N=1 3 5 7 2 3 4 5 6 10 e K=5 a resposta 2. Se K=18, a resposta e 0 e se K=1, a reposta 1. e e 1: funcao B03CONK (K,N[10] : inteiro) : inteiro 2: inteiro QTD,I 3: QTD AAA 4: para I de BBB a CCC passo DDD faa c 5: se N[I] = EEE ento a 6: QTD FFF+ 1 7: mse 8: mpara 9: devolva GGG 10: mfuncao Esta funcao correta, deu os seguintes resultados: B03CONK(15,12 18 14 13 15 11 11 13 15 11)=2 ; B03CONK(12,18 17 14 16 12 13 12 17 14 12)=3 ; B03CONK(17,29 11 21 23 30 39 31 35 16 14)=0 . As substituies a fazer so: co a AAA=0 ; BBB=0 ; CCC=10 ; DDD=1 ; EEE=K ; FFF=QTD ; GGG=QTD . Algoritmo 4 Escreva uma funo que receba um vetor ordenado de 11 inteiros. A ca funo deve devolver 3 valores (um real e dois inteiros), a saber: ca mdia A soma dos elementos dividido por 11 e moda o valor mais freqente no vetor u mediana O valor do meio (neste caso o N[6])
1: 2: 3:
funcao B04ESTA (N[11] : inteiro) : real,inteiro,inteiro MED : real I,J,MOD,MAN,SOM,ASA,CTDR[11] : inteiro 417
88-08, Pedro Kantek
CAP ITULO 37. EXERC ICIOS PRATICOS: 125B - CORRECAO DE ALGORITMOS I1 SOM AAA enquanto I < BBB faa c SOM CCC + N[I] II+1 menquanto DDD SOM 11 11: EEE N[6] 12: para I de 1 a 11 faa c 13: SOM 0 14: para J de 1 a 11 faa c 15: se N[I] = N[J] ento a 16: SOM SOM + 1 17: mse 18: mpara 19: CTDR[I] FFF 20: mpara 21: MAI -9999 22: para J de 1 a 11 faa c 23: se CTDR[J] > GGG ento a 24: MAI CTDR[J] 25: ASA HHH 26: mse 27: mpara 28: III N[ASA] 29: devolva MED,MOD,MAN 30: mfuncao Esta funcao correta, deu os seguintes resultados: B04ESTA(1 2 2 3 3 4 4 5 6 7 7) = 4.0 2 4 ; B04ESTA(2 2 2 3 3 4 5 6 6 8 8) = 4.5 2 4 ; B04ESTA(1 2 2 3 4 4 4 4 4 5 6) = 3.5 4 4 . As substituies a fazer so: co a AAA=0 ; BBB=12 ; CCC=SOM ; DDD=MED ; EEE=MAN ; FFF=SOM ; GGG=MAI ; HHH=J ; III=MOD .
4: 5: 6: 7: 8: 9: 10:
O vetor est em ordem ? Escreva o algoritmo de uma funo que receba um vetor a ca de 10 inteiros e devolva 0 se o vetor est em ordem crescente e 1 seno. Um vetor V a a est em ordem crescente para quaisquer i e j, sendo que j > i, vlida a expresso a e a a V [j] V [i]. Note a presena da igualdade na condio. Alm disso, essa expresso tem c ca e a que ser vlida para todos os pares dentro do vetor. a Por exemplo se o vetor for 1,3,4,5,6,7,9,10,16,21 a resposta 0. Se o vetor for e 1,3,4,5,6,8,7,10,16,21 a resposta 1 e se for 2,2,2,2,2,2,2,2,2,2 a resposta 0. e e 1: funcao B05ESORN (N[10] : inteiro) : inteiro27 2: inteiro I, RES 3: RES AAA 4: I 1 5: enquanto I < BBB faa c 6: se N[I] >N[I+1] ento a 7: RES 1 8: mse 9: II+1 10: menquanto 11: devolva CCC
88-08, Pedro Kantek
418
CAP ITULO 37. EXERC ICIOS PRATICOS: 125B - CORRECAO DE ALGORITMOS mfuncao Esta funcao correta, deu os seguintes resultados: B05ESOR(14 34 41 47 48 51 54 57 62 96) = 0 ; B05ESOR(28 39 41 42 49 51 34 78 81 89) = 1 ; B05ESOR(5 21 22 23 28 36 38 57 84 96) = 1 . As substituies a fazer so: co a AAA=1 ; BBB=10 ; CCC=RES .
12:
Responda
R=
37.5
1 2 3 4
Respostas
0 5 3 0 0 7 0 0 0 5 7 2 0 1 1 0 3 0 0 1 15 16 18 11
419
420
Cap tulo 38
Voc no precisa determinar onde est o erro (se bem que isso um interessante e a a e desao), mas precisa apenas determinar que o algoritmo est errado. a Uma boa maneira de vericar isto acompanhar as 3 execues do algoritmo (correto) e co que acompanham o enunciado. Trata-se de algo similar a um chines reverso. Identique qual(is) dos 5 algoritmos esto corretos denindo An como: A1 1 se o a algoritmo 1 est correto e A1 0 seno. Idem para A2 , A3 , A4 e A5 . a a Responda o resultado R R = (A1 1) + (A2 2) + (A3 4) + (A4 8) + (A5 16) Algoritmo 1 Escreva uma funo que receba uma frase (cadeia de at 80 caracteres, ca e terminada por um ponto) e devolva 1 se a frase for um pal ndromo e 0 seno. Um a pal ndromo aquela frase que pode ser lida tanto da direita para a esquerda como ao e contrrio. Exemplos: a ROMA ME TEM AMOR SOCORRAM ME SUBI NO ONIBUS EM MARROCOS SAIRAM O TIO E OITO MARIAS OVO Observao: note que as posies do espao em branco no so as mesmas na ida e na ca co c a a volta. 1: funcao C01PALI (X[80] : caracter) : inteiro 2: inteiro INI,FIM,EPAL,TAM 421
TAM 1 enquanto X[TAM] AAA . faa c TAM TAM + 1 menquanto INI 1 FIM BBB EPAL 1 enquanto INI < CCC faa c enquanto X[DDD] = faa c INI INI + 1 menquanto enquanto X[EEE] = faa c FIM FIM - 1 menquanto se X[INI] FFF X[FIM] ento a EPAL 0 mse INI GGG FIM HHH menquanto devolva III mfuncao
Esta funcao correta, deu os seguintes resultados: C01PALI(ABRACADABRA. ) = 0 ; C01PALI(OTO COME MOCOTO. ) = 1 ; C01PALI(ROMA AMOR. ) = 1 . As substituies a fazer so: co a AAA=um sinal de = ; BBB=TAM-1 ; CCC=FIM ; DDD=INI ; EEE=FIM ; FFF=um sinal de = ; GGG=INI+1 ; HHH=FIM-1 ; III=EPAL .
Algoritmo 2 Escreva o algoritmo de uma funo que receba uma chave K (Inteiro) ca e um vetor V (de 10 inteiros) crescente e devolva outro vetor de 11 inteiros, tambm e crescente onde a chave K foi inclu em seu local correto. da 1: funcao C02INCL (K, V[10] : inteiro) : R[11] inteiro 2: inteiro I,J 3: para I de 1 a AAA faa c 4: R[I] V[I] 5: mpara 6: I BBB 7: enquanto (R[I] CCC)(I<DDD) faa c 8: I EEE 9: menquanto 10: J FFF 11: enquanto J I faa c 12: R[J+1] R[J] 13: J GGG 14: menquanto 15: R[J+1] HHH 16: devolva III 17: mfuncao Esta funcao correta, deu os seguintes resultados:
88-08, Pedro Kantek
422
CAP ITULO 38. EXERC ICIOS PRATICOS: 125C - CORRECAO DE ALGORITMOS C02INCL(67,6 12 18 24 30 36 42 48 54 60)=6 12 18 24 30 36 42 48 54 60 67 ; C02INCL(154,7 14 21 28 35 42 49 56 63 70)=7 14 21 28 35 42 49 56 63 70 154 ; C02INCL(2,16 22 28 34 40 46 52 58 64 70)=2 16 22 28 34 40 46 52 58 64 70 . As substituies a fazer so: co a AAA=11 ; BBB=1 ; CCC=K ; DDD=11 ; EEE=I+1 ; FFF=10 ; GGG=J-1 ; HHH=K ; III=R .
Algoritmo 3 Escreva o algoritmo de uma funo que receba uma frase (cadeia de 80 ca caracteres, o ultimo util um ponto) e devolva o nmero da palavra que a maior da e u e frase. Se houver empate (mais de uma palavra com o mesmo comprimento), devolver o nmero da primeira. Por exemplo, na frase IVO VIU A UVA, a maior palavra tem 3 u letras como h empate a resposta deve ser 1. Na frase OUVIRAM DO IPIRANGA e a AS MARGENSa resposta deve ser 3. 1: funcao C03PALM (X[80] : caracter) : inteiro 2: TMS[40] : inteiro 3: I,J,TAM,CTP,MAI,QUA : inteiro 4: TAM AAA 5: enquanto X[TAM] = . faa c 6: TAM BBB 7: menquanto 8: CTP 1 9: I 1 10: J 0 11: enquanto I TAM faa c 12: se X[I] CCC ento a 13: TMS[CTP] I - J 14: TMS[CTP] TMS[CTP]-1 15: CTP DDD 16: J EEE 17: mse 18: II+1 19: menquanto 20: TMS[CTP] I - J 21: TMS[CTP] TMS[CTP] - FFF 22: MAI -99999 23: para I de 1 a GGG faa c 24: se TMS[I] > MAI ento a 25: MAI TMS[I] 26: QUA HHH 27: mse 28: mpara 29: devolva MAI 30: mfuncao Esta funcao correta, deu os seguintes resultados: C03PALM(ATE O PONTO DE FAZER INFERENCIA. )=6 ; C03PALM(DECORRIDO ENTRE O DESAPARECIMENTO. )=4 ; C03PALM(EMBORA MENOS PERVERSO QUE. )=3 . As substituies a fazer so: co a AAA=1 ; BBB=TAM+1 ; CCC== ; DDD=CTP+1 ; EEE=I ; FFF=2 ; GGG=CTP ; HHH=I ; III=QUA .
verso de 10 de fevereiro de 2008 a
423
CAP ITULO 38. EXERC ICIOS PRATICOS: 125C - CORRECAO DE ALGORITMOS Algoritmo 4 Escreva o algoritmo de uma funo que receba uma chave K (inteiro) e ca um vetor V de 10 inteiros. A funo deve excluir de V todas as ocorrncias (se houver) ca e de K, incluindo zeros ao nal se necessrio. Por exemplo, se chamada com 22 e 1 7 21 a 22 23 24 28 29 22 90 deve responder 1 7 21 23 24 28 29 90 0 0. 1: funcao C04EXCL (K, V[10] : inteiro) : R[10] inteiro 2: I, J : inteiro 3: I AAA 4: J BBB 5: enquanto I<CCC faa c 6: se V[I] = K ento a 7: R[J] V[I] 8: J DDD 9: mse 10: I EEE 11: menquanto 12: enquanto J < FFF faa c 13: R[J] 0 14: J GGG 15: menquanto 16: devolva R 17: mfuncao Esta funcao correta, deu os seguintes resultados: C04EXCL(1,3 7 5 3 8 3 8 1 6 2) = 3 7 5 3 8 3 8 6 2 0 ; C04EXCL(91,44 9 23 50 41 21 40 3 48 17) = 44 9 23 50 41 21 40 3 48 17 ; C04EXCL(4,3 5 5 8 8 1 6 1 10 6) = 3 5 5 8 8 1 6 1 10 6 . As substituies a fazer so: co a AAA=1 ; BBB=1 ; CCC=11 ; DDD=J+1 ; EEE=I+1 ; FFF=11 ; GGG=I+1 . Algoritmo 5 1: funcao C05AMPL (X[10] : inteiro) : inteiro 2: inteiro I,MAI,MEN,AMP 3: MAI AAA 4: MEN BBB 5: para I de 1 a 10 faa c 6: se X[I] > CCC ento a 7: MAI X[I] 8: mse 9: se X[I] < DDD ento a 10: MEN X[I] 11: mse 12: mpara 13: AMP MAI - MEN 14: RRRR AMP 15: mfuncao
16:
Esta funcao correta, deu os seguintes resultados: C05AMPL(2 45 21 97 52 51 54 44 99 14) = 97 ; C05AMPL(4 6 5 6 5 1 7 2 2 2) = 6 ; C05AMPL(35 64 39 91 51 36 68 55 79 62) = 56 . As substituies a fazer so: co a AAA=-9999 ; BBB=-9999 ; CCC=MAI ; DDD=MEN .
88-08, Pedro Kantek
424
Responda
R=
38.2
Exerc cio 2
Voc no precisa determinar onde est o erro (se bem que isso um interessante e a a e desao), mas precisa apenas determinar que o algoritmo est errado. a Uma boa maneira de vericar isto acompanhar as 3 execues do algoritmo (correto) e co que acompanham o enunciado. Trata-se de algo similar a um chines reverso. Identique qual(is) dos 5 algoritmos esto corretos denindo An como: A1 1 se o a algoritmo 1 est correto e A1 0 seno. Idem para A2 , A3 , A4 e A5 . a a Responda o resultado R R = (A1 1) + (A2 2) + (A3 4) + (A4 8) + (A5 16) Algoritmo 1 Escreva uma funo que receba uma frase (cadeia de at 80 caracteres, ca e terminada por um ponto) e devolva 1 se a frase for um pal ndromo e 0 seno. Um a pal ndromo aquela frase que pode ser lida tanto da direita para a esquerda como ao e
verso de 10 de fevereiro de 2008 a
425
CAP ITULO 38. EXERC ICIOS PRATICOS: 125C - CORRECAO DE ALGORITMOS contrrio. Exemplos: a ROMA ME TEM AMOR SOCORRAM ME SUBI NO ONIBUS EM MARROCOS SAIRAM O TIO E OITO MARIAS OVO Observao: note que as posies do espao em branco no so as mesmas na ida e na ca co c a a volta. 1: funcao C01PALI (X[80] : caracter) : inteiro 2: inteiro INI,FIM,EPAL,TAM 3: TAM 1 4: enquanto X[TAM] AAA . faa c 5: TAM TAM + 1 6: menquanto 7: INI 1 8: FIM BBB 9: EPAL 1 10: enquanto INI < CCC faa c 11: enquanto X[DDD] = faa c 12: INI INI + 1 13: menquanto 14: enquanto X[EEE] = faa c 15: FIM FIM - 1 16: menquanto 17: se X[INI] FFF X[FIM] ento a 18: EPAL 0 19: mse 20: INI GGG 21: FIM HHH 22: menquanto 23: devolva III 24: mfuncao Esta funcao correta, deu os seguintes resultados: C01PALI(BRASIL E LISARB. ) = 1 ; C01PALI(OTO COME MOCOTO. ) = 1 ; C01PALI(XUCRICUNICO. ) = 0 . As substituies a fazer so: co a AAA=um sinal de = ; BBB=TAM-1 ; CCC=FIM ; DDD=FIM ; EEE=FIM ; FFF=um sinal de = ; GGG=INI+1 ; HHH=FIM-1 ; III=EPAL . Algoritmo 2 Escreva o algoritmo de uma funo que receba uma chave K (Inteiro) ca e um vetor V (de 10 inteiros) crescente e devolva outro vetor de 11 inteiros, tambm e crescente onde a chave K foi inclu em seu local correto. da 1: funcao C02INCL (K, V[10] : inteiro) : R[11] inteiro 2: inteiro I,J 3: para I de 1 a AAA faa c 4: R[I] V[I] 5: mpara 6: I BBB 7: enquanto (R[I] CCC)(I<DDD) faa c 8: I EEE 9: menquanto 10: J FFF
88-08, Pedro Kantek
426
enquanto J I faa c R[J+1] R[J] J GGG menquanto R[J+1] HHH devolva III mfuncao
Esta funcao correta, deu os seguintes resultados: C02INCL(41,6 12 18 24 30 36 42 48 54 60)=6 12 18 24 30 36 41 42 48 54 60 ; C02INCL(174,8 16 24 32 40 48 56 64 72 80)=8 16 24 32 40 48 56 64 72 80 174 ; C02INCL(5,15 20 25 30 35 40 45 50 55 60)=5 15 20 25 30 35 40 45 50 55 60 . As substituies a fazer so: co a AAA=10 ; BBB=1 ; CCC=K ; DDD=11 ; EEE=I+1 ; FFF=10 ; GGG=J+1 ; HHH=K ; III=R . Algoritmo 3 Escreva o algoritmo de uma funo que receba uma frase (cadeia de 80 ca caracteres, o ultimo util um ponto) e devolva o nmero da palavra que a maior da e u e frase. Se houver empate (mais de uma palavra com o mesmo comprimento), devolver o nmero da primeira. Por exemplo, na frase IVO VIU A UVA, a maior palavra tem 3 u letras como h empate a resposta deve ser 1. Na frase OUVIRAM DO IPIRANGA e a AS MARGENSa resposta deve ser 3. 1: funcao C03PALM (X[80] : caracter) : inteiro 2: TMS[40] : inteiro 3: I,J,TAM,CTP,MAI,QUA : inteiro 4: TAM AAA 5: enquanto X[TAM] = . faa c 6: TAM BBB 7: menquanto 8: CTP 1 9: I 1 10: J 0 11: enquanto I TAM faa c 12: se X[I] CCC ento a 13: TMS[CTP] I - J 14: TMS[CTP] TMS[CTP]-1 15: CTP DDD 16: J EEE 17: mse 18: II+1 19: menquanto 20: TMS[CTP] I - J 21: TMS[CTP] TMS[CTP] - FFF 22: MAI -99999 23: para I de 1 a GGG faa c 24: se TMS[I] > MAI ento a 25: MAI TMS[I] 26: QUA HHH 27: mse 28: mpara 29: devolva MAI 30: mfuncao
verso de 10 de fevereiro de 2008 a
427
CAP ITULO 38. EXERC ICIOS PRATICOS: 125C - CORRECAO DE ALGORITMOS Esta funcao correta, deu os seguintes resultados: C03PALM(DECORRIDO ENTRE O DESAPARECIMENTO. )=4 ; C03PALM(REDATOR E MOSTRAR TENDO. )=1 ; C03PALM(MAS SE NAO PODEMOS IMAGINAR. )=5 . As substituies a fazer so: co a AAA=1 ; BBB=TAM+1 ; CCC=sinal de igual (=) ; DDD=CTP+1 ; EEE=I ; FFF=2 ; GGG=CTP ; HHH=I ; III=QUA . Algoritmo 4 Escreva o algoritmo de uma funo que receba uma chave K (inteiro) e ca um vetor V de 10 inteiros. A funo deve excluir de V todas as ocorrncias (se houver) ca e de K, incluindo zeros ao nal se necessrio. Por exemplo, se chamada com 22 e 1 7 21 a 22 23 24 28 29 22 90 deve responder 1 7 21 23 24 28 29 90 0 0. 1: funcao C04EXCL (K, V[10] : inteiro) : R[10] inteiro 2: I, J : inteiro 3: I AAA 4: J BBB 5: enquanto I<CCC faa c 6: se V[I] = K ento a 7: R[J] V[I] 8: J DDD 9: mse 10: I EEE 11: menquanto 12: enquanto J < FFF faa c 13: R[J] 0 14: J GGG 15: menquanto 16: devolva R 17: mfuncao Esta funcao correta, deu os seguintes resultados: C04EXCL(2,5 1 8 3 5 8 6 8 2 5) = 5 1 8 3 5 8 6 8 5 0 ; C04EXCL(82,31 47 13 45 18 40 2 12 7 17) = 31 47 13 45 18 40 2 12 7 17 ; C04EXCL(6,2 2 3 9 9 7 9 3 8 5) = 2 2 3 9 979385. As substituies a fazer so: co a AAA=1 ; BBB=1 ; CCC=11 ; DDD=J+1 ; EEE=I+1 ; FFF=11 ; GGG=J+1 . Algoritmo 5 1: funcao C05AMPL (X[10] : inteiro) : inteiro 2: inteiro I,MAI,MEN,AMP 3: MAI AAA 4: MEN BBB 5: para I de 1 a 10 faa c 6: se X[I] > CCC ento a 7: MAI X[I] 8: mse 9: se X[I] < DDD ento a 10: MEN X[I] 11: mse 12: mpara 13: AMP MAI - MEN 14: RRRR AMP
88-08, Pedro Kantek
428
mfuncao
Esta funcao correta, deu os seguintes resultados: C05AMPL(11 65 45 96 60 59 88 89 80 35) = 85 ; C05AMPL(3 4 7 3 2 2 5 8 7 1) = 7 ; C05AMPL(81 32 36 13 55 83 6 27 23 30) = 77 . As substituies a fazer so: co a AAA=-9999 ; BBB=+9999 ; CCC=MAI ; DDD=MEN .
Responda
R=
38.3
Exerc cio 3
Voc no precisa determinar onde est o erro (se bem que isso um interessante e a a e desao), mas precisa apenas determinar que o algoritmo est errado. a Uma boa maneira de vericar isto acompanhar as 3 execues do algoritmo (correto) e co que acompanham o enunciado. Trata-se de algo similar a um chines reverso. Identique qual(is) dos 5 algoritmos esto corretos denindo An como: A1 1 se o a algoritmo 1 est correto e A1 0 seno. Idem para A2 , A3 , A4 e A5 . a a Responda o resultado R R = (A1 1) + (A2 2) + (A3 4) + (A4 8) + (A5 16)
verso de 10 de fevereiro de 2008 a
429
CAP ITULO 38. EXERC ICIOS PRATICOS: 125C - CORRECAO DE ALGORITMOS Algoritmo 1 Escreva uma funo que receba uma frase (cadeia de at 80 caracteres, ca e terminada por um ponto) e devolva 1 se a frase for um pal ndromo e 0 seno. Um a pal ndromo aquela frase que pode ser lida tanto da direita para a esquerda como ao e contrrio. Exemplos: a ROMA ME TEM AMOR SOCORRAM ME SUBI NO ONIBUS EM MARROCOS SAIRAM O TIO E OITO MARIAS OVO Observao: note que as posies do espao em branco no so as mesmas na ida e na ca co c a a volta. 1: funcao C01PALI (X[80] : caracter) : inteiro 2: inteiro INI,FIM,EPAL,TAM 3: TAM 1 4: enquanto X[TAM] AAA . faa c 5: TAM TAM + 1 6: menquanto 7: INI 1 8: FIM BBB 9: EPAL 1 10: enquanto INI < CCC faa c 11: enquanto X[DDD] = faa c 12: INI INI + 1 13: menquanto 14: enquanto X[EEE] = faa c 15: FIM FIM - 1 16: menquanto 17: se X[INI] FFF X[FIM] ento a 18: EPAL 0 19: mse 20: INI GGG 21: FIM HHH 22: menquanto 23: devolva III 24: mfuncao Esta funcao correta, deu os seguintes resultados: C01PALI(ROTOR. ) = 1 ; C01PALI(XUCRICUNICO. ) = 0 ; C01PALI(BRASIL E LISARB. ) = 1 . As substituies a fazer so: co a AAA=um sinal de = ; BBB=TAM-1 ; CCC=FIM ; DDD=INI ; EEE=FIM ; FFF=um sinal de = ; GGG=INI+1 ; HHH=FIM-1 ; III=EPAL . Algoritmo 2 Escreva o algoritmo de uma funo que receba uma chave K (Inteiro) ca e um vetor V (de 10 inteiros) crescente e devolva outro vetor de 11 inteiros, tambm e crescente onde a chave K foi inclu em seu local correto. da 1: funcao C02INCL (K, V[10] : inteiro) : R[11] inteiro 2: inteiro I,J 3: para I de 1 a AAA faa c 4: R[I] V[I] 5: mpara 6: I BBB 7: enquanto (R[I] CCC)(I<DDD) faa c
88-08, Pedro Kantek
430
CAP ITULO 38. EXERC ICIOS PRATICOS: 125C - CORRECAO DE ALGORITMOS I EEE menquanto J FFF enquanto J I faa c R[J+1] R[J] J GGG menquanto 15: R[J+1] HHH 16: devolva III 17: mfuncao Esta funcao correta, deu os seguintes resultados: C02INCL(14,7 14 21 28 35 42 49 56 63 70)=7 14 14 21 28 35 42 49 56 63 70 ; C02INCL(183,5 10 15 20 25 30 35 40 45 50)=5 10 15 20 25 30 35 40 45 50 183 ; C02INCL(2,18 26 34 42 50 58 66 74 82 90)=2 18 26 34 42 50 58 66 74 82 90 . As substituies a fazer so: co a AAA=10 ; BBB=1 ; CCC=K ; DDD=11 ; EEE=I+1 ; FFF=10 ; GGG=J-1 ; HHH=K ; III=R .
8: 9: 10: 11: 12: 13: 14:
Algoritmo 3 Escreva o algoritmo de uma funo que receba uma frase (cadeia de 80 ca caracteres, o ultimo util um ponto) e devolva o nmero da palavra que a maior da e u e frase. Se houver empate (mais de uma palavra com o mesmo comprimento), devolver o nmero da primeira. Por exemplo, na frase IVO VIU A UVA, a maior palavra tem 3 u letras como h empate a resposta deve ser 1. Na frase OUVIRAM DO IPIRANGA e a AS MARGENSa resposta deve ser 3. 1: funcao C03PALM (X[80] : caracter) : inteiro 2: TMS[40] : inteiro 3: I,J,TAM,CTP,MAI,QUA : inteiro 4: TAM AAA 5: enquanto X[TAM] = . faa c 6: TAM BBB 7: menquanto 8: CTP 1 9: I 1 10: J 0 11: enquanto I TAM faa c 12: se X[I] CCC ento a 13: TMS[CTP] I - J 14: TMS[CTP] TMS[CTP]-1 15: CTP DDD 16: J EEE 17: mse 18: II+1 19: menquanto 20: TMS[CTP] I - J 21: TMS[CTP] TMS[CTP] - FFF 22: MAI -99999 23: para I de 1 a GGG faa c 24: se TMS[I] > MAI ento a 25: MAI TMS[I] 26: QUA HHH 27: mse 28: mpara
verso de 10 de fevereiro de 2008 a
431
CAP ITULO 38. EXERC ICIOS PRATICOS: 125C - CORRECAO DE ALGORITMOS devolva MAI mfuncao Esta funcao correta, deu os seguintes resultados: C03PALM(DE DOMINGO E ANTES DA MEIA NOITE. )=2 ; C03PALM(DECORRIDO ENTRE O DESAPARECIMENTO. )=4 ; C03PALM(VOCE OBSERVOU EM SUAS NOTAS. )=2 . As substituies a fazer so: co a AAA=1 ; BBB=TAM+1 ; CCC=sinal de igual (=) ; DDD=CTP+1 ; EEE=I ; FFF=1 ; GGG=CTP ; HHH=I ; III=QUA .
29: 30:
Algoritmo 4 Escreva o algoritmo de uma funo que receba uma chave K (inteiro) e ca um vetor V de 10 inteiros. A funo deve excluir de V todas as ocorrncias (se houver) ca e de K, incluindo zeros ao nal se necessrio. Por exemplo, se chamada com 22 e 1 7 21 a 22 23 24 28 29 22 90 deve responder 1 7 21 23 24 28 29 90 0 0. 1: funcao C04EXCL (K, V[10] : inteiro) : R[10] inteiro 2: I, J : inteiro 3: I AAA 4: J BBB 5: enquanto I<CCC faa c 6: se V[I] = K ento a 7: R[J] V[I] 8: J DDD 9: mse 10: I EEE 11: menquanto 12: enquanto J < FFF faa c 13: R[J] 0 14: J GGG 15: menquanto 16: devolva R 17: mfuncao Esta funcao correta, deu os seguintes resultados: C04EXCL(3,5 7 7 7 5 5 8 7 2 5) = 5 7 7 7 5 5 8 7 2 5 ; C04EXCL(35,40 27 3 29 49 18 8 32 11 26) = 40 27 3 29 49 18 8 32 11 26 ; C04EXCL(9,3 10 6 10 1 4 10 4 3 2) = 3 10 6 10 1 4 10 4 3 2 . As substituies a fazer so: co a AAA=1 ; BBB=1 ; CCC=11 ; DDD=J+1 ; EEE=I+1 ; FFF=11 ; GGG=J+1 . Algoritmo 5 1: funcao C05AMPL (X[10] : inteiro) : inteiro 2: inteiro I,MAI,MEN,AMP 3: MAI AAA 4: MEN BBB 5: para I de 1 a 10 faa c 6: se X[I] > CCC ento a 7: MAI X[I] 8: mse 9: se X[I] < DDD ento a 10: MEN X[I] 11: mse 12: mpara
88-08, Pedro Kantek
432
Esta funcao correta, deu os seguintes resultados: C05AMPL(19 10 60 68 27 48 75 15 22 8) = 67 ; C05AMPL(1 5 1 8 7 3 6 5 3 2) = 7 ; C05AMPL(20 7 17 43 83 93 85 75 37 66) = 86 . As substituies a fazer so: co a AAA=-9999 ; BBB=+9999 ; CCC=MEN ; DDD=MEN .
Responda
R=
38.4
Exerc cio 4
Voc no precisa determinar onde est o erro (se bem que isso um interessante e a a e desao), mas precisa apenas determinar que o algoritmo est errado. a Uma boa maneira de vericar isto acompanhar as 3 execues do algoritmo (correto) e co que acompanham o enunciado. Trata-se de algo similar a um chines reverso. Identique qual(is) dos 5 algoritmos esto corretos denindo An como: A1 1 se o a algoritmo 1 est correto e A1 0 seno. Idem para A2 , A3 , A4 e A5 . a a
verso de 10 de fevereiro de 2008 a
433
CAP ITULO 38. EXERC ICIOS PRATICOS: 125C - CORRECAO DE ALGORITMOS Responda o resultado R R = (A1 1) + (A2 2) + (A3 4) + (A4 8) + (A5 16) Algoritmo 1 Escreva uma funo que receba uma frase (cadeia de at 80 caracteres, ca e terminada por um ponto) e devolva 1 se a frase for um pal ndromo e 0 seno. Um a pal ndromo aquela frase que pode ser lida tanto da direita para a esquerda como ao e contrrio. Exemplos: a ROMA ME TEM AMOR SOCORRAM ME SUBI NO ONIBUS EM MARROCOS SAIRAM O TIO E OITO MARIAS OVO Observao: note que as posies do espao em branco no so as mesmas na ida e na ca co c a a volta. 1: funcao C01PALI (X[80] : caracter) : inteiro 2: inteiro INI,FIM,EPAL,TAM 3: TAM 1 4: enquanto X[TAM] AAA . faa c 5: TAM TAM + 1 6: menquanto 7: INI 1 8: FIM BBB 9: EPAL 1 10: enquanto INI < CCC faa c 11: enquanto X[DDD] = faa c 12: INI INI + 1 13: menquanto 14: enquanto X[EEE] = faa c 15: FIM FIM - 1 16: menquanto 17: se X[INI] FFF X[FIM] ento a 18: EPAL 0 19: mse 20: INI GGG 21: FIM HHH 22: menquanto 23: devolva III 24: mfuncao Esta funcao correta, deu os seguintes resultados: C01PALI(ARA. ) = 1 ; C01PALI(OTO COME MOCOTO. ) = 1 ; C01PALI(XUCRICUNICO. )=0. As substituies a fazer so: co a AAA=um sinal de = ; BBB=TAM-1 ; CCC=FIM ; DDD=INI ; EEE=INI ; FFF=um sinal de = ; GGG=INI+1 ; HHH=FIM-1 ; III=EPAL . Algoritmo 2 Escreva o algoritmo de uma funo que receba uma chave K (Inteiro) ca e um vetor V (de 10 inteiros) crescente e devolva outro vetor de 11 inteiros, tambm e crescente onde a chave K foi inclu em seu local correto. da 1: funcao C02INCL (K, V[10] : inteiro) : R[11] inteiro 2: inteiro I,J 3: para I de 1 a AAA faa c 4: R[I] V[I]
88-08, Pedro Kantek
434
CAP ITULO 38. EXERC ICIOS PRATICOS: 125C - CORRECAO DE ALGORITMOS mpara I BBB enquanto (R[I] CCC)(I<DDD) faa c I EEE menquanto J FFF enquanto J I faa c 12: R[J+1] R[J] 13: J GGG 14: menquanto 15: R[J+1] HHH 16: devolva III 17: mfuncao Esta funcao correta, deu os seguintes resultados: C02INCL(98,7 14 21 28 35 42 49 56 63 70)=7 14 21 28 35 42 49 56 63 70 98 ; C02INCL(176,7 14 21 28 35 42 49 56 63 70)=7 14 21 28 35 42 49 56 63 70 176 ; C02INCL(7,15 20 25 30 35 40 45 50 55 60)=7 15 20 25 30 35 40 45 50 55 60 . As substituies a fazer so: co a AAA=10 ; BBB=1 ; CCC=K ; DDD=11 ; EEE=I+1 ; FFF=10 ; GGG=J+1 ; HHH=K ; III=R .
5: 6: 7: 8: 9: 10: 11:
Algoritmo 3 Escreva o algoritmo de uma funo que receba uma frase (cadeia de 80 ca caracteres, o ultimo util um ponto) e devolva o nmero da palavra que a maior da e u e frase. Se houver empate (mais de uma palavra com o mesmo comprimento), devolver o nmero da primeira. Por exemplo, na frase IVO VIU A UVA, a maior palavra tem 3 u letras como h empate a resposta deve ser 1. Na frase OUVIRAM DO IPIRANGA e a AS MARGENSa resposta deve ser 3. 1: funcao C03PALM (X[80] : caracter) : inteiro 2: TMS[40] : inteiro 3: I,J,TAM,CTP,MAI,QUA : inteiro 4: TAM AAA 5: enquanto X[TAM] = . faa c 6: TAM BBB 7: menquanto 8: CTP 1 9: I 1 10: J 0 11: enquanto I TAM faa c 12: se X[I] CCC ento a 13: TMS[CTP] I - J 14: TMS[CTP] TMS[CTP]-1 15: CTP DDD 16: J EEE 17: mse 18: II+1 19: menquanto 20: TMS[CTP] I - J 21: TMS[CTP] TMS[CTP] - FFF 22: MAI -99999 23: para I de 1 a GGG faa c 24: se TMS[I] > MAI ento a 25: MAI TMS[I]
verso de 10 de fevereiro de 2008 a
435
CAP ITULO 38. EXERC ICIOS PRATICOS: 125C - CORRECAO DE ALGORITMOS QUA HHH mse mpara devolva MAI mfuncao Esta funcao correta, deu os seguintes resultados: C03PALM(SE PERMITIRMOS QUE SUPONHA TAL. )=2 ; C03PALM(DE DOMINGO E ANTES DA MEIA NOITE. )=2 ; C03PALM(REDATOR E MOSTRAR TENDO. )=1 . As substituies a fazer so: co a AAA=1 ; BBB=TAM+1 ; CCC=sinal de igual (=) ; DDD=CTP+1 ; EEE=I ; FFF=2 ; GGG=CTP ; HHH=I ; III=MAI .
26: 27: 28: 29: 30:
Algoritmo 4 Escreva o algoritmo de uma funo que receba uma chave K (inteiro) e ca um vetor V de 10 inteiros. A funo deve excluir de V todas as ocorrncias (se houver) ca e de K, incluindo zeros ao nal se necessrio. Por exemplo, se chamada com 22 e 1 7 21 a 22 23 24 28 29 22 90 deve responder 1 7 21 23 24 28 29 90 0 0. 1: funcao C04EXCL (K, V[10] : inteiro) : R[10] inteiro 2: I, J : inteiro 3: I AAA 4: J BBB 5: enquanto I<CCC faa c 6: se V[I] = K ento a 7: R[J] V[I] 8: J DDD 9: mse 10: I EEE 11: menquanto 12: enquanto J < FFF faa c 13: R[J] 0 14: J GGG 15: menquanto 16: devolva R 17: mfuncao Esta funcao correta, deu os seguintes resultados: C04EXCL(6,4 1 7 7 1 8 6 4 1 6) = 4 1 7 7 1 8 4 1 0 0 ; C04EXCL(68,21 19 18 11 29 8 43 10 39 27) = 21 19 18 11 29 8 43 10 39 27 ; C04EXCL(9,10 3 9 9 9 5 8 7 6 3) = 10 358763000. As substituies a fazer so: co a AAA=1 ; BBB=1 ; CCC=11 ; DDD=J+1 ; EEE=I+1 ; FFF=11 ; GGG=J+1 . Algoritmo 5 1: funcao C05AMPL (X[10] : inteiro) : inteiro 2: inteiro I,MAI,MEN,AMP 3: MAI AAA 4: MEN BBB 5: para I de 1 a 10 faa c 6: se X[I] > CCC ento a 7: MAI X[I] 8: mse 9: se X[I] < DDD ento a
88-08, Pedro Kantek
436
MEN X[I] mse mpara AMP MAI - MEN RRRR AMP mfuncao
Esta funcao correta, deu os seguintes resultados: C05AMPL(76 38 36 62 50 19 55 79 73 78) = 60 ; C05AMPL(7 6 5 3 5 1 2 6 4 1) = 6 ; C05AMPL(30 61 95 72 10 43 33 64 48 73) = 85 . As substituies a fazer so: co a AAA=-9999 ; BBB=+9999 ; CCC=MAI ; DDD=MEN .
Responda
R=
38.5
1 2 3 4
Respostas
0 4 0 5 1 7 0 7 3 0 6 9 7 0 0 0 2 0 3 0 1 28 11 24
437
438
Cap tulo 39
Voc no precisa determinar onde est o erro (se bem que isso um interessante e a a e desao), mas precisa apenas determinar que o algoritmo est errado. a Uma boa maneira de vericar isto acompanhar as 3 execues do algoritmo (correto) e co que acompanham o enunciado. Trata-se de algo similar a um chines reverso. Identique qual(is) dos 5 algoritmos esto corretos denindo An como: A1 1 se o a algoritmo 1 est correto e A1 0 seno. Idem para A2 , A3 , A4 e A5 . a a Responda o resultado R R = (A1 1) + (A2 2) + (A3 4) + (A4 8) + (A5 16) Algoritmo 1 Escreva o algoritmo de uma funo que receba uma matriz de 9 inteiros ca (3 linhas por 3 colunas), totalize as colunas e devolva um vetor de 3 totais. 1: funo D01VESO (M [1..3] [1..3] : inteiro) V[1..3]:inteiro ca 2: I,J,SOM : inteiro 3: V 0,0,0 4: para AAA de 1 a 3 faa c 5: BBB 0 6: para CCC de 1 a 3 faa c 7: SOM SOM + M[I] [J] 8: mpara 9: V[DDD] SOM 10: mpara 439
CAP ITULO 39. EXERC ICIOS PRATICOS 125D - CORRECAO DE ALGORITMOS retorne V mfuno ca As substituies a fazer so: co a AAA=J ; BBB=SOM ; CCC=I ; DDD=J . Esta funo correta, deu os seguintes resultados: ca D01VESO (6 4 9,9 5 3,1 7 8) = 16 16 20 ; D01VESO (5 6 1,9 3 3,9 3 7) = 23 12 11 ; D01VESO (3 3 7,3 5 7,1 5 3) = 7 13 17 .
11: 12:
Algoritmo 2 Escreva o algoritmo de uma funo que receba uma matriz de 4 linhas ca por 4 colunas de nmeros inteiros. A funo deve gerar um vetor de 4 nmeros reais. O u ca u elemento k da resposta calculado como a soma dos elementos da coluna k, que esto e a acima da linha k, dividido pela soma dos elementos que esto na coluna k e nas linhas a k, k + 1, ..., 4. 1: funo D02MSMI (M[1..4] [1..4] : inteiro) V[1..4]:real ca 2: J,NUM,DEN,I : inteiro 3: para J de 1 a 4 faa c 4: NUM AAA 5: DEN 0 6: para I de 1 a BBB faa c 7: NUM NUM + M[I][EEE] 8: mpara 9: para I de CCC a 4 faa c 10: DEN DEN + M[DDD][J] 11: mpara 12: V[J] FFF DEN 13: mpara 14: retorne V 15: mfuno ca As substituies a fazer so: co a AAA=0 (zero) ; BBB=J-1 ; CCC=1 (um) ; DDD=I ; EEE=J ; FFF=NUM . Esta funo correta, deu os seguintes resultados: ca D02MSMI ( 5 1 12 13, 6 4 1 15, 4 12 1 3,10 4 13 10)= .0 .1 .9 3.1 ; D02MSMI (18 20 3 7,18 18 18 4,14 9 4 1,10 1 13 10)= .0 .7 1.2 1.2 ; D02MSMI ( 9 1 11 3,20 3 3 17, 2 16 18 4,19 8 13 16)= .0 .0 .5 1.5 . Algoritmo 3 Escreva o algoritmo de uma funo que receba uma matriz de 4 linhas ca por 5 colunas contendo inteiros e devolva um vetor de 4 inteiros que contm o menor e valor em cada linha. 1: funo D03MEHO (M[1..4][1..5]:inteiro) V[1..4]:inteiro ca 2: I,J,MEN : inteiro 3: para I de 1 a 4 faa c 4: MEN AAA 5: para J de 1 a BBB faa c 6: se M[I][CCC] < MEN ento a 7: MEN M[I][J] 8: mse 9: mpara 10: V[I] DDD 11: mpara 12: retorne V 13: mfuno ca
88-08, Pedro Kantek
440
CAP ITULO 39. EXERC ICIOS PRATICOS 125D - CORRECAO DE ALGORITMOS As substituies a fazer so: co a AAA=999999 ; BBB=5 ; CCC=J ; DDD=J . Esta funo correta, deu os seguintes resultados: ca D03MEHO ( 3 2 2 3 2, 5 7 2 6 10,10 3 1 10 3, 9 6 6 9 1)=2 2 1 1 ; D03MEHO ( 7 2 1 9 8, 4 4 8 3 8, 9 7 4 9 1,10 9 3 3 1)=1 3 1 1 ; D03MEHO (4 6 7 4 10,2 4 10 5 9,9 4 3 7 10,3 2 10 3 3)=4 2 3 2 . Algoritmo 4 Escreva uma funo que receba duas matrizes conformveis, isto a ca a e primeiro de 3 linhas por 4 colunas e a segunda de 4 linhas por 3 colunas. A funo deve ca multiplicar as duas matrizes, gerando o resultado que ter 3 linhas por 3 colunas. a 1: funo D04MUMA (A[1..3][1..4]:inteiro, ca 2: B[1..4][1..3]:inteiro) 3: V[1..3][1..3]:real // at aqui o cabealho... e e c 4: I,J,K,SOM:inteiro 5: para I de 1 a AAA faa c 6: para J de 1 a BBB faa c 7: SOM 0 8: para K de 1 a CCC faa c 9: SOM SOM+(A[I][DDD]B[EEE][J]) 10: mpara 11: V[FFF][J] SOM 12: mpara 13: mpara 14: retorne V 15: mfuno ca As substituies a fazer so: co a AAA=3 ; BBB=3 ; CCC=4 ; DDD=K ; EEE=K ; FFF=K . Esta funo correta, deu os seguintes resultados: ca D04MUMA (5 6 6 5,3 4 1 5,2 5 1 2;1 3 5,5 1 6,4 1 0,4 3 5) = 79 42 86,47 29 64,39 18 50 ; D04MUMA (0 1 5 3,5 2 6 2,2 4 2 5;4 1 2,5 1 2,6 5 6,1 5 4) = 38 41 44,68 47 58,45 41 44 ; D04MUMA (2 0 0 3,4 6 6 2,6 2 0 6;6 6 3,5 4 6,4 3 3,2 4 2) = 18 24 12,82 74 70,58 68 42 . Algoritmo 5 Escreva o algoritmo de uma funo que receba uma matriz de 6 linhas ca por 2 colunas contendo o resultado de uma eleio. A primeira coluna corresponde ao ca nmero do candidato, sendo que nem todas as linhas estaro preenchidas. Neste caso as u a linhas no usadas contero zeros. Existem dois cdigos em especial que estaro sempre a a o a presentes e que so 998=votos em branco e 999=votos nulos. A segunda coluna contm a e a quantidade de votos a cada candidato e tambm brancos e nulos. e A funo deve devolver o nmero do candidato eleito, ou -1 se a eleio no for ca u ca a vlida. O eleito aquele que obteve o maior nmero de votos se a eleio foi vlida. a e u ca a Uma eleio vlida quando o total de votos dados a candidatos mais os votos em ca e a branco corresponderem a 50% mais 1 voto do total de votantes. Se o vencedor for o branco ou o nulo, vence o candidato da linha 1 (por hiptese o mais velho). o e 1: funo D05ELEI (VOT[1..6][1..2]:inteiro):inteiro ca 2: VAL,I,NUL,TOT,MAI,QUEM:inteiro 3: VAL 0 4: para I de 1 a AAA faa c 5: se VOT[I][1] = BBB ento a 6: VAL VAL + VOT[I][CCC] 7: seno a
verso de 10 de fevereiro de 2008 a
441
CAP ITULO 39. EXERC ICIOS PRATICOS 125D - CORRECAO DE ALGORITMOS NUL VOT[I][2] mse mpara TOT VAL 2 se NUL > DDD ento a retorne -1 seno a 15: MAI -999999 16: para I de 1 a 6 faa c 17: se VOT[I][EEE] > MAI ento a 18: FFF VOT[I][2] 19: QUEM VOT[I][1] 20: mse 21: mpara 22: se (GGG = 998) (GGG=999) ento a 23: retorne 1 24: seno a 25: retorne QUEM 26: mse 27: mse 28: mfuno ca As substituies a fazer so: co a AAA=6 ; BBB=999 ; CCC=2 ; DDD=NUL ; EEE=2 ; FFF=MAI ; GGG=QUEM . Esta funo correta, deu os seguintes resultados: ca D05ELEI ( 40 1400, 10 800, 0 0, 0 0,998 180,999 120) = 40 ; D05ELEI ( 70 80, 60 220, 80 320, 10 200,998 80,999 390) = 1 ; D05ELEI ( 60 60, 10 100, 70 140, 0 0,998 320,999 60) = 1 .
8: 9: 10: 11: 12: 13: 14:
Responda
R=
39.2
Exerc cio 2
Voc no precisa determinar onde est o erro (se bem que isso um interessante e a a e desao), mas precisa apenas determinar que o algoritmo est errado. a Uma boa maneira de vericar isto acompanhar as 3 execues do algoritmo (correto) e co que acompanham o enunciado. Trata-se de algo similar a um chines reverso.
88-08, Pedro Kantek
442
CAP ITULO 39. EXERC ICIOS PRATICOS 125D - CORRECAO DE ALGORITMOS Identique qual(is) dos 5 algoritmos esto corretos denindo An como: A1 1 se o a algoritmo 1 est correto e A1 0 seno. Idem para A2 , A3 , A4 e A5 . a a Responda o resultado R R = (A1 1) + (A2 2) + (A3 4) + (A4 8) + (A5 16) Algoritmo 1 Escreva o algoritmo de uma funo que receba uma matriz de 9 inteiros ca (3 linhas por 3 colunas), totalize as colunas e devolva um vetor de 3 totais. 1: funo D01VESO (M [1..3] [1..3] : inteiro) V[1..3]:inteiro ca 2: I,J,SOM : inteiro 3: V 0,0,0 4: para AAA de 1 a 3 faa c 5: BBB 0 6: para CCC de 1 a 3 faa c 7: SOM SOM + M[I] [J] 8: mpara 9: V[DDD] SOM 10: mpara 11: retorne V 12: mfuno ca As substituies a fazer so: co a AAA=J ; BBB=SOM ; CCC=J ; DDD=J . Esta funo correta, deu os seguintes resultados: ca D01VESO (7 2 2,1 1 1,3 7 2) = 11 10 5 ; D01VESO (3 5 5,5 6 9,9 1 9) = 17 12 23 ; D01VESO (6 4 7,3 7 8,5 5 3) = 14 16 18 . Algoritmo 2 Escreva o algoritmo de uma funo que receba uma matriz de 4 linhas ca por 4 colunas de nmeros inteiros. A funo deve gerar um vetor de 4 nmeros reais. O u ca u elemento k da resposta calculado como a soma dos elementos da coluna k, que esto e a acima da linha k, dividido pela soma dos elementos que esto na coluna k e nas linhas a k, k + 1, ..., 4. 1: funo D02MSMI (M[1..4] [1..4] : inteiro) V[1..4]:real ca 2: J,NUM,DEN,I : inteiro 3: para J de 1 a 4 faa c 4: NUM AAA 5: DEN 0 6: para I de 1 a BBB faa c 7: NUM NUM + M[I][EEE] 8: mpara 9: para I de CCC a 4 faa c 10: DEN DEN + M[DDD][J] 11: mpara 12: V[J] FFF DEN 13: mpara 14: retorne V 15: mfuno ca As substituies a fazer so: co a AAA=0 (zero) ; BBB=J-1 ; CCC=J ; DDD=J ; EEE=J ; FFF=NUM . Esta funo correta, deu os seguintes resultados: ca D02MSMI (11 5 15 5,11 18 17 15,12 3 4 11,11 17 8 14)= .0 .1 2.7 2.2 ; D02MSMI ( 3 17 16 5,11 10 6 16,17 20 4 13, 8 3 7 14)= .0 .5 2.0 2.4 ; D02MSMI (16 13 18 5, 3 4 18 17,16 18 20 20, 1 2 20 15)= .0 .5 .9 2.8 .
verso de 10 de fevereiro de 2008 a
443
CAP ITULO 39. EXERC ICIOS PRATICOS 125D - CORRECAO DE ALGORITMOS Algoritmo 3 Escreva o algoritmo de uma funo que receba uma matriz de 4 linhas ca por 5 colunas contendo inteiros e devolva um vetor de 4 inteiros que contm o menor e valor em cada linha. 1: funo D03MEHO (M[1..4][1..5]:inteiro) V[1..4]:inteiro ca 2: I,J,MEN : inteiro 3: para I de 1 a 4 faa c 4: MEN AAA 5: para J de 1 a BBB faa c 6: se M[I][CCC] < MEN ento a 7: MEN M[I][J] 8: mse 9: mpara 10: V[I] DDD 11: mpara 12: retorne V 13: mfuno ca As substituies a fazer so: co a AAA=0 (zero) ; BBB=5 ; CCC=J ; DDD=MEN . Esta funo correta, deu os seguintes resultados: ca D03MEHO (5 3 4 7 3,8 7 4 9 5,3 2 10 3 1,9 2 9 2 4)=3 4 1 2 ; D03MEHO ( 5 9 6 5 3, 9 7 2 4 5,10 9 9 2 8, 7 8 8 5 10)=3 2 2 5 ; D03MEHO (2 10 2 10 5,6 2 1 1 4,8 8 10 7 1,3 2 1 6 3)=2 1 1 1 . Algoritmo 4 Escreva uma funo que receba duas matrizes conformveis, isto a ca a e primeiro de 3 linhas por 4 colunas e a segunda de 4 linhas por 3 colunas. A funo deve ca multiplicar as duas matrizes, gerando o resultado que ter 3 linhas por 3 colunas. a 1: funo D04MUMA (A[1..3][1..4]:inteiro, ca 2: B[1..4][1..3]:inteiro) 3: V[1..3][1..3]:real // at aqui o cabealho... e e c 4: I,J,K,SOM:inteiro 5: para I de 1 a AAA faa c 6: para J de 1 a BBB faa c 7: SOM 0 8: para K de 1 a CCC faa c 9: SOM SOM+(A[I][DDD]B[EEE][J]) 10: mpara 11: V[FFF][J] SOM 12: mpara 13: mpara 14: retorne V 15: mfuno ca As substituies a fazer so: co a AAA=3 ; BBB=3 ; CCC=4 ; DDD=K ; EEE=K ; FFF=I . Esta funo correta, deu os seguintes resultados: ca D04MUMA (6 2 1 1,3 3 1 1,3 2 5 3;6 6 2,1 3 1,0 5 4,6 3 0) = 44 50 18,27 35 13,38 58 28 ; D04MUMA (0 6 5 1,3 5 2 0,4 1 3 1;0 3 2,2 2 2,1 6 3,0 3 1) = 17 45 28,12 31 22, 5 35 20 ; D04MUMA (1 0 4 2,6 3 5 5,1 5 1 6;3 0 4,0 1 3,3 4 5,0 4 0) = 15 24 24,33 43 58, 6 33 24 . Algoritmo 5 Escreva o algoritmo de uma funo que receba uma matriz de 6 linhas ca por 2 colunas contendo o resultado de uma eleio. A primeira coluna corresponde ao ca
88-08, Pedro Kantek
444
CAP ITULO 39. EXERC ICIOS PRATICOS 125D - CORRECAO DE ALGORITMOS nmero do candidato, sendo que nem todas as linhas estaro preenchidas. Neste caso as u a linhas no usadas contero zeros. Existem dois cdigos em especial que estaro sempre a a o a presentes e que so 998=votos em branco e 999=votos nulos. A segunda coluna contm a e a quantidade de votos a cada candidato e tambm brancos e nulos. e A funo deve devolver o nmero do candidato eleito, ou -1 se a eleio no for ca u ca a vlida. O eleito aquele que obteve o maior nmero de votos se a eleio foi vlida. a e u ca a Uma eleio vlida quando o total de votos dados a candidatos mais os votos em ca e a branco corresponderem a 50% mais 1 voto do total de votantes. Se o vencedor for o branco ou o nulo, vence o candidato da linha 1 (por hiptese o mais velho). o e 1: funo D05ELEI (VOT[1..6][1..2]:inteiro):inteiro ca 2: VAL,I,NUL,TOT,MAI,QUEM:inteiro 3: VAL 0 4: para I de 1 a AAA faa c 5: se VOT[I][1] = BBB ento a 6: VAL VAL + VOT[I][CCC] 7: seno a 8: NUL VOT[I][2] 9: mse 10: mpara 11: TOT VAL 2 12: se NUL > DDD ento a 13: retorne -1 14: seno a 15: MAI -999999 16: para I de 1 a 6 faa c 17: se VOT[I][EEE] > MAI ento a 18: FFF VOT[I][2] 19: QUEM VOT[I][1] 20: mse 21: mpara 22: se (GGG = 998) (GGG=999) ento a 23: retorne 1 24: seno a 25: retorne QUEM 26: mse 27: mse 28: mfuno ca As substituies a fazer so: co a AAA=6 ; BBB=999 ; CCC=2 ; DDD=TOT ; EEE=2 ; FFF=MAI ; GGG=QUEM . Esta funo correta, deu os seguintes resultados: ca D05ELEI ( 40 160, 60 80, 20 260, 50 180,998 340,999 60) = 1 ; D05ELEI ( 90 360, 60 400, 10 220, 20 40,998 280,999 450) = 1 ; D05ELEI ( 40 340, 50 360, 30 20, 70 260,998 200,999 210) = 50 .
Responda
R=
445
39.3
Exerc cio 2
Voc no precisa determinar onde est o erro (se bem que isso um interessante e a a e desao), mas precisa apenas determinar que o algoritmo est errado. a Uma boa maneira de vericar isto acompanhar as 3 execues do algoritmo (correto) e co que acompanham o enunciado. Trata-se de algo similar a um chines reverso. Identique qual(is) dos 5 algoritmos esto corretos denindo An como: A1 1 se o a algoritmo 1 est correto e A1 0 seno. Idem para A2 , A3 , A4 e A5 . a a Responda o resultado R R = (A1 1) + (A2 2) + (A3 4) + (A4 8) + (A5 16) Algoritmo 1 Escreva o algoritmo de uma funo que receba uma matriz de 9 inteiros ca (3 linhas por 3 colunas), totalize as colunas e devolva um vetor de 3 totais. 1: funo D01VESO (M [1..3] [1..3] : inteiro) V[1..3]:inteiro ca 2: I,J,SOM : inteiro 3: V 0,0,0 4: para AAA de 1 a 3 faa c 5: BBB 0 6: para CCC de 1 a 3 faa c 7: SOM SOM + M[I] [J] 8: mpara 9: V[DDD] SOM 10: mpara 11: retorne V 12: mfuno ca As substituies a fazer so: co a AAA=J ; BBB=SOM ; CCC=I ; DDD=J . Esta funo correta, deu os seguintes resultados: ca D01VESO (2 8 8,2 5 6,4 9 8) = 8 22 22 ; D01VESO (6 5 5,7 3 4,1 3 2) = 14 11 11 ; D01VESO (3 5 7,9 1 2,4 7 9) = 16 13 18 . Algoritmo 2 Escreva o algoritmo de uma funo que receba uma matriz de 4 linhas ca por 4 colunas de nmeros inteiros. A funo deve gerar um vetor de 4 nmeros reais. O u ca u elemento k da resposta calculado como a soma dos elementos da coluna k, que esto e a acima da linha k, dividido pela soma dos elementos que esto na coluna k e nas linhas a k, k + 1, ..., 4. 1: funo D02MSMI (M[1..4] [1..4] : inteiro) V[1..4]:real ca 2: J,NUM,DEN,I : inteiro 3: para J de 1 a 4 faa c 4: NUM AAA
88-08, Pedro Kantek
446
CAP ITULO 39. EXERC ICIOS PRATICOS 125D - CORRECAO DE ALGORITMOS DEN 0 para I de 1 a BBB faa c NUM NUM + M[I][EEE] mpara para I de CCC a 4 faa c DEN DEN + M[DDD][J] mpara 12: V[J] FFF DEN 13: mpara 14: retorne V 15: mfuno ca As substituies a fazer so: co a AAA=1 (um) ; BBB=J-1 ; CCC=J ; DDD=I ; EEE=J ; FFF=NUM . Esta funo correta, deu os seguintes resultados: ca D02MSMI (20 12 6 6,17 10 1 12,13 8 8 12, 8 15 1 16)= .0 .4 .8 1.9 ; D02MSMI (16 16 5 19, 9 8 3 3, 2 19 17 16,20 7 12 13)= .0 .5 .3 2.9 ; D02MSMI (18 20 7 10,14 5 4 9, 2 13 5 18,20 12 11 17)= .0 .7 .7 2.2 .
5: 6: 7: 8: 9: 10: 11:
Algoritmo 3 Escreva o algoritmo de uma funo que receba uma matriz de 4 linhas ca por 5 colunas contendo inteiros e devolva um vetor de 4 inteiros que contm o menor e valor em cada linha. 1: funo D03MEHO (M[1..4][1..5]:inteiro) V[1..4]:inteiro ca 2: I,J,MEN : inteiro 3: para I de 1 a 4 faa c 4: MEN AAA 5: para J de 1 a BBB faa c 6: se M[I][CCC] < MEN ento a 7: MEN M[I][J] 8: mse 9: mpara 10: V[I] DDD 11: mpara 12: retorne V 13: mfuno ca As substituies a fazer so: co a AAA=999999 ; BBB=5 ; CCC=J ; DDD=J . Esta funo correta, deu os seguintes resultados: ca D03MEHO ( 2 10 8 3 7, 7 9 9 5 3, 4 7 6 7 3,10 10 7 6 2)=2 3 3 2 ; D03MEHO (5 2 10 5 8,7 1 6 1 3,3 5 4 6 3,5 7 4 10 6)=2 1 3 4 ; D03MEHO ( 3 2 7 7 7,10 4 3 10 3,10 4 2 1 1, 1 3 4 4 8)=2 3 1 1 . Algoritmo 4 Escreva uma funo que receba duas matrizes conformveis, isto a ca a e primeiro de 3 linhas por 4 colunas e a segunda de 4 linhas por 3 colunas. A funo deve ca multiplicar as duas matrizes, gerando o resultado que ter 3 linhas por 3 colunas. a 1: funo D04MUMA (A[1..3][1..4]:inteiro, ca 2: B[1..4][1..3]:inteiro) 3: V[1..3][1..3]:real // at aqui o cabealho... e e c 4: I,J,K,SOM:inteiro 5: para I de 1 a AAA faa c 6: para J de 1 a BBB faa c 7: SOM 0
verso de 10 de fevereiro de 2008 a
447
CAP ITULO 39. EXERC ICIOS PRATICOS 125D - CORRECAO DE ALGORITMOS para K de 1 a CCC faa c SOM SOM+(A[I][DDD]B[EEE][J]) mpara V[FFF][J] SOM mpara mpara retorne V 15: mfuno ca As substituies a fazer so: co a AAA=3 ; BBB=4 ; CCC=4 ; DDD=K ; EEE=K ; FFF=I . Esta funo correta, deu os seguintes resultados: ca D04MUMA (2 1 5 3,0 1 4 6,0 0 4 1;0 3 2,0 3 5,1 3 3,6 4 4) = 23 36 36,40 39 41,10 16 16 ; D04MUMA (0 3 1 2,4 2 2 3,0 5 3 1;4 0 1,1 3 0,6 5 4,5 4 3) = 19 22 10,45 28 21,28 34 15 ; D04MUMA (3 6 3 1,1 5 0 0,0 1 4 4;5 3 2,3 1 3,5 5 4,2 6 4) = 50 36 40,20 8 17,31 45 35 .
8: 9: 10: 11: 12: 13: 14:
Algoritmo 5 Escreva o algoritmo de uma funo que receba uma matriz de 6 linhas ca por 2 colunas contendo o resultado de uma eleio. A primeira coluna corresponde ao ca nmero do candidato, sendo que nem todas as linhas estaro preenchidas. Neste caso as u a linhas no usadas contero zeros. Existem dois cdigos em especial que estaro sempre a a o a presentes e que so 998=votos em branco e 999=votos nulos. A segunda coluna contm a e a quantidade de votos a cada candidato e tambm brancos e nulos. e A funo deve devolver o nmero do candidato eleito, ou -1 se a eleio no for ca u ca a vlida. O eleito aquele que obteve o maior nmero de votos se a eleio foi vlida. a e u ca a Uma eleio vlida quando o total de votos dados a candidatos mais os votos em ca e a branco corresponderem a 50% mais 1 voto do total de votantes. Se o vencedor for o branco ou o nulo, vence o candidato da linha 1 (por hiptese o mais velho). o e 1: funo D05ELEI (VOT[1..6][1..2]:inteiro):inteiro ca 2: VAL,I,NUL,TOT,MAI,QUEM:inteiro 3: VAL 0 4: para I de 1 a AAA faa c 5: se VOT[I][1] = BBB ento a 6: VAL VAL + VOT[I][CCC] 7: seno a 8: NUL VOT[I][2] 9: mse 10: mpara 11: TOT VAL 2 12: se NUL > DDD ento a 13: retorne -1 14: seno a 15: MAI -999999 16: para I de 1 a 6 faa c 17: se VOT[I][EEE] > MAI ento a 18: FFF VOT[I][2] 19: QUEM VOT[I][1] 20: mse 21: mpara 22: se (GGG = 998) (GGG=999) ento a 23: retorne 1 24: seno a 25: retorne QUEM
88-08, Pedro Kantek
448
mse mse mfuno ca As substituies a fazer so: co a AAA=6 ; BBB=999 ; CCC=2 ; DDD=TOT ; EEE=2 ; FFF=MAI ; GGG=QUEM
. Esta funo correta, deu os seguintes resultados: ca D05ELEI ( 20 320, 40 260, 10 300, 50 220,998 240,999 330) = 1 ; D05ELEI ( 50 160, 30 360, 90 300, 40 60,998 380,999 240) = 1 ; D05ELEI ( 40 120, 20 40, 30 300, 80 320,998 380,999 570) = 1 .
Responda
R=
39.4
Exerc cio 3
Voc no precisa determinar onde est o erro (se bem que isso um interessante e a a e desao), mas precisa apenas determinar que o algoritmo est errado. a Uma boa maneira de vericar isto acompanhar as 3 execues do algoritmo (correto) e co que acompanham o enunciado. Trata-se de algo similar a um chines reverso. Identique qual(is) dos 5 algoritmos esto corretos denindo An como: A1 1 se o a algoritmo 1 est correto e A1 0 seno. Idem para A2 , A3 , A4 e A5 . a a Responda o resultado R R = (A1 1) + (A2 2) + (A3 4) + (A4 8) + (A5 16) Algoritmo 1 Escreva o algoritmo de uma funo que receba uma matriz de 9 inteiros ca (3 linhas por 3 colunas), totalize as colunas e devolva um vetor de 3 totais. 1: funo D01VESO (M [1..3] [1..3] : inteiro) V[1..3]:inteiro ca 2: I,J,SOM : inteiro 3: V 0,0,0 4: para AAA de 1 a 3 faa c 5: BBB 0 6: para CCC de 1 a 3 faa c 7: SOM SOM + M[I] [J] 8: mpara 9: V[DDD] SOM 10: mpara
verso de 10 de fevereiro de 2008 a
449
CAP ITULO 39. EXERC ICIOS PRATICOS 125D - CORRECAO DE ALGORITMOS retorne V mfuno ca As substituies a fazer so: co a AAA=I ; BBB=SOM ; CCC=I ; DDD=J . Esta funo correta, deu os seguintes resultados: ca D01VESO (2 1 9,3 8 2,8 4 2) = 13 13 13 ; D01VESO (2 8 9,6 6 5,4 7 8) = 12 21 22 ; D01VESO (2 1 1,4 9 5,5 7 4) = 11 17 10 .
11: 12:
Algoritmo 2 Escreva o algoritmo de uma funo que receba uma matriz de 4 linhas ca por 4 colunas de nmeros inteiros. A funo deve gerar um vetor de 4 nmeros reais. O u ca u elemento k da resposta calculado como a soma dos elementos da coluna k, que esto e a acima da linha k, dividido pela soma dos elementos que esto na coluna k e nas linhas a k, k + 1, ..., 4. 1: funo D02MSMI (M[1..4] [1..4] : inteiro) V[1..4]:real ca 2: J,NUM,DEN,I : inteiro 3: para J de 1 a 4 faa c 4: NUM AAA 5: DEN 0 6: para I de 1 a BBB faa c 7: NUM NUM + M[I][EEE] 8: mpara 9: para I de CCC a 4 faa c 10: DEN DEN + M[DDD][J] 11: mpara 12: V[J] FFF DEN 13: mpara 14: retorne V 15: mfuno ca As substituies a fazer so: co a AAA=0 (zero) ; BBB=J-1 ; CCC=J ; DDD=I ; EEE=J ; FFF=NUM . Esta funo correta, deu os seguintes resultados: ca D02MSMI (11 12 11 13, 9 5 4 13,11 5 4 11,10 20 2 1)= .0 .4 2.5 37.0 ; D02MSMI (16 11 13 5, 2 13 8 12,14 7 13 11, 3 14 15 2)= .0 .3 .8 14.0 ; D02MSMI ( 2 18 8 19,14 19 15 3, 2 4 14 20,12 9 7 8)= .0 .6 1.1 5.3 . Algoritmo 3 Escreva o algoritmo de uma funo que receba uma matriz de 4 linhas ca por 5 colunas contendo inteiros e devolva um vetor de 4 inteiros que contm o menor e valor em cada linha. 1: funo D03MEHO (M[1..4][1..5]:inteiro) V[1..4]:inteiro ca 2: I,J,MEN : inteiro 3: para I de 1 a 4 faa c 4: MEN AAA 5: para J de 1 a BBB faa c 6: se M[I][CCC] < MEN ento a 7: MEN M[I][J] 8: mse 9: mpara 10: V[I] DDD 11: mpara 12: retorne V 13: mfuno ca
88-08, Pedro Kantek
450
CAP ITULO 39. EXERC ICIOS PRATICOS 125D - CORRECAO DE ALGORITMOS As substituies a fazer so: co a AAA=999999 ; BBB=5 ; CCC=I ; DDD=MEN . Esta funo correta, deu os seguintes resultados: ca D03MEHO (2 8 4 9 1,6 2 5 5 1,5 4 2 7 6,7 10 8 9 5)=1 1 2 5 ; D03MEHO (9 6 7 4 1,9 7 4 7 7,1 9 2 3 7,7 7 7 8 9)=1 4 1 7 ; D03MEHO ( 8 10 6 3 3, 9 7 1 2 5,10 2 10 1 9, 8 4 2 3 3)=3 1 1 2 . Algoritmo 4 Escreva uma funo que receba duas matrizes conformveis, isto a ca a e primeiro de 3 linhas por 4 colunas e a segunda de 4 linhas por 3 colunas. A funo deve ca multiplicar as duas matrizes, gerando o resultado que ter 3 linhas por 3 colunas. a 1: funo D04MUMA (A[1..3][1..4]:inteiro, ca 2: B[1..4][1..3]:inteiro) 3: V[1..3][1..3]:real // at aqui o cabealho... e e c 4: I,J,K,SOM:inteiro 5: para I de 1 a AAA faa c 6: para J de 1 a BBB faa c 7: SOM 0 8: para K de 1 a CCC faa c 9: SOM SOM+(A[I][DDD]B[EEE][J]) 10: mpara 11: V[FFF][J] SOM 12: mpara 13: mpara 14: retorne V 15: mfuno ca As substituies a fazer so: co a AAA=4 ; BBB=3 ; CCC=4 ; DDD=K ; EEE=K ; FFF=I . Esta funo correta, deu os seguintes resultados: ca D04MUMA (5 1 1 3,0 5 0 3,6 2 1 3;1 3 2,6 2 2,3 3 5,3 4 6) = 23 32 35,39 22 28,30 37 39 ; D04MUMA (5 0 5 4,4 6 6 5,4 4 6 1;0 0 6,5 3 2,2 6 2,3 1 6) = 22 34 64,57 59 78,35 49 50 ; D04MUMA (2 3 1 4,4 4 6 5,2 1 0 1;3 5 3,1 6 2,1 6 4,2 5 0) = 18 54 16,32 105 44, 9 21 8 . Algoritmo 5 Escreva o algoritmo de uma funo que receba uma matriz de 6 linhas ca por 2 colunas contendo o resultado de uma eleio. A primeira coluna corresponde ao ca nmero do candidato, sendo que nem todas as linhas estaro preenchidas. Neste caso as u a linhas no usadas contero zeros. Existem dois cdigos em especial que estaro sempre a a o a presentes e que so 998=votos em branco e 999=votos nulos. A segunda coluna contm a e a quantidade de votos a cada candidato e tambm brancos e nulos. e A funo deve devolver o nmero do candidato eleito, ou -1 se a eleio no for ca u ca a vlida. O eleito aquele que obteve o maior nmero de votos se a eleio foi vlida. a e u ca a Uma eleio vlida quando o total de votos dados a candidatos mais os votos em ca e a branco corresponderem a 50% mais 1 voto do total de votantes. Se o vencedor for o branco ou o nulo, vence o candidato da linha 1 (por hiptese o mais velho). o e 1: funo D05ELEI (VOT[1..6][1..2]:inteiro):inteiro ca 2: VAL,I,NUL,TOT,MAI,QUEM:inteiro 3: VAL 0 4: para I de 1 a AAA faa c 5: se VOT[I][1] = BBB ento a 6: VAL VAL + VOT[I][CCC] 7: seno a
verso de 10 de fevereiro de 2008 a
451
CAP ITULO 39. EXERC ICIOS PRATICOS 125D - CORRECAO DE ALGORITMOS NUL VOT[I][2] mse mpara TOT VAL 2 se NUL > DDD ento a retorne -1 seno a 15: MAI -999999 16: para I de 1 a 6 faa c 17: se VOT[I][EEE] > MAI ento a 18: FFF VOT[I][2] 19: QUEM VOT[I][1] 20: mse 21: mpara 22: se (GGG = 998) (GGG=999) ento a 23: retorne 1 24: seno a 25: retorne QUEM 26: mse 27: mse 28: mfuno ca As substituies a fazer so: co a AAA=6 ; BBB=999 ; CCC=2 ; DDD=TOT ; EEE=2 ; FFF=MAI ; GGG=QUEM . Esta funo correta, deu os seguintes resultados: ca D05ELEI ( 70 380, 20 400, 50 80, 0 0,998 300,999 90) = 20 ; D05ELEI ( 10 120, 40 260, 30 140, 50 340,998 320,999 180) = 50 ; D05ELEI ( 90 1300, 30 2000, 0 0, 0 0,998 180,999 60) = 30 .
8: 9: 10: 11: 12: 13: 14:
Responda
R=
39.5
Respostas
linhas onde ocorreu o erro 03464 34100 01420 10310 soma dos certos 1 24 17 18
452
Cap tulo 40
CAP ITULO 40. EXERC ICIOS PRATICOS: 128 - MATRIZES Zerando a matriz abaixo da diagonal principal Este um problema t e pico em teoria de grafos. A matriz de adjacncia de um digrafo (grafo direcionado) usa e todas as linhas da matriz. Se este grafo passar a ser considerado como no direa cionado, a parte abaixo da diagonal principal precisa ser zerada. Eis o algoritmo que o faz: 1: real MZ[i][i] funo ZERAB (real M[i][i]) ca 2: inteiro J, K 3: para J de 1 at i faa e c 4: para K de 1 at i faa e c 5: se K < J ento a 6: MZ[J][K] 0 7: seno a 8: MZ[J][K] M[J][K] 9: mse 10: mpara 11: mpara 12: devolva MZ 13: m{funo} ca multiplicao matricial Este um algoritmo famoso na matemtica. Dadas as ca e a matrizes A (de i linhas por j colunas) e B (de k linhas por m colunas), onde j = k, obter a matriz C, multiplicao de A por B, de i linhas por m colunas, a partir de ca j C[i][m] = x=1 A[i][x] B[x][m] Para implement-lo, tem-se o a 1: real C [i][m] funao MM (real A[i][j], B[k][m]) {j tem que ser igual a k} c 2: inteiro AUX 3: inteiro IND1, IND2, IND3 4: para IND1 = 1 at i faa e c 5: para IND2 = 1 at m faa e c 6: AUX 0 7: para IND3 = 1 at j faa e c 8: AUX AUX + A[IND1][IND3] B[IND3][IND2] 9: mpara 10: C[IND1][IND2] AUX 11: mpara 12: mpara 13: devolva C 14: m{funo} ca Soluo de sistema de equaes lineares Seja A a matriz de coecientes e seja B ca co a matriz coluna de termos independentes em um sistema Ax + B = 0. O parmetro do a algoritmo uma matriz de n linhas e n + 1 colunas, onde a matriz coluna B ocupa a e (n + 1)-sima coluna de A. e 1: real R[n] funo RSEL (real A[n][n+1]) ca 2: real OLA 3: inteiro I,J,K 4: I 1 5: enquanto I < n faa c 6: Jn 7: enquanto J > I faa c 8: se A[J-1][I] = 0 ento a
88-08, Pedro Kantek
454
CAP ITULO 40. EXERC ICIOS PRATICOS: 128 - MATRIZES troque as linhas A[J] e A[J-1] mse se A[J-1][I] = 0 ento a OLA 0 seno a OLA A[J][I] A[J-1][I] mse 16: para K de 1 at n+1 faa e c 17: A[J][K] A[J][K]+(A[J-1][K] OLA) 18: mpara 19: JJ-1 20: menquanto 21: II+1 22: menquanto 23: I n 24: enquanto I 1 faa c 25: R[I] A[I][I+1] A[I][I] 26: para K = 1 at n faa e c 27: A[K][I] A[K][I+1]-(A[K][I] R[I]) 28: mpara 29: II-1 30: menquanto 31: devolva R 32: m{funo} ca Este algoritmo, pela sua complexidade vale alguma explicao. Seja o seguinte sisca tema: A soluo de um sistema de equaes lineares, do tipo ca co c11 .x1 + c12 .x2 + c13 .x3 + ... = t1 c21 .x1 + c22 .x2 + c23 .x3 + ... = t2 c31 .x1 + c32 .x2 + c33 .x3 + ... = t3 ... cn1 .x1 + cn2 .x2 + cn3 .x3 + ... = tn Passa pela estratgia de diagonalizao, como segue. Seja e ca a.x + b.y + c.z = M d.x + e.y + f.z = N g.x + h.y + i.z = P O objetivo inicial zerar g, e para isso, a nova linha (3) passar a ser a linha (3) e a somada com a linha (2) esta devidamente multiplicada por g e ca d a.x + b.y + c.z = M d.x + e.y + f.z = N 0.x + h .y + i .z = P Depois, o objetivo zerar d e para isso a nova linha (2) passa a ser a linha (2) somada e com a linha (1) esta devidamente multiplicada por d e ca a a.x + b.y + c.z = M 0.x + e .y + f .z = N 0.x + h .y + i .z = P Finalmente, zera-se h e para isso a linha (3) passa a ser a linha (3) somada com a linha (2) esta devidamente multiplicada por h e ca e a.x + b.y + c.z = M 0.x + e .y + f .z = N 0.x + 0.y + i .z = P Note que neste ponto, z pode ser calculado, fazendo-se z = P . i
9: 10: 11: 12: 13: 14: 15:
verso de 10 de fevereiro de 2008 a
455
CAP ITULO 40. EXERC ICIOS PRATICOS: 128 - MATRIZES Conhecido z, a coluna 3 da matriz pode ser toda calculada e jogada para a coluna do termo independente. Ao fazer isto, passa-se a ter um sistema de 2 equaes e 2 co incgnitas, x e y. o Agora o processo se repete at o nal. Vamos ver um exemplo disto. Seja o sistema e 2x + 3y + 1z = 11 5x + -2y + 3z = 10 2x + y + -z = 1 Ao se zerar a primeira coluna 2x + 3y + 1z = 11 + -9.5y + 0.5z = -17.5 + 1.8y + -2.2z = -3 Zerando a segunda coluna, ca: 2x + 3y + 1z = 11 -9.5y + 0.5z = -17.5 -2.11z = -6.33 Com isto, recupera-se o valor z = 3, que aplicado no sistema, 2x + 3y = 8 -9.5y = -19 E daqui, sai y = 2. Aplicando-o ca 2x = 2 E nalmente x = 1.
40.1
Exerc cio 1
Resolva (a mo ou via computador, voc decide ;-) o seguinte sistema de 8 equaes a e co lineares a 8 incgnitas: o -1 2 1 2 -1 1 1 2 47 4 1 1 -5 3 -1 1 1 26 2 2 -2 3 -1 -1 2 1 39 5 -5 1 1 2 1 2 2 67 3 2 -3 2 1 3 2 -1 31 2 -2 1 2 2 3 1 3 78 1 -1 5 4 2 -2 2 -2 88 -2 3 2 3 3 4 -4 -3 34 E, informe o valor das 8 variveis encontradas: a x1 x2 x3 x4 x5 x6 x7 x8
40.2
Exerc cio 2
voc decide ;-) o seguinte sistema de 8 equaes e co -3 1 1 3 -1 4 1 -2 456 41 104 43 38 51 89 60 8
verso de 10 de fevereiro de 2008 a
CAP ITULO 40. EXERC ICIOS PRATICOS: 128 - MATRIZES E, informe o valor das 8 variveis encontradas: a x1 x2 x3 x4 x5 x6 x7 x8
40.3
Exerc cio 3
Resolva (a mo ou via computador, voc decide ;-) o seguinte sistema de 8 equaes a e co lineares a 8 incgnitas: o 1 2 1 1 2 3 -1 3 65 3 2 4 3 1 1 2 2 100 1 1 3 1 -2 -3 1 1 3 5 -4 1 -1 1 1 2 3 68 2 2 -3 1 2 1 6 -1 75 2 -2 -1 1 3 3 2 2 81 1 -3 1 1 1 -1 2 -1 24 -2 3 3 2 2 2 3 -1 84 E, informe o valor das 8 variveis encontradas: a x1 x2 x3 x4 x5 x6 x7 x8
40.4
Exerc cio 4
Resolva (a mo ou via computador, voc decide ;-) o seguinte sistema de 8 equaes a e co lineares a 8 incgnitas: o 2 1 2 1 1 3 3 2 75 2 3 4 -5 1 2 -1 1 43 2 2 3 3 2 3 2 3 107 3 -3 2 -1 2 2 2 1 15 -2 3 -2 -2 3 5 5 -2 35 1 2 1 1 2 1 -1 3 52 -1 1 3 2 2 2 2 -1 64 -2 1 3 2 1 3 -2 1 42 E, informe o valor das 8 variveis encontradas: a x1 x2 x3 x4 x5 x6 x7 x8
40.5
1 2 3 4
Respostas
7 1 4 2 5 2 2 10 10 10 7 9 9 3 3 6 6 8 9 3 2 9 8 1 4 5 10 7 8 6 5 5
457
458
Cap tulo 41
ou
onde a face marcada com 1 corresponde ` aresta superior do cubo. A 2 a face a e esquerda, a 3 a frontal, a 4 a direita e a 5 a face posterior. Finalmente, a e e e face 6 a face inferior do cubo. e 459
CAP ITULO 41. EXERC ICIOS PRATICOS: 135 - O CUBO RUBIK 3. Note que as 6 peas centrais das 6 faces so xas e no mudam de orientao entre c a a ca si (umas em relao ` outras). ca a
4. Finalmente, para economia de papel, a congurao acima vai ser apresentada ca como 123456789abcdefghiABCDEFGHI jklmnopqrJKLMNOPQRstuvxyz()
Operadores
Na tentativa de escrever um programa de computador que resolva o cubo de Rubik, usa-se em geral o algoritmo A* (Hart, 68 e 72). Uma parte importante do algoritmo e a lista de operadores que se aplicam a um estado qualquer. Para os operadores que viro a seguir, considere o estado inicial como a
123 456 789 abc ABC jkl JKL def DEF mno MNO ghi GHI pqr PQR stu vxy z()
460
CAP ITULO 41. EXERC ICIOS PRATICOS: 135 - O CUBO RUBIK nome 1=cubo vertical antihorrio a como cou 369 258 147 JKL abc ABC jkl MNO def DEF mno 5=face PQR ghi GHI pqr frontal antizvs horrio a (xt )yu
lor knq jmp 369 CFI uy) PMJ 258 BEH tx( QNK 6=face 147 ADG svz ROL lateralD cfi antibeh horrio a adg (observador ` a esABC querda) DEF GHI cfi stu pmj 987 beh vxy qnk 654 7=face adg z() rol 321 superior RQP horrio a ONM LKJ
123 456 jmp ab9 CFI ukl JKL de8 BEH tno MNO nome gh7 ADG sqr PQR 8=face frontal cfi horrio a vxy z()
como cou 123 456 ifc abs GDA 7kl JKL det HEB 8no MNO ghu IFC 9qr PQR pmj vxy z()
369 258 147 JKL abc ABC jkl def DEF mno MNO ghi GHI pqr PQR stu vxy z()
12C 45F 78I abc ABu pmj 9KL def DEy qnk 6NO ghi GH) rol 3QR 9=face lateral stP direita vxM horrio a z(J (observador ` a es741 querda) 852 963 ABC jkl JKL abc def DEF mno MNO ghi GHI pqr PQR stu vxy z()
12P 45M 78J abc AB3 lor )KL def DE6 knq yNO ghi GH9 jmp uQR stC vxF z(I
Observao importante: Note que quando ocorrem giros na face direita, a posio do ca ca operador SEMPRE a esquerda do cubo. Se tiver dvidas sobre este operador, olhe as e u tabelas acima nos casos 3, 6 e 9.
461
41.1
Exerc cio 1
1. Aplique o operador 8 ao cubo )H1 yEB ubC rqp I4j 98L atP onm F5f Deh vxM lkA c2i Gdg z(J 7Ks 6NO 3QR e obter como resposta um cubo que ter, na face frontal na posio L= 2 e C= a a ca 3 o valor 2. Aplique o operador 6 ao cubo lO7 852 Lmg 3Ba 1FR zKc AdJ 4no MN6 kef DEb jqr PQp uhi GH9 )(I yxv Cts e obter como resposta um cubo que ter, na face direita na posio L= 2 e C= a a ca 3 o valor 3. Quais (2) operadores devem ser usados no cubo 36c 25F 14I JKL abu pmA 7kl def DEy qnB 8NO ghi GH) roC 9QR stP vxM z(j a m de resolv-lo ? e
462
CAP ITULO 41. EXERC ICIOS PRATICOS: 135 - O CUBO RUBIK p2R zbl JO7 ctu knQ (xo Mef D56 jmP )y1 ahi G89 rqL FEv CBs e obter como resposta um cubo que ter, na face superior na posio L= 1 e a a ca C= 3 o valor 2. Aplique o operador 9 ao cubo 741 heB ro3 Av) PMl J8L abc t5( QNF mx6 kEH s2z ROI py9 jDG gdu Knq ifC e obter como resposta um cubo que ter, na face superior na posio L= 3 e a a ca C= 1 o valor 3. Quais (2) operadores devem ser usados no cubo 741 852 IFC ABu pmj 9KL abc def DEy qnk 6NO ghi GH) rol 3QR stP vxM z(J a m de resolv-lo ? e
41.2
Exerc cio 3
1. Aplique o operador 2 ao cubo AB3 DEh GHg cfi stR zvl J87 y54 beQ (xo Mnq u21 adC 96r Pmp LOj KNk IF)
verso de 10 de fevereiro de 2008 a
463
CAP ITULO 41. EXERC ICIOS PRATICOS: 135 - O CUBO RUBIK e obter como resposta um cubo que ter, na face esquerdo na posio L= 1 e a a ca C= 3 o valor 2. Aplique o operador 4 ao cubo cfl yEo uBr 7qp I8) PMJ 3DA F5O deH tx( Qnm C2R ghG sba Lkj zvi KN4 961 e obter como resposta um cubo que ter, na face superior na posio L= 2 e a a ca C= 3 o valor 3. Quais (2) operadores devem ser usados no cubo 987 654 321 jkl JKL abc ABC def DEF mno MNO ghi GHI pqr PQR stu vxy z() a m de resolv-lo ? e
41.3
Exerc cio 4
1. Aplique o operador 4 ao cubo pms bEt aBC u41 L8j 9HG iFI M52 KeD fx( Qno P63 JdA cvz Rqr lO7 kNh )yg e obter como resposta um cubo que ter, na face direita na posio L= 1 e C= a a ca 1 o valor 2. Aplique o operador 6 ao cubo
88-08, Pedro Kantek
464
CAP ITULO 41. EXERC ICIOS PRATICOS: 135 - O CUBO RUBIK uy) tx( RFC IHz gmj 9QP rqp ONv hnk 6ED fed LKs iol 3BA cba GMJ 258 147 e obter como resposta um cubo que ter, na face frontal na posio L= 3 e C= a a ca 1 o valor 3. Quais (2) operadores devem ser usados no cubo 12A 45B ifC abs GDj 987 cKL det HEy qnk 6NO ghu IF) rol 3QR pmP vxM z(J a m de resolv-lo ? e
Respostas 1 2 3 4 4 A g L K r B i 9 4 7 9 7 9 7 5
465
466
Cap tulo 42
Zing Zhu possue uma ilha que vem a ser um pedao de terra chata. Todos os dias, c quando a mar sobe a ilha inundada pela gua do mar. Depois de muito pensar e e e a tambm pedir conselhos a alguns membros de sua fam e lia, Zing Zhu decidiu estabelecer uma fazenda de ostras na ilha. Ele usar um sosticado sistema de cercas de plstico, ` a a a prova dgua para controlar as reas que devero ser inundadas e as reas que devero a a a a a car secas durante a subida da mar. As cercas usadas pelo Zing sero verticais ou e a horizontais e vm em tiras que tem diversas alturas e comprimentos. Duas cercas podem e se interceptar em um ponto no necessariamente no seu nal ou comeo. a c Voc foi contactado pelo Zing para calcular, dada a altura que a mar vai alcanar e e c e a posio e altura de todas as cercas, a rea total de terra que NAO vai ser inudada ca a durante a mar alta. Voc pode assumir que a largura das cercas muito na quando e e e comparada aos tamanhos de terra envolvida e para o propsito do clculo da rea total, o a a as cercas podem ser consideradas como tendo largura zero. A entrada do algoritmo contm diversas linhas: a primeira linha de um caso de teste e contm um inteiro N indicando o nmero de cercas na ilha (1 N 20). Cada uma das e u N prximas linhas contm 5 inteiros: X1 , Y1 , X2 , Y2 e H representando respectivamente o e o ponto de in de uma cerca (X1 , Y1 ) e o ponto de m (X2 , Y2 ), e a altura da cerca. cio A ultima linha da entrada contm um inteiro W que representa a altura da mar. As e e coordenadas so dadas em metros, as alturas em cent a metros. Alm disso X1 = X2 ou e Y1 = Y2 (mas no ambos). 500 X1 , Y1 , X2 , Y2 500; e 1 W , H 1000. O m a dos dados indicado por N = 0 e A sa da Para cada conjunto de dados de entrada, o programa deve devolver a quantidade total de rea de ilha que vai permanecer seca (i., que no vai ser inundada). a e a Exemplo Seja a entrada 4 -20 20 20 20 200 20 20 20 -20 200 0 0 0 20 100 467
CAP ITULO 42. EXERC ICIOS PRATICOS: 139 - OSTRAS -10 0 20 0 200 99 0 E a resposta neste caso dever ser 400 m2 . a
42.1.1
Resolvendo...
Este problema apresenta algumas novidades interessantes. A primeira, ele ter sido e extra da lista de problemas da maratona de programao da ACM de 2004. E uma do ca disputa mundial com fases locais, regionais e a fase nal que envolve o planeta. So a 6 problemas similares a este com cerca de 5 horas para sua soluo em equipes de 4 ca pessoas mais um tcnico. e A segunda, que nem to novidade assim, mas que no costuma freqentar as nossas e a a u aulas o fato de no existir nenhuma estratgia evidente para resolver o problema. e a e Embora a vida real a fora seja exatamente assim, os nossos problemas de sala de aula podem dar a entender que o mundo certinho, sempre tem soluo, a soluo unica e e ca ca e 100% correta e assim por diante. Isso no verdade. a e A terceira observao, tambm importante, que para problemas complexos nem ca e e sempre se acha uma soluo 100% correta, e mais do que isso, conhece-se de antemo ca a ONDE o algoritmo achado falha e quais problemas ele deixa de resolver. Age-se assim, quando na falta de soluo melhor, usa-se a que se tem, na expectativa de que uma ca quase-soluo melhor do que nenhuma-soluo. ca e ca A proposta de soluo que vai ser sugerida aqui a de construir uma nova matriz de ca e dimenses 2 L + 1 e 2 C + 1, onde L e C so o nmero de linhas e colunas da matriz o a u proposta originalmente pelo problema. Age-se assim para criar um espao adicional onde c representar as cercas (que lembrando, no problema original tm largura 0). Nesta nova e matriz, as cercas so dispostas, e a seguir, para cada espao da matriz feita uma anlise a c e a de submerso. Vem em nosso socorro o fato de que as cercas so verticais ou horizontais a a apenas. Assim, s 4 direes precisam ser examinadas. Para cada ponto examinado, o co escreve-se em qual altura de mar ele car submerso (na verdade, o menor valor dos 4 e a retornados na pesquisa acima). Esta estratgia pressupe que aps a primeira cerca est e o o a o mar (o que nem sempre pode ser correto, aqui a falha deste algoritmo). Fica como sugesto melhorar este aspecto. a Estabelecido este valor, hora de retornar ` matriz original (j sem as cercas), mas e a a com os valores de cota de submerso. Agora, a resposta ao pedido apenas uma operao a e ca de comparao (da cota com a altura da mar) e de contagem de metros quadrados, j ca e a que lembrando, todas as dimenses so de nmeros inteiros. o a u
42.1.2
Para passar das coordenados do mundo (500 X1 , Y1 , X2 , Y2 500) para as coordenadas 1..L e 1..C da matriz de trabalho, usam-se as expresses: o ESCADA 1 + (2 M AIORY M EN ORY ) L 1 + abs((1 + (2 (Y M EN ORY ))) ESCADA) C 1 + (2 (X M EN ORX)) Note o clculo da ESCADA que serve para inverter a ordem de crescimento das a linhas (no mundo cartesiano, as linhas crescem de baixo paa cima e no mundo da programao crescem de cima para baixo. ca Feita esta converso, os dados do problema (as cercas) so transpostas ` suas novas a a a coordenadas da matriz. E um mapeamento simples.
88-08, Pedro Kantek
468
CAP ITULO 42. EXERC ICIOS PRATICOS: 139 - OSTRAS Nas linhas (e colunas) mpares desta nova matriz est o espao para a colocao a c ca das cercas. Nas linhas (e colunas) pares esto representados os metros quadrados da a fazenda. Lanadas as cercas, anda-se nas linhas e colunas pares, olhando para cima, direita, c baixo e esquerda, olhando o que (altura) impede a entrada da gua. O menor desses a quatro valores estabelece quando a gua vai chegar. a Toda a fazenda assim mapeada. Depois, pela retirada das cercas (linhas e colunas e mpares) o que sobra rea util da fazenda. ea
42.2
Exerc cio 1
Na instncia a seguir, o problema foi ligeiramente adaptado `s caracter a a sticas usuais da fam VIVO de problemas. O enunciado segue mais ou menos o mesmo. lia Suponha ento uma fazenda de ostras, cujas cercas tm a seguinte distribuio a e ca 6 10 2 4 14 14 4 3 9 13 13 4 4 10 18 14 14 4 4 17 9 13 4 4 13 240 400 160 100 100 200
O senhor Zing Zhu quer saber qual a rea seca quando a mar chegar a a e altura mar e 90 cm 110 cm m2 170 cm m2 230 cm m2 a rea seca m2
42.3
Exerc cio 2
Na instncia a seguir, o problema foi ligeiramente adaptado `s caracter a a sticas usuais da fam VIVO de problemas. O enunciado segue mais ou menos o mesmo. lia Suponha ento uma fazenda de ostras, cujas cercas tm a seguinte distribuio a e ca 6 10 3 5 14 14 5 3 10 13 13 5 5 10 19 14 14 5 5 18 10 13 5 5 13 400 360 200 160 80 80
O senhor Zing Zhu quer saber qual a rea seca quando a mar chegar a a e
verso de 10 de fevereiro de 2008 a
469
CAP ITULO 42. EXERC ICIOS PRATICOS: 139 - OSTRAS altura mar e 70 cm 90 cm m2 170 cm m2 230 cm m2 a rea seca m2
42.4
Exerc cio 3
Na instncia a seguir, o problema foi ligeiramente adaptado `s caracter a a sticas usuais da fam VIVO de problemas. O enunciado segue mais ou menos o mesmo. lia Suponha ento uma fazenda de ostras, cujas cercas tm a seguinte distribuio a e ca 6 10 3 3 13 13 3 2 10 14 14 5 5 10 17 13 13 3 3 19 10 14 5 5 14 380 340 140 80 140 160
O senhor Zing Zhu quer saber qual a rea seca quando a mar chegar a a e altura mar e 70 cm 90 cm m2 150 cm m2 230 cm m2 a rea seca m2
42.5
Exerc cio 4
Na instncia a seguir, o problema foi ligeiramente adaptado `s caracter a a sticas usuais da fam VIVO de problemas. O enunciado segue mais ou menos o mesmo. lia Suponha ento uma fazenda de ostras, cujas cercas tm a seguinte distribuio a e ca 6 9 3 3 14 14 3 3 9 13 13 4 4 9 17 14 14 3 3 17 9 13 4 4 13 380 280 80 100 180 200 470
verso de 10 de fevereiro de 2008 a
CAP ITULO 42. EXERC ICIOS PRATICOS: 139 - OSTRAS O senhor Zing Zhu quer saber qual a rea seca quando a mar chegar a a e altura mar e 70 cm 90 cm m2 110 cm m2 190 cm m2 a rea seca m2
42.6
1 2 3 4
Respostas
90 72 90 99 24 12 63 55 0 0 0 30 0 0 0 0
471
472
Cap tulo 43
43.0.1
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: 31:
inteiro funo R2A (cadeia NROM[n]) ca cadeia CADAUX [7] IVXLCDM inteiro VALAUX[7] 1 5 10 50 100 500 1000 inteiro SUM, I, K, TAM TAM tamanho da cadeia NROM SUM 0 I1 enquanto I < TAM faa c K1 enquanto CADAUX[K] = NROM[I] faa c K++ menquanto se (I+1)TAM ento a M1 enquanto CADAUX[M] = NROM[I+1] faa c M++ menquanto se VALAUX[K] < VALAUX[M] ento a SUM SUM + VALAUX[M] - VALAUX[K] II+2 seno a SUM SUM + VALAUX[K] II+1 mse seno a SUM SUM + VALAUX[K] II+1 mse menquanto devolva SUM m {funo} ca
Exerc cios de aquecimento Converta para arbico: a XVI XXXVII XLVI XCVI CI CDXCVI CIV XXV XLV MDXI
43.0.2
1: 2: 3: 4:
(cadeia RESP[10]) funo ARD (inteiro A, cadeia LETRAS[3]) ca cadeia AUX[10] inteiro K se A 0 ento a 474
verso de 10 de fevereiro de 2008 a
se A=0 ento a devolva seno se A=1 ento a a devolva LETRAS[1] seno se A=2 ento a a devolva LETRAS[1]+LETRAS[1] seno se A=3 ento a a devolva LETRAS[1]+LETRAS[1]+LETRAS[1] seno se A=4 ento a a devolva LETRAS[1]+LETRAS[2] seno se A=5 ento a a devolva LETRAS[2] seno se A=6 ento a a devolva LETRAS[2]+LETRAS[1] seno se A=7 ento a a devolva LETRAS[2]+LETRAS[1]+LETRAS[1] seno se A=8 ento a a devolva LETRAS[2]+LETRAS[1]+LETRAS[1]+LETRAS[1] seno se A=9 ento a a devolva LETRAS[1]+LETRAS[3] mse seno a K1 enquanto K < abs(A) faa c AUX[K] LETRA[1] K++ menquanto devolva AUX mse m{funo} ca (cadeia RESP[10]) funo A2R (inteiro V) ca inteiro D cadeia AUX[10] AUX D V 1000 V V - D 1000 AUX AUX + (-D) ARD M D V 100 V V - D 100 AUX AUX + D ARD CDM D V 10 V V - D 10 AUX AUX + D ARD XLC AUX AUX + V ARD IVX devolva AUX m{funo} ca
475
CAP ITULO 43. EXERC ICIOS PRATICOS: 144 - ROMANOS Exerc cios de aquecimento Converta para romano: 38 44 35 104 496 107 665 388 1002 843
43.1
Exerc cio 1
Converta para arbico Responda: a CCIX CDIX MMCCXCV DCCXL CCCXIII MMDCCCXXIX
43.2
Exerc cio 2
Converta para arbico Responda: a CDLXVII DCCCXCIII MCDLVIII CDLXV DXIX MDCX
88-08, Pedro Kantek
476
CAP ITULO 43. EXERC ICIOS PRATICOS: 144 - ROMANOS Converta para romano Responda: 3402 844 805 410 198 3261
43.3
Exerc cio 3
Implemente os programas acima e a seguir responda: Converta para arbico Responda: a DCCXIX XLII MMDCCXCIII DCCCLXIV IV MMIX Converta para romano Responda: 2091 41 97 1931 547 859
43.4
1 2 3
Respostas
209, 409,2295, 740, 313,2829,MMCDIV,CCCLXXXII,CLXXXVII,LXXXV,CDLXVI,MMDX 467, 893,1458, 465, 519,1610,MMMCDII,DCCCXLIV,DCCCV,CDX,CXCVIII,MMMCCLXI 719, 42,2793, 864, 4,2009,MMXCI,XLI,XCVII,MCMXXXI,DXLVII,DCCCLIX
477
478
Cap tulo 44
Estes dois exerc cios foram retirados da Maratona de Programao da ACM de 2005, ca onde apareceram com os nomes de Curso Universitrio e cubos coloridos. a H alguns anos atrs, a Universidade de Pinguinhos introduziu um novo sistema a a ex de crditos para os alunos ingressantes de cursos de graduao. No novo sistema vel e ca os alunos podem escolher as disciplinas que desejam cursar em um semestre com a unica restrio de no poderem cursar uma dada disciplina A sem antes terem cursado todas ca a as disciplinas que tiverem sido estabelecidas como pr-requisitos de A. Aps alguns e o semestres o reitor notou que muitos estudantes estavam sendo reprovados em muitas disciplinas, simplesmente porque os estudantes estavam cursando muitas disciplinas por semestre. Alguns estudantes chegavam a se matricular em at quinze disciplinas em um e semestre. Sendo muito sbio, este ano o reitor introduziu uma regra adicional limitando a o nmero de disciplinas que cada estudante pode cursar por semestre a um certo valor u N. Essa regra adicional, no entanto, fez com que os alunos cassem muito confusos na hora de escolher as disciplinas a serem cursadas em cada semestre. E a que voc entra e na estria. O reitor resolveu disponibilizar um programa de computador para ajudar os o alunos a fazerem suas escolhas de disciplinas, e solicitou sua ajuda. Mais precisamente, o reitor quer que o programa sugira as disciplinas a serem cursadas durante o curso da seguinte forma. A cada disciplina atribu uma prioridade. Se mais do que N e da disciplinas podem ser cursadas em um determinado semestre (obedecendo ao sistema pre requisitos), o programa deve sugerir que o aluno matricule-se nas N disciplinas de maior prioridade. Se N ou menos disciplinas podem ser cursadas em um determinado semestre, o programa deve sugerir que o aluno matricule-se em todas as disciplinas dispon veis. Portanto, dadas a descrio de pr-requisitos para cada disciplina, a prioridade de cada ca e disciplina, e o nmero mximo de disciplinas por semestre, seu programa deve calcular u a o nmero necessrio de semestres para concluir o curso, segundo a sugesto do reitor, e u a a a lista de disciplinas que o aluno deve matricular-se em cada semestre. Entrada A entrada, contm vrios casos de teste. Se uma disciplina no tem qualquer e a a pr-requisito ela denominada bsica - caso contrrio ela denominada avanada. A e e a a e c primeira linha de um caso de teste contm dois inteiros 1 N 100 e 1 M e 10, indicando respectivamente o nmero de disciplinas avanadas do curso e o nmero u c u mximo de disciplinas que podem ser cursadas por semestre. Cada uma das N linhas a 479
CAP ITULO 44. EXERC ICIOS PRATICOS: 148 - DIVERSOS seguintes tem o formato STRO K STR1 STR2 ... STRK onde STRO o nome de uma disciplina avanada, 1 K 15 o nmero de e c e u disciplinas que so pr-requisitos de STR0 e STR1, STR2, ... STRK so os nomes das a e a disciplinas que so pr-requisitos de STRO. O nome de uma disciplina uma cadeia com no a e e m nimo um e no mximo sete caracteres alfanumricos maisculos (A-Z e O-9). a e u Note que as disciplinas bsicas so aquelas que aparecem apenas como pr-requisito de a a e alguma disciplina avanada. Para concluir o curso, o aluno deve cursar (e passar!) toc das as disciplinas bsicas e avanadas. A prioridade das disciplinas determinada pela a c e ordem em que elas aparecem pela primeira vez na entrada: a que aparece primeiro tem maior prioridade, e a que aparece por ultimo tem a menor prioridade. No h circular a a idade nos pr-requisitos (ou seja, se a disciplina B tem como pr-requisito a disciplina e e A ento A no tem B como pr-requisito, direta ou indiretamente). O nmero total de a a e u disciplinas no mximo igual a 200. O nal da entrada indicado por N = M = 0. e a e A entrada deve ser lida da entrada padro. a Sa da Para cada caso de teste da entrada seu programa deve produzir a sa na da seguinte forma. A primeira linha deve conter a frase Formatura em S semestres, onde S o nmero de semestres necessrios para concluir o curso segundo a sugesto do reitor. e u a a As S linhas seguintes (levem conter a descrio das disciplinas a serem cursadas em cada ca semestre, um semestre por linha, no formato mostrado no exemplo de sa abaixo. da Para cada semestre, a lista das disciplinas deve ser dada em ordem lexicogrca. a Denio: considere as cadeias de caracteres Sa = al a2 ... am e Sb = bl b2 ... bn . Sa ca precede Sb em ordem lexicogrca se e apenas se Sb no-vazia e uma das seguintes a e a condies verdadeira: co e
Sa uma cadeia vazia; e a1 < b1 na ordem O < l < 2 < ... < 9 < A < B < ... < Z ; a1 = b1 e a cadeia a2 a3 ...am precede a cadeia b2 b3 ...bn .
A sa deve ser escrita na sa padro. da da a Exemplo Exemplo de entrada 2 2 B02 3 A01 A02 A03 C01 2 B02 B01 Sada para o exemplo Formatura em 4 semestres Semestre 1 : A01 A02 Semestre 2 : A03 B01 Semestre 3 : B02 Semestre 4 : CO1 Formatura em 4 semestres Semestre 1 : ARTE1 MAT1 Semestre 2 : ARTE2 PROG1 Semestre 3 : PROG2 Semestre 4 : PROG3
44.2
Exerc cio 1
480
CAP ITULO 44. EXERC ICIOS PRATICOS: 148 - DIVERSOS 6 MEDI 4 ENGC 2 CALC 2 GEOA 3 PORT 4 INGL 3 0 0 4 ENGM DISC CARI LOGI ENGM CALE
GEOL ENGA
materia 3 do semestre 2
2. Seja uma instncia composta de a 6 FORT 2 QUIM 4 ENGE 4 MEDI 2 ENGA 4 RETO 4 0 0 4 PORT FRAN CMAM PORT BAND BAND ENGC MATB DISC INGL GEOL ALGO
materia 1 do semestre 3
44.2.1
Cubos Coloridos
Crianas adoram brincar com pequenos cubos. Elas passam horas criando casas, prc e dios, etc. O irmozinho de Tomaz acabou de ganhar um conjunto de blocos coloridos a no seu aniversrio. Cada face de cada cubo de uma cor. Como Tomaz uma criana a e e c muito anal tica, ele decidiu descobrir quantos tiposdiferentes de cubos o seu irmoza inho ganhou. Voc pode ajud-lo? Dois cubos so considerados do mesmo tipo se for e a a poss rotacionar um deles de forma que as cores nas faces respectivas dos dois cubos vel sejam iguais. Entrada A entrada contm vrios casos de teste. A primeira linha do caso de teste contm um e a e inteiro N especicando o nmero de cubos no conjunto (1 < N < 1000). As prximas u o 3 N linhas descrevem os cubos do conjunto. Na descrio as cores sero identicadas ca a pelos nmeros de O a 9. A descrio de cada cubo ser dada em trs linhas mostrando as u ca a e cores das seis faces do cubo aberto, no formato dado no exemplo abaixo. No exemplo abaixo, as faces do cubo tm cores de 1 a 6, a face com cor 1 est no lado oposto da face e a com a cor 3, e a, face com cor 2 vizinha das faces 1, 3, 4 e 6, e est no lado oposto da e a face com cor 5. 1 2 4 5 6 3
verso de 10 de fevereiro de 2008 a
481
CAP ITULO 44. EXERC ICIOS PRATICOS: 148 - DIVERSOS O nal da entrada indicado por N = 0. e A entrada deve ser lida da entrada padro. a Sa da Para cada caso de teste seu programa deve imprimir uma linha contendo um unico inteiro, correspondendo ao nmero de tipos de cubos no conjunto dado. u A sa deve ser escrita na sa padro. da da a Exemplos 3 0 0 7 2 3 1 0 1 2 3 7 0 3 0 0 2 1 , resposta = 2 7
44.3
4 5 9 1 4 9 4
Exerc cio 1a
1 4 4 9 5 9 9 4 4 9 5 1 4 4 5 1 9 9
44.4
Exerc cio 2
3 CALE ALGO BAND COBO PORT FISI
1. Seja uma instncia composta de a 6 CULI 4 ENGE 4 ENFE 3 GEOA 2 GEOM 2 ALEM 4 0 0
MEDI CALE
materia 2 do semestre 3
2. Seja uma instncia composta de a 6 GEOL 2 ESDA 2 LOGI 3 DISC 4 ENGE 4 3 PORT ENGC FRAN PORT FRAN
CALE CALC INFO INGL LATI MEDI CARI COBO LATI PORT 482
verso de 10 de fevereiro de 2008 a
CAP ITULO 44. EXERC ICIOS PRATICOS: 148 - DIVERSOS ALGO 3 INGL CMAM ENFE 0 0 Resolva-a e informe: semestresmateria 1 do semestre 5
materia 3 do semestre 3
44.5
4 2 4 8 8 3 4
Exerc cio 2a
3 8 4 8 2 4 2 4 4 8 3 8 8 4 3 4 8 2
44.6
Exerc cio 3
1. Seja uma instncia composta de a 6 GEOA 4 ALGO 3 LATI 4 ESDA 2 MEDI 3 CALC 2 0 0 3 CALE CARI COBO ENGE DBAS FRAN
materia 2 do semestre 6
2. Seja uma instncia composta de a 6 CALE 3 INFO 2 PORT 4 GEOA 2 CALC 2 RETO 4 0 0 4 CARI QUIM CULI ALGO DBAS FRAN
QUIM ENFE ENGE INGL BAND ENGM GEOL ESDA GEOM MATB ENGC
483
CAP ITULO 44. EXERC ICIOS PRATICOS: 148 - DIVERSOS Resolva-a e informe: semestresmateria 2 do semestre 4
materia 1 do semestre 7
44.7
4 9 9 7 9 6 1
Exerc cio 3a
9 6 9 7 1 9 9 9 1 9 7 6 1 9 7 9 6 9
44.8
1 1a 2 2a 3 3a 6 3 8 4 7 2
Respostas
LATI DISC 13 ENGE FRAN COBO ESDA 12 14 24 6 ALEM CALC 7 CARI INGL 7 ESDA RETO
484
Cap tulo 45
45.1
A Piscina
O Centro Comunitrio decidiu construir uma nova piscina, em tempo para o vero do ano a a que vem. A nova piscina ser retangular, com dimenses X por Y e com profundidade a o Z. A piscina ser recoberta com um novo tipo de azulejo cermico de alta tecnologia que a a produzido em trs tamanhos distintos: 5 5, 15 15 e 30 30 (em cent e e metros). Cada azulejo desses tamanhos custa 2 centavos, 15 centavos e 50 centavos respectivamente. Os azulejos so de alta qualidade, feitos de um material que no pode ser cortado (ou a a seja, os azulejos devem ser usados inteiros). A Unica loja local que vende esse tipo de azulejo tem em estoque uma certa quantidade de azulejos de cada tamanho. Voc deve escrever um programa que determine se e o estoque de azulejos dispon na loja suciente para azulejar toda a piscina. Se o vel e estoque for suciente, seu programa deve determinar tambm o nmero de azulejos de e u cada tamanho que so necessrios para que o custo de azulejar a piscina seja o menor a a poss vel. Os azulejos devem ser usados para recobrir completamente toda a superf cie da piscina sem deixar qualquer espao sem azulejos e sem deixar sobras de azulejos transpasc sando as bordas da piscina. Entrada A entrada contm vrios casos de teste. Cada caso de teste composto por e a e duas linhas. A primeira linha contm trs nmeros reais X, Y e Z, representando as e e u dimenses e a profundidade da piscina, em metros, com preciso de uma casa decimal o a (0 < X, Y 50.0 e 0 < Z 2.0). A segunda linha contm trs nmeros inteiros P , M e e u e G, representando a quantidade dispon de azulejos de tamanho pequeno, mdio e vel e grande (0 P, M, G 2000000), respectivamente. O nal da entrada indicado por e X = Y = Z = 0. Sa da Para cada caso de teste da entrada seu programa deve produzir uma linha de sa da. Se poss e vel recobrir completamente a piscina com o estoque dispon vel, imprima uma linha com trs inteiros descrevendo respectivamente as quantidades de e azulejos pequenos, mdios e grandes para recobrir toda a piscina com o menor custo e 485
CAP ITULO 45. EXERC ICIOS PRATICOS: 151 - DIVERSOS poss vel. Caso contrrio, imprima uma linha contendo a palavra impossivel (note a a ausncia de acentuaao). e c Alguns exemplos Para as entradas 3.0 4.0 1.0 1000 1000 1000 a resposta dever ser a 752 0 268 3.0 3.0 0.9 300 300 300 a resposta dever ser a 0 0 220 12.5 12.5 1.6 5000 0 3000 a resposta dever ser a 4464 0 2501 3.0 3.0 1.0 300 300 300 0 0 0 a resposta dever ser a impossivel
45.2
5.0 1200 5.0 1300 4.1 900 0 0 0
Exerc cio 1
5.9 700 6.0 700 6.1 700 2.0 800 2.4 400 1.5 500
Seja a entrada
az. mdio e
az. grande
486
45.3
Mgico a
Um mgico inventou um novo truque de cartas e apresentou-o na prestigiosa American a Conference of Magicians (ACM). O truque muito interessante e ele recebeu o prmio e e Best Magic Awardna conferncia. O truque requer 3 participantes: o mgico, um exe a pectador e um assistente. Durante o truque o expectador deve embaralhar um conjunto de 52 cartas (baralho completo sem os coringas) e depois escolher 5 cartas aleatrias. o Elas so passadas ao assistente, sem que o mgico as veja. Aps mostrar 4 dessas cartas a a o ao mgico, ele magicamente adivinha a quinta carta. a O truque funciona pelo fato do assistente, depois de olhar as 5 cartas, escolher quais quatro sero mostradas, e ele as escolhe de modo a codicar a informao para o mgico a ca a sobre a quinta carta. O cdigo baseado em uma dada ordenao do baralho. As cartas o e ca so ordenadas primeiro por naipe e depois pelo seu valor de face. a Usar-se- a seguinte ordem a
< < < (ouros, espadas, copas e paus); e
A < 2 < ... < 9 < T < J < Q < K, onde A=As, T =10, J=valete, Q=dama e K=rei. Assuma que o expectador escolheu as cartas J, 8, 7, 8 e Q (valete de copas, 8 de paus, 7 de ouros, 8 de espadas e dama de ouros). A estratgia do assistente a e e seguinte:
Ache o naipe n que aparece ao menos duas vezes no conjunto de cartas escolhidas (ouros, no exemplo). Se mais do que um naipe aparecem duas vezes, escolha o de menor ordem. esconda a carta x, do naipe n que esteja a no mximo 6 posies ` direita na a co a tabela c clica A < 2 < ... < T < J < Q < K < A < 2 < ... de outra carta y do mesmo naipe. Isto ser sempre poss a vel, j que existem apenas 13 cartas do a mesmo naipe. (No exemplo, o assistente esconde a dama de ouros). Se duas ou mais cartas satisfazem o critrio acima, escolha a que tem o menor valor de face. e mostre y ao mgico. Neste ponto ele saber o naipe da carta escondida (o mesmo a a de y). Saber tambm que o valor da carta escondida no est a mais de 6 posies a e a a co a ` direita de y. com as 3 cartas sobrantes, o assistente codica um nmero entre 1 e 6. Para fazer u isto ele ordena as trs cartas (digamos z1 , z2 e z3 ) em ordem, onde z1 < z2 < e z3 . Cada uma das 6 ordens poss veis em que as cartas so mostradas deve ser a interpretada pelo mgico como sendo um nmero: a u
z1 , z2 , z3 signica 1, z1 , z3 , z2 signica 2, z2 , z1 , z3 signica 3, z2 , z3 , z1 signica 4, z3 , z1 , z2 signica 5, z3 , z2 , z1 signica 6. Desta maneira, mostrando as 4 cartas, em uma determinada ordem, ele informa ao mgico qual a quinta carta. a e Sua tarefa desenvolver um programa que receba as 4 cartas mostradas pelo assise tente e informe ao mgico qual a quinta carta. a
verso de 10 de fevereiro de 2008 a
487
CAP ITULO 45. EXERC ICIOS PRATICOS: 151 - DIVERSOS Entrada A entrada contm diversas instncias. A primeira linha contem N , onde e a N a quantidade de instncias que viro a seguir (1 N 10000). Cada instncia e a a a composta por uma unica linha na qual esto 4 cartas separadas por brancos. Cada e a carta tem 1 caracteres para seu valor e um caracter para o seu naipe, como visto acima. As cartas vem na ordem em que so apresentadas pelo assistente. a Sa da A sa deve ser composta pela quinta carta. da Exemplos Para a entrada 2 7, 8, 8, J T, 2, A, 5 o programa dever responder Q e A, respectivamente. a
45.4
Exerc cio 1a
45.5
5.0 900 4.2 1000 4.5 1200 0 0 0
Exerc cio 2
6.5 800 6.4 600 5.9 900 1.7 300 2.3 900 2.4 1000
Seja a entrada
az. mdio e
az. grande
488
45.6
Exerc cio 2a
45.7
5.0 1100 4.5 1400 4.9 1100 0 0 0
Exerc cio 3
6.1 500 5.9 700 5.9 800 1.9 800 1.9 900 2.0 1000
Seja a entrada
az. mdio e
az. grande
45.8
Exerc cio 3a
489
45.9
Respostas
263 0 0 724 0 0 -1 772 994 0 140 54 0 784 693 464 186 998 420 62 198 500 829 724
1 809 1a 6O 2E JP 2 -1 2a 9E 7E JC 3 -1 3a QE 3O 3C
490
Cap tulo 46
46.2
Regata de cientistas
Todos os anos desde 1996, cientistas da computao do mundo todo se encontram para ca a famosa Regata dos Cientistas. A competio consiste em uma corrida de barcos ca com obstculos pelo oceano, onde o objetivo de cada equipe , partindo de um ponto a e em comum, alcanar o ponto de chegada sem que nenhum obstculo seja tocado ou c a transpassado. Uma equipe que toca ou transpassa um obstculo automaticamente a e desclassicada. A equipe vencedora aquela que primeiro atinge o ponto de chegada (o e ponto de chegada distinto do ponto de in e cio). Voc foi contratado pela equipe brasileira e para desenvolver um programa que calcule o comprimento da menor rota vlida poss a vel do ponto de partida ao ponto de chegada. O oceano considerado um plano innito, e onde cada obstculo localizado em uma posio xa e representado por um segmento a e ca de reta dado pelos seus dois extremos (x1 , y1 ) e (x2 , y2 ). Os barcos so adimensionais, a representados por um ponto no plano e os obstculos possuem espessura desprez a vel. Os obstculos esto dispostos de tal forma que os mesmos no se interceptam. De forma a a a similar, os pontos de in e chegada da competio no so interceptados por nenhum cio ca a a obstculo. a Entrada A entrada composta por vrios casos de teste. A primeira linha de um e a caso de teste contm 5 nmeros inteiros xi , yi , xf , yf , n, representando respectivamente e u as coordenadas do ponto de in (xi , yi ), as coordenadas do ponto de chegada (xf , yf ) cio e a quantidade de obstculos n (n 150). Cada uma das n linhas seguintes de um caso a de teste corresponde a quatro nmeros inteiros (x1 , y1 , x2 , y2 ) que so as coordenadas u a dos dois extremos de um obstculo. Considere que as coordenadas x, y de qualquer a ponto, satisfazem 5000 x, y 5000. O nal da entrada representada por uma e linha contendo xi = yi = xf = yf = n = 0. 491
CAP ITULO 46. EXERC ICIOS PRATICOS: 152 - REGATA DE CIENTISTAS E LUZES DA FESTA Sa da Para cada caso de teste, imprima uma linha contendo o comprimento da menor rota vlida poss a vel, arredondada para duas casas decimais. Exemplos 0 5 0 5 0 0 10 0 1 -1 5 1 0 10 0 1 0 5 1 0 0 0 0
46.3
Iluminao da festa ca
Este exerc foi retirado da Maratona de Programao da IOI de 1998. cio ca Na prxima nal da IOI, haver uma festa de congraamento, para comemorar as o a c premiaes. Nesta festa, ter-se- uma iluminao ferica que precisa ser controlada. co a ca e A iluminao ser composta por N lmpadas. No in ca a a cio da festa, todas as lmpadas a comeam acesas. Para ajustar o acende-apaga, h 4 botes cujos comportamentos so: c a o a boto 1 Todas as lmpadas trocam de estado, ou seja as acesas apagam e as apagadas a a acendem. boto 2 Trocam de estado as lmpadas de nmero a a u mpar (1, 3, ...) boto 3 Trocam de estado as lmpadas de nmero par (2, 4, ...) a a u boto 4 Trocam de estado as lmpadas de cujo nmero obedece ` regra 3K + 1, com a a u a K 0, ou seja as lmpadas 1, 4, 7, ... a Cada vez que um dos botes pressionado, incrementa-se um contador C, que no in o e cio sempre contm o valor 0 (zero). Voc deve idealizar um algoritmo que receba infore e maoes de entrada conforme descritas baixo e mostre quais as conguraes poss c co veis de lmpadas acesas e apagadas so poss a a veis. Entrada A entrada composta por 4 linhas, a saber: e 1. A primeira linha contm o nmero N de lmpadas (10 N 100) e u a 2. A segunda, contm o valor nal do contador C de botes (1 C 10000) e o 3. A terceira contm uma seqncia de nenhuma, uma ou duas lmpadas que devero e ue a a estar ACESAS ao nal. A seqncia termina com -1. ue 4. A ultima contm uma seqncia de nenhuma, uma ou duas lmpadas que devero e ue a a estar APAGADAS ao nal. A seqncia termina com -1. ue Sa da A sa dever ter todas as conguraes poss da a co veis de serem alcanadas aperc tando C vezes algum dos quatro botes e que satisfaam as restries de aceso e apagado o c co da entrada. Por exemplo, supondo a entrada 12 3 1 6 -1 2 -1
88-08, Pedro Kantek
492
CAP ITULO 46. EXERC ICIOS PRATICOS: 152 - REGATA DE CIENTISTAS E LUZES DA FESTA Sugere que haver 12 lmpadas, os botes sero pressionados 3 vezes, e ao nal as a a o a lmpadas 1 e 6 devero estar acesas e a lmpada 2 dever estar apagada. Naturalmente, a a a a as lmpadas no citadas aqui, podero estar em qualquer estado. a a a Outro exemplo, dada a entrada: 11 3 4 8
9 -1
-1
Considere a seguinte entrada, para o problema da regata -60 -190 10 30 -10 20 100 240 0 -40 120 60 120 0 60 90 80 0 80 -70 60 230 130 100 280 340 0 160 40 20 -20 230 10 -20 20 0 3
6 10
-1 -1 regata 2 luzes
regata 1
46.4
Exerc cio 2
Regata de cientistas
Considere a seguinte entrada, para o problema da regata -20 -40 130 230 10 30 -10 110 60 80 10 90 200 70 210 330 240 80 220 10 -10 -20 150 20 3
493
CAP ITULO 46. EXERC ICIOS PRATICOS: 152 - REGATA DE CIENTISTAS E LUZES DA FESTA 130 190 0 70 90 0 140 240 0 40 10 0
8 -1
-1 regata 2 luzes
regata 1
46.5
Exerc cio 3
Considere a seguinte entrada, para o problema da regata -70 -110 -50 120 -70 -50 60 140 0 -50 60 110 80 20 80 70 80 0 90 0 70 230 90 40 140 260 0 190 -10 30 10 210 0 0 -20 0 3
-1 10
-1 regata 2 luzes
regata 1
46.6
Exerc cio 4
Considere a seguinte entrada, para o problema da regata -60 -60 20 130 20 -20 100 100 60 10 170 -10 60 160 240 140 20 40 20 180 3
3 494
verso de 10 de fevereiro de 2008 a
CAP ITULO 46. EXERC ICIOS PRATICOS: 152 - REGATA DE CIENTISTAS E LUZES DA FESTA 30 150 220 0 100 60 80 0 80 180 290 0 40 30 0 0
5 7
-1 -1 regata 2 luzes
regata 1
46.7
1 2 3 4
Respostas
247.61 318.28 288.44 280.18 295.70 276.87 254.30 278.03 01101101101 0110110110110 10101010101 0110110110 1 1 1 1 1 1 1 1 4 4 3 4
495
CAP ITULO 46. EXERC ICIOS PRATICOS: 152 - REGATA DE CIENTISTAS E LUZES DA FESTA
496
Cap tulo 47
47.1
Jogo do retngulo a
Considere-se um jogo de 2 jogadores. H um retngulo x y, onde x e y so inteiros e a a a positivos. Cada jogador faz um corte no retngulo. e repassa o maior dos dois retngulos a a para que o adversrio faa o seu corte. O corte deve ser unico, vertical ou horizontal. Os a c retngulos resultados devem ambos ter dimenses inteiras. Se o corte dividiu o retngulo a o a em duas metades, uma delas descartada. O jogador que recebe um retngulo de 11, e e a que portanto no pode mais fazer cortes, perde o jogo. A tarefa escrever um programa a e que jogue e ganhe o jogo do retngulo. As dimenses x e y sero inteiros emtre 1 e a o a 100.000.000. Ao menos uma das dimenses maior do que 1. o e Quando o programa comea, ele recebe o retngulo original e deve fazer o primeiro c a corte. O maior pedao preservado e ento apresentado ao seu oponente. c e a Exemplo de interao: ca 1. O jogo comea com 4, 3. Voc deve jogar algo, digamos vertical, 1 e o novo retnc e a gulo 3, 3 e 2. Seu oponente joga horizontal, 1 e o novo retngulo 3, 2. a e 3. Nova jogada sua, digamos horizontal, 1 e ca 3, 1. 4. O outro joga vertical, 1 e ca 2, 1 5. Voc joga vertical, 1 e ca 1, 1, e voc acaba de ganhar o jogo e e Uma estratgia de soluo e ca Construa-se uma tabela, digamos 15 15, representando poss veis 225 tabuleiros (de dimenso mxima 15) cada. Assinale com um X a primeira posio perdedora, que a a ca e de acordo com a denio a 1, 1. Marque com uma o as posies vencedoras que ca co conduzem ` perdedora, no caso as posies 1, 2 e 2, 1. Marque a posio 2, 2 como a co ca perdedora, pois ela invariavelmente conduzir ` 1, 2 ou 2, 1 e estas so vencedoras. aa a Prossiga at montar o mapa completamente. Note que como a matriz absolutae e mente simtrica em relao ` diagonal principal (tanto faz usar a vertical ou a horizontal, e ca a 497
CAP ITULO 47. EXERC ICIOS PRATICOS: 153A - JOGO DO RETANGULO elas so intercambiveis), basta montar um dos tringulos (acima ou abaixo da diagonal a a a principal). 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Depois de ter preenchido este quadro, verique o que caracteriza as posies perdedoras. co Note que para que m e n sejam um retngulo perdedor, deve existir um inteiro k que a torne verdadeira a expresso a m + 1 = (n + 1) 2k . E baseada nesta frmula, que voc deve procurar a jogada a fazer. Use o algoo e ritmo: 1: funo JOGUE (inteiro M, N): inteiro ca 2: inteiro LIMM,LIMN,I,J,XX 3: LIMM M 2 4: LIMN N 2 5: I 1 6: enquanto (I LIMM) faa c 7: XX podeparar (M-I, N) 8: se XX = 1 ento a 9: jogue (M-(I+1)),N 10: caiafora 11: mse 12: I++ 13: menquanto 14: J 1 15: enquanto (J LIMN) faa c 16: XX podeparar (M, N-J) 17: se XX = 1 ento a 18: jogue M, N-(J+1) 19: caiafora 20: mse 21: J++ 22: menquanto{casos perdedores} 23: se M=1 N=1 ento a
88-08, Pedro Kantek
10 11 12 13 14 15
498
perdi caiafora mse se x < 2 ento a jogue M,(N-1) // e seja o que Deus quiser seno a jogue (M-1), N // e seja o que Deus quiser mse mfuno ca funo podeparar (inteiro: A,B) : inteiro ca inteiro VOLTA, MAIOR, MENOR, K se A B ento a MAIOR A MENOR B seno a MAIOR B MENOR A mse K0 VOLTA 0 enquanto 2K MAIOR faa c se MAIOR = ((2K ) MENOR) + (2K ) 1 ento a VOLTA 1 K mse K++ menquanto retorne VOLTA mfuno ca
47.2
Exerc cio 1
1. Seguindo os algoritmos acima, faa o primeiro lance para c 39,30 Trate de ganhar o jogo ! Se for imposs ganhar esta instncia, responda PERDI vel a no quadro prprio. o 2. Idem para 18,37 3. E para 38,33 1 2 3
499
47.3
Exerc cio 2
1. Seguindo os algoritmos acima, faa o primeiro lance para c 25,12 Trate de ganhar o jogo ! Se for imposs ganhar esta instncia, responda PERDI vel a no quadro prprio. o 2. Idem para 31,33 3. E para 25,32 1 2 3
47.4
Exerc cio 3
1. Seguindo os algoritmos acima, faa o primeiro lance para c 40,39 Trate de ganhar o jogo ! Se for imposs ganhar esta instncia, responda PERDI vel a no quadro prprio. o 2. Idem para 35,30 3. E para 37,18 1 2 3
47.5
Exerc cio 4
1. Seguindo os algoritmos acima, faa o primeiro lance para c 25,33 Trate de ganhar o jogo ! Se for imposs ganhar esta instncia, responda PERDI vel a no quadro prprio. o 2. Idem para
88-08, Pedro Kantek
500
CAP ITULO 47. EXERC ICIOS PRATICOS: 153A - JOGO DO RETANGULO 31,35 3. E para 21,10 1 2 3
47.6
1 2 3 4
Respostas
30 30 0 0 39 39 16 33 0 0 16 33 30 30 17 35 33 33 25 25 0 0 0 0
501
502
Cap tulo 48
Estes exerc cios foram baseados em similares pedidos na Olimp ada Espanhola de Informtica. a Caminhos Seja um tabuleiro de dimenses M N , onde 1 M 20 e 1 N 20, tal que cada o casa contenha uma letra maiscula. Aquela casa que est na linha M e na coluna N u a e identicada pela dupla (m, n). Duas casas diferentes (mi , ni ) e (mj , nj ) so adjacentes se para a primeira compoa nente:
|mi mj | 1 ou ento |mi mj | = M 1. a
Em outras palavras, so adjacentes todas as casas que rodeiam uma dada, imagia nando que no tabuleiro, a ultima la est unida ` primeira, e a mesma coisa para as a a colunas. No desenho a seguir, marca-se com um asterisco, as casas adjacentes ` (2,3), ` a a esquerda e (1,1) ` direita, ambas em tabuleiros 4 4. a - * * * - * - * - * - * * * - * - * * * - - - - - - * * - * Dada uma palavra A de k letras maisculas A = a1 , a2 , ...ak , k 1 diz-se que A est u a contida no tabuleiro se verdade que e
existe uma casa (m1 , n1 ) que contm a letra a1 e para cada letra a1 + 1, 1 i k, existe uma casa (mi+1 , ni+1 ) que contm ai+1 e sendo que (mi , ni ) e (mi+1 , ni+1 ) so adjacentes no tabuleiro e a
503
CAP ITULO 48. EXERC ICIOS PRATICOS: 155A - CAMINHOS NO TABULEIRO E DESCARGA DO VULCAO A seqncia de casas (m1 , n1 ), ..., (mk , nk ) ser chamada de caminho de A no tabue a uleiro. Desta maneira, dado o tabuleiro 44 a seguir, as cadeias SOLA, HOLAe ADIOSesto a contidas nele, mas no ocorre o mesmo com GOZA, HORAnem HALA. a S I E O H O Z H A L E D Z G F I
No caso de SOLA, as casas que formam o caminho so (1, 1), (2, 2), (2, 3) e (3, 1). a Para HOLAso (1, 2), (2, 2), (2, 3), (1, 3). Para ADIOSo caminho (1, 3), (4, 3), (4, 4), (4, 1), (1, 1). a e Dado um tabuleiro com as caracter sticas citadas e uma palavra A composta de letras maisculas, se pede calcular o caminho de A. Quando construir o programa, pode-se u armar que A est contida no tabuleiro, e que o caminho A unico. a e Exemplo Seja procurar a palavra PRECISAM no tabuleiro 1 2 3 4 5 6 7 8 9 10 11 12 +------------------------------------------------1| D S T Q B V W Y G C Z Z 2| Y Y Q Z L I D C O P C Y 3| R D H V C A S M X S F Q 4| S J Z Y Y F E U Q U J F 5| L X B G Z X X E R V Y D 6| F H M Q Z F G J I U Z J 7| F A O S H P K D P E L H 8| S I L V Y S J L A P C G 9| R C Q X D Y P K O A V O 10| E A N Y S S Y F Q A P J 11| J W P Y H Q D H G W L R 12| M A E R E X R D V U W P O caminho (12,12);(11,12);(10,1);(9,2);(8,2);(8,1);(7,2) e (6,3). e Vulco a Neste caso se deseja simular o deslocamento da lava de um vulco ao largo da encosta a do mesmo. Representar-se- o vulco por uma superf retangular quadriculada. Para a a cie cada uma das casas, conhece-se a altura dela em relao ao n ca vel do mar, sendo este nmero entre 1 e 9. u O comportamento da lava se rege pelas seguintes regras: 1. A lava ue desde a casa na qual est situada a cratera do vulco a a 2. Dada uma casa alcanada pela lava, a mesma ue para qualquer um dos 8 vizinhos c que tem altura menor que a casa original. 3. A cada instante de tempo, a lava se desloca 1 casa nas 8 direes. co 4. No instante de tempo t=1, apenas 1 casa (a cratera) contm lava. e Pede-se a confeco de um mapa das encostas do vulco que identique os pontos ca a alcanados pela lava, em todos os instantes de tempo. c
88-08, Pedro Kantek
504
CAP ITULO 48. EXERC ICIOS PRATICOS: 155A - CAMINHOS NO TABULEIRO E DESCARGA DO VULCAO Entrada A entrada uma matriz de 12 linhas, contendo a altura dos 144 plats das e o encostas. Informa-se tambm a coordenada (linha,coluna) da cratera. e Sa da A quantidade de platos que a lava atinge, nos diversos instantes de tempo. Exemplo 1 2 3 4 5 6 7 8 9 10 11 12 +------------------------------------------------1| 5 8 1 9 9 4 2 5 3 4 3 9 2| 6 9 7 9 7 6 5 2 8 5 9 4 3| 2 1 8 3 8 1 5 4 8 5 5 5 4| 6 9 4 3 7 8 6 5 9 1 1 7 5| 9 5 5 4 4 5 1 2 4 3 2 9 6| 2 5 7 1 8 7 2 5 7 2 2 3 7| 8 1 4 4 3 7 1 6 8 7 3 5 8| 9 9 4 5 5 3 2 1 1 8 5 8 9| 7 6 1 3 9 2 8 8 9 8 4 3 10| 9 7 7 7 2 6 9 5 1 6 4 7 11| 8 4 7 8 8 2 9 7 3 5 9 7 12| 9 2 7 8 1 7 8 5 3 2 3 2 Com a cratera disposta em (9,10), gerou os deslocamentos de lava: para t=1, Quantidade de plats imersos=1; para t=2, Q=7; para t=3, Q=11; para t=4, Q=16 e para t=5, o Q=17. Neste ponto, o programa pra, pois a lava no tem para onde ir. a a
Seja a palavra ACIONADAS e o tabuleiro 1 2 3 4 5 6 7 8 9 10 11 12 +------------------------------------------------1| L H J L X R E B F J O Q 2| C I F R H X E T U J S Z 3| X A N X K K X C B C A I 4| O A D X E U F G T Q D N 5| S C T O W E Y U Q B A N 6| O B P B F O E W G C X Z 7| O E D H F K P Q P L Q V 8| C N S Y F H M B T N O P 9| O C P M B G Z V J E H S 10| G D L C E R L P S N H L 11| J A F C L M Y G F P N W 12| F C T I N S X B E T P O Pergunta-se: Qual a linha e coluna da sexta letra da palavra ? Seja o vulco a 1 2 3 4 5 6 7 8 9 10 11 12 +------------------------------------------------1| 2 9 6 7 8 9 4 3 6 9 5 4 2| 2 7 4 3 9 8 3 3 8 1 3 2 3| 9 7 5 1 5 1 9 9 8 9 7 6 4| 4 3 3 6 1 4 6 6 4 2 8 3
verso de 10 de fevereiro de 2008 a
505
CAP ITULO 48. EXERC ICIOS PRATICOS: 155A - CAMINHOS NO TABULEIRO E DESCARGA DO VULCAO 5| 6| 7| 8| 9| 10| 11| 12| 7 8 6 5 8 5 5 6 7 5 2 3 5 1 3 2 9 4 4 6 9 6 4 7 3 4 3 3 1 3 6 1 6 9 1 2 5 8 3 1 2 1 4 2 5 6 1 7 7 9 3 6 4 6 7 1 1 9 9 7 7 6 3 5 9 7 1 9 8 5 1 6 6 7 3 4 4 2 4 9 2 7 4 3 7 7 5 9 2 3 1 1 2 9 2 8
com a cratera disposta no plato (linha,coluna): 2 5 Pergunta-se quantos plats so atingidos nos instantes t=3, t=4 e t=5 ? o a
vulco: a t=5?
em t=3, t=4 e
48.2
Exerc cio 2
Caminhos
Seja a palavra COMPLETA e o tabuleiro 1 2 3 4 5 6 7 8 9 10 11 12 +------------------------------------------------1| N B L X B R R S D V N P 2| L I P R N K I I S G B K 3| N Q J C Z V P H Y J C Z 4| Z K U H N O Z K V A P B 5| D Q T H B N S H O Z U X 6| J F Z F V A H N P O Q A 7| H A M P Y O V G X Z H M 8| L T Z T X E H Y Z L O P 9| E O I O X Z G N G J P C 10| K I O G C Y R F V L E E 11| H Q J M W U Y D Z C Y C 12| M O W A F Q R I M G E Y Pergunta-se: Qual a linha e coluna da sexta letra da palavra ? Seja o vulco a 1 2 3 4 5 6 7 8 9 10 11 12 +------------------------------------------------1| 2 8 9 5 4 6 9 4 4 5 9 6 2| 1 6 7 2 8 8 7 6 2 7 1 6 3| 1 5 8 5 9 5 4 2 1 6 5 5 4| 7 4 9 2 2 9 7 8 8 7 7 4 5| 1 3 6 9 2 7 2 1 4 2 7 1 6| 9 1 6 4 3 2 5 1 7 3 4 6 7| 1 3 1 2 7 9 1 3 8 1 6 7
88-08, Pedro Kantek
506
CAP ITULO 48. EXERC ICIOS PRATICOS: 155A - CAMINHOS NO TABULEIRO E DESCARGA DO VULCAO 8| 9| 10| 11| 12| 8 7 9 8 1 6 2 7 5 5 2 8 8 4 5 6 6 8 2 3 1 9 6 6 3 6 4 8 8 9 9 1 6 2 6 4 9 2 4 9 8 7 5 1 8 2 2 1 8 1 5 8 2 7 9 6 4 9 9 8
com a cratera disposta no plato (linha,coluna): 10 1 Pergunta-se quantos plats so atingidos nos instantes t=3, t=4 e t=5 ? o a
vulco: a t=5?
em t=3, t=4 e
48.3
Exerc cio 3
Caminhos
Seja a palavra TRABALHAM e o tabuleiro 1 2 3 4 5 6 7 8 9 10 11 12 +------------------------------------------------1| E T R Z J G C W S S U A 2| C E F Y C I I X T L D H 3| K A Q M O O U L M C S U 4| R R C G A A C A H W W S 5| Q N B T F B X A M Q U L 6| N H X A G H U T Z Y G K 7| C I U A H H S W K U H L 8| A W M P L B A X M V N A 9| B P P A O A A M U G X O 10| F X M H X R F F I R V Z 11| U U D D O T T O I Z U F 12| Q L F M T H R H O S N Y Pergunta-se: Qual a linha e coluna da sexta letra da palavra ? Seja o vulco a 1 2 3 4 5 6 7 8 9 10 11 12 +------------------------------------------------1| 6 7 3 2 1 4 8 8 5 8 2 5 2| 8 8 8 8 1 1 6 3 8 2 3 6 3| 7 2 6 9 7 8 5 6 1 5 1 9 4| 5 4 3 4 9 8 4 6 8 6 5 3 5| 9 7 9 4 3 8 4 4 3 4 4 7 6| 4 7 6 3 2 1 6 2 9 4 7 6 7| 2 8 7 5 1 3 3 7 5 5 9 3 8| 1 6 8 4 1 8 8 5 9 6 1 4 9| 6 6 3 5 6 5 9 9 2 8 6 6 10| 4 3 5 2 6 9 1 6 8 8 9 4
verso de 10 de fevereiro de 2008 a
507
CAP ITULO 48. EXERC ICIOS PRATICOS: 155A - CAMINHOS NO TABULEIRO E DESCARGA DO VULCAO 11| 12| 5 3 4 2 1 3 4 7 9 6 3 3 2 5 6 9 2 2 1 8 8 8 3 9
com a cratera disposta no plato (linha,coluna): 5 3 Pergunta-se quantos plats so atingidos nos instantes t=3, t=4 e t=5 ? o a
vulco: a t=5?
em t=3, t=4 e
48.4
Exerc cio 4
Caminhos
Seja a palavra SERVINDO e o tabuleiro 1 2 3 4 5 6 7 8 9 10 11 12 +------------------------------------------------1| S M V H B Z X E I R W H 2| S U B U H N O H N H K L 3| R D Z F R G W D A E N Y 4| I D S X O Q D U T Q H D 5| N A W V R K T P R R G G 6| I V W G I U X F K N R B 7| C H I D W E P Y I O D E 8| G O R E L N Q R K S V K 9| V C H J X D R U V S U J 10| A E T K O T G H T I D J 11| G B S S N H W A G D N S 12| A O O E S S W L T V E O Pergunta-se: Qual a linha e coluna da sexta letra da palavra ? Seja o vulco a 1 2 3 4 5 6 7 8 9 10 11 12 +------------------------------------------------1| 3 1 7 4 2 7 9 9 8 8 1 5 2| 5 8 2 6 8 4 3 4 9 8 4 9 3| 5 2 4 3 7 3 7 6 9 9 1 4 4| 8 9 2 4 5 3 8 4 9 3 6 1 5| 3 3 9 9 7 1 8 7 7 6 2 3 6| 5 7 8 2 8 7 1 4 3 2 7 1 7| 5 6 8 4 8 8 6 1 8 2 9 2 8| 3 8 7 1 7 8 9 7 2 6 7 6 9| 4 8 8 3 9 8 3 8 9 8 2 6 10| 7 9 7 1 3 7 1 2 8 6 2 1 11| 1 1 2 5 5 6 2 9 7 5 8 8 12| 7 9 3 7 7 7 6 1 8 6 8 7
88-08, Pedro Kantek
508
CAP ITULO 48. EXERC ICIOS PRATICOS: 155A - CAMINHOS NO TABULEIRO E DESCARGA DO VULCAO com a cratera disposta no plato (linha,coluna): 711 Pergunta-se quantos plats so atingidos nos instantes t=3, t=4 e t=5 ? o a
vulco: a t=5?
em t=3, t=4 e
48.5
1 2 3 4
Respostas
5 11 9 1 8 5 2 9 14 10 17 15 17 16 21 21 18 17 22 22
509
CAP ITULO 48. EXERC ICIOS PRATICOS: 155A - CAMINHOS NO TABULEIRO E DESCARGA DO VULCAO
510
Cap tulo 49
Um grande projeto mundial est em curso para mapear todo o material gentico do ser a e humano: o Projeto Genoma Humano. As molculas de DNA (molculas que contm e e e material gentico) podem ser representadas por cadeias de caracteres que usam um e alfabeto de apenas 4 letras: A, C, T e G. Um exemplo de uma tal cadeia : e TCATATGCAAATAGCTGCATACCGA Nesta tarefa voc dever produzir uma ferramenta muito utilizada no projeto Genoma: e a um programa que procura ocorrncias de uma pequena cadeia de DNA (que vamos e chamar de p) dentro de uma outra cadeia de DNA (que vamos chamar de t). Voc e dever procurar dois tipos de ocorrncia: a diretae a complementar invertida. Uma a e ocorrncia direta quando a cadeia p aparece como subcadeia dentro de t. Por exemplo, e e se p = CATA e t = TCATATGCAAATAGCTGCATACCGA
ento p ocorre na forma direta na posio 2 e na posio 18 de t. Uma ocorrncia a ca ca e complementar invertida depende da seguinte correspondncia entre as letras do DNA: e A T e G C. Complementar o DNAsignica trocar as letras de uma cadeia de DNA seguindo essa correspondncia. Se complementarmos a cadeia CATA, e vamos obter GTAT. Mas alm de complementar, preciso tambm inverter, ou seja, de e e e GTAT obter TATG. E esta cadeia que dever ser procurada, no caso da ocorrncia e a e complementar invertida. Assim, se p e t so as mesmas cadeias do exemplo anterior, a ento p ocorre na forma complementar invertida na posio 4 de t. a ca Tarefa: Sua tarefa escrever um programa que, dadas duas cadeias p e t, onde o e comprimento de p menor ou igual ao comprimento de t, procura todas as ocorrncias e e diretas e todas as ocorrncias complementares invertidas de p em t. e Entrada de Dados: A entrada contm vrios conjuntos de teste. Cada conjunto de e a teste composto por trs linhas. A primeira linha contm dois inteiros positivos, M e N, e e e M N, que indicam respectivamente o comprimento das cadeias de DNA p e t, conforme descrito acima. A segunda linha do conjunto de teste contm a cadeia p, e a terceira e linha contm a cadeia t, onde p e t so compostas utilizando apenas os caracteres A, e a C, G e T. O nal do arquivo de testes indicado quando M = N = 0 (este ultimo e conjunto de testes no vlido e no deve ser processado). a e a a 511
CAP ITULO 49. EXERC ICIO PRATICO: 156 - GENOMA E PALAVRAS CRUZADAS Exemplo de Entrada 2 4 AC TGGT 4 25 CATA TCATATGCAAATAGCTGCATACCGA 0 0
Sa de Dados: Seu programa deve produzir uma sa onde para cada conjunto de da da teste do arquivo de entrada seu programa deve produzir duas linhas. Na primeira linha deve aparecer a lista, em ordem crescente, com a posio inicial de cada ocorrncia, ca e na forma direta, do padro p na seqncia t. Na segunda linha deve aparecer a lista, a ue em ordem crescente, com a posio inicial de cada ocorrncia, na forma complementar ca e invertida, do padro p na seqncia t. a ue
Exemplo de Sada Teste 1 ocorrencia direta: 0 ocorrencia complementar invertida: 3 Teste 2 ocorrencia direta: 2 18 ocorrencia complementar invertida: 4 (esta sada corresponde ao exemplo de entrada acima) Este exerc igual ao proposto na OBI99. cio e
49.2
Palavras Cruzadas
O conhecido passatempo de palavras cruzadas composto por uma grade retangular de e quadrados brancos e pretos e duas listas de denies. Uma das listas de denies co co e para palavras escritas da esquerda para a direita nos quadrados brancos (nas linhas) e a outra lista para palavras que devem ser escritas de cima para baixo nos quadrados e brancos (nas colunas). Uma palavra uma seqncia de dois ou mais caracteres do e ue alfabeto. Para resolver um jogo de palavras cruzadas, as palavras correspondentes `s a denies devem ser escritas nos quadrados brancos da grade. co As denies correspondem `s posies das palavras na grade. As posies so co a co co a denidas por meio de nmeros inteiros seqenciais colocados em alguns quadrados branu u cos. Um quadrado branco numerado se uma das seguintes condies vericada: (a) e co e tem como vizinho ` esquerda um quadrado preto e como vizinho ` direita um quadrado a a branco; (b) tem como vizinho acima um quadrado preto e como vizinho abaixo um quadrado branco; (c) um quadrado da primeira coluna ` esquerda e tem como vizinho e a ` direita um quadrado branco; d) um quadrado da primeira linha acima e tem como a e vizinho abaixo um quadrado branco. Nenhum outro quadrado numerado. A numere ao comea em 1 e segue seqencialmente da esquerda para a direita, de cima para ca c u baixo. A gura abaixo ilustra um jogo de palavras cruzadas com numerao apropriada. ca
88-08, Pedro Kantek
512
CAP ITULO 49. EXERC ICIO PRATICO: 156 - GENOMA E PALAVRAS CRUZADAS
Uma palavra horizontal escrita em uma seqncia de quadrados brancos em uma e ue linha, iniciando-se em um quadrado numerado que tem um quadrado preto ` esquerda a ou que est na primeira coluna ` esquerda. A seqncia de quadrados para essa palavra a a ue continua da esquerda para a direita, terminando no quadrado branco imediatamente anterior a um quadrado preto, ou no quadrado branco da coluna mais ` direita da a grade. Uma palavra vertical escrita em uma seqncia de quadrados brancos em uma e ue coluna, iniciando-se em um quadrado numerado que tem um quadrado preto acima ou que est na primeira linha acima. A seqncia de quadrados para essa palavra a ue continua de cima para baixo, terminando no quadrado branco imediatamente anterior a um quadrado preto, ou no quadrado branco da coluna mais abaixo da grade. Tarefa: Sua tarefa escrever um programa que recebe como entrada uma especicao e ca de um tabuleiro de palavras cruzadas e deve produzir 3 coisas: * A quantidade total de casas numeradas * a lista de casas iniciais para as palavras HORIZONTAIS * a lista de casas iniciais para as palavras VERTICAIS Entrada de Dados: A entrada contm 2 linhas. Na primeira linha h dois inteiros e a positivos, M e N, que indicam respectivamente o nmero de linhas e o nmero de colunas u u do jogo de palavras cruzadas. A segunda linha contm os nmeros das casas pretas do e u tabuleiro. As casas do tabuleiro foram numeradas de 1 (a mais alta ` esquerda) ate a M N , a mais baixa ` direita. a Exemplo de Entrada 10 10 2 13 18 20 23 24 37 47 57 72 75 77 86 89 95 Sa de Dados: A saida deve produzir o maior nmero achado, a lista de casas que da u iniciam palavras horizontais e a lista ... verticais. 30 2 8 10 11 12 15 18 19 20 21 22 23 24 25 26 28 29 30 1 3 4 5 6 7 9 13 14 16 17 27 28 (esta sada corresponde ao exemplo de entrada acima) Apenas para referncia, eis como cou a numerao do tabuleiro acima (99 preto) e ca e 1 8 11 15 19 21 99 9 0 0 0 0 2 99 99 16 0 0 3 10 99 17 0 0 4 0 12 0 0 0 5 0 0 0 0 0 6 0 0 99 99 99 0 99 13 18 20 22 7 0 0 0 0 0 513 0 99 14 0 0 0
88-08, Pedro Kantek
CAP ITULO 49. EXERC ICIO PRATICO: 156 - GENOMA E PALAVRAS CRUZADAS 23 0 26 29 0 99 27 0 0 24 0 0 0 0 0 0 0 99 0 99 0 0 99 30 0 99 28 0 0 25 0 0 0 0 99 0 0 0 0 0
Este exerc est baseado (mas l diferente), na prova da OBI 99. cio a ae
49.3
Exerc cio 1
Para o problema do Genoma, seja a entrada: 4 40 TGGT GAAGGGGATGGTGCAGGGCATGGTGTACCATTGTTTCGTC 5 44 GGACT CTGTGGACAGTAGTATTGAGTCCGGACTCTGACTTGTCAAGCAG 0 0 Pergunta-se: quais as 4 linhas da resposta (2 linhas para cada instncia) a Sejam os tabuleiros de palavras cruzadas 7 9 7 9 15 20 38 40 46 52 57 59 8 8 10 13 24 27 29 34 39 50 53 56 0 0 Pergunta-se 3 valores para cada instncia: o valor da linha 1 e os PENULTIMOS valores a da segunda e terceira linha. L1 i 1 L2 i 1 L1 i 2 L2 i 2 L1, L1, p/L2 p/L2 p/L3 i p/L3 i 1 2
49.4
Exerc cio 2
Para o problema do Genoma, seja a entrada: 5 34 AAAGT ATGTTTGTTAAAGTAAGTAAAGTTACTTTGCTAG 6 46 CATGCC TGCAATCCTAGACCATGCCGAGCTGGCTGCAGGCATGATGCCCGAC 0 0 Pergunta-se: quais as 4 linhas da resposta (2 linhas para cada instncia) a Sejam os tabuleiros de palavras cruzadas
88-08, Pedro Kantek
514
CAP ITULO 49. EXERC ICIO PRATICO: 156 - GENOMA E PALAVRAS CRUZADAS 7 7 8 20 21 27 31 32 40 45 8 8 3 4 12 16 17 22 37 43 46 61 0 0 Pergunta-se 3 valores para cada instncia: o valor da linha 1 e os PENULTIMOS valores a da segunda e terceira linha. L1 i 1 L2 i 1 L1 i 2 L2 i 2 L1, L1, p/L2 p/L2 p/L3 i p/L3 i 1 2
49.5
Exerc cio 3
Para o problema do Genoma, seja a entrada: 4 40 CCTT CTGGGAGTGCGCACGTGACTGAAGGTATCCTTTTATTTAT 5 49 TGGCA ACAGTGGCAGGGTGCCAGACGATTGTGGCACGTTGATTTGCAGGGCCCC 0 0 Pergunta-se: quais as 4 linhas da resposta (2 linhas para cada instncia) a Sejam os tabuleiros de palavras cruzadas 6 8 3 9 10 11 16 18 26 41 10 10 14 18 21 22 24 27 58 61 63 69 71 74 75 78 88 0 0 Pergunta-se 3 valores para cada instncia: o valor da linha 1 e os PENULTIMOS valores a da segunda e terceira linha. L1 i 1 L2 i 1 L1 i 2 L2 i 2 L1, L1, p/L2 p/L2 p/L3 i p/L3 i 1 2
49.6
Exerc cio 4
515
CAP ITULO 49. EXERC ICIO PRATICO: 156 - GENOMA E PALAVRAS CRUZADAS 4 38 GGTT GTTCCCCGTAGAAGTGTAGTAGAACCGGGTTGCCAGCA 5 50 GTAGA TCTACGTCTACATGTAGTAGATAGATGTAACAAGTACTAAGTAACGATGA 0 0 Pergunta-se: quais as 4 linhas da resposta (2 linhas para cada instncia) a Sejam os tabuleiros de palavras cruzadas 8 7 5 7 10 12 23 28 35 42 55 8 8 4 8 13 31 33 36 41 49 53 56 0 0 Pergunta-se 3 valores para cada instncia: o valor da linha 1 e os PENULTIMOS valores a da segunda e terceira linha. L1 i 1 L2 i 1 L1 i 2 L2 i 2 L1, L1, p/L2 p/L2 p/L3 i p/L3 i 1 2
49.7
1 2 3 4
Respostas
9 21 10 19 29 0 28 0 0 0 0 0 27 25 22 23 0 0 0 0 0 0 0 0 24 0 14 0 5 26 17 0 0 0 0 0 19 32 13 1 0 0 0 7 0 0 0 0 18 19 13 17 17 14 18 14 11 9 15 13 20 25 30 21 19 24 29 20 15 22 27 16
516
Cap tulo 50
A produtora de refrigerantes CaraCola precisa enviar com freqncia grandes carregaue mentos para as suas distribuidoras em outros estados. Para isso ela pode utilizar uma transportadora que trabalha com caminhes ou uma transportadora que trabalha com o trens. As duas transportadoras competem agressivamente para conseguir o servio, mas c seus custos dependem do momento (por exemplo, se h ou no caminhes dispon a a o veis, etc.). A cada carregamento, a CaraCola consulta as duas transportadoras, que informam as condies de preo vigentes no momento, para o estado desejado. Sua tarefa co c escrever um programa que, baseado nas informaes das transportadoras, decida se o e co melhor enviar o carregamento por trem ou por caminho. e a As transportadoras informam os seus custos na forma de duas variveis, represena tando duas parcelas. Uma parcela um custo xo A que independe do peso do carregae mento, e a outra parcela um custo varivel B que depende do peso do carregamento, em e a kilogramas. A CaraCola utiliza o peso do carregamento para calcular o custo dos transporte por trem e por caminho e decidir qual empresa transportadora contratar. Por a exemplo, suponha que a transportadora por trem informa que o seu custo xo A = R$ e 450,00 e o seu custo por kilograma B = R$ 3,50. Suponha ainda que a transportadora e por caminho informa que seu custo xo A = R$ 230,00 e o seu custo por kilograma a e B = R$ 3,70. Neste caso, para um carregamento que pesa 2354 kg a CaraCola decide e que melhor fazer o envio por trem, pois 450 + 3, 50 2354 < 230 + 3, 70 2354. Se a e diferena entre os custos for menor do que R$ 1,00 a CaraCola prefere o transporte por c trem. Tarefa Sua tarefa escrever um programa que recebe como entrada vrios casos, e a cada um apresentando uma lista de custos, e determina se a CaraCola deve enviar o carregamento por trem ou por caminho. a Entrada de Dados A entrada contm vrios conjuntos de teste. Cada conjunto e a de teste composto por uma linha, que contm cinco valores. O primeiro valor um e e e nmero inteiro positivo K que representa o peso, em kilogramas, do carregamento. Os u quatro valores restantes so nmeros reais A, B, C e D que representam os custos a u informados pelas empresas de transporte. A e B representam respectivamente o custo xo e o custo varivel por kilograma informado pela empresa que utiliza trem. C e D a representam respectivamente o custo xo e o custo varivel por kilograma informado a pela empresa que utiliza caminho. Os custos so apresentados sempre com preciso de a a a dois algarismos decimais. O nal do arquivo de testes indicado quando K = 0 (este e ultimo conjunto de testes no vlido e no deve ser processado). a e a a Exemplo de Entrada 517
CAP ITULO 50. EXERC ICIO PRATICO 157 2354 1000 2327 0 450.00 411.50 325.00 3.50 2.85 3.10 230.00 411.50 556.50 3.70 2.85 3.00
Sa de Dados Para cada conjunto de teste do arquivo de entrada seu programa deve da produzir a informao 1=trem ou 2=caminho. ca a Exemplo de Sada: 1, 1 e 2 (corresponde ` entrada acima) a
50.2
RoboCoee
Dona Mercedes, a eciente funcionria responsvel pela distribuio de cafezinho na a a ca empresa RoboCamp, fabricante de robs industriais, vai aposentar-se em breve. Para o ocupar a funo de Dona Mercedes os engenheiros da empresa adaptaram um rob exca o istente, ao qual acoplaram uma mquina de caf. Para diminuir os custos de fabricao, a e ca o novo rob tem uma operao bem simples, sendo capaz de apenas trs movimentos o ca e bsicos: car parado (para que os empregados possam servir-se de caf), andar para a e a frente, e girar sobre o seu eixo (para colocar-se de frente para o seu prximo ponto o destino). A programao do rob feita atravs de uma seqncia de N pontos no plano, ca o e e ue numerados de 0 a N-1 (o rob desenvolvido no sobe escadas, mas felizmente a empresa o a ocupa um unico pavimento). Cada ponto determinado por coordenadas inteiras (X,Y). e O ponto i sempre distinto do ponto i+1, para 0 i < N, e o ponto N-1 distinto do e e ponto 0 (veja a regra 4 abaixo). O rob move-se a partir do ponto 0, atravs de todos os pontos dados, observando o e as seguintes regras: 1. O rob inicia no ponto 0 de frente para o ponto 1; o 2. O rob move-se sempre para a frente; o 3. Chegando ao ponto i (0 i N-1) o rob gira sobre seu eixo, no sentido do relgio, o o de um ngulo (0o < 360o), de modo a car de frente para o ponto (i+1) a mod N, e faz uma pausa para que os usurios possam servir-se de caf; a e 4. No nal, para completar o percurso, o rob movimenta-se do ponto N-1 para o o ponto 0, e gira de modo a car de frente para o ponto 1. Tarefa Sua tarefa escrever um programa que, dada a seqncia de N pontos no e ue plano que corresponde ` programao do rob, determina quantas voltas completas sobre a ca o o seu eixo o rob perfaz durante seu percurso. o Entrada de Dados Cada conjunto de teste corresponde a uma programao do ca rob. A linha de um conjunto de testes contm um inteiro positivo, N, que indica o o e nmero de pontos presentes no conjunto de teste, seguido por N pares de nmeros u u inteiros que correspondem ao valor das coordenadas X e Y de um ponto, separados por espao em branco (-1000 X 1000, -1000 Y 1000). O nal do arquivo de testes c indicado quando N = 0 (este ultimo conjunto de teste no vlido e no deve ser e a e a a processado). Exemplo de Entrada 4 , 1 1 , 1 0 , 0 0 , 0 1 4 , 2 -3 , 2 2 , -3 3 , -2 -1 0
88-08, Pedro Kantek
518
CAP ITULO 50. EXERC ICIO PRATICO 157 Sa de Dados Para cada conjunto de teste do arquivo de entrada seu programa da deve indicar o nmero de rotaes completas efetuadas pelo rob durante seu percurso, u co o encontrado pelo seu programa. Exemplo de Sada: 1 e 3 (corresponde ` entrada) a
50.3
Restaurante
A unicoMP (Universidade Independente de Computao) possui vrios refeitrios que ca a o servem seus milhares de alunos e professores. Para melhorar o atendimento a unicoMP planeja fazer uma reforma nos refeitrios, mas para isso necessita saber qual o nmero o u mximo de pessoas que so atendidas simultaneamente em um mesmo refeitrio. Para a a o isso a unicoMP, que possui catracas eletrnicas, coletou os seguintes dados: o
Um vetor E, ordenado crescentemente, em que E[i] representa o instante de tempo em que a pessoa i entrou no restaurante; Um vetor S, em que S[i] representa o instante de tempo em que a pessoa i saiu do restaurante.
Os elementos de E e S so inteiros positivos que indicam o nmero de minutos a u transcorridos desde a abertura do restaurante. A entrada e a sa do restaurante se faz da por uma unica catraca, onde passa apenas uma pessoa por vez. Se acontecer de uma pessoa entrar e outra sair no mesmo minuto, quem entra tem a preferncia de uso da e catraca. Nos elementos de E no h valores repetidos. A mesma coisa para S. a a Tarefa Sua tarefa escrever um programa que, dados dois vetores de inteiros E e e S, ambos de comprimento igual a N, calcula o nmero mximo de pessoas que esto u a a presentes ao mesmo tempo dentro do restaurante. Entrada de Dados Cada conjunto de teste composto por trs linhas. A primeira e e linha contm um inteiro positivo, N, que indica o comprimento dos vetores E e S, cone forme descrito acima. A segunda linha do conjunto de teste contm os elementos do e vetor E, separados por espao em branco, e a terceira linha contm os elementos do vec e tor S, separados por espao em branco. O nal do arquivo de testes indicado quando c e N = 0 (este ultimo conjunto de testes no vlido e no deve ser processado). a e a a Exemplo de Entrada 3 14 67 98 1890 1900 2123 2 200 1800 1543 2324 0 Sa de Dados Para cada conjunto de teste do arquivo de entrada seu programa da deve produzir o nmero mximo de pessoas presentes simultaneamente no restaurante, u a encontrado pelo seu programa. Exemplo de Sada: 3 e 1 (corresponde ` entrada acima) a
50.4
Exerc cio 1
519
Transporte:
verso de 10 de fevereiro de 2008 a
CAP ITULO 50. EXERC ICIO PRATICO 157 1471 1116 1975 0 0 Robot 5 -4 1, -2 2, -5 -3, 4 4 -1, -3 -2, 2 3, 4 -2 0, 1 3, -1 2, 0 0 Restaurante 12 4 7 13 14 11 3 6 12 14 10 4 9 14 19 0 0 11 12 13 18 23 26 27 31 32 37 19 23 27 29 34 39 41 45 47 50 10 13 17 21 22 23 24 29 30 16 17 19 20 23 24 28 30 33 13 16 21 22 26 29 32 34 23 25 29 34 38 42 45 48 2 -4, 0 -3 4 4 0 -2 930 824 900 1.34 1.48 1.75 308 270 290 3.27 2.49 1.56
Responda T1 T2
T3
R1
R2
R3
50.5
483 1002 1090 0 0 Robot
Exerc cio 2
965 721 653 1.35 2.58 2.38 171 438 314 1.64 1.99 2.47
Transporte:
6 2 -4, -4 5 -2 0, -5 4 0 3, -2 0 0 Restaurante
10 5 10 14 15 19 22 13 15 17 21 24 27 10 1 5 7 9 11 16 15 16 18 19 24 28 11
88-08, Pedro Kantek
24 25 28 30 28 33 38 41 18 23 25 27 33 38 43 46
520
CAP ITULO 50. EXERC ICIO PRATICO 157 1 6 7 12 14 17 21 25 26 27 28 11 12 13 16 17 21 24 25 30 34 39 0 0 Responda T1 T2 T3 Rb1 Rb2 Rb3 R1 R2 R3
50.6
677 459 668 0 0 Robot
Exerc cio 3
930 852 711 1.71 1.48 2.36 353 412 123 2.31 2.76 2.86
Transporte:
2 -2, 3 1
6 9 10 12 13 18 23 25 23 25 29 32 33 38 40 43 10 12 15 18 19 24 28 31 16 21 25 26 27 28 30 32 6 8 13 17 18 19 20 22 27 29 14 19 20 25 28 29 31 34 35 37
Responda T1 T2
T3
R1
R2
R3
50.7
961 692 1943 0 0 Robot
Exerc cio 4
690 690 624 2.15 1.72 1.28 271 417 294 2.24 3.19 3.80
Transporte:
521
CAP ITULO 50. EXERC ICIO PRATICO 157 4 1 -4, -5 -2, 2 -3, -3 4 3 -3, 2 -1, -3 -2, 4 7 -1 1, -2 4, -3 -1, 1 0 0 Restaurante 11 3 4 8 13 17 20 24 15 17 20 25 29 32 35 10 3 8 9 10 13 15 19 11 13 17 20 21 22 24 13 1 5 6 10 15 20 24 15 20 25 30 32 34 39 0 0 Responda T1 T2 T3 28 33 36 40 40 43 45 48 22 24 27 28 32 37 27 31 32 33 38 42 43 44 47 50 54 56 3 5 0,
4 -3,
5,
0 -2
R1
R2
R3
50.8
1 2 3 4
Respostas
1 2 2 2 1 2 1 1 2 2 2 1 3 2 4 2 2 2 3 2 2 3 2 3 5 3 7 4 3 5 4 4 5 3 5 6
522
Cap tulo 51
Uma seqncia de 0s e 1s chamada de seqncia-H se composta por um unico 0 ou ue e ue e se composta por um 1 seguido de duas seqncias-H. Por exemplo, 0, 100 e 10100 so e ue a seqncias-H, mas 10, 111 e 10010 no so. ue a a Tarefa Sua tarefa determinar se uma dada seqncia ou no uma seqncia-H. e ue e a ue Entrada de Dados Cada conjunto de teste composto por uma unica linha, que e contm a seqncia a ser testada, composta de d e ue gitos 0s e 1s (sem espaos em branco c intermedirios). O nal da seqncia indicado pelo primeiro espao em branco da a ue e c linha. O nal da entrada indicado quando os primeiros caracteres da linha de teste e so -1. a Exemplo de Entrada 0 10100 10010 -1 Sa de Dados Para cada conjunto de teste do arquivo de entrada seu programa da deve produzir o d gito 1 se a seqncia uma seqncia-H, ou o d ue e ue gito 0 se a seqncia ue no uma seqncia-H. a e ue Exemplo de Sada 1 , 1 , 0 (esta sada corresponde ao exemplo de entrada acima)
51.2
Carga Pesada
Um dos maiores problemas no transporte de cargas pesadas por rodovias a altura dos e viadutos, pois muitas vezes a carga mais alta do que o vo do viaduto sob o qual o e a caminho deve passar. Considere o mapa abaixo. E poss a vel tranportar uma turbina de hidroeltrica, que em cima do caminho mede 7 metros de altura, da cidade Xis da e a Serra para a cidade Ypsilon Bonito? 523
Neste caso fcil perceber que a resposta sim, pois o menor vo encontrado no e a e a caminho, se utilizarmos as estradas BR-1001 e BR-1024, de 9 metros. No caso geral, e com dezenas de cidades e estradas, a resposta pode no ser to evidente. a a Tarefa Sua tarefa determinar, para um dado par de cidades X e Y, qual a carga e mais alta que pode ser transportada de X para Y por meio rodovirio, conhecendo todas a as estradas da regio e a altura de todos os tneis e viadutos dessas estradas. Considere a u que todas as estradas tm limitao de altura e que a interligao das estradas ao redor e ca ca das cidades no tem restrio de altura. a ca Entrada de Dados O nmero mximo de cidades, N, em cada teste 100. As u a e cidades so numeradas de 1 a N. O primeiro par do conjunto de teste contm dois a e inteiros positivos X e Y que representam respectivamente as cidades origem e a cidade destino da carga (1 X N, 1 Y N). As triplas seguintes contm cada uma e a descrio de uma estrada. Cada descrio composta por trs inteiros A, B e C, ca ca e e representando respectivamente a cidade onde a estrada inicia, a cidade onde a estrada termina e a altura do viaduto ou tnel mais baixo no trajeto de A para B. Cada instncia u a do problema ocupa 2 linhas. O nal do arquivo de testes indicado quando X = Y = e 0 (este ultimo conjunto de testes no vlido e no deve ser processado). a e a a Exemplo de Entrada 2 4 ; 1 4 5 ; 2 4 12 ; 0 0 0 1 3 ; 1 2 10 ; 1 3 8 ; 2 3 12 ; 3 1 5 ; 0 0 0 0 0 Sa de Dados Na resposta deve aparecer a altura mxima da carga, encontrada da a pelo seu programa. Exemplo de Sada 12 , 10 (esta sada corresponde ao exemplo de entrada acima)
51.3
Rede tica o
Os caciques da regio de Tutuau pretendem integrar suas tribos ` chamada aldeia a c a global. A primeira providncia foi a distribuio de telefones celulares a todos os pajs. e ca e Agora, planejam montar uma rede de bra tica interligando todas as tabas. Esta o empreitada requer que sejam abertas novas picadas na mata, passando por reservas de ora e fauna. Conscientes da necessidade de preservar o mximo poss a vel o meio ambiente, os caciques encomendaram um estudo do impacto ambiental do projeto. Ser a que voc consegue ajud-los a projetar a rede de bra tica? e a o Tarefa Vamos denominar uma ligao de bra tica entre duas tabas de um ramo ca o de rede. Para possibilitar a comnicao entre todas as tabas necessrio que todas elas u ca e a
88-08, Pedro Kantek
524
CAP ITULO 51. EXERC ICIO PRATICO 158 estejam interligadas, direta (utilizando um ramo de rede) ou indiretamente (utilizando mais de um ramo). Os caciques conseguiram a informao do impacto ambiental que ca causar a construo dos ramos. Alguns ramos, no entanto, nem foram considerados no a ca estudo ambiental, pois sua construo imposs ca e vel.
Sua tarefa escrever um programa para determinar quais ramos devem ser cone stru dos, de forma a possibilitar a comnicao entre todas as tabas, causando o menor u ca impacto ambiental poss vel. Entrada A entrada composta de vrios conjuntos de teste. A primeira linha de e a um conjunto de teste contm o nmero de tabas. As tabas so numeradas de 1 a N. As e u a M indicaes seguintes contm trs inteiros positivos X, Y e Z, que indicam que o ramo co e e de rede que liga a taba X ` taba Y tem impacto ambiental Z. Com os conjuntos de teste a dados sempre poss interligar todas as tabas. O nal da entrada indicado quando e vel e N = 0. Exemplo de Entrada 3 ; 1 2 10 ; 2 3 10 ; 3 1 10 5 ; 1 2 15 ; 1 3 12 ; 2 4 13 ; 2 5 5 ; 3 2 6 ; 3 4 6 0 Sa Para cada conjunto de teste da entrada seu programa deve produzir uma lista da dos ramos de redes que devem ser constru dos. Um ramo descrito por um par de tabas e X e Y , com X < Y. Os ramos de rede podem ser listados em qualquer ordem, mas no a deve haver repetio. Se houver mais de uma soluo poss ca ca vel, imprima apenas uma delas. Exemplo de Sada 1 2 ; 1 3 1 3 ; 2 3 ; 2 5 ; 3 4 (esta sada corresponde ao exemplo de entrada acima)
51.4
Exerc cio 1
525
CAP ITULO 51. EXERC ICIO PRATICO 158 Carga Pesada 5 3; 1 4 12;2 1 3;2 3 11;3 1 3;3 5 5; 4 1 6;4 2 9;5 1 10;5 2 4;5 3 7;0 0 0 5 2; 1 2 6;1 3 4;1 5 5;2 1 2;3 4 7; 4 1 9;4 5 4;5 2 5;5 3 8;0 0 0 0 0 Rede tica o 6; 4 6 4;1 4 5;1 2 6;3 5 7;1 3 9;2 6 10;2 5 11; 1 5 12;2 3 13;3 6 14;2 4 15;1 6 16;5 6 17;3 4 19;4 5 20 6; 2 3 4;2 5 6;1 6 7;2 4 8;3 6 9;1 5 11;3 4 12; 4 5 14;1 2 16;1 4 17;3 5 19;4 6 20;2 6 21;5 6 22;1 3 23 0 Responda S1 S2 S3 S4 C1 C2 R1 R2
51.5
Exerc cio 2
Seqncia-H: ue 1101010011110110010011110010011000000 110011001110100100100 1110010111101010110000100110000 1110010100100 -1 Carga Pesada 5 4; 1 2 3;1 3 9;1 4 6;2 1 6;2 4 8;2 5 5; 3 2 7;3 5 5;4 5 4;5 1 6;5 4 1;0 0 0 4 3; 1 3 9;1 5 5;2 3 4;2 5 12;3 5 6; 4 1 3;4 2 10;4 3 8;5 1 11;5 3 3;0 0 0 0 0 Rede tica o 6; 4 5 4;1 3 5;3 4 6;5 6 7;4 6 8;1 5 9;2 6 10; 2 5 11;1 4 12;3 5 15;1 2 18;2 3 19;1 6 20;2 4 21;3 6 22 6; 4 6 4;3 5 5;3 6 6;2 4 8;1 3 9;2 3 10;1 2 11; 2 5 12;2 6 14;3 4 15;1 4 17;1 5 18;4 5 19;5 6 21;1 6 23 0 Responda S1 S2 S3 S4 C1 C2 R1 R2
526
51.6
Exerc cio 3
Seqncia-H: ue 1011110000100 1110011100000010100 11110101001011001000100 111101010100100011001010111010000 -1 Carga Pesada 4 1; 1 2 4;2 1 7;2 3 5;2 4 3;3 2 5; 3 5 8;4 1 1;4 3 6;5 1 4;5 2 5;0 0 0 4 1; 1 3 6;2 3 6;2 4 3;2 5 5;3 1 8; 4 1 3;4 3 3;4 5 7;5 1 4;5 2 9;0 0 0 0 0 Rede tica o 6; 3 6 5;4 5 6;3 4 7;3 5 8;2 5 9;1 4 10;1 2 11; 1 6 13;1 3 15;2 3 16;5 6 17;1 5 19;2 6 20;4 6 21;2 4 23 6; 3 4 4;1 6 5;2 3 6;3 6 7;2 4 8;2 5 9;1 4 10; 1 5 12;1 2 13;4 5 15;4 6 16;1 3 19;5 6 20;2 6 22;3 5 23 0 Responda S1 S2 S3 S4
C1 C2
R1
R2
51.7
Exerc cio 4
Seqncia-H: ue 1110011001000 11010111001001011000000 1100101111001000100 1100101101000101000 -1 Carga Pesada 2 5; 1 2 3;1 3 5;1 4 7;1 5 5;2 1 8; 2 5 4;3 2 6;3 5 9;4 3 6;5 1 4;0 0 0 1 4; 1 2 8;1 4 2;2 3 7;2 5 5;3 2 4; 3 4 5;3 5 9;4 3 3;5 3 6;5 4 6;0 0 0 0 0 Rede tica o
verso de 10 de fevereiro de 2008 a
527
CAP ITULO 51. EXERC ICIO PRATICO 158 6; 2 6 4;1 4 5;1 3 6;3 5 7;1 5 9;2 3 10;1 2 12; 2 4 13;3 6 14;4 6 15;5 6 16;2 5 17;1 6 20;4 5 22;3 4 23 6; 4 5 4;2 4 5;3 4 6;1 3 7;1 6 8;1 4 9;2 6 10; 2 5 11;5 6 12;4 6 17;1 2 18;3 6 20;1 5 21;3 5 22;2 3 23 0 Responda S1 S2 S3 S4 C1 C2 R1 R2
51.8
1 2 3 4 1 1 1 1
Respostas
0 1 0 0 1 1 1 1 1 1 1 0 9 6 5 6 6 9 6 6 46 45 36 26 14 13 45 14 12 34 34 13 35 56 25 35 13 26 14 23 23 46 34 45 25 35 16 24 16 36 23 34 24 24 36 13 36 13 25 16
528
Cap tulo 52
Os alunos do ultimo ano resolveram organizar uma quermesse para arrecadar fundos para a festa de formatura. A festa prometia ser um sucesso, pois o pai de um dos formandos, Telo, dono de uma loja de informtica, decidiu doar um computador para o a ser sorteado entre os que comparecessem. Os alunos prepararam barracas de quento, a pipoca, doces, ensaiaram a quadrilha e colocaram ` venda ingressos numerados sequena cialmente a partir de 1. O nmero do ingresso serviria para o sorteio do computador. u Ficou acertado que Telo decidiria o mtodo de sorteio; em princ o e pio o sorteio seria, claro, computadorizado. O local escolhido para a festa foi o ginsio da escola. A entrada dos participantes foi a pela porta principal, que possui uma roleta, onde passa uma pessoa por vez. Na entrada, um funcionrio inseriu, em uma lista no computador da escola, o nmero do ingresso, a u na ordem de chegada dos participantes. Depois da entrada de todos os participantes, Telo comeou a trabalhar no computador para preparar o sorteio. Vericando a lista o c de presentes, notou uma caracter stica notvel: havia apenas um caso, em toda a lista, a em que o participante que possuia o ingresso numerado com i, havia sido a i-sima pessoa e a entrar no ginsio. Telo cou to encantado com a coincidncia que decidiu que o a o a e sorteio no seria necessrio: esta pessoa seria o ganhador do computador. a a Tarefa Conhecendo a lista de participantes, por ordem de chegada, sua tarefa dee terminar o nmero do ingresso premiado, sabendo que o ganhador o unico participante u e que tem o nmero do ingresso igual ` sua posio de entrada na festa. u a ca Entrada A entrada composta de vrios conjuntos de teste. A primeira linha de e a um conjunto de teste contm um nmero inteiro positivo N que indica o nmero de e u u participantes da festa. A linha seguinte contm a sequncia, em ordem de entrada, dos e e N ingressos das pessoas que participaram da festa. O nal da entrada indicado quando N = 0. Para cada conjunto de teste da entrada e haver um unico ganhador. a Exemplo de Entrada 4 4 5 3 1 10 9 8 7 6 1 4 3 2 12 10 0 Sa A sa deve conter o nmero do ingresso do ganhador, conforme determinado da da u pelo seu programa. 529
CAP ITULO 52. EXERC ICIO PRATICO - 159 Exemplo de Sada 3 e 10 (esta sada corresponde ao exemplo de entrada acima)
52.2
Bits Trocados
As Ilhas Weblands formam um reino independente nos mares do Pac co. Como um e reino recente, a sociedade muito inuenciada pela informtica. A moeda ocial o e a e Bit; existem notas de B$ 50,00, B$10,00, B$5,00 e B$1,00. Voc foi contratado(a) para e ajudar na programaao dos caixas automticos de um grande banco das Ilhas Weblands. c a Tarefa Os caixas eletrnicos das Ilhas Weblands operam com todos os tipos de notas o dispon veis, mantendo um estoque de cdulas para cada valor (B$ 50,00, B$10,00, B$5,00 e e B$1,00). Os clientes do banco utilizam os caixas eletrnicos para efetuar retiradas de o um certo nmero inteiro de Bits. Sua tarefa escrever um programa que, dado o valor u e de Bits desejado pelo cliente, determine o nmero de cada uma das notas necessrio u a para totalizar esse valor, de modo a minimizar a quantidade de cdulas entregues. Por e exemplo, se o cliente deseja retirar B$50,00, basta entregar uma unica nota de cinquenta Bits. Se o cliente deseja retirar B$72,00, necessrio entregar uma nota de B$50,00, e a duas de B$10,00 e duas de B$1,00. Entrada A entrada composta de vrios conjuntos de teste. Cada conjunto de teste e a composto por uma unica linha, que contm um nmero inteiro positivo V, que indica e e u o valor solicitado pelo cliente. O nal da entrada indicado por V = 0. e Exemplo de Entrada 1 72 0 Sa Para cada conjunto de teste da entrada seu programa deve produzir quatro da inteiros I, J, K e L que representam o resultado encontrado pelo seu programa: I indica o nmero de cdulas de B$50,00, J indica o nmero de cdulas de B$10,00, K indica o u e u e nmero de cdulas de B$5,00 e L indica o nmero de cdulas de B$1,00. u e u e Exemplo de Sada 0 0 0 1 e 1 2 0 2 (esta sada corresponde ao exemplo de entrada acima)
52.3
Saldo de gols
Hiplito um torcedor fantico de um grande clube curitibano. Coleciona mulas, o e a a bandeiras, recortes de jornal, gurinhas de jogadores, camisetas e tudo o mais que se rera a seu time preferido. Quando ganhou um computador de presente em uma festa, resolveu montar um banco de dados com os resultados de todos os jogos de seu time ocorridos desde a sua fundao, em 1909. Depois de inseridos os dados, Hiplito comeou ca o c a car curioso sobre estat sticas de desempenho do time. Por exemplo, ele deseja saber qual foi o per odo em que o seu time acumulou o maior saldo de gols. Como Hiplito o tem o computador h muito pouco tempo, no sabe programar muito bem, e precisa de a a sua ajuda. Tarefa E dada uma lista, numerada seqencialmente a partir de 1, com os resultados u de todos os jogos do time (primeira partida: 3 x 0, segunda partida: 1 x 2, terceira partida: 0 x 5 ...). Sua tarefa escrever um programa que determine em qual per e odo o time conseguiu acumular o maior saldo de gols. Um per odo denido pelos nmeros e u de seqncia de duas partidas, A e B, onde A B. O saldo de gols acumulado entre A e ue B dado pela soma dos gols marcados pelo time em todas as partidas realizadas entre e
88-08, Pedro Kantek
530
CAP ITULO 52. EXERC ICIO PRATICO - 159 A e B (incluindo as mesmas) menos a soma dos gols marcados pelos times adversrios a no per odo. Se houver mais de um per odo com o mesmo saldo de gols, escolha o maior per odo (ou seja, o per odo em que B - A maior). Se ainda assim houver mais de uma e soluo poss ca vel, escolha qualquer uma delas como resposta. Entrada Seu programa deve ler vrios conjuntos de teste. A primeira linha de um a conjunto de teste contm um inteiro no negativo, N, que indica o nmero de partidas e a u realizadas pelo time (o valor N = 0 indica o nal da entrada). Seguem-se N linhas, cada uma contendo um par de nmeros inteiros no negativos X e Y que representam u a o resultado da partida: X so os gols a favor e Y os gols contra o time de Hiplito. As a o partidas so numeradas sequencialmente a partir de 1, na ordem em que aparecem na a entrada. Exemplo de Entrada 2 2 3 ; 7 1 9 2 2 ; 0 5 ; 6 2 ; 1 4 ; 0 0 ; 5 1 ; 1 5 ; 6 2 ; 0 5 3 0 2 ; 0 3 ; 0 4 0 Sa da Para cada conjunto de teste da entrada seu programa deve produzir um par de inteiros I e J que indicam respectivamente a primeira e ultima partidas do melhor per odo, conforme determinado pelo seu programa, exceto quando o saldo de gols do melhor per odo for menor ou igual a zero; neste caso a segunda linha deve conter a expresso nenhum. a Exemplo de Sada 2 2, 3 8 e nenhum acima) (esta sada corresponde ao exemplo de entrada
52.4
Exerc cio 1
5 9 20 1 4 16 18 10 6 19 18 8 9 17 15 19
Quermesse 17 10 2 8 16 11 19 7 14 4 12 13 18 3 15 6 11 7 17 3 9 15 19 1 12 8 6 5 13 20 2 14 20 5 9 16 4 13 2 15 1 17 14 12 7 10 3 11 6 5 10 3 18 8 20 1 4 16 11 7 14 13 2 12 0 Notas 185 254 130 168 0 Saldo de gols 7 7 1;2 1;1 2;2 3;2 2;1 1;5 3 8
verso de 10 de fevereiro de 2008 a
531
CAP ITULO 52. EXERC ICIO PRATICO - 159 1 4;2 3;1 1;5 5;4 4;1 2;3 6;4 2 9 9 6;5 3;3 1;5 5;5 2;2 1;1 6;1 3;1 1 0 Responda q1 q2 q3 q4 n1 n2 n3 n4 s1 s2 s3
52.5
Exerc cio 2
Quermesse 13 6 17 16 7 14 1 20 2 3 10 15 18 4 8 11 12 5 19 9 17 5 9 16 6 4 2 11 12 15 3 19 8 7 14 18 10 13 1 20 10 8 2 12 20 18 17 13 3 9 15 6 7 14 11 1 16 5 4 19 5 16 6 18 7 12 4 19 1 14 9 17 13 15 3 20 8 2 10 11 0 Notas 255 247 239 271 0 Saldo de gols 7 9 6;1 2;2 1;2 3;1 4;2 2;5 5 7 2 4;5 1;1 1;5 5;2 3;2 1;5 3 9 6 1;4 3;3 2;2 3;5 4;1 1;2 1;1 1;3 1 0 Responda q1 q2 q3 q4 n1 n2 n3 n4 s1 s2 s3
52.6
Exerc cio 3
10 17 19 20 14 4 6 17 12 3 19 20 9 1 13 16 1 7 20 19 6 14 5 12 10 1 3 19
Quermesse 5 11 1 13 2 18 16 15 8 9 3 12 7 15 8 16 10 6 18 14 7 13 2 11 5 4 3 12 2 11 10 5 4 17 18 9 14 15 8 9 17 4 6 13 7 2 11 20 16 15 8 18 0
88-08, Pedro Kantek
532
CAP ITULO 52. EXERC ICIO PRATICO - 159 Notas 281 197 228 250 0 Saldo de gols 6 4 7;5 3;1 1;1 7;3 3;3 2 9 6 3;1 2;2 2;1 6;5 3;1 1;6 3;4 2;2 1 9 6 4;1 3;3 2;5 4;4 4;3 1;7 2;2 1;3 2 0 Responda q1 q2 q3 q4 n1
n2
n3
n4
s1
s2
s3
52.7
16 10 2 2 0
Exerc cio 4
Quermesse 18 5 17 1 3 15 11 12 20 4 9 10 14 7 6 8 19 2 13 13 4 18 1 17 6 11 20 3 12 19 5 7 8 16 9 2 14 15 11 7 5 19 16 1 18 8 6 4 12 17 13 10 9 15 20 3 14 14 17 20 9 7 16 5 4 18 13 11 8 6 12 10 3 15 19 1
Notas 289 123 208 236 0 Saldo de gols 7 1 6;2 4;2 1;8 2;3 1;1 1;8 6 9 9 4;3 4;2 1;8 2;1 4;3 2;1 3;1 3;2 1 9 1 7;2 2;1 2;8 3;2 2;3 1;6 6;3 3;3 1 0
verso de 10 de fevereiro de 2008 a
533
n2
n3
n4
s1
s2
s3
52.8
1 2 3 4 15 19 12 14
Respostas
13 20 11 16 12 14 19 12 11 13 14 19 3 5 5 5 3 0 3 3 1 1 0 1 0 0 1 4 5 4 3 2 0 4 4 2 0 1 1 0 4 2 2 3 2 4 4 4 3 3 2 0 0 1 1 1 0 4 3 3 3 5 5 4 1 2 0 3 1 0 0 1 3 1 0 1 1 1 2 3 9 5 6 9 8 2 5 1 9 9 9 4 1 1 1 4 6 9 9 9
534
Cap tulo 53
O macaco-prego um animal irrequieto e barulhento, merecedor tambm dos adjetivos e e desordeiro e despudorado. A sua cabea, encimada por uma densa pelagem negra ou c marrom-escura, semelhante a um gorro, torna seu aspecto inconfund vel. Apesar de ser o macaco mais comum nas matas do pa uma de suas sub-espcies encontra-se s, e seriamente ameaada de extino: o macaco-prego-do-peito-amarelo, que se distingue c ca das demais pela colorao amarelada do peito e da parte anterior dos braos. Um ca c grande esforo foi feito pelos primatologistas para aumentar a populao dos macacosc ca prego-do-peito-amarelo. Sabe-se que eles se alimentam de plantas, das quais consomem preferencialmente frutos e brotos. Alimentam-se tambm de muitos animais, preferene cialmente lesmas, lagartas e rs, e preferem as orestas mais densas. Para determinar a o melhor local do pa para criar uma nova reserva ambiental para os macacos-pregos do-peito-amarelo, o governo fez um levantamento das regies no pa onde as condies o s co preferidas desses animais ocorrem: regies de oresta densa, regies com frutos, regies o o o com muitos brotos, etc. Ajude a salvar os macacos-prego-do-peito-amarelo. Tarefa As regies prop o cias para o macaco-prego-do-peito-amarelo foram determinadas como retngulos cujos lados so todos verticais ou horizontais. Sua tarefa a a e encontrar o local ideal para a reserva ambiental, denida como a interseo de todas as ca regies dadas. o
Entrada Seu programa deve ler vrios conjuntos de teste. A primeira linha de um a conjunto de teste contm um inteiro no negativo, N, que indica o nmero de regies e a u o (o valor N = 0 indica o nal da entrada). Seguem-se N linhas, cada uma contendo quatro nmeros inteiros X, Y, U e V que descrevem uma regio: o par X, Y representa u a a coordenada do canto superior esquerdo e o par U, V representa a coordenada do canto inferior direito de um retngulo. a Exemplo de Entrada (horizontalizados...) 535
Sa Para cada conjunto de teste da entrada seu programa deve produzir as coorda denadas do retngulo de interseo encontrado pelo seu programa, no mesmo formato a ca utilizado na entrada. Caso a interseo seja vazia, a segunda linha deve conter a exca presso nenhum. a Exemplo de Sada 2 4 6 3 e nenhum (esta sada corresponde ao exemplo de entrada acima)
53.2
MASP
O MASP (Museu de Arte de So Paulo) tem o melhor acervo de obras de arte da Amrica a e Latina, sendo reconhecido mundialmente. Alm disso, o MASP diferente de museus e e tradicionais porque seus quadros no so pendurados em paredes (j que as paredes a a a do MASP so janelas de vidro), mas sim apresentados em cavaletes no meio da sala de a exposio. Uma grande exposio est em curso, ocupando todo o salo de exposies. ca ca a a co Considere que: a) as obras esto organizadas no salo de exposies no formato de uma matriz de N a a co linhas por M colunas; b) o visitante pode apenas mover-se da esquerda para a direita, iniciando na coluna 1 (primeira coluna) e terminando na coluna M (ltima coluna); u c) uma trajetria de visita composta de uma seqncia de passos; a cada passo o o e ue visitante aprecia uma obra; d) um passo consiste em mover-se da coluna i para a coluna i+1 em uma linha adjacente. Ou seja, o visitante pode efetuar um movimento horizontal ou diagonal. Movimentos legais so mostrados na gura abaixo: a
e) para dicultar ainda um pouco mais o problema, a primeira e ultima linhas (linhas de nmero 1 e N) da matriz so consideradas adjacentes (o que no poss no u a a e vel MASP!); f ) cada obra tem associada uma prioridade de visita. A prioridade um nmero inteiro; e u quanto menor o nmero, maior a prioridade de que a obra seja apreciada (note u que a prioridade pode ser negativa); Tarefa Sua tarefa escrever um programa que determine a trajetria tima para e o o uma visita ao museu, obedecendo as regras acima. A trajetria tima aquela que tem o o e a menor soma total das prioridades das obras visitadas. Como exemplo, considere as duas exposies abaixo (a unica diferena entre as duas exposies a prioridade das co c co e obras da ultima linha):
88-08, Pedro Kantek
536
As trajetrias timas para as duas exposies so indicadas na gura. Note que a o o co a trajetria tima para a exposio da direita utiliza a propriedade da adjacncia entre a o o ca e primeira e a ultima linhas. No caso de haver mais de uma trajetria tima poss o o vel, seu programa deve imprimir a trajetria de menor ordem lexicogrca (veja o formato de Sa o a da, abaixo). Entrada A entrada composta de vrios conjuntos de teste. A primeira linha e a de um conjunto de teste contm dois nmeros inteiros positivos N e M, que indicam e u respectivamente o nmero de linhas e o nmero de colunas da matriz. As N linhas u u seguintes contm cada uma M nmeros inteiros que representam as prioridades das e u obras. O nal da entrada indicado por N = M = 0. e Exemplo 5 6 3 4 1 2 6 1 8 2 5 9 3 9 8 4 1 3 3 7 2 8 de Entrada 8 7 9 2 6 6 4 5 6 4 (horizontalizados...) 5 6 2 2 3 4 1 2 8 6 9 10 6 1 8 2 7 4 9 10 5 9 3 9 9 5 8 4 1 3 2 6 3 7 2 8 6 4 0 0
Sa Para cada conjunto de teste da entrada seu programa deve produzir a trada jetria tima, descrita por uma seqncia de M inteiros (separados por um espao em o o ue c branco), representando as linhas da matriz que constituem a trajetria tima. No caso o o de haver mais de uma trajetria tima poss o o vel, seu programa deve imprimir a trajetria o de menor ordem lexicogrca (a primeira achada). a Exemplo de Sada Teste 1 1 2 3 4 4 5 Teste 2 1 2 1 5 4 5 Teste 3 1 1 (esta sada corresponde ao exemplo de entrada acima)
53.3
4 3 -12 -11 10 10 10
Exerc cio 1
CAP ITULO 53. EXERC ICIO PRATICO - 160 -2 5 -8 -13 -5 0 4 0 Masp 6 6 9 2 8 8 4 2 8 4 8 1 1 2 6 6 6 2 8 1 5 7 6 6 1 1 4 2 0 0 5 5 4 1 1 7 4 5 7 3 3 3 9 3 7 5 8 8 8 7 3 9 9 9 7 6 9 5 7 8 1 9 2 2 8 4 8 8 2 6 9 9 7 7 4 9 9 7 13 5 5 11 14 5 4 6 -15 14 -5 10 -4 15 -15 10 13 -2
masp2
53.4
4 -5 -2 -14 -5 5 -5 -13 3 -13 -7 0 Masp 6 13 12 8 8 8 9 8 14
Exerc cio 2
6 6 8 4 5 8 7 5
88-08, Pedro Kantek
538
masp2
53.5
4 -9 -4 -6 -13 5 -14 -1 -14 1 -12 0 Masp 6 6 6 2 9 5 9 6 4 8 3 9 6 8 6 6 6 6 8 4 8 4 1 8 2 6 8 2 0 0 7 5 9 4 3 7 2 4 4 3 2 9 5 5 7 7 6 7 1 6 3 6 2 3 13 14 12 5 15 6 15 15 5
Exerc cio 3
5 8 2 1 9 4 2 4 7 6 6 6
7 5 4 5 6 2 2 8 1 5 4 3
539
CAP ITULO 53. EXERC ICIO PRATICO - 160 Responda macaco1 macaco2 masp1
masp2
53.6
4 -10 0 -15 -6 5 2 -7 -9 -9 -6 0 Masp 6 6 1 4 9 8 7 8 5 3 9 6 6 4 6 6 9 3 5 8 8 9 1 1 4 1 8 8 0 0 3 6 5 6 9 6 9 9 3 9 7 9 8 4 7 2 4 4 5 2 3 5 2 2
Exerc cio 4
9 3 3 5 5 9 9 6 4 5 4 3
2 7 1 7 9 5 4 2 2 5 4 3
masp2
53.7
Respostas
5 0 7 -1 8 4 4 3 1 2 5 8 5 7 5 4 8 -3 7 -4 5 1 6 5 1 1 5 6 1 1 4 1 2 1 4 2 1 2 4 2 6 2 3 3 6 3 5 3 5 4 5 2 6 4 4 3 1 3 3 2 1 2 3 2 1 3 3 3 1 2
1 3 10 2nenhum 3 -4 5 4 0 8
540
Cap tulo 54
Considere os seguintes anis quadrados, cada um denido em uma matriz de 8 colunas e por 9 linhas, conforme a gura abaixo. Agora coloque um anel sobre o outro, comeando c pelo anel 1 (que ca por baixo de todos) e terminando com o anel 5 (em cima de todos). Portanto, olhando a pilha de cinco anis pelo lado de cima vemos o seguinte: e ........ EEEEEE.. E....E.. E....E.. E....E.. E....E.. E....E.. E....E.. EEEEEE.. 1 ........ ........ DDDDDD.. D....D.. D....D.. D....D.. DDDDDD.. ........ ........ 2 ........ ........ ........ ........ ....AAAA ....A..A ....A..A ....AAAA ........ 3 ........ ..BBBB.. ..B..B.. ..B..B.. ..B..B.. ..BBBB.. ........ ........ ........ 4 .CCC.... .C.C.... .C.C.... .CCC.... ........ ........ ........ ........ ........ 5 .CCC.... ECBCBB.. DCBCDB.. DCCC.B.. ve-se => D.B.ABAA D.BBBB.A DDDDAD.A E...AAAA EEEEEE..
Os anis so formados por letras maisculas, cada anel com uma letra diferente. O e a u caractere ponto (.) utilizado para representrar espaos vazios. A espessura das e c paredes do anel de exatamente um caractere e o comprimento dos lados nunca menor e e do que trs caracteres. Pelo menos uma parte de cada um dos lados do anel vis e e vel (note que um canto conta como vis para dois lados). Tarefa Sua tarefa escrever um vel e programa que, dada a congurao de uma pilha de anis, determine qual a seqncia ca e ue de empilhamento (de baixo para cima) que foi utilizada na construo da pilha. No ca exemplo acima a resposta EDABC. So h uma ordem poss de empilhamento. e a vel Entrada A entrada composta de vrios conjuntos de teste. A primeira linha e a de um conjunto de teste contm dois nmeros inteiros positivos X e Y que indicam, e u respectivamente, a altura e a largura da matriz que contm os anis. As X linhas e e seguintes contm Y caracteres cada, representando a vista superior da pilha de anis. O e e nal da entrada indicado quando X = Y = 0. e Exemplo de Entrada (horizontalizado...) 9 8 10 10 0 0 .CCC.... ..AAAAA... ECBCBB.. ..ACCCA... DCBCDB.. ..AC.CA... DCCC.B.. ..AC.CA... 541
CAP ITULO 54. EXERC ICIO PRATICO - 161 D.B.ABAA D.BBBB.A DDDDAD.A E...AAAA EEEEEE.. ..ACCCA... ..AAAAA... .......... ...BBB.... ...B.B.... ...BBB....
Sa Para cada conjunto de teste da entrada seu programa deve produzir uma lista da das letras dos anis, na ordem em que estes foram empilhados, do mais abaixo para o e mais acima. Exemplo de Sada EDABC e (ABC ou ACB ou BAC ou BCA ou CAB ou CBA)
54.2
Balaio
Maria mora no interior de Minas Gerais e especialista em fabricar balaios de junco. Os e balaios de Maria so muito bem feitos e tm grande aceitao na regio. Cada balaio a e ca a demora exatamente um dia de trabalho para ser confeccionado: Maria comea a tecer c um balaio no in do dia e no nal do dia entrega o produto para um cliente. Com a cio crescente demanda, Maria comeou a aceitar pedidos para o futuro: Narciso precisa de c um balaio para o dia 10, Coronel Zoio precisa de um para o dia 4, Esmeralda para o dia 6, e assim por diante. Todos os pedidos, com as datas-limite de entrega, esto anotados a computador que o lho de Maria comprou. Maria no sabe dizer no, e agora percebeu a a que aceitou mais pedidos do que vai conseguir produzir, se for considerar as datas-limite impostas pelos seus clientes. Algum poderia ajudar Maria? e Tarefa Sua tarefa escrever um programa que determine qual a melhor ordem e de entrega dos balaios de Maria, de forma a minimizar a chateao total causada por ca eventuais atrasos na entrega. A medida da chateao utiliza um sistema de medio ca ca desenvolvido por Maria, por experincia anterior: ela sabe que se atrasar o balaio de e Narciso, isso vai causar uma chateao de n 13; Esmeralda muito boazinha e, se ca vel e Maria atrasar a sua entrega, a chateao ser n 0. No entanto, se atrasar o balaio do ca a vel Coronel Zoio, ela ter uma chateao de n 125. A chateao total dada pela soma a ca vel ca e das chateaes causadas por todos os atrasos. Considere que Maria trabalha todos os co dias, sem descanso, e os dias so numerados sequencialmente a partir de 1. a Entrada A entrada composta de vrios conjuntos de teste. A primeira linha de e a um conjunto de teste contm um nmero inteiro positivo N, que indica quantidade de e u pedidos pendentes. A segunda linha contm o vetor de inteiros positivos L, em que L[i] e que indica a data-limite para entrega do pedido i (1 i N). A terceira linha contm e o vetor de inteiros positivos C, em que C[i] indica o n de chateao ocasionado se o vel ca prazo L[i] no for obedecido (1 i N). O nal da entrada indicado por N = 0. a e Exemplo de Entrada (horizontalizado) 3 7 10 6 4 4 2 4 3 1 4 6 21 0 125 10 60 50 40 30 20 10 0
Sa Para cada conjunto de teste da entrada seu programa deve produzir a chateao da ca total m nima daquela entrada. Pode ocorrer que mais de uma seqncia de produo ue ca gere a mesma chateao m ca nima, mas como a resposta deve ser o valor do m nimo, este fato no tem importncia. a a Exemplo de Sada 0 e 30 (a seq. neste caso pode ser 5 2 4 3 6 7 1)
88-08, Pedro Kantek
542
54.3
Meteoros
Em noites sem nuvens pode-se muitas vezes observar pontos brilhantes no cu que se e deslocam com grande velocidade, e em poucos segundos desaparecem de vista: so a as chamadas estrelas cadentes, ou meteoros. Meteoros so na verdade part a culas de poeira de pequenas dimenses que, ao penetrar na atmosfera terrestre, queimam-se o rapidamente (normalmente a uma altura entre 60 e 120 quilmetros). Se os meteoros o so sucientemente grandes, podem no queimar-se completamente na atmosfera e dessa a a forma atingem a superf terrestre: nesse caso so chamados de meteoritos. cie a Z Fel um fazendeiro que adora astronomia e descobriu um portal na Internet e cio e que fornece uma lista das posies onde ca co ram meteoritos. Com base nessa lista, e conhecendo a localizao de sua fazenda, Z Fel ca e cio deseja saber quantos meteoritos ca ram dentro de sua propriedade. Ele precisa de sua ajuda para escrever um programa de computador que faa essa vericao automaticamente. c ca Tarefa So dados: a
uma lista de pontos no plano cartesiano, onde cada ponto corresponde ` posio a ca onde caiu um meteorito; as coordenadas de um retngulo que delimita uma fazenda. a
As linhas que delimitam a fazenda so paralelas aos eixos cartesianos. Sua tarefa a e escrever um programa que determine quantos meteoritos ca ram dentro da fazenda (incluindo meteoritos que ca ram exatamente sobre as linhas que delimitam a fazenda). Entrada Seu programa deve ler vrios conjuntos de testes. A primeira linha de a um conjunto de testes quatro nmeros inteiros X1, Y1, X2 e Y2, onde (X1, Y1) a u e coordenada do canto superior esquerdo e (X2, Y2) a coordenada do canto inferior e direito do retngulo que delimita a fazenda. A segunda linha contm um inteiro, N, que a e indica o nmero de meteoritos. Seguem-se N linhas, cada uma contendo dois nmeros u u inteiros X e Y, correspondendo `s coordenadas de cada meteorito. O nal da entrada a e indicado por X1 = Y1 = X2 =Y2 = 0. Exemplo de Entrada (horizontalizado) 2 4 5 1 2 4 3 2 0 0 0 0 2 3 1 2 1 1 3 3 2 2 3 3 Sa Para cada conjunto de teste da entrada seu programa deve produzir o nmero da u de meteoritos que ca ram dentro da fazenda. Exemplo de Sada 1 e 2 (esta sada corresponde ao exemplo de entrada acima)
54.4
Exerc cio 1
543
CAP ITULO 54. EXERC ICIO PRATICO - 161 C.XX.C.V.. C.XX.C.V.. CCXXCCVV.. BBXXBBBB.. ..XX...... ..XX...... 10 10 DDDDD..... D.ZZZZZZZ. D.ZNNNNNN. D.ZND..BN. D.ZND..BN. D.ZNNNNNN. D.ZZZZZZZ. D...D..... DDDDD..... .......... 0 0 Balaio 7 3 5 3 2 1 3 1 80 34 17 43 90 54 73 7 1 3 2 4 2 3 1 70 17 74 94 92 84 29 0 Meteoros 9 6 18 10 16 8 19 6 1 6 10 25 12 23 26 22 0 0 0 7 22 10 7 27 11 0 aneis2 balaio1 balaio2 met1 met2 14 23 22 28 17 11 23 26 22 6
30
Responda aneis1
544
54.5
Exerc cio 2
Aneis quadrados 10 10 .YYYYYYY.. .YL....Y.. .YRRRRMYMM CYMMMRMYMM CYRRRRCY.. CYYYYYYY.. C.L...CL.. C.L...CL.. CCLLLLLL.. .......... 10 10 IIIIII.... IZZWWIWW.. IVVW.I.W.. IZVDDDDDDD IIIDII.W.D VZVD.Z.W.D VZVDWWWW.D VVVD.Z...D .ZZDDDDDDD .......... 0 0 Balaio 7 3 3 2 1 5 5 3 18 21 69 82 39 72 28 7 4 2 1 4 4 5 5 68 72 72 95 78 59 70 0 Meteoros 6 6 17 23 18 7 30 8 2 6 27 13 7 27 6 28 2 13 545
88-08, Pedro Kantek
25 28 10 22 26 30 27 21
26
29
CAP ITULO 54. EXERC ICIO PRATICO - 161 5 6 17 15 0 0 0 0 Responda aneis1 aneis2 balaio1 balaio2 met1 met2
54.6
Exerc cio 3
Aneis quadrados 10 10 ...LLLLLL. .III....L. .I.I....L. YIOOOOOOL. YIOOOOOOL. .I.MM...L. .IIMM...L. ...L....L. ...L....L. ...LLLLLL. 10 10 ..TTT..... ..TNT..... .DTFTFFF.. .DTFTH.F.. .DTFTH.F.. .DTFTH.F.. .DTTTFFF.. .D.....D.. .D.....D.. .DDDDDDD.. 0 0 Balaio 7 1 1 5 2 5 4 3 49 87 28 62 84 39 14 7 4 2 3 4 5 4 4 11 12 58 63 34 27 79 0 Meteoros 5 6 25 15 12 1 546
verso de 10 de fevereiro de 2008 a
28
21
CAP ITULO 54. EXERC ICIO PRATICO - 161 15 20 15 30 1 6 3 13 23 30 5 7 0 0 0 8 26 20 12 24 30 0 aneis2 balaio1 balaio2 met1 met2 6 13 24 13 25
25
Responda aneis1
54.7
Exerc cio 4
Aneis quadrados 10 10 VVVV...... V..V...... V.SVSSSSS. V.KKKUUUS. V.KVK...S. V.KVK...S. V.KVK...S. V.KKK...S. V.SVUUUUS. VVVVSSSSS. 10 10 OOOOOOOOO. OMMMMMIIO. OMISSM.IO. OMI..M.IO. OMI..M.IO. OMOOOMOOO. .MI..M.I.. .MMMMM.I.. ..I....I.. ..IIIIII.. 0 0 Balaio 7 3 5 4 5 3 3 4 22 63 58 96 96 78 28
verso de 10 de fevereiro de 2008 a
547
CAP ITULO 54. EXERC ICIO PRATICO - 161 7 5 1 5 4 2 3 3 78 74 50 36 72 17 84 0 Meteoros 7 6 11 11 26 4 8 2 1 6 22 21 15 29 4 18 0 0 0 3 25 12 16 19 14 0 aneis2 balaio1 balaio2 met1 met2 12 8 21 27 16 16 28 22 27 10
21
Responda aneis1
54.8
1 2 3 4
Respostas
NZDFB 133 116 DIVWZ 39 127 TFDHN 63 23 MOSIF 50 53 5 3 5 4 5 4 4 4
548
Cap tulo 55
Todos conhecem o jogo de domins, em que peas com dois valores devem ser colocadas o c na mesa em seqncia, de tal forma que os valores de peas imediatamente vizinhas ue c sejam iguais. O objetivo desta tarefa determinar se poss colocar todas as peas e e vel c de um conjunto dado em uma formao vlida. ca a
Tarefa E dado um conjuto de peas de domin. Cada pea tem dois valores X e Y, c o c com X e Y variando de 0 a 6 (X pode ser igual a Y). Sua tarefa escrever um programa e que determine se poss organizar todas as peas recebidas em seqncia, obedecendo e vel c ue as regras do jogo de domin. o Entrada A entrada composta de vrios conjuntos de teste. A primeira linha de e a um conjunto de testes contm um nmero inteiro N que indica a quantidade de peas e u c do conjunto. As N linhas seguintes contm, cada uma, a descrio de uma pea. Uma e ca c pea descrita por dois inteiros X e Y (0 X 6 e 0 Y 6) que representam os c e valores de cada lado da pea. O nal da entrada indicado por N = 0. c e Exemplo 3 ; 0 1 2 ; 1 1 6 ; 3 0 0 de Entrada (horizontalizado) ; 2 1 ; 2 1 ; 0 0 ; 0 0 ; 1 6 ; 4 1 ; 0 6 ; 2 3
Sa Para cada conjunto de teste da entrada seu programa deve produzir a exda presso simse for poss a vel organizar todas as peas em uma formao vlida ou a c ca a expresso naocaso contrrio. a a 549
CAP ITULO 55. EXERC ICIOS PRATICOS - 162 Exemplo de Sada sim, nao e sim (esta sada corresponde ao exemplo de entrada acima)
55.2
Sorvete
Joozinho um menino que costuma ir ` praia todos os nais de semana com seus pais. a e a Eles freqentam sempre a mesma praia, mas cada semana o pai de Joozinho estaciona u a o carro em um local diferente ao longo da praia, e instala sua fam em um ponto lia na praia em frente ao carro. Joozinho muito comilo, e adora de tomar sorvete na a e a praia. Contudo, alguns dias acontece de nenhum sorveteiro passar pelo local onde eles esto. Intrigado com isto, e no querendo mais car sem tomar seu sorvete semanal, a a Joozinho foi at a Associao dos Sorveteiros da Praia (ASP), onde cou sabendo que a e ca cada sorveteiro passa o dia percorrendo uma mesma regio da praia, indo e voltando. a Alm disto, cada sorveteiro percorre todos os dias a mesma regio. Joozinho conseguiu e a a ainda a informao dos pontos de in ca cio e m da regio percorrida por cada um dos a sorveteiros. Com base nestes dados, Joozinho quer descobrir os locais da praia onde o pai dele a deve parar o carro, de forma que pelo menos um sorveteiro passe naquele local. S que o o volume de dados muito grande, e Joozinho est pensando se seria poss utilizar e a a vel o computador para ajud-lo nesta tarefa. No entanto Joozinho no sabe programar, e a a a est pedindo a sua ajuda. a Tarefa Voc deve escrever um programa que leia os dados obtidos pelo Joozinho e e a imprima uma lista de intervalos da praia por onde passa pelo menos um sorveteiro. Entrada Seu programa deve ler vrios conjuntos de teste. A primeira linha de um a conjunto de teste contm dois inteiros no negativos, P e S, que indicam respectivamente e a o comprimento em metros da praia e o nmero de sorveteiros. Seguem-se S linhas, cada u uma contendo dois nmeros inteiros U e V que descrevem o intervalo de trabalho de u cada um dos sorveteiros, em metros contados a partir do in da praia (U < V, 0 U cio P e 0 V P). O nal da entrada indicado por S=0 e P=0. e Exemplo de Entrada (horizontalizada) 200 2 ; 0 21 ; 110 180 1000 3 ; 10 400 ; 80 200 ; 400 1000 10 2 ; 1 4 ; 5 6 0 0 Sa Para cada conjunto de teste da entrada seu programa deve indicar O MAIOR da intervalo cont guo de praia que servido por um sorveiteiro. E obvio que se s houver e o um intervalor, este que ser a resposta. e a Exemplo de Sada 110 180 ; 10 1000 ; 1 4 (esta sada corresponde ao exemplo acima)
55.3
Pirmide a
Joana quer ser artista plstica, mas enquanto estuda procura trabalhos temporrios a a durante suas frias escolares. Joana conseguiu emprego como auxiliar de almoxarifado e em uma grande transportadora. A transportadora recebeu um enorme carregamento de caixas de mesma altura mas com largura e profundidades diferentes. As caixas podem ser empilhadas indenidamente mas no podem ser deitadas em outra posio (todas a ca tm que ser armazenadas obedecendo ` indicao Este lado para cima). Joana a e a ca e responsvel por armazenar o carregamento de caixas, e, seguindo seu senso art a stico,
88-08, Pedro Kantek
550
CAP ITULO 55. EXERC ICIOS PRATICOS - 162 quer construir com as caixas a pilha mais alta poss na forma de uma pirmide, ou vel a seja, uma pilha constru de tal forma que uma caixa A empilhada sobre uma outra da e caixa B somente se as dimenses de A (largura e a profundidade) no so maiores do o a a que as dimenses de B (as caixas podem ser viradas de forma a trocar a profundidade o com a largura). Voc pode ajud-la? e a dado um conjuto de caixas de mesma altura mas com largura e profunTarefa E didades diferentes. Sua tarefa escrever um programa que determine qual a pilha de e caixas mais alta que Joana pode construir com as restries acima. Entrada A entrada co composta de vrios conjuntos de teste. A primeira linha de um conjunto de testes e a contm um nmero inteiro N que indica a quantidade de caixas do conjunto. As N e u linhas seguintes contm, cada uma, a descrio de uma caixa. Uma caixa descrita por e ca e dois inteiros X e Y (1 X 15000 e 1 Y 15000) que representam os valores de cada lado da pea. O nal da entrada indicado por N = 0. c e Exemplo de Entrada (horizontalizada) 3 ; 100 100 ; 1000 2000 ; 2000 500 6 ; 3 4 ; 5 7 ; 7 5 ; 1 5 ; 4 4 ; 10 2 0 Sa Para cada conjunto de teste da entrada seu programa deve produzir o nmero da u mximo de caixas que podem ser empilhadas na forma de uma pirmide, conforme a a determinado pelo seu programa. Exemplo de Sada 3 ; 4 (esta sada corresponde ao exemplo de entrada acima)
55.4
Domin o
Exerc cio 1
6 ; 1 3;3 1;1 3;4 5;5 2;2 6 ; 0 7 ; 1 2;0 4;0 2;6 1;3 5;6 1;3 4 ; 0 8 ; 4 0;0 6;1 4;1 4;3 0;6 6;6 5;3 1 ; 0 Sorvete 960 790 780 0 0 4;470 640;130 200;210 380;170 220 5; 50 70;340 430;390 500;160 240;110 120 6;380 460;230 270;250 400;240 420;200 250;270 310
Pirmide de caixas a 5 ; 19 14;13 20; 8 12; 8 4;14 6 ; 3 4; 3 7; 5 10; 7 10;18 7 ; 3 19; 2 7;17 2;13 19;11 Responda d1 d2 d3 s1 s2 s3 3 ; 0 9;15 12 ; 0 3; 8 2; 1 2 ; 0 p1 p2 p3
551
55.5
Domin o
Exerc cio 2
6 ; 4 1;6 6;4 5;6 1;0 2;0 3 ; 0 7 ; 1 0;3 1;3 1;4 6;0 5;5 3;0 6 ; 0 8 ; 6 0;1 4;4 0;2 6;1 2;4 1;3 1;2 0 ; 0 Sorvete 1000 770 580 0 0 4; 480 540; 100 120; 380 550; 250 410 5;360 390;150 190; 80 150;200 210;290 310 6;180 200;150 180;200 390; 40 170;200 220;100 260
Pirmide de caixas a 5 ; 13 17; 2 6 ; 20 8;16 7 ; 11 4; 2 Responda d1 d2 d3 5;14 6; 9 8; 1 12 ; 0 6; 3 13;11 13; 6 7;15 1 ; 0 5;12 20;18 11; 5 19;14 5; 1 17 ; 0
s1
s2
s3
p1
p2
p3
55.6
Domin o
Exerc cio 3
6 ; 3 5;6 6;4 6;5 5;4 3;6 4 ; 0 7 ; 1 5;0 2;4 4;6 4;2 1;1 0;6 4 ; 0 8 ; 3 3;0 2;1 1;4 5;1 5;5 0;1 1;3 4 ; 0 Sorvete 930 970 750 0 0 4;220 410;220 410;170 280;460 650 5;350 430;220 270;280 300;280 370;280 350 6;280 450;220 390;230 320; 70 170;360 460;150 310
Pirmide de caixas a 5 ; 18 6 ; 1 7 ; 1 1; 4 9; 5 8; 9 8;11 12 ; 0 2; 5 15;13 19; 8 14;11 20; 7 2 ; 0 6;19 4;19 7; 2 8;16 8;18 17; 9 6 ; 0
Responda d1 d2 d3
s1
s2
s3
p1
p2
p3
552
55.7
Domin o
Exerc cio 4
6 ; 2 4;5 4;4 6;6 3;2 4;4 1 ; 0 7 ; 3 4;1 1;2 3;0 5;4 3;4 3;4 3 ; 0 8 ; 4 5;0 2;4 3;6 3;6 2;1 4;0 2;2 1 ; 0 Sorvete 870 770 920 0 0 4;440 450;100 270;150 250;410 460 5;190 250; 20 220;350 460;370 560;250 330 6;170 220; 40 190;320 430;250 270;190 200; 90 180
Pirmide de caixas a 5 ; 10 6 ; 1 7 ; 9 9;11 13; 9 15;11 14; 1 12 ; 0 4;18 4; 5 8;18 3; 1 16; 5 8 ; 0 8; 7 14; 1 12; 6 16;13 3;10 5; 6 10 ; 0 s1 s2 s3 p1 p2 p3
Responda d1 d2 d3
55.8
1 2 3 4 0 0 1 0
Respostas
1 0 1 0 0 0 0 1 130 250 170 100 380 550 410 270 340 80 280 20 500 190 430 330 200 40 70 40 460 390 460 220 3 3 3 3 4 2 4 3 5 5 5 1
553