Introdução à Programação - minor João Pedro PEDROSO Departamento de Ciência de Computadores Faculdade de Ciências da Universidade de Porto Ano lectivo de 2012/2013 [email protected] Aula número 5 Nos seus programas, utilize o padrão if __name__ == "__main__": # teste ... para escrever código de teste às funções implementadas. Verifique que esse teste não é executado quando importa esse ficheiro (ou módulo) noutros programas. Revisões 1. O método de Newton, aplicado para encontrar o valor da raiz quadrada de um número, consiste no seguinte: (a) primeira aproximação: x = n/2 (b) aproximações seguintes: x0 = 12 (x + nx ) Escreva uma função que devolve o valor aproximado, ao fim da décima iteração. 2. Modifique a função para que o resultado seja x, quando este valor deixa de ser alterado (i.e, quando se atingiu o limite de precisão do computador). 3. A série de Fibonacci é a seguinte: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, . . . ou seja, qualquer valor além dos dois primeiros é obtido à custa da soma dos dois anteriores. (a) Implemente uma função recursiva que dado um inteiro n calcule o n-èsimo número da série. (b) Utilize essa função para calcular os primeiros 50 números da série. Faça um comentário acerca da eficiência desse cálculo. (c) Implemente uma função não recursiva para efectuar o mesmo cálculo, e compare a sua eficiência com a da anterior. 4. Um pai tem n bolos e k filhos. (a) Determine como os deve distribuir pelos filhos sem os partir, por forma a que cada um dos filhos fique, no máximo, com um bolo a mais ou a menos do que qualquer um dos outros. (b) Implemente uma função f (n, k) que, dados n e k, imprima o número de bolos que cada filho terá. (c) Teste a sua função com os seguintes valores: (a) n = 12, k = 4 (b) n = 5, k = 3 (c) n = 7, k = 6 (d) n = 7, k = 2 (e) n = 2, k = 7 Iteração, padrão acumulador 5. O número de Neper pode ser aproximado por e=1+ 1 1 1 + + + ... 1! 2! 3! Implemente a função neper(k) cujo resultado é somatório dos primeiros k termos desta série. (Nota: implemente e utilize a função auxiliar factorial.) Turtle 6. Escreva um programa para desenhar um mostrador de relógio, como na figura que se segue. 7. Desenhe as duas espirais que se seguem. Note que elas diferem apenas no ângulo que a tartaruga roda. Expressões lógicas e condições 8. Pesquise na Internet o que são números triangulares. Implemente a função print_triangular_numbers(n) que imprime os primeiros n números triangulares; por exemplo, print_triangular_numbers(5) deverá produzir: 1 2 3 4 5 1 3 6 10 15 9. Escreva uma função is_divisible(x,y) que devolve o valor lógico verdadeiro se x for divisível por y, e falso no caso contrário. 10. Escreva a função is_prime(n) que devolve o valor lógico verdadeiro de n for primo, e falso no caso contrário. 11. Escreva uma função que devolve o número de algarismos num número inteiro. Exercício a apresentar: um os seguintes, indicados a itálico, a ser sorteado. Nota: em todos os exercícios precisa de implementar uma função auxiliar para calcular o fatorial, que deverá submeter juntamente com a função que lhe for atribuída. 12. A expansão da função erro erf numa série de Taylor ao redor do ponto z é dada por ∞ 2 X (−1)n z 2n+1 erf(z) = √ π n=0 n!(2n + 1) 2 z3 z5 z7 z9 =√ z− + − + − ··· 3 10 42 216 π Implemente a função erro(x,k) que devolve a soma dos primeiros k termos da série avaliados em x; por exemplo, erro(1,3) deverá devolver 1 1 √2 1 − + = 0.865090 ... 3 10 π 13. Implemente a função ssum(n,k) que retorna a soma do fatorial de i, desde i = 1 até n, para os valores i divisíveis por k. Por exemplo ssum(6,2) deverá retornar 2! + 4! + 6! 14. O número de permutações de n elementos k a k é dado por: n n! = (n − k)!k! k Num estudo em análise combinatória é necessário conhecer a soma de todas as permutações, ou seja, n X n k=0 k Implemente a função tperm(n) que retorna esse número.