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 4
Revisões
1. Escreva uma função sumTo(n) cujo resultado é a
soma dos inteiros até n, inclusive. Utilize a fórmula
Pn
n(n+1)
.
i=1 i =
2
onde s = (a + b + c)/2 é o semi-perímetro do triângulo. Implemente uma função area_triang(a,b,c)
que calcule a área de um triângulo usando esta fórmula.
2. A distância no plano entre dois pontos de coordenadas (x0 , y0 ) e (x1 , y1 ) é dada pela norma Euclidiana do vetor diferença
p entre os dois pontos,
i.e. |(x1 , y1 ) − (x0 , y0 )| = (x1 − x0 )2 + (y1 − y0 )2 .
Implemente uma função dist(x0, y0, x1, y1)
que calcule esta distância.
4. A área de um polígono regular com n lados inscrito
num círculo de raio r é:1
3. A área de um triângulo cujos lados medem a, b e c
pode ser calculada usando a fórmula de Heron:
p
área∆ = s(s − a)(s − b)(s − c)
Implemente uma função area_poligono(n,r) que
calcule a área dum polígono regular usando esta fórmula.
área(n, r) =
1
n sin(2π/n)r2
2
Iteração, padrão acumulador
5. Reescreva a função sumTo(n) (cujo resultado é a
soma dos inteiros até n, inclusive) utilizando o padrão do ciclo com acumulador.
6. A constante de uma mola pode ser determinada por
regressão linear: dada uma lista de n observações
da extensão da mola ei quando nela são suspensos
pesos pi , a constante é estimada por
Pn
e
Pni=1 i .
p
i=1 i
Escreva a função mola(e,p) que, dadas listas com
observações e e p retorna a constante da mola.
(Nota: pode assumir que ambas as listas têm o
mesmo número de observações.)
7. A fórmula de Leibniz para aproximar π é:
∞
X
1 1 1 1
π
(−1)n
= 1 − + − + + ... =
2n
+
1
3
5
7
9
4
n=0
Implemente a função leibniz(k) que resulta no somatório dos primeiros k termos desta série. Documente a sua função com uma docstring.
8. Implemente uma função que calcule o factorial de
um número
(a) de forma recursiva
(b) com um ciclo
(c) teste as suas funções com os seguintes argumentos: 0, 1, 2, 3, 10, 1000, ’zero’ e 3.14159.
(d) complete a definição de cada uma das funções
para que, quando o argumento da função não é
válido, imprima uma mensagem de erro. (Nota:
use a função type.)
Turtle
9. Em Python no modo interativo, crie uma tartaruga,
e atribua-a a uma variável. Verifique qual é o tipo
dessa variável (utilizando type).
10. Um biólogo esteve a observar uma tartaruga, que no
seu percurso fez o seguinte: deu 10 passos, depois
rodou um ângulo aleatório, voltou a dar 10 passos,
rodou de novo um ângulo aleatório, etc. O biólogo
1 Nota para os craques em cálculo infinitesimal: mostre que lim
2
n→∞ área(n, r) = πr , isto é, quando o número de lados tende para
infinito, a área do polígono tende para a área do círculo que o circunscreve.
registou os ângulos em cada paragem, sendo os seus
dados experimentais [160, -43, 270, -97, -43,
200, -940, 17, -86] (ângulos positivos são contrários ao sentido dos relógios).
(a) Utilize o módulo turtle para desenhar o percurso da tartaruga.
(b) Complete o programa, para que informe a direção (ângulo) da tartaruga no final.
(c) Repita o exercício para o caso em que os ângulos são valores aleatórios, com distribuição
uniforme entre -120 e 120 graus.
12. Escreva um programa para desenhar a figura abaixo.
Assuma que o lado do quadrado mais pequeno tem
dimensão 20, e os dos outros têm dimensão sucessivamente maior em 20 unidades.
11. Implemente uma função (sem valor de retorno) para
desenhar um quadrado; o argumento da função deverá ser o comprimento do lado. Utilize-a para desenhar a seguinte figura (assuma que o lado de cada
quadrado tem dimensão 20):
Expressões lógicas e condições
13. Avalie as seguintes expressões:
(a) 3 == 3
(b) 3 != 3
(c) 3 >= 4
(d) not (3 < 4)
14. Sem utilizar o operador not, escreva expressões que
sejam o contrário (i.e., a negação) das que se seguem:
(a) a > b
(b) a >= b
(c) a >= 18 and day == 3
(d) a >= 18 and day != 3
15. Escreva uma função que, dada a pontuação obtida num exame (em percentagem), devolve uma
string com a nota, de acordo com o esquema:
Pontuação Nota
≥ 90
A
[80, 90[
B
[70, 80[
C
[60, 70[
D
< 60
F
16. Um ano é bissexto se for divisível por 4, exceto se for
múltiplo de 100 e não for divisível por 400. Escreva
a função bissexto(n) que resulta em True se n for
um ano bissexto e False no caso contrário.
17. Escreva a função ret(a,b,c) que dados os comprimentos dos três lados de um triângulo determina se é
retângulo. Assuma que o terceiro argumento corresponde sempre o lado maior. A função deve retornar
True se o triângulo for retângulo, e False no caso
contrário (utilize uma tolerância de 0.000001).
18. A aritmética em vírgula flutuante (com precisão finita) não é sempre exata; experimente, por exemplo, o teste 0.1 + 0.2 == 0.3. Por essa razão, não
é seguro testar a igualdade de floats. Tendo isto
em conta, implemente a função is_sqrt(x,y) que
devolve True se y for (aproximadamente) a raiz quadrada de x. Para testar a igualdade (aproximada),
utilize no seu programa uma construção do seguinte
tipo:
if
abs(a-b) < 0.000001:
# ’a’ é aproximadamente igual a ’b’
...
Use o valor aí proposto (0.000001) como tolerância
para o erro.
Exercício a apresentar: um os seguintes, indicados a itálico, a ser sorteado.
19. ImplementeP
a função is_sqr_sum(n,k) que devolve
n
2
True caso
i=1 i seja igual a k, False no caso
contrário.
1
numa série de Maclaurin é dada
20. A expansão de 1−x
2
3
por 1 + x + x + x + x4 + . . . Implemente a função
maclaurin(x,n) que devolve a soma dos primeiros
n termos da série avaliados em x.
21. Considere a soma x1 + x12 + x13 . Implemente a função
is_approx(x,z) que devolve True caso essa soma
avaliada em x seja igual a z, False no caso contrário. Nota: como tolerância para o erro utilize o
valor 0.000001.
Download

Introdução à Programação - minor