Fundamentos da Programação · O Crivo de Eratóstenes Algoritmo para calcular números primos...
Transcript of Fundamentos da Programação · O Crivo de Eratóstenes Algoritmo para calcular números primos...
![Page 1: Fundamentos da Programação · O Crivo de Eratóstenes Algoritmo para calcular números primos (criado pelo matemático grego Eratóstenes (c. 285--194 a.C.) que calcula todos os](https://reader036.fdocuments.net/reader036/viewer/2022071501/6120f67a7253f93a522766d9/html5/thumbnails/1.jpg)
Fundamentos da Programação
Capítulo 5: Listas
![Page 2: Fundamentos da Programação · O Crivo de Eratóstenes Algoritmo para calcular números primos (criado pelo matemático grego Eratóstenes (c. 285--194 a.C.) que calcula todos os](https://reader036.fdocuments.net/reader036/viewer/2022071501/6120f67a7253f93a522766d9/html5/thumbnails/2.jpg)
Exemplo (da aula anterior)
![Page 3: Fundamentos da Programação · O Crivo de Eratóstenes Algoritmo para calcular números primos (criado pelo matemático grego Eratóstenes (c. 285--194 a.C.) que calcula todos os](https://reader036.fdocuments.net/reader036/viewer/2022071501/6120f67a7253f93a522766d9/html5/thumbnails/3.jpg)
Exemplo (da aula anterior)def reconhece(frase):
if isinstance(frase, str):i=0while i <= len(frase)-1 and frase[i] in 'ABCD':
i=i+1if i == 0 or i == len(frase):
return Falsewhile i <= len(frase)-1 and frase[i] in '1234':
i=i+1return i == len(frase)
else:return False
![Page 4: Fundamentos da Programação · O Crivo de Eratóstenes Algoritmo para calcular números primos (criado pelo matemático grego Eratóstenes (c. 285--194 a.C.) que calcula todos os](https://reader036.fdocuments.net/reader036/viewer/2022071501/6120f67a7253f93a522766d9/html5/thumbnails/4.jpg)
Listas• Tipo estruturado
• Sequência mutável de elementos
![Page 5: Fundamentos da Programação · O Crivo de Eratóstenes Algoritmo para calcular números primos (criado pelo matemático grego Eratóstenes (c. 285--194 a.C.) que calcula todos os](https://reader036.fdocuments.net/reader036/viewer/2022071501/6120f67a7253f93a522766d9/html5/thumbnails/5.jpg)
Listas – representação externa
![Page 6: Fundamentos da Programação · O Crivo de Eratóstenes Algoritmo para calcular números primos (criado pelo matemático grego Eratóstenes (c. 285--194 a.C.) que calcula todos os](https://reader036.fdocuments.net/reader036/viewer/2022071501/6120f67a7253f93a522766d9/html5/thumbnails/6.jpg)
Listas – acesso aos elementos• Baseado na posição que o elemento se encontra dentro da lista (índice)
• Nome indexado
![Page 7: Fundamentos da Programação · O Crivo de Eratóstenes Algoritmo para calcular números primos (criado pelo matemático grego Eratóstenes (c. 285--194 a.C.) que calcula todos os](https://reader036.fdocuments.net/reader036/viewer/2022071501/6120f67a7253f93a522766d9/html5/thumbnails/7.jpg)
Operações sobre listas
![Page 8: Fundamentos da Programação · O Crivo de Eratóstenes Algoritmo para calcular números primos (criado pelo matemático grego Eratóstenes (c. 285--194 a.C.) que calcula todos os](https://reader036.fdocuments.net/reader036/viewer/2022071501/6120f67a7253f93a522766d9/html5/thumbnails/8.jpg)
Exemplos
![Page 9: Fundamentos da Programação · O Crivo de Eratóstenes Algoritmo para calcular números primos (criado pelo matemático grego Eratóstenes (c. 285--194 a.C.) que calcula todos os](https://reader036.fdocuments.net/reader036/viewer/2022071501/6120f67a7253f93a522766d9/html5/thumbnails/9.jpg)
Exemplos
![Page 10: Fundamentos da Programação · O Crivo de Eratóstenes Algoritmo para calcular números primos (criado pelo matemático grego Eratóstenes (c. 285--194 a.C.) que calcula todos os](https://reader036.fdocuments.net/reader036/viewer/2022071501/6120f67a7253f93a522766d9/html5/thumbnails/10.jpg)
Exemplos
![Page 11: Fundamentos da Programação · O Crivo de Eratóstenes Algoritmo para calcular números primos (criado pelo matemático grego Eratóstenes (c. 285--194 a.C.) que calcula todos os](https://reader036.fdocuments.net/reader036/viewer/2022071501/6120f67a7253f93a522766d9/html5/thumbnails/11.jpg)
Exemplos
![Page 12: Fundamentos da Programação · O Crivo de Eratóstenes Algoritmo para calcular números primos (criado pelo matemático grego Eratóstenes (c. 285--194 a.C.) que calcula todos os](https://reader036.fdocuments.net/reader036/viewer/2022071501/6120f67a7253f93a522766d9/html5/thumbnails/12.jpg)
Exemplos
![Page 13: Fundamentos da Programação · O Crivo de Eratóstenes Algoritmo para calcular números primos (criado pelo matemático grego Eratóstenes (c. 285--194 a.C.) que calcula todos os](https://reader036.fdocuments.net/reader036/viewer/2022071501/6120f67a7253f93a522766d9/html5/thumbnails/13.jpg)
Métodos de passagem de parâmetros• Processo de comunicação com funções
• Quando uma função é chamada estabelece-se uma correspondência entre os parâmetros concretos e os parâmetros formais, associação essa que é feita com base na posição que os parâmetros ocupam na lista de parâmetros
• O processo de ligação entre os parâmetros concretos e os parâmetros formais é denominado método de passagem de parâmetros
• Existem vários métodos de passagem de parâmetros. Cada linguagem de programação utiliza um, ou vários, destes métodos
• O Python utiliza a passagem por valor
![Page 14: Fundamentos da Programação · O Crivo de Eratóstenes Algoritmo para calcular números primos (criado pelo matemático grego Eratóstenes (c. 285--194 a.C.) que calcula todos os](https://reader036.fdocuments.net/reader036/viewer/2022071501/6120f67a7253f93a522766d9/html5/thumbnails/14.jpg)
Métodos de passagem de parâmetrosPassagem por valor• Quando um parâmetro é passado por valor, o valor do parâmetro concreto é
calculado (independentemente de ser uma constante, uma variável ou uma expressão mais complicada), e esse valor é associado com o parâmetro formal correspondente
• A função recebe o valor de cada um dos parâmetros e nenhuma informação adicional
• A única ligação entre os parâmetros concretos e os parâmetros formais é uma associação unidirecional de valores: do ponto de chamada para a função
![Page 15: Fundamentos da Programação · O Crivo de Eratóstenes Algoritmo para calcular números primos (criado pelo matemático grego Eratóstenes (c. 285--194 a.C.) que calcula todos os](https://reader036.fdocuments.net/reader036/viewer/2022071501/6120f67a7253f93a522766d9/html5/thumbnails/15.jpg)
Métodos de passagem de parâmetrosPassagem por valor
![Page 16: Fundamentos da Programação · O Crivo de Eratóstenes Algoritmo para calcular números primos (criado pelo matemático grego Eratóstenes (c. 285--194 a.C.) que calcula todos os](https://reader036.fdocuments.net/reader036/viewer/2022071501/6120f67a7253f93a522766d9/html5/thumbnails/16.jpg)
Métodos de passagem de parâmetrosPassagem por valor
![Page 17: Fundamentos da Programação · O Crivo de Eratóstenes Algoritmo para calcular números primos (criado pelo matemático grego Eratóstenes (c. 285--194 a.C.) que calcula todos os](https://reader036.fdocuments.net/reader036/viewer/2022071501/6120f67a7253f93a522766d9/html5/thumbnails/17.jpg)
Métodos de passagem de parâmetrosPassagem por valor
![Page 18: Fundamentos da Programação · O Crivo de Eratóstenes Algoritmo para calcular números primos (criado pelo matemático grego Eratóstenes (c. 285--194 a.C.) que calcula todos os](https://reader036.fdocuments.net/reader036/viewer/2022071501/6120f67a7253f93a522766d9/html5/thumbnails/18.jpg)
Métodos de passagem de parâmetrosPassagem por valor
![Page 19: Fundamentos da Programação · O Crivo de Eratóstenes Algoritmo para calcular números primos (criado pelo matemático grego Eratóstenes (c. 285--194 a.C.) que calcula todos os](https://reader036.fdocuments.net/reader036/viewer/2022071501/6120f67a7253f93a522766d9/html5/thumbnails/19.jpg)
Métodos de passagem de parâmetrosPassagem por referência• Quando um parâmetro é passado por referência, o que é associado ao
parâmetro formal correspondente não é o valor do parâmetro concreto, mas sim a localização na memória do computador que contém o seu valor
• Os parâmetros formais e os parâmetros concretos vão partilhar o mesmo local (dentro da memória do computador)• Qualquer modificação feita aos parâmetros formais reflete-se nos parâmetros concretos• Um parâmetro formal em que seja utilizada a passagem por referência corresponde à
mesma variável que o parâmetro concreto correspondente, apenas, eventualmente, com outro nome
• Em Python o efeito da passagem por referência pode ser ilustrado quando se utiliza um parâmetro concreto correspondente a uma estrutura mutável
![Page 20: Fundamentos da Programação · O Crivo de Eratóstenes Algoritmo para calcular números primos (criado pelo matemático grego Eratóstenes (c. 285--194 a.C.) que calcula todos os](https://reader036.fdocuments.net/reader036/viewer/2022071501/6120f67a7253f93a522766d9/html5/thumbnails/20.jpg)
Métodos de passagem de parâmetrosPassagem por referência
![Page 21: Fundamentos da Programação · O Crivo de Eratóstenes Algoritmo para calcular números primos (criado pelo matemático grego Eratóstenes (c. 285--194 a.C.) que calcula todos os](https://reader036.fdocuments.net/reader036/viewer/2022071501/6120f67a7253f93a522766d9/html5/thumbnails/21.jpg)
Métodos de passagem de parâmetrosPassagem por referência
![Page 22: Fundamentos da Programação · O Crivo de Eratóstenes Algoritmo para calcular números primos (criado pelo matemático grego Eratóstenes (c. 285--194 a.C.) que calcula todos os](https://reader036.fdocuments.net/reader036/viewer/2022071501/6120f67a7253f93a522766d9/html5/thumbnails/22.jpg)
ExemploFunção de dois argumentos, remove_multiplos, que recebe uma lista de inteiros e um inteiro e que devolve a lista que resulta de remover destrutivamente todos os múltiplos do segundo argumento da lista original. Por exemplo:>>> lst = [2, 3, 5, 9, 12, 33, 34, 45]
>>> remove_multiplos(lst, 3)
>>> lst
[2, 5, 34]
![Page 23: Fundamentos da Programação · O Crivo de Eratóstenes Algoritmo para calcular números primos (criado pelo matemático grego Eratóstenes (c. 285--194 a.C.) que calcula todos os](https://reader036.fdocuments.net/reader036/viewer/2022071501/6120f67a7253f93a522766d9/html5/thumbnails/23.jpg)
O Crivo de EratóstenesAlgoritmo para calcular números primos (criado pelo matemático grego Eratóstenes (c. 285--194 a.C.) que calcula todos os números primos inferiores a n1. Começa por criar uma lista com todos os inteiros positivos de 2 a n2. Seleciona o primeiro elemento da lista, o número 2. Enquanto o número
selecionado não for maior que 𝑛, executam-se as seguintes ações: (a) removem-se da lista todos os múltiplos do número selecionado (b) passa-se ao número seguinte na lista
No final do algoritmo, quando o número selecionado for superior a 𝑛, a lista apenas contém números primos
![Page 24: Fundamentos da Programação · O Crivo de Eratóstenes Algoritmo para calcular números primos (criado pelo matemático grego Eratóstenes (c. 285--194 a.C.) que calcula todos os](https://reader036.fdocuments.net/reader036/viewer/2022071501/6120f67a7253f93a522766d9/html5/thumbnails/24.jpg)
O Crivo de Eratóstenes
[2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25]
[2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25]
[2, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25]
[2, 3, 5, 7, 11, 13, 17, 19, 23, 25]
[2, 3, 5, 7, 11, 13, 17, 19, 23]
![Page 25: Fundamentos da Programação · O Crivo de Eratóstenes Algoritmo para calcular números primos (criado pelo matemático grego Eratóstenes (c. 285--194 a.C.) que calcula todos os](https://reader036.fdocuments.net/reader036/viewer/2022071501/6120f67a7253f93a522766d9/html5/thumbnails/25.jpg)
O Crivo de EratóstenesCriação da lista de inteiros de 2 a n
Possibilidadelista = []
for i in range(2, n + 1):
lista = lista + [i]
![Page 26: Fundamentos da Programação · O Crivo de Eratóstenes Algoritmo para calcular números primos (criado pelo matemático grego Eratóstenes (c. 285--194 a.C.) que calcula todos os](https://reader036.fdocuments.net/reader036/viewer/2022071501/6120f67a7253f93a522766d9/html5/thumbnails/26.jpg)
O Crivo de EratóstenesCriação da lista de inteiros de 2 a n
Possibilidadelista = []
for i in range(2, n + 1):
lista = lista + [i]
Outra possibilidadelista = list(range(2, n + 1))
![Page 27: Fundamentos da Programação · O Crivo de Eratóstenes Algoritmo para calcular números primos (criado pelo matemático grego Eratóstenes (c. 285--194 a.C.) que calcula todos os](https://reader036.fdocuments.net/reader036/viewer/2022071501/6120f67a7253f93a522766d9/html5/thumbnails/27.jpg)
O Crivo de EratóstenesA função crivo
def crivo(n):
from math import sqrt
lista = list(range(2, n+1))
i = 0
while lista[i] <= sqrt(n):
remove_multiplos(lista, lista[i])
i = i + 1
return lista
Porque não usar um ciclo for?
![Page 28: Fundamentos da Programação · O Crivo de Eratóstenes Algoritmo para calcular números primos (criado pelo matemático grego Eratóstenes (c. 285--194 a.C.) que calcula todos os](https://reader036.fdocuments.net/reader036/viewer/2022071501/6120f67a7253f93a522766d9/html5/thumbnails/28.jpg)
O Crivo de EratóstenesRemoção dos múltiplos de um número (ciclo for)
remove_multiplos(l, el)
for i in range(i+1, len(l):if l[i] % el == 0:
del(l[i])
![Page 29: Fundamentos da Programação · O Crivo de Eratóstenes Algoritmo para calcular números primos (criado pelo matemático grego Eratóstenes (c. 285--194 a.C.) que calcula todos os](https://reader036.fdocuments.net/reader036/viewer/2022071501/6120f67a7253f93a522766d9/html5/thumbnails/29.jpg)
O Crivo de EratóstenesRemoção dos múltiplos de um número (ciclo for)
[2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25]
eli
i=2del(l[2])
[2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25]
eli
i=3saltámos por cima do 5!
![Page 30: Fundamentos da Programação · O Crivo de Eratóstenes Algoritmo para calcular números primos (criado pelo matemático grego Eratóstenes (c. 285--194 a.C.) que calcula todos os](https://reader036.fdocuments.net/reader036/viewer/2022071501/6120f67a7253f93a522766d9/html5/thumbnails/30.jpg)
O Crivo de EratóstenesRemoção dos múltiplos de um número (ciclo for)
[2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25]
eli
i=23del(l[22])def remove_multiplos(l, i):
el = l[i]
for j in range(len(l)-1, i, -1):
if l[j] % el == 0:
del(l[j])
Falta o return l?
![Page 31: Fundamentos da Programação · O Crivo de Eratóstenes Algoritmo para calcular números primos (criado pelo matemático grego Eratóstenes (c. 285--194 a.C.) que calcula todos os](https://reader036.fdocuments.net/reader036/viewer/2022071501/6120f67a7253f93a522766d9/html5/thumbnails/31.jpg)