(Tiempo orientativo: 3 h – Lenguaje objetivo: C# 7.0)
ENUNCIADO
1. (4 puntos) Las criaturas elementales
Desarrolla, usando POO correcta (encapsulación, properties, herencia, XML-comments), las clases de un juego con criaturas elementales.
a. El Mundo ocupa la malla rectangular cuyas esquinas opuestas son (0, 0) y (XMax, YMax).
b. La clase Elemental almacena posición (x, y), vitalidad (int) y una referencia al Mundo.
- Se crea con 150 puntos de vitalidad y en una posición aleatoria válida.
- Método
Desplazar()
→ mueve x e y entre –5 y 5 sin salir del Mundo y resta 3 puntos de vitalidad. - Método virtual
Accion()
devuelve la cadena vacía.
c. ElementalFuego hereda de Elemental. Sobrescribe Accion()
devolviendo aleatoriamente “¡Fiuuu!”, “crack-crack” o “💥” si vitalidad > 0; en caso contrario devuelve “”.
d. ElementalAgua hereda de Elemental y mantiene una lista de Gema
(no implementes la clase).
- Método
Colectar()
(no programarlo) añade una gema cercana a la lista. Accion()
elimina al azar una gema y devuelve su representación textual; si no hay gemas, devuelve “”.
e. Método estático Impacto(List<Elemental> els,int x0,int y0,int r,int d)
que resta d puntos de vitalidad a los elementales cuya distancia manhattan a (x0, y0) sea < r. Elimina de la lista los que queden con vitalidad ≤ 0.
f. Método MensajesAgua(Elemental[] els)
que concatene los resultados de Accion()
de todos los ElementalAgua del array.
2. (2 puntos) Los K más poderosos
Elemental
añadirá una segunda característica poder (int, editable). Implementa el método genérico
Elemental[] MaximosK(Elemental[] els,int k,
Comparison<Elemental> criterio)
que devuelva hasta k elementales con mejor puntuación según el criterio
recibido, sin alterar el array original.
3. (2 puntos) Análisis de complejidad
a) Para N ≥ 1 analiza el siguiente método: cuenta cada acceso a matriz
como 1 operación.
void Fusionar(bool[,] matriz)
{
for(int i=0;i<N;i++)
for(int j=i+1;j<N;j++)
if(matriz[i,j]) break;
for(int i=0;i<N;i++)
for(int j=0;j<N;j++)
for(int k=0;k<i;k++)
matriz[i,k] = matriz[i,k] || matriz[j,k];
}
Escribe la función de coste (peor caso) y su orden Big-Θ indicando el procedimiento.
b) Verdadero / Falso (razona brevemente):
- «Un algoritmo cuyo mejor caso es Θ(N) puede ser asintóticamente peor que otro cuyo peor caso es Θ(N log N)».
- «Si T(N)=2 T(N⁄2)+N log N, entonces T(N) es Θ(N log N)».
4. (2 puntos) Recursión sobre árboles
Declara:
class NodoElem {
public Elemental valor;
public List<NodoElem> hijos = new List<NodoElem>();
}
Programa recursivamente List<ElementalFuego> FuegosHoja(NodoElem raiz)
que devuelva una lista con los ElementalFuego que sean hoja del árbol (nodo sin hijos).
5. (2 puntos) Cola genérica con dos pilas
Implementa ColaDosPilas<T>
usando internamente dos objetos Stack<T>
de System.Collections.Generic
. Métodos:
void Encolar(T item)
T Desencolar()
(lanzaInvalidOperationException
si está vacía)- Propiedad
int Count { get; }
La complejidad amortizada de Encolar
y Desencolar
debe ser O(1). Explica brevemente por qué.
6. (2 puntos) Extensión LINQ
Crea un método de extensión PromedioSeguro(this IEnumerable<int> origen)
que devuelva la media entera de la secuencia o 0 si está vacía, sin lanzar excepciones y sin recorrer la colección más de una vez.
SOLUCIÓN PROPUESTA

Uso recomendado del simulacro
- Intenta primero resolver el enunciado sin mirar la solución; date 3 h.
- Compila y testea tu código con casos sencillos (crea Mundo, varios Elemental*, aplica Impacto, etc.).
- Tras comparar, revisa diferencias de diseño, claridad y eficiencia.
¡Mucho ánimo con la preparación!
¿QUÉ TE HA PARECIDO EL ARTÍCULO? Danos tu opinión al final de la página.
Deja tu comentario y ayúdanos a crecer.
¡SÍGUENOS EN TUS REDES FAVORITAS!
AYUDANOS A CRECER Y QUE LLEGUEMOS A TODAS LAS PERSONAS QUE NOS NECESITANA. SÍGUENOS EN TUS REDES.
Entra AQUÍ y elíge donde seguirnos.

NUESTRAS ÚLTIMAS PUBLICACIONES
- ✅ Cómo crear una aplicación To-Do List con C# y Windows Forms
- 🧠 ¿Qué es la herencia en C#? Ejemplo con personajes de videojuegos
- ¿Qué es una clase y un objeto en C#? Aprende a programar con ejemplos claros
- ¿Qué es una pila (stack)?
- ¿Qué es una función recursiva?
- ¿Qué es una enumeración en C#?
- 🧪 Simulacro de Examen – Programación II VJ1208 (Simulacro 5 – Estilo PDF)
- 🧪 Simulacro de Examen – Programación II VJ1208 (Sin estructuras dinámicas)
- ¿Qué son los Stack, Push, Pop y Peek en C#?
ELIGE TU RED FAVORITA Y SÍGUENOS.
AYUDANOS A CRECER Y A LLEGAR A TODAS LAS PERSONAS QUE NOS NECESITAN.
Contenido restringido
Comments are closed