Вы находитесь на странице: 1из 8

MAC0110 – Introdução à Computação

Prova 3 – 28/06/2018 – BCC

NOME (EM LETRA DE FORMA LEGÍVEL):

ASSINATURA:

No. USP:

Instruções

1. Não destaque as folhas deste caderno.

2. A prova pode ser feita a lápis.

3. A legibilidade também faz parte da nota!

4. A prova consta de 3 questões. Verifique antes de começar a prova se o seu caderno


de questões está completo.

5. Não é permitido o uso de folhas avulsas para rascunho.

6. Não é necessário apagar rascunhos no caderno de questão mas especifique qual é a


resposta e qual é o rascunho.

7. Só é permitido usar os recursos dados nas aulas até o dia desta prova e deve-se
seguir todas as restrições dadas também.

8. A prova é sem consulta.

Não escrever nesta parte da folha


Questão Nota Observação
1

Total

Boa Prova!
Questão 1 (valor=3.0 pontos)

Considere uma matriz mundo que representa o toro do Mundo de Wumpus, cujas entradas
mundo[i][j] podem ser visitadas (["V"]) ou desconhecidas ([]).
a) (2.0 pontos) Escreva uma função que receba a matriz, uma posiç~ ao atual de uma
personagem e uma posição destino, e construa uma lista de posições intermediárias que
leve a personagem da posição atual para a posição destino, passando apenas por salas
visitadas. Considere que a posição atual é visitada, e que sempre existe um caminho
que passa apenas por salas visitadas (com exceção da posição destino, que poderá ser
desconhecida ou visitada).

b) (1.0 ponto) Escreva uma função que recebe uma lista L de posições que corresponde
a um percurso da personagem, e devolve uma lista de ações do tipo "A" (andar), "D"
(girar para a direita) ou "E" (girar para a esquerda) que corresponda ao mesmo percurso.
Considere que a personagem já se encontra na posição L[0], e que sua orientação inicial
é [1,0].
Questão 2 (valor=4.0 pontos)

a) (1.5 pontos) Escreva uma classe ConjuntoLinear que represente semiespaços tridi-
mensionais, da forma S = {x | A1 x1 + A2 + A3 x3 ≥ B}. Sua classe deve ter um atributo
tipo, que terá o valor "semiespaço", e dois atributos A e B para armazenar respectiva-
mente o vetor A = [A1 , A2 , A3 ] e o termo independente B. Além disso sua classe deve
ter dois métodos: um construtor, que recebe como parâmetros tipo, A e B e inicializa os
atributos respectivos, e um método éElemento, que recebe um x = [x1 , x2 , x3 ] e devolve
True/False para a pergunta x ∈ S.

b) (1.5 pontos) Aumente a classe ConjuntoLinear para permitir a representação de


uniões e interseções arbitrárias de semiespaços. Para isso, o atributo tipo poderá valer
"semiespaço", "uni~ ao" ou "interseç~ ao", e nos dois últimos casos os atributos A e B
serão objetos do tipo ConjuntoLinear, usados para representar os conjuntos S = A ∪ B
(se tipo="uni~ ao") ou S = A∩B (se tipo="interseç~ ao"). O método éElemento deverá
ser reescrito para produzir a resposta correta para a pergunta x ∈ S nos três casos.

c) (1.0 ponto) Escreva uma sequência de comandos Python para testar a classe Conjun-
toLinear: crie um conjunto A que represente o semiespaço x1 +x2 +x3 ≥ 10, um conjunto
B que represente o semiespaço 2x1 − x2 + 3x3 ≥ 0, e conjuntos C e D que representem
respectivamente a união e a interseção de A e B. Além disso, escreva chamadas para
verificar se o ponto x = [1, 1, 1] pertence a cada um desses quatro conjuntos.
Questão 3 (valor=3.0 pontos)

A condição
v[0] ≤ v[1] ≤ · · · ≤ v[N − 1]
que caracteriza um vetor ordenado pode ser facilmente transformada em um algoritmo
recursivo de ordenação: para isso basta tentar verificá-la, e na hipótese de existir um par
(v[i], v[i + 1]) que não satisfaz v[i] ≤ v[i + 1], o algoritmo troca esses dois elementos de
lugar e chama recursivamente a mesma função para o mesmo vetor. Escreva uma função
recursiva que corresponda a essa implementação, e que devolva o número de trocas que
foi efetuada recursivamente.