fundamentos da programação · o crivo de eratóstenes algoritmo para calcular números primos...

31
Fundamentos da Programação Capítulo 5: Listas

Upload: others

Post on 26-Mar-2021

14 views

Category:

Documents


0 download

TRANSCRIPT

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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