

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Prepara tus exámenes
Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Prepara tus exámenes con los documentos que comparten otros estudiantes como tú en Docsity
Encuentra los documentos específicos para los exámenes de tu universidad
Estudia con lecciones y exámenes resueltos basados en los programas académicos de las mejores universidades
Responde a preguntas de exámenes reales y pon a prueba tu preparación
Consigue puntos base para descargar
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Comunidad
Pide ayuda a la comunidad y resuelve tus dudas de estudio
Ebooks gratuitos
Descarga nuestras guías gratuitas sobre técnicas de estudio, métodos para controlar la ansiedad y consejos para la tesis preparadas por los tutores de Docsity
Asignatura: Programación Orientada a Objetos, Profesor: Marco Zambon, Carrera: Ingeniería Informática, Universidad: UAM
Tipo: Exámenes
1 / 3
Esta página no es visible en la vista previa
¡No te pierdas las partes importantes!


Fundamentos de la Programación - Junio de 2015 (RESOLUCIÓN EN PYTHON)
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