UFRJ - Instituto de Matemática – DCC Programação de Computadores II Período 2012/1 Lista de Exercícios Ex 1. Para cada um dos trechos de programa abaixo, mostre exatamente o que será mostrado pelos mesmos através dos comandos print. ## trecho 1 L=[8,9,2,23,45,32,21,12] print L[0] print L[0:3] print L[-2] print L[5:2] print L[-8] ## trecho 2 L = [0,0] for i in range(2,8): L.append (L[i-2] + L[i-1]) print L ## trecho 3 L=[5,3,6,7,8,9,2,23,45,32,21,12] print L.index(9,0,len(L)) ## trecho 4 P = [“A”,”bB”,”CdE”,”;”,”@”] for x in P: print x, x.lower(), x.upper(), print ## trecho 5 import fileinput s = 1 for L in fileinput.input("enigma.txt"): if s <> 3: Q = L.split() print Q[0], len(Q) s = s + 1 ## trecho 6 x=range(1,11) y=["ABC","CDE"] x.append(y) print x ## trecho 7 L=[1,2,3,4,5,6,7,8,9,10] L.append(20) print L L.insert(2,30) print L ## trecho 8 L =[1,2,3,4,5] L.remove (4) print L L.remove(4) ## trecho 9 for i in range(1,6): L.append(1.0/i) print L soma=0 for x in range(0,len(L)): soma = soma + L[x] print soma ## trecho 10 L=[0,1] while L[-1] + L[-2] <800: L.append(L[-1] + L[-2]) print L print L.index(89) print L[L.index(89)] ## trecho 11 x=range(1,11) for i in x: print i Considere que o arquivo enigma.txt contém: Simule um computador chinês. Pense um pouco mais e #responda? Continue pensando e confira tudo. Leia a questão e pense ++ ++++++++. Ex 2. O programa abaixo identifica os números entre 1 e 4096 que são, ao mesmo tempo, quadrados perfeitos e cubos perfeitos (N é quadrado perfeito se existe um inteiro positivo I tal que N = I2 e é um cubo perfeito para J3). Note que 4096 = 642 = 163 for q in range(1, 65): for c in range(1,17): if q*q == c*c*c: print q*q a) Reescreva esse programa sem usar comandos for. b) O programa abaixo é uma versão incompleta do mesmo programa. Complete os trechos marcados com “___” de forma que os dois programas produzam rigorosamente o mesmo resultado. for q in range(1, 65): ___ while c ___ 17: if c*c*c == q___2: print c*c*c ___ Não é permitido alterar os trechos fornecidos e somente as lacunas devem ser preenchidas. Reescreva todo o programa na sua resposta. Ex 3. Escreva um programa Python que mostre todos os triângulos retângulos cujos lados a, b, c tenham por comprimento números inteiros entre 1 e 50. O programa deve mostrar os valores para cada combinação encontrada e o número de triângulos. Não é preciso eliminar as soluções simétricas. Formato do resultado: a=3 b=4 c=5 é um triângulo retângulo ... a=5 b=4 c=3 é um triângulo retângulo ... a=10 b=6 c=8 é um triângulo retângulo ... Encontrados xx triângulos Ex 4. Observe o programa a seguir. import math import locale x=0.2 while x <= 2: print locale.format('%4.1f',x), \ locale.format('%6.4f',math.sqrt(x)) x = x + 0.2 Sabendo que sua execução produz 0.2 0.4 ... 2.0 0.4472 0.6325 ...... 1.4142 apresente uma nova versão do mesmo programa substituindo o comando de repetição while por um comando for. O resultado final deve ser idêntico. Dica: o range do Python só funciona com números inteiros. Ex 5. A soma dos vinte primeiros termos da série 1 1 1 1 1+ + + + L 4 9 16 25 pode ser calculada e exibida pelo trecho de programa a seguir. soma=0 for a in range(1,21): soma = soma + 1./a/a print soma Reescreva esse programa de tal forma que a série considerada seja a que é mostrada a seguir: 1 1 1 1 − + − +L 1 + 1 2 + 8 3 + 27 4 + 64 Ex 6. Observe o programa a seguir. import math import locale x=2.0 while x <= 2: print locale.format('%4.1f',x), \ " ", \ locale.format('%6.4f',math.sqrt(x)) x = x - 0.2 Qual é o resultado produzido pelo programa?. Ex 7. É possível obter uma aproximação de Π pela fórmula 1 1 1 1 12.1 − + − + L 4 9 16 25 Quanto maior o número de termos utilizados no cálculo, melhor será a precisão da aproximação obtida. Tomando como referência um dos programas fornecidos, escreva uma versão simplificada desse programa que forneça o valor de uma (somente uma) aproximação de Pi de tal forma que o algoritmo de aproximação pare quando a diferença (módulo) entre o termoi+1 e o termoi for menor que 10-8. Ex 8. a) Escreva um programa Python que apresente os números de Armstrong entre 000 e 999. 153 é um número de Armstrong, porque 13 + 53 + 33 = 1 + 125 + 27 = 153. Ou seja, a soma dos seus três dígitos elevados ao cubo é igual ao próprio número. Para repetição, use comandos for. b) Escreva o mesmo programa usando comandos while. Ex 9. Esta questão trata de um procedimento que testa se um número n é primo ou não. Construa um algoritmo que decida isso (pode ser simples, desde que funcione) e escreva uma função Python que o implemente de acordo com a seguinte definição. def numero_eh_primo(n): n é sempre um número inteiro e a função numero_eh_primo retorna True se n é primo e False se n não é primo. Ex 10. No programa abaixo as palavras aparecem em linhas, da esquerda para a direita, de cima para baixo. Altere o programa para que as palavras apareçam em colunas, de cima para baixo, da esquerda para a direita, em três colunas. import fileinput palavras=[] contagem=[] for S in fileinput.input("Japao.txt"): L = S.split() for i in range(0,len(L)): if not (L[i] in palavras): palavras.append(L[i]) contagem.append(1) else: j = palavras.index(L[i]) contagem[j] = contagem[j] + 1 for i in range(0,len(palavras)): tamanho=len(palavras[i]) print palavras[i],contagem[i], \ (15-tamanho)*" ", if ((i+1) % 4) == 0: print Ex 11. Observe a função Python mostrada a seguir. def xpto(n): if n<0: return -1 elif n = 0: return 0 else: return 5 + xpto(n-3) Com base nesse exemplo, escreva uma função Python que calcule o fatorial de um número inteiro n, n ≥ 0. Ex 12. a) Escreva um função Python que calcule uma aproximação de Π com a fórmula do exercicio 7. A função deve receber como parâmetro o número de termos a serem considerados; b) repita o exercício, agora calculando termos até que a diferença seja menor que o limite passado como parâmetro.