Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


Examen Programacion, Exámenes de Ingeniería Infórmatica

Asignatura: Programación Orientada a Objetos, Profesor: Marco Zambon, Carrera: Ingeniería Informática, Universidad: UAM

Tipo: Exámenes

2014/2015

Subido el 07/12/2015

hecsilon
hecsilon 🇪🇸

1

(1)

1 documento

1 / 3

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
PRUEBA DE EVALUACIÓN EXTRAORDINARIA PRÁCTICA
Fundamentos de la Programación - Junio de 2015 (RESOLUCIÓN EN PYTHON)
1. Un array “Baraja” contiene registros de tipo “Carta” cada uno de los cuales almacena una información en
forma de carácter para el palo (“O”, oros, “C”, copas, “E”, espadas y “B”, bastos) y un valor numérico que
indica el valor de la carta entre 1 y 12.
a. Implemente una función que reciba un array de tipo “Baraja” y retorne como resultado el palo
(oros, copas, espadas o bastos) cuyas cartas están más cerca del principio. Es decir, si
entendemos que en el array baraja están todas las cartas desordenadas, y comenzamos a
recorrerlo desde la posición inicial, el palo “ganador” será aquél cuyas 12 cartas se encuentren
antes. (1.5 puntos)
SOLUCIÓN: La resolución debía utilizar un bucle while evitando un for con un
return interno o un break. Con 4 contadores y un flag para saber si se ha
encontrado ya palo ganador se recorre el array desde la primera posición hasta
que el flag cambia. Una vez fuera del bucle, se indaga cuál es el palo ganador
(aquél cuyo contador está a 12) y se emite un mensaje por pantalla.
class Carta:
def __init__(self,p,n):
self.palo = p
self.valor = n
def palo_al_principio(baraja):
""" array -> str
OBJ: A partir de un array de cartas, determina qué palo (oros, copas,
espadas o bastos) tiene todas sus cartas más cerca del principio
"""
i = 0
oros = copas = espadas = bastos = 0
terminado = False
while not terminado:
if baraja[i].palo == 'o':
oros += 1
if oros == 12:
terminado = True
resultado = 'o'
elif baraja[i].palo == 'e':
espadas += 1
if espadas == 12:
terminado = True
resultado = 'e'
elif baraja[i].palo == 'b':
bastos += 1
if bastos == 12:
terminado = True
resultado = 'b'
else:
copas += 1
if copas == 12:
terminado = True
resultado = 'c'
i += 1
return resultado
pf3

Vista previa parcial del texto

¡Descarga Examen Programacion y más Exámenes en PDF de Ingeniería Infórmatica solo en Docsity!

PRUEBA DE EVALUACIÓN EXTRAORDINARIA – PRÁCTICA

Fundamentos de la Programación - Junio de 2015 (RESOLUCIÓN EN PYTHON)

  1. Un array “Baraja” contiene registros de tipo “Carta” cada uno de los cuales almacena una información en forma de carácter para el palo (“O”, oros, “C”, copas, “E”, espadas y “B”, bastos) y un valor numérico que indica el valor de la carta entre 1 y 12. a. Implemente una función que reciba un array de tipo “Baraja” y retorne como resultado el palo (oros, copas, espadas o bastos) cuyas cartas están más cerca del principio. Es decir, si entendemos que en el array baraja están todas las cartas desordenadas, y comenzamos a recorrerlo desde la posición inicial, el palo “ganador” será aquél cuyas 12 cartas se encuentren antes. (1.5 puntos)

SOLUCIÓN: La resolución debía utilizar un bucle while evitando un for con un return interno o un break. Con 4 contadores y un flag para saber si se ha encontrado ya palo ganador se recorre el array desde la primera posición hasta que el flag cambia. Una vez fuera del bucle, se indaga cuál es el palo ganador (aquél cuyo contador está a 12) y se emite un mensaje por pantalla.

class Carta : def init(self,p,n): self.palo = p self.valor = n

def palo_al_principio (baraja): """ array -> str OBJ: A partir de un array de cartas, determina qué palo (oros, copas, espadas o bastos) tiene todas sus cartas más cerca del principio """ i = 0 oros = copas = espadas = bastos = 0 terminado = False while not terminado: if baraja[i].palo == 'o': oros += 1 if oros == 12: terminado = True resultado = 'o' elif baraja[i].palo == 'e': espadas += 1 if espadas == 12: terminado = True resultado = 'e' elif baraja[i].palo == 'b': bastos += 1 if bastos == 12: terminado = True resultado = 'b' else: copas += 1 if copas == 12: terminado = True resultado = 'c' i += 1 return resultado

b. Implemente un método “OrdenarBaraja” que permita ordenar un array de tipo “Baraja” del siguiente modo: primero se pondrán todos los ases, independientemente de su palo, luego todos los doses, luego los treses, y así sucesivamente hasta poner al final todos los reyes (cartas con valor 12). (1.5 puntos)

SOLUCIÓN: La resolución más sencilla consistiría en adaptar el método burbuja utilizando como criterio de ordenación el valor de la carta (independientemente de su palo, así:

def burbuja (v,inicio,fin): """ array, int, int -> array OBJ: Primera parte de la ordenación de un array de cartas utilizando el método de la burbuja: marca el número de pasadas de ordenación """ for pasada in range (inicio,fin -1) : ascender (v,pasada ,fin)

def ascender (v,inicio,fin): """ array, int, int -> array OBJ: Segunda parte de la ordenación de un array de cartas utilizando el método de la burbuja: lleva a cabo la ascensión de una Carta en función de su valor numérico """ for i in range (fin,inicio,-1): if (v[i].valor < v[i-1].valor) : temp = v[i] v[i] = v[i-1] v[i-1] = temp

c. Implemente un método “BuscarEnBaraja” que permita conocer la posición de una cierta carta (número y palo, por ejemplo, el 6 de oros) en una baraja ordenada según el método anterior. Trate en lo posible de optimizar el tiempo de búsqueda y el número de operaciones realizadas, para lo que sugerimos adapte algún método de búsqueda en listas ordenadas que conozca. (1. puntos)

SOLUCIÓN: La resolución consistiría en adaptar el método de búsqueda binaria, y nunca en utilizar una búsqueda secuencial ya que esta no aprovecha el beneficio de tener la baraja ordenada. No obstante, hay un modo aún más rápido si bien sólo funciona en este caso ya que conocemos el contenido del array (no funcionaría por ejemplo con un array de reales cuyos valores desconocemos). El método rápido para encontrar cartas en una baraja sería:

def buscar_baraja_rapido (baraja, carta): """ array, Carta -> int OBJ: Encuentra la posición de una carta en una baraja ordenada """ posicion = (carta.valor - 1) * 4 encontrado = False while not encontrado: if baraja[posicion].palo == carta.palo: encontrado = True else: posicion += 1 return posicion

La adaptación de la búsqueda binaria se haría en 2 partes. La primera busca el valor, independientemente de su palo

def busqueda_binaria_baraja (baraja,carta): """ array, Carta -> int