Buscar

Prova 3

Prévia do material em texto

Universidade Federal do Rio de Janeiro 
Engenharia de Produção – Turma EP1 
3ª Prova de Computação 1 
17 de dezembro de 2010 
Duração: 2 horas 
Jonas Knopman 
 
Questão 1: Lists (0.0 pontos) 9 linhas 
Você tem um List de tamanho N cujas posições armazenam os números de 0 a 1−N em ordem aleatória. 
Digamos, por exemplo, que o List se pareça com: 
 
Nessa figura os índices estão escritos acima dos retângulos, e os valores em cada uma das posições, no 
interior dos mesmos. 
Você quer percorrer um caminho pelo List, a partir de uma origem qualquer, indo de cada posição até a 
posição seguinte, cujo índice é dado pelo valor da posição atual. 
Vamos supor, por exemplo, que a posição inicial é a posição 0. 
Na posição 0. O valor de lista[0] é 5. Indo para a posição 5 
Na posição 5. O valor de lista[5] é 2. Indo para a posição 2 
Na posição 2. O valor de lista[2] é 3. Indo para a posição 3 
Na posição 3. O valor de lista[3] é 0. Indo para a posição 0 
Como podemos observar, são necessários quatro passos para retornar à origem na posição 0. 
Se a posição inicial fosse a posição 1, teríamos: 
Na posição 1. O valor de lista[1] é 4. Indo para a posição 4 
Na posição 4. O valor de lista[4] é 1. Indo para a posição 1 
Teríamos, nesse caso, um ciclo de tamanho 2 
Sua tarefa: escreva uma função: 
def tamanhoCiclo(lista, inicio): 
que, dados um List de inteiros de 0 a 1−N , e um índice inicial, calcule o número de passos necessários para 
retornar à origem. 
Observação: Não é necessário imprimir o caminho, apenas o tamanho do ciclo. Sua função aplicada ao 
primeiro exemplo geraria como saída o número 4 (quatro). Quando aplicada ao segundo exemplo, a função 
geraria como saída o número 2 (dois). 
 
 
Questão 2: Processamento de Strings (0.0 pontos) 7 linhas 
Parâmetros de uma requisição são parâmetros adicionados a uma URL para especificar ou restringir os 
dados que devem ser retornados de uma requisição HTTP. Por exemplo, se eu quiser ler uma mensagem 
privada em minha conta no Facebook, basta clicar sobre o aviso da mensagem. A URL gerada no browser 
será: 
http://www.facebook.com/?page=1&sk=messages&tid=1443661022838 
Observe que o Facebook está acrescentando algumas informações à requisição. Através do parâmetro sk ele 
especifica que eu quero ler uma mensagem cujo identificador único é dado pelo parâmetro tid 
De uma maneira mais geral, os parâmetros de uma requisição em uma URL têm a forma: 
http://www.website.com/?param1=valor1&param2=valor2&param3=valor3... 
Sua tarefa: escreva uma função: 
def getParametrosRequisicao(url): 
que imprime todos os parâmetros de requisição de uma URL recebida como parâmetro. Para o exemplo 
acima, a saída da função deveria ser: 
page : 1 
sk : messages 
tid : 1443661022838 
 
 
Questão 3: Um programa gráfico e eventos do mouse (0.0 pontos) 25 linhas 
Nessa questão você construirá um jogo em que uma bola desenhada no canvas persegue os cliques do 
mouse. 
Suas tarefas: 
• Desenhe um círculo de diâmetro DIAMETRO, em uma posição aleatória do canvas. O círculo deverá estar 
totalmente visível no canvas. 
• A cada clique no canvas, o círculo muda de direção (ou inicia o movimento, no caso do primeiro clique) 
e passa a se dirigir à posição do clique. Se o usuário não tornar a clicar sobre uma nova posição no 
canvas, o centro do círculo atinge a posição destino em NUM_PASSOS intervalos de animação. 
• O jogo termina quando existe uma interseção entre a bola e a posição de destino. 
Para facilitar sua tarefa, o programa principal e as constantes usadas no programa são fornecidos a seguir. 
from random import * 
from Tkinter import * 
from time import * 
 
# diametro da bola em pixels 
DIAMETRO = 80 
# pausa entre animações 
PAUSA = 0.08 
# número de intervalos de animação para que a bola 
# alcance a posição do clique do mouse 
NUM_PASSOS = 15 
 
def getX(obj): 
 [x0, y0, x1, y1] = canvas.coords(obj) 
 return (x0 + x1)/2.0 
 
# seu código aqui 
 
setup() 
while True: 
 canvas.move(bola, dx, dy) 
 sleep(PAUSA) 
 canvas.update() 
 if alcancouObjetivo(): break 
 
mainloop()

Continue navegando