Buscar

P3 (Gabarito)

Prévia do material em texto

Universidade Federal do Rio de Janeiro 
Engenharia de Produção – Turma EP1 
3ª Prova de Computação 1 
11 de julho de 2011 
Duração: 2 horas 
 
Questão 1: Um passeio aleatório no Metrô (3.0 pontos) 
from random import * 
estacoes = ['Ipanema/Gal Osório', 'Cantagalo', 'Siqueira Campos', 
 'Cardeal Arcoverde', 'Botafogo', 'Flamengo', 
 'Largo do Machado', 'Catete', 'Glória', 'Cinelândia', 
 'Carioca', 'Uruguaiana', 'Presidente Vargas', 'Central', 
 'Cidade Nova', 'São Cristóvão', 'Maracanã', 'Triagem', 
 'Maria da Graça', 'Nova América/Del Castilho', 'Inhauma', 
 'Engenho da Rainha', 'Thomaz Coelho', 'Vicente de Carvalho', 
 'Irajá', 'Colégio', 'Coelho Neto', 'Acari Fazenda Botafogo', 
 'Eng. Rubens Paiva', 'Pavuna'] 
INICIAL = 4 
NUM_PARADAS = 7 
 
atual = INICIAL 
print 'Início na estação', estacoes[atual] 
i = 0 
while i < NUM_PARADAS: 
 direcao = choice(['norte', 'sul']) 
 numEstacoes = randint(1, 6) 
 if direcao == 'sul': 
 numEstacoes *= -1 
 if 0 <= atual + numEstacoes < len(estacoes): 
 atual += numEstacoes 
 print 'Viaja %d estações para o %s até a estação %s' % \ 
 (abs(numEstacoes), direcao, estacoes[atual]) 
 i += 1 
 else: 
 print 'Viaja %d estações para o %s -- Fora dos limites. Tente novamente.' % \ 
 (abs(numEstacoes), direcao) 
print 'Final na estação %s' % estacoes[atual] 
 
 
Questão 2: Metagramas (3.0 pontos) 
def ehPalavraExistente(palavra): 
 lexico = ['LAMA', 'LEMA', 'TEMA', 'TELA', 'CELA', 
 'CERA', 'PERA', 'PIRA', 'TEMAS'] 
 return palavra in lexico 
 
def contaCaracteresDiferentes(s1, s2): 
 conta = 0 
 for i in range(len(s1)): 
 if s1[i] != s2[i]: 
 conta += 1 
 return conta 
 
def ehMetagrama(anterior, atual): 
 if not ehPalavraExistente(atual): return False 
 if anterior == '': return True; 
 if len(anterior) != len(atual): return False 
 return contaCaracteresDiferentes(anterior, atual)==1 
 
print 'Programa para verificar um metagrama.' 
print 'Entre com uma sequencia de palavras, terminando com uma linha em branco.' 
anterior = '' 
while True: 
 atual = raw_input().upper() 
 if atual == '': break 
 if not ehMetagrama(anterior, atual): 
 print 'Essa palavra não é válida. Tente novamente.' 
 else: 
 anterior = atual 
 
 
Questão 3: Círculos Caindo (4.0 pontos) 
from Tkinter import * 
import random 
import time 
 
DELAY = 0.02 # pausa entre animações 
MIN_DIAM = 30 # diametro mínimo de um círculo 
MAX_DIAM = 100 # diametro máximo de um circulo 
LARGURA = 500 # largura do canvas 
ALTURA = 300 # altura do canvas 
DY = 2 # deslocamento vertical (em pixels) dos círculos 
 # a cada intervalo de animação 
 
def osCirculosSeForam(): 
 return len(listaCirculos) == 0 
 
def criaCirculos(): 
 numeroDeCirculos = random.randint(1, 10) 
 for i in range(numeroDeCirculos): 
 diametro = random.uniform(MIN_DIAM, MAX_DIAM) 
 x0 = random.uniform(0, LARGURA - diametro) 
 y0 = random.uniform(0, ALTURA - diametro) 
 oval = canvas.create_oval(x0,y0, 
 x0+diametro,y0+diametro, 
 fill='white') 
 listaCirculos.append(oval) 
 
def moveCirculos(): 
 for o in listaCirculos: 
 canvas.move(o, 0, DY) 
 coords = canvas.coords(o) 
 if coords[1] > ALTURA: 
 listaCirculos.remove(o) 
 canvas.delete(o) 
 time.sleep(DELAY) 
 canvas.update() 
 
def cliqueMouse(e): 
 objetos = canvas.find_overlapping(e.x, e.y, e.x, e.y) 
 if len(objetos) > 0: 
 listaCirculos.remove(objetos[0]) 
 canvas.delete(objetos[0]) 
 
listaCirculos = [] 
 
canvas = Canvas(background='white', width=LARGURA, height=ALTURA) 
canvas.pack() 
 
canvas.bind("<Button-1>", cliqueMouse) 
while True: 
 if osCirculosSeForam(): 
 criaCirculos() 
 moveCirculos() 
 
mainloop()

Continue navegando