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

Post on 26-Mar-2021

15 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Fundamentos da Programação

Capítulo 5: Listas

Exemplo (da aula anterior)

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

Listas• Tipo estruturado

• Sequência mutável de elementos

Listas – representação externa

Listas – acesso aos elementos• Baseado na posição que o elemento se encontra dentro da lista (índice)

• Nome indexado

Operações sobre listas

Exemplos

Exemplos

Exemplos

Exemplos

Exemplos

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

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

Métodos de passagem de parâmetrosPassagem por valor

Métodos de passagem de parâmetrosPassagem por valor

Métodos de passagem de parâmetrosPassagem por valor

Métodos de passagem de parâmetrosPassagem por valor

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

Métodos de passagem de parâmetrosPassagem por referência

Métodos de passagem de parâmetrosPassagem por referência

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]

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

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]

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]

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))

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?

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])

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!

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?

top related