Programação I Aula 10 Processamento de listas

Documentos relacionados
Introdução à Programação

Introdução à Programação Aula 18 Método de eliminação de Gauss

Introdução à Programação Aula 7 Resolução numérica de equações

Programação I Aula 17 Correção de programas Pedro Vasconcelos DCC/FCUP

Programação I Aula 9 Listas e tuplos

Introdução à Programação / Programação I

Pedro Vasconcelos DCC/FCUP. Programação Funcional 5 a Aula Definições recursivas

Programação I Aula 3 Primeiros programas

Introdução à Programação Aula 3 Primeiros programas

Pedro Vasconcelos DCC/FCUP. Programação Funcional 8 a Aula Listas infinitas

Programação Funcional Aulas 5 & 6

Aula 3: Algoritmos: Formalização e Construção

AULA 2: INTRODUÇÃO A PYTHON. Luís Feliphe Silva Costa

Pedro Vasconcelos DCC/FCUP. Programação Funcional 2 a Aula Tipos e classes

Pedro Vasconcelos DCC/FCUP. Programação Funcional 16 a Aula Árvores equilibradas

Introdução à Programação

Pedro Vasconcelos DCC/FCUP. Programação Funcional 7 a Aula Funções de ordem superior

Pedro Vasconcelos DCC/FCUP. Programação Funcional 4 a Aula Listas

Conceitos de Linguagem de Programação - 2

UNIP - Ciência da Computação e Sistemas de Informação. Estrutura de Dados. AULA 5 Pilhas

Matrizes Esparsas. Prof. Fernando V. Paulovich *Baseado no material do Prof. Gustavo Batista

PROGRAMAÇÃO de COMPUTADORES: LINGUAGEM FORTRAN 90/95

Introdução à Programação Aula 11 Mais sobre ciclos e iteração

Pedro Vasconcelos DCC/FCUP. Programação Funcional 2 a Aula Tipos e classes

Listas e Tuplas. Vanessa Braganholo

Processamento da Informação Teoria. Strings

Módulo: PYTHON. Felipe Oliveira

Pedro Vasconcelos DCC/FCUP. Programação Funcional 3 a Aula Definição de funções

Programação Funcional

Nesta aula... Iteração indefinida. 1 Decisões em Python. 2 Funções lógicas. 3 Recursão. 4 Iteração. 5 Ciclo for ou while?

Introdução à Programação Aula 15 Definições recursivas

Linguagens de Programação. Programação Funcional e Haskell Programação Interativa Thiago Alves

USANDO UM MÉTODO INDUTIVO PARA RESOLVER PROBLEMAS. Bruno Maffeo Departamento de Informática PUC-Rio

Compiladores - Gramáticas

Listas - Outras. Listas Circulares Nós Cabeça Listas Duplamente Ligadas/Encadeadas Aplicações

Capítulo 6: Arquivos

Pedro Vasconcelos DCC/FCUP. Programação Funcional 14 a Aula Um verificador de tautologia

UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO. Prof.ª Danielle Casillo

Python: Exceções, Iteradores e Geradores. Claudio Esperança

Algoritmos e estrutura de dados

Programação Mestrado Integrado em Engenharia Aeronáutica 1º ano, 1º semestre. T. 04 Algoritmos e Programação Estruturada

1 Expressões, valores e tipos 1. 2 Variáveis e atribuições 5. cálculo de expressões segue a estrutura de parênteses e as prioridades dos operadores

Eletrônica Digital I (EDL I)

WEBDESIGN. Professor: Paulo Marcos Trentin - Escola CDI de Videira

Estrutura de Dados I Bacharelado em Sistemas de Informação FACOM UFU Lista de Exercícios

Informática para Ciências e Engenharias 2013/14. Teórica 7

Números Inteiros Algoritmo da Divisão e suas Aplicações

a) Defina uma função para obter o máximo entre dois números

Aula 18: Vetores Introdução a Programação Túlio Toffolo & Puca Huachi

Entrada e saída. Marco A L Barbosa malbarbo.pro.br. Departamento de Informática Universidade Estadual de Maringá

Estruturas de Dados Pilhas, Filas, Listas

Transcrição:

Programação I Aula 10 Processamento de listas Pedro Vasconcelos DCC/FCUP 2017 Pedro Vasconcelos (DCC/FCUP) Programação I Aula 10 Processamento de listas 2017 1 / 30

Nesta aula Vamos ver alguns exemplos de processamento de listas: 1 Agregações 2 Eliminar repetidos 3 Crivo de Eratóstenes Pedro Vasconcelos (DCC/FCUP) Programação I Aula 10 Processamento de listas 2017 2 / 30

Somar valores duma sequência A função pré-definida sum soma os valores duma sequência. Exemplo: >>> sum([0.5, 1, 0.5]) 2.0 Vamos definir a nossa própria implementação desta função. Pedro Vasconcelos (DCC/FCUP) Programação I Aula 10 Processamento de listas 2017 3 / 30

Somar valores duma sequência def soma(xs): "Somar valores duma lista xs." # variável total vai acumular a soma total = 0 # percorre todos os valores for x in xs: # acrescenta ao total total = total + x # o resultado da função é total return total Pedro Vasconcelos (DCC/FCUP) Programação I Aula 10 Processamento de listas 2017 4 / 30

Exemplos >>> soma([1, 2, 3]) 6 >>> soma([1.0, 0.5, 2.0]) 3.5 >>> soma([1.0]) 1.0 >>> soma([]) 0 Pedro Vasconcelos (DCC/FCUP) Programação I Aula 10 Processamento de listas 2017 5 / 30

Alternativa def soma(xs): "Somar valores duma lista xs." # variável total vai acumular a soma total = 0 # percorre todos os índices for i in range(len(xs)): # acrescenta ao total total = total + xs[i] # fim do ciclo; retorna o resultado return total Um ciclo sobre os índices em vez dos valores A primeira solução é mais direta Pedro Vasconcelos (DCC/FCUP) Programação I Aula 10 Processamento de listas 2017 6 / 30

Outras agregações A média aritmética O produto O máximo ou mínimo Pedro Vasconcelos (DCC/FCUP) Programação I Aula 10 Processamento de listas 2017 7 / 30

Média aritmética duma sequência def media(xs): "Calcula a média aritmética duma lista." # média = soma / número de elementos return soma(xs)/len(xs) Pedro Vasconcelos (DCC/FCUP) Programação I Aula 10 Processamento de listas 2017 8 / 30

Exemplos >>> media([2.0, 1.0, 1.0]) 1.33333333333 >>> media([2.0]) 2.0 A média não está definida para a lista vazia: >>> media([]) ZeroDivisionError: integer division or modulo by zero Pedro Vasconcelos (DCC/FCUP) Programação I Aula 10 Processamento de listas 2017 9 / 30

Produto duma lista Análogo à soma, substituindo: o operador + por *; o valor inicial 0 por 1 (elemento neutro de *). Pedro Vasconcelos (DCC/FCUP) Programação I Aula 10 Processamento de listas 2017 10 / 30

Produto duma lista def produto(xs): "Produto duma lista xs." # variável total vai acumular o producto total = 1 # percorrer todos os valores for x in xs: # acrescenta ao total total = total * x # fim do ciclo; retorna o resultado return total Pedro Vasconcelos (DCC/FCUP) Programação I Aula 10 Processamento de listas 2017 11 / 30

Exemplos >>> produto([2, 3, 4]) 24 >>> produto(range(1,5)) 24 >>> produto([]) 1 Pedro Vasconcelos (DCC/FCUP) Programação I Aula 10 Processamento de listas 2017 12 / 30

Valor máximo duma lista Guardar o maior valor já encontrado Inicialmente é o primeiro valor na sequência Para cada novo valor, atualizamos o máximo Pedro Vasconcelos (DCC/FCUP) Programação I Aula 10 Processamento de listas 2017 13 / 30

Valor máximo duma lista def maximo(xs): "Maior valor duma sequência xs." # inicialmente: maior é o primeiro valor maior = xs[0] # percorrer os restantes índices for i in range(1,len(xs)): if xs[i] > maior: # será maior? maior = xs[i] # se sim, atualizar # fim do ciclo; retornar o resultado return maior Pedro Vasconcelos (DCC/FCUP) Programação I Aula 10 Processamento de listas 2017 14 / 30

Exemplos >>> maximo([1.0, 2.5, 2.0, -1.0] 2.5 >>> maximo([2.0]) 2.0 O máximo não está definido para a sequência vazia: >>> maximo([]) IndexError: list index out of range Pedro Vasconcelos (DCC/FCUP) Programação I Aula 10 Processamento de listas 2017 15 / 30

Alternativa def maximo(xs): "Maior valor duma sequência xs." # inicialmente: maior é o primeiro valor maior = xs[0] # percorrer os restantes índices for i in range(1,len(xs)): # atualizar o maior maior = max(maior, x[i]) # fim do ciclo; retornar o resultado return maior Pedro Vasconcelos (DCC/FCUP) Programação I Aula 10 Processamento de listas 2017 16 / 30

Eliminar elementos repetidos Um procedimento para eliminar elementos repetidos duma lista. Duas soluções: 1 construir uma lista nova sem repetidos; 2 modificar a lista original apagando elementos repetidos. Pedro Vasconcelos (DCC/FCUP) Programação I Aula 10 Processamento de listas 2017 17 / 30

Eliminar repetidos (1) Construir uma nova lista ys Inicialmente ys = [ ] Para cada elemento x na lista dada: se x / ys, então acrescentamos x à lista ys Pedro Vasconcelos (DCC/FCUP) Programação I Aula 10 Processamento de listas 2017 18 / 30

Eliminar repetidos (1) def elimrep(xs): "Constroi uma nova lista sem repetidos." # ys é a lista sem repetidos # inicialmente vazia ys = [] for x in xs: # se x não é repetido if not (x in ys): # acrescenta à nova lista ys.append(x) # retorna a lista nova return ys Pedro Vasconcelos (DCC/FCUP) Programação I Aula 10 Processamento de listas 2017 19 / 30

Exemplos >>> elimrep([2,1,3,3,1,4,1]) [2, 1, 3, 4] >>> elimrep([2,2,2]) [2] >>> elimrep([1,2,3]) [1, 2, 3] Pedro Vasconcelos (DCC/FCUP) Programação I Aula 10 Processamento de listas 2017 20 / 30

Eliminar repetidos (2) Uma lista xs com n elementos Um ciclo sobre os índices 0 i n 1 Invariante: não há repetidos nos índices inferiores a i sem repetidos {}}{ xs[0],..., xs[i 1], pode haver repetidos {}}{ xs[i],..., xs[n 1] Actualização: se xs[i] {xs[0], xs[1],..., xs[i 1]} então apagamos xs[i]; caso contrário, avançamos i uma posição Pedro Vasconcelos (DCC/FCUP) Programação I Aula 10 Processamento de listas 2017 21 / 30

Eliminar repetidos (2) def elimrep(xs): "Eliminar repetidos em xs." i = 0 while i<len(xs): if xs[i] in xs[0:i]: # xs[i] é repetido; apagamos del xs[i] else: # xs[i] não é repetido; avançamos i = i+1 Pedro Vasconcelos (DCC/FCUP) Programação I Aula 10 Processamento de listas 2017 22 / 30

Exemplos >>> lista = [2,1,3,3,1,4,1] >>> elimrep(lista) >>> lista [2, 1, 3, 4] >>> lista = [2,2,2] >>> elimrep(lista) >>> lista [2] >>> lista = [1,2,3] >>> elimrep(lista) >>> lista [1, 2, 3] Pedro Vasconcelos (DCC/FCUP) Programação I Aula 10 Processamento de listas 2017 23 / 30

Sumário Ambas as soluções são correctas A primeira solução: constroi uma nova lista; é mais simples de compreender. A segunda solução: modifica a lista original; pode ser mais eficiente (necessita de menos memória). Pedro Vasconcelos (DCC/FCUP) Programação I Aula 10 Processamento de listas 2017 24 / 30

Crivo de Eratóstenes Construir a tabela dos números primos até n: 1 escrevemos todos os inteiros de 2 até n 2 o primeiro número (2) é primo e riscamos todos os seus múltiplos 3 o segundo número (3) é primo e riscamos todos os seus múltiplos 4 repetimos o processo: o próximo número não riscado é primo e riscamos todos os seus múltiplos 5 no fim: a tabela contém todos os números primos menores do que n Pedro Vasconcelos (DCC/FCUP) Programação I Aula 10 Processamento de listas 2017 25 / 30

Crivo de Eratóstenes Começamos com todos os inteiros de 2 até 30 O número 2 é primo e riscamos os seus múltiplos O número 3 é primo e riscamos os seus múltiplos O número 4 não é primo (já foi riscado) O número 5 é primo e riscamos os seus múltiplos Repetimos o processo até esgotar a tabela; restam apenas os primos inferiores a 30. 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 2 3 //4 5 //6 7 //8 9 10 /// 11 2 3 //4 5 //6 12 /// 13 14 /// 15 16 /// 17 18 /// 19 20 /// 21 12 /// 13 14 /// 15 /// 16 // 22 /// 23 24 /// 25 26 /// 27 28 /// 29 30 /// 22 /// 23 24 /// 25 26 // Pedro Vasconcelos (DCC/FCUP) Programação I Aula 10 Processamento de listas 2017 26 / 30

Implementação do crivo Representamos a tabela de números por uma lista Removemos da lista os números compostos No final restam apenas os primos Pedro Vasconcelos (DCC/FCUP) Programação I Aula 10 Processamento de listas 2017 27 / 30

Implementação do crivo def crivo(xs): "Remove números compostos da lista xs." i = 0 while i<len(xs): p = xs[i] # p é primo j = i+1 # vamos remover múltiplos while j<len(xs): if xs[j]%p == 0: del xs[j] else: j = j+1 i = i+1 # próximo primo # fim do crivo Pedro Vasconcelos (DCC/FCUP) Programação I Aula 10 Processamento de listas 2017 28 / 30

Construir uma lista de primos def primos(n): "Constroi a lista de primos menores que n." xs = list(range(2,n)) # inteiros entre 2 e n-1 crivo(xs) # remove os compostos return xs # lista de primos Note que o crivo modifica a lista dada em vez de criar uma nova. Pedro Vasconcelos (DCC/FCUP) Programação I Aula 10 Processamento de listas 2017 29 / 30

Exemplos Calcular todos os primos até 100: >>> primos(100) [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97] Quantos primos inferiores a 1000? >>> len(primos(1000)) 168 Pedro Vasconcelos (DCC/FCUP) Programação I Aula 10 Processamento de listas 2017 30 / 30