• Nenhum resultado encontrado

Algoritmos e Estruturas de Dados I

N/A
N/A
Protected

Academic year: 2022

Share "Algoritmos e Estruturas de Dados I"

Copied!
10
0
0

Texto

(1)

Marcos Castilho Fabiano Silva Daniel Weingaertner Vers˜ao 0.7.1

Fevereiro de 2015

(2)

2

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

2.5/br/

Algoritmos e Estruturas de Dados I - Notas de Aula is licen- sed under a Creative Commons Atribui¸c˜ao-Uso N˜ao-Comercial- Vedada a Cria¸c˜ao de Obras Derivadas 2.5 Brasil License.http:

//creativecommons.org/licenses/by-nc-nd/2.5/br/

AVISO: Este texto ainda est´a em constru¸c˜ao.

(3)

3.1 Algoritmo para fazer bolo de chocolate. . . 23

3.2 Algoritmo para fazer claras em neve. . . 24

4.1 Uma fotografia da mem´oria. . . 29

4.2 O repert´orio de instru¸c˜oes do computador da BCC. . . 30

4.3 Separando as instru¸c˜oes. . . 33

4.4 Abstra¸c˜ao dos endere¸cos. . . 34

4.5 Programa reescrito com Mnemˆonicos. . . 35

4.6 Nota¸c˜ao para as instru¸c˜oes. . . 36

4.7 Programa escrito sob nova nota¸c˜ao. . . 36

4.8 Dando nomes para os endere¸cos. . . 37

4.9 Programa reescrito com nomes para vari´aveis. . . 38

4.10 Duas outras vers˜oes do programa. . . 38

4.11 Vers˜ao do programa escrito em Pascal. . . 39

5.1 Programa que implementa o m´etodo de Bhaskara. . . 44

5.2 Primeira solu¸c˜ao. . . 46

5.3 Mesma solu¸c˜ao, agora com interface amig´avel. . . 46

5.4 Primeira solu¸c˜ao para contar de 1 a 5. . . 47

5.5 Primeira solu¸c˜ao modificada para n´umeros de 1 a 20. . . 47

5.6 Segunda solu¸c˜ao. . . 48

5.7 Sexta solu¸c˜ao. . . 49

5.8 Tabela com os quadrados dos n´umeros de 1 a 30. . . 50

5.9 Duas formas para somar pares de n´umeros. . . 51

5.10 Imprime se for positivo. . . 52

5.11 Imprime se for positivo, segunda vers˜ao. . . 52

5.12 Exemplo do uso do desvio incondicional. . . 54

6.1 Primeira solu¸c˜ao. . . 63

6.2 Imprimindo a soma de 50 n´umeros lidos no teclado. . . 64

6.3 T´ecnica do acumulador. . . 65

6.4 Solu¸c˜ao para o primeiro problema com acumuladores. . . 65

6.5 Imprimir o menor dentre 3 n´umeros lidos. . . 66

6.6 Lendo e imprimindo 30 n´umeros. . . 67

6.7 Lendo e imprimindo os positivos apenas. . . 67

6.8 Lendo e imprimindo os positivos e os quadrados dos ´ımpares. . . 68 3

(4)

4 LISTA DE FIGURAS

6.9 Contando os positivos e os negativos e nulos. . . 69

6.10 Soma pares e ´ımpares. . . 70

6.11 Imprime os m´ultiplos de 7 que n˜ao s˜ao m´ultiplos de 2. . . 70

6.12 Imprime os m´ultiplos de 3 lidos entre 51 e 201. . . 71

6.13 Convertendo para bin´ario, vers˜ao 1. . . 72

6.14 Convertendo para bin´ario, vers˜ao 2. . . 72

6.15 Imprimir o menor dentre 3 n´umeros lidos. . . 73

6.16 Algoritmo de Euclides para c´alculo do MDC. . . 74

6.17 Tabuadas do 1 ao 10. . . 75

6.18 Obtendo o fatorial de n. . . 76

6.19 Obtendo v´arios fatoriais. . . 77

6.20 Otimizando o c´alculo dos fatoriais. . . 77

7.1 Gerando n´umeros da sequˆencia de Fibonacci. . . 84

7.2 Imprimindo o primeiro n´umero de Fibonacci maior do que 1000. . . 84

7.3 Verificando a convergˆencia do n´umero ´aureo. . . 85

7.4 Maior segmento crescente. . . 86

7.5 C´alculo do n´umero neperiano. . . 87

7.6 C´alculo do n´umero neperiano. . . 88

7.7 S´erie com troca de sinais. . . 89

7.8 S´erie com troca de sinais e fatorais no denominador corrigidos. . . 90

7.9 C´alculo do seno de x. . . 90

7.10 Verifica sen ´e primo contando os divisores. . . 91

7.11 Testa sen ´e primo parando no primeiro divisor. . . 92

7.12 Testa sen ´e primo, tratando os pares em separado. . . 93

7.13 Testa sen ´e primo parando na raiz de n. . . 93

8.1 Pseudo-c´odigo para o problema dos pares entre si. . . 100

8.2 Gerando todos os primos entre si. . . 100

8.3 Pseudo-c´odigo para o problema dos amigos quadr´aticos. . . 101

8.4 Pseudo-c´odigo para decidir sobre amigos quadr´aticos. . . 102

8.5 Separando os d´ıgitos de um dado n´umeron. . . 102

8.6 Somando os d´ıgitos de um dado n´umero n. . . 102

8.7 Verificando se n´umeros n e m s˜ao amigos quadr´aticos. . . 103

8.8 Tornando amigos quadr´aticos mais eficiente. . . 104

8.9 Imprimindo todos os pal´ındromos de 1 a 1000. . . 105

8.10 Gerando todos os pal´ındromos de 1 a 1000. . . 106

8.11 Primeira solu¸c˜ao para inverter um n´umero de 3 d´ıgitos. . . 107

8.12 Mesmo algoritmo, agora para 4 d´ıgitos. . . 108

8.13 Solu¸c˜ao com uso de acumuladores. . . 108

8.14 Pseudo-c´odigo para o calculo do MDC pela defini¸c˜ao. . . 109

8.15 Calcula MDC entre a e b pela defini¸c˜ao (caso primo=2). . . 110

8.16 Calcula MDC entre a e b pela defini¸c˜ao (caso primo ´e ´ımpar). . . 111

9.1 Programa que imprime os n´umeros da entrada que s˜ao pares. . . 117

9.2 Programa que imprime os n´umeros da entrada que s˜ao pares. . . 119

(5)

9.3 Programa que imprime os n´umeros da entrada que s˜ao pares. . . 121

9.4 Vers˜ao com parˆametros por referˆencia. . . 122

9.5 Vers˜ao com parˆametros por referˆencia. . . 123

9.6 Vers˜ao com uma vari´avel local. . . 123

9.7 Calculando d´ıgito verificador. . . 125

9.8 Calcula MDC entre a eb pela defini¸c˜ao usando fun¸c˜oes. . . 128

9.9 Calcula quantas vezes um n´umero divide outro. . . 129

9.10 Calcula a potˆencia de um n´umero elevado a outro. . . 129

9.11 Calculando ra´ızes de equa¸c˜ao do segundo grau. . . 130

9.12 Calculando ra´ızes de equa¸c˜ao do segundo grau. . . 131

9.13 Calculando ra´ızes de equa¸c˜ao do segundo grau. . . 131

10.1 Lendo elementos e colocando no vetor. . . 137

10.2 Lendo elementos e colocando no vetor, usando for. . . 137

10.3 Lendo elementos e colocando no vetor, usando repeat. . . 137

10.4 Lendo e imprimindo. . . 138

10.5 Lendo e imprimindo. . . 138

10.6 Lendo e imprimindo. . . 139

10.7 Lendo e imprimindo, agora com procedimentos. . . 140

10.8 Procedimento que imprime os elementos do vetor ao contr´ario. . . 140

10.9 Lendo e imprimindo ao contr´ario, vers˜ao final. . . 141

10.10Imprimindo os elementos do vetor que s˜ao pares. . . 142

10.11Encontrando o menor de N n´umeros lidos, sem vetor. . . 143

10.12Encontrando o menor de N n´umeros lidos, com vetor. . . 144

10.13Somando dois vetores. . . 145

10.14Produto escalar de dois vetores. . . 146

10.15Busca em vetores, primeira vers˜ao. . . 147

10.16Busca em vetores, segunda vers˜ao. . . 148

10.17Busca em vetores com sentinela. . . 148

10.18Busca em vetores ordenados. . . 149

10.19Tabela resumindo n´umero de compara¸c˜oes para algoritmos de busca. . 150

10.20Busca bin´aria. . . 151

10.21Removendo de um vetor ordenado. . . 151

10.22Inserindo em um vetor ordenado. . . 153

10.23Fundindo dois vetores ordenados. . . 155

10.24M´etodo de ordena¸c˜ao por sele¸c˜ao. . . 157

10.25M´etodo de ordena¸c˜ao por inser¸c˜ao. . . 159

10.26Verifica se um vetor define uma permuta¸c˜ao. . . 161

10.27Verifica linearmente se um vetor define uma permuta¸c˜ao. . . 162

10.28Gerando uma permuta¸c˜ao, vers˜ao 1. . . 163

10.29Gerando uma permuta¸c˜ao, vers˜ao 2. . . 163

10.30Gerando uma permuta¸c˜ao, vers˜ao 3. . . 164

10.31Gerando uma permuta¸c˜ao, vers˜ao 4. . . 165

10.32Calcula a ordem de uma permuta¸c˜ao. . . 167

10.33Calcula o valor de P(x) para um dado x∈R. . . 168

(6)

6 LISTA DE FIGURAS

10.34Calcula o polinˆomio derivada de P(x). . . 169

10.35Calcula o valor de P′(x) para um dado x∈R. . . 169

10.36Calcula a soma de P(x) com Q(x). . . 170

10.37Calcula o produto de P(x) com Q(x). . . 170

10.38Lendo uma matrizes. . . 188

10.39Procedimento para ler uma matriz. . . 189

10.40Procedimento para imprimir uma matriz. . . 189

10.41Procedimento para imprimir a transposta de uma matriz. . . 190

10.42Procedimento para imprimir uma unica linha da matriz. . . 190

10.43Procedimento para imprimir uma unica coluna da matriz. . . 191

10.44Procedimento para imprimir os elementos pares matriz. . . 191

10.45Procedimento para imprimir os elementos cujos indices s˜ao pares. . . . 192

10.46Encontrando o menor elemento de uma matriz. . . 192

10.47Somando duas matrizes. . . 193

10.48Produto escalar de uma linha da matriz por uma coluna da outra. . . . 194

10.49Multiplica¸c˜ao de duas matrizes. . . 194

10.50Busca em uma matriz. . . 195

10.51Busca em uma matriz, retornando as coordenadas (l,c). . . 195

10.52Verifica se uma matriz tem elementos repetidos. . . 196

10.53Insere um vetor como ´ultima coluna de uma matriz. . . 197

10.54Insere um vetor como K-´esima coluna de uma matriz. . . 198

10.55Gerando matriz pela m´edia dos vizinhos. . . 199

10.56Gerando submatriz. . . 200

10.57Exemplo de imagem no formato PGM. . . 201

10.58Programa que le imagem PGM e gera imagem com zoom. . . 201

10.59Imprimindo registros. . . 218

10.60Lendo os clientes do banco. . . 219

10.61Imprime o telefone do cliente que tem um certo CPF. . . 220

10.62Ordena pelo CPF. . . 222

10.63Lendo vetores implementados em registros. . . 223

11.1 Pseudoc´odigo para campo minado. . . 234

11.2 Primeiro refinamento para campo minado. . . 235

11.3 Segundo refinamento para campo minado. . . 236

11.4 Criando campo minado. . . 237

11.5 Criando campo minado. . . 238

11.6 Distribuindo as bombas. . . 238

11.7 Contando vizinhos com bombas. . . 239

11.8 Criando campo minado. . . 239

11.9 Criando campo minado. . . 240

11.10Criando campo minado. . . 241

12.1 Estrutura de dados para tipo conjunto. . . 250

12.2 Procedimento para criar um conjunto vazio. . . 251

12.3 Fun¸c˜ao que testa se conjunto ´e vazio. . . 251

(7)

12.4 Fun¸c˜ao que retorna a cardinalidade do conjunto. . . 252

12.5 Fun¸c˜ao que define pertinˆencia no conjunto. . . 252

12.6 Procedimento para inserir elemento no conjunto. . . 253

12.7 Procedimento para remover elemento do conjunto. . . 253

12.8 Procedimento para unir dois conjuntos. . . 254

12.9 Procedimento para fazer a intersec¸c˜ao de dois conjuntos. . . 255

12.10Procedimento para verificar se um conjunto est´a contido em outro. . . . 255

12.11Estrutura de dados para tipo lista. . . 256

12.12Procedimento para criar uma lista vazia. . . 256

12.13Fun¸c˜ao que testa se lista ´e vazia. . . 257

12.14Fun¸c˜ao que retorna o n´umero de elementos da lista. . . 257

12.15Fun¸c˜ao que define pertinˆencia na lista. . . 258

12.16Procedimento para inserir elemento na lista. . . 258

12.17Procedimento para remover elemento da lista. . . 259

12.18Procedimento para unir duas listas. . . 259

(8)

8 LISTA DE FIGURAS

(9)

1 Introdu¸c˜ao 13

2 Sobre problemas e solu¸c˜oes 15

2.1 Contando o n´umero de presentes em um evento . . . 15

2.2 Trocando os quatro pneus . . . 18

2.3 Conclus˜ao . . . 19

3 Sobre algoritmos e programas 21 3.1 O que ´e um algoritmo? . . . 21

3.2 O que ´e um programa? . . . 24

3.3 Exerc´ıcios . . . 26

4 O modelo do computador 27 4.1 Hist´orico . . . 27

4.2 Princ´ıpios do modelo . . . 28

4.2.1 Endere¸cos versus conte´udos . . . 28

4.2.2 O repert´orio de instru¸c˜oes . . . 29

4.2.3 O ciclo de execu¸c˜ao de instru¸c˜oes . . . 31

4.2.4 Exemplo de execu¸c˜ao de um programa . . . 31

4.3 Humanos versus computadores . . . 32

4.3.1 Abstra¸c˜ao dos endere¸cos . . . 33

4.3.2 Abstra¸c˜ao dos c´odigos das instru¸c˜oes . . . 34

4.3.3 Abstra¸c˜ao do repert´orio de instru¸c˜oes . . . 35

4.3.4 Abstra¸c˜ao dos endere¸cos de mem´oria (vari´aveis) . . . 36

4.4 Abstra¸c˜ao das instru¸c˜oes (linguagem) . . . 37

4.5 Conclus˜ao . . . 39

4.6 Exerc´ıcios . . . 41

5 Conceitos elementares 43 5.1 Algoritmos e linguagens de programa¸c˜ao . . . 43

5.2 C´alculo de ra´ızes de uma equa¸c˜ao do segundo grau . . . 44

5.3 Imprimir a soma de dois n´umeros dados . . . 45

5.4 Imprimindo sequˆencias de n´umeros na tela . . . 46

5.5 Imprimir os quadrados de uma faixa de n´umeros . . . 50

5.6 Imprimindo a soma de v´arios pares de n´umeros . . . 50

9

(10)

10 SUM ´ARIO

5.7 Testar se um n´umero lido ´e positivo . . . 51

5.8 Resumo . . . 53

5.9 Apˆendice . . . 53

5.10 Exerc´ıcios . . . 55

6 T´ecnicas elementares 63 6.1 Atribui¸c˜oes dentro de repeti¸c˜oes . . . 63

6.1.1 Somando n´umeros . . . 63

6.2 Desvios condicionais aninhados . . . 65

6.2.1 O menor de trˆes . . . 66

6.3 Desvios condicionais dentro de repeti¸c˜oes . . . 66

6.3.1 Imprimir apenas n´umeros positivos . . . 66

6.3.2 Somando pares e ´ımpares . . . 69

6.3.3 Convertendo para bin´ario . . . 70

6.3.4 Menor de 3, segunda vers˜ao . . . 72

6.4 Repeti¸c˜oes dentro de condi¸c˜oes . . . 73

6.4.1 Calculo do MDC . . . 73

6.5 Repeti¸c˜oes aninhadas . . . 74

6.5.1 Tabuada . . . 74

6.5.2 Fatorial . . . 75

6.6 Exerc´ıcios . . . 78

7 Aplica¸c˜oes das t´ecnicas elementares 83 7.1 N´umeros de Fibonacci . . . 83

7.2 Maior segmento crescente . . . 85

7.3 S´eries . . . 87

7.3.1 N´umero neperiano . . . 87

7.3.2 C´alculo do seno . . . 88

7.4 N´umeros primos . . . 91

7.5 Exerc´ıcios . . . 94

8 Refinamentos sucessivos 99 8.1 Primos entre si . . . 99

8.2 Amigos quadr´aticos . . . 101

8.3 Pal´ındromos . . . 104

8.4 Inverter um n´umero de trˆes d´ıgitos . . . 107

8.5 C´alculo do MDC pela defini¸c˜ao . . . 109

8.6 Exerc´ıcios . . . 112

9 Fun¸c˜oes e procedimentos 115 9.1 Motiva¸c˜ao . . . 115

9.1.1 Modularidade . . . 116

9.1.2 Reaproveitamento de c´odigo . . . 116

9.1.3 Legibilidade . . . 116

9.1.4 Coment´ario adicional . . . 117

9.2 No¸c˜oes fundamentais . . . 117

Referências

Documentos relacionados

Micro System Mini System Reprodutor de Imagens Caixas Acústicas Home Theater Fone de ouvido TVs e Monitores Periféricos de TVs ÍNDICE Net / Notebook Tablet Smartphone Soundbar

Creative Commons Atribui¸ c˜ ao-Uso N˜ ao-Comercial-Vedada a Cria¸ c˜ ao de Obras Derivadas 2.5 Brasil

a) os valores de deformação por fluência obtidos pelo método SIM foram comparados aos valores obtidos nos ensaios convencionais, realizados segundo a norma ISO 1343, e

7 A simulação assume não haver restrições sobre a oferta de mão de obra nas regiões metropolitanas. Se houver essa restrição, ou os salários aumentarão mais fortemente

Conforme adiante será narrado, para o perfeito funcionamento deste cartel de grandes empreiteiras, foi praticada a corrupção de diversos empregados públicos do

Para Rogers (1977) existem seis condições básicas para que ocorra o processo terapêutico, são elas: que duas pessoas estejam em contato psicológico; a primeira

Fi, o aparelho irá detectar os roteadores wireless ao redor, no caso do Tablet, Já no Celular ou Smartphone, aperte em cima do escrito Wi-Fi para abrir a Neste exemplo, mostra

A leitura é uma habilidade indispensável para o desenvolvimento do indivíduo, incidindo diretamente no processo ensino-aprendizagem. O gosto pela leitura deve