COMPARTE ESTE ARTÍCULO

Sabemos que enfrentarse a los exámenes de programación en la carrera de Ingeniería de Telecomunicación impone respeto. Pasar de la sintaxis estricta de Java a la flexibilidad de Python en un mismo examen (¡y en 4 horas!) requiere tener los conceptos muy claros.

Como siempre os comento a mis alumnos, la clave para dominar la Programación Orientada a Objetos (POO) no es memorizar, sino entender el porqué de cada línea de código.

Hoy, desde el equipo de la academia, traemos la resolución completa y explicada del simulacro de examen centrado en la gestión de Celdas y Estaciones Base. ¡Vamos a por ese 20/20!

PARTE A: JAVA (10 Puntos)

En esta parte se evalúa la lógica algorítmica clásica y la solidez construyendo clases. Recuerda la norma de oro del examen: prohibido usar streams.

Pregunta 1: Desplazamiento en array (2 puntos)

(a) Teoría: Desplazamiento vs Rotación Circular

  • Desplazamiento (Shift): Consiste en mover los elementos de un array hacia una dirección. Los elementos que “salen” por el extremo se pierden, y los huecos que quedan suelen rellenarse con ceros o nulos.
  • Rotación circular: Es similar, pero los elementos que “salen” por el lado derecho no se pierden, sino que vuelven a entrar por el lado izquierdo, formando un ciclo infinito.

(b) Implementación de rotarDerecha El truco aquí es usar el operador módulo (%) para normalizar el valor de k (por si nos piden rotar 10 posiciones en un array de 5, que equivaldría a rotar 0) y para calcular la nueva posición circular.

public class UtilidadesArray {
    public static int[] rotarDerecha(int[] a, int k) {
        if (a == null || a.length == 0) return a;
        
        int n = a.length;
        k = k % n; // Normalizamos k si es mayor que la longitud
        int[] resultado = new int[n];
        
        for (int i = 0; i < n; i++) {
            // Calculamos la nueva posición con aritmética modular
            int nuevaPosicion = (i + k) % n;
            resultado[nuevaPosicion] = a[i];
        }
        
        return resultado;
    }
}

Pregunta 2 y 3: Implementación de la clase Celda y sus cálculos (6 puntos)

Aquí unimos la creación de la clase con sus métodos de cálculo (pasar de dBm a mW y calcular el margen de ruido). Es vital validar en el constructor y lanzar la excepción IllegalArgumentException si la frecuencia no es válida.

Pregunta 4: EstacionBase y las pruebas (2 puntos)

Esta clase gestiona un array estático de objetos Celda. Ojo con lanzar IllegalStateException cuando el array está lleno.

PARTE B: PYTHON (10 Puntos)

Cambiamos el “chip” a Python. Aquí se busca código limpio, idiomático (“pythonic”) y un buen manejo de diccionarios y listas.

Pregunta 1: Conocimientos básicos (2 puntos)

(a) Diferencia entre list y tuple: La diferencia principal es la mutabilidad. Una lista (list) se puede modificar tras su creación (añadir, borrar, cambiar elementos) y usa corchetes []. Una tupla (tuple) es inmutable (no se puede alterar una vez definida) y usa paréntesis ().

(b) Mini-ejercicios:

# 1. Lambda porcentaje
porcentaje = lambda num, pct: num * (pct / 100)

# 2. f-string
nombre = "TuNombre" # Puedes cambiarlo
print(f"{nombre} - Asignatura: Python se aprende escribiendo codigo todos los dias.")

# 3. Recorrer frecuencias
frecuencias = [700, 800, 900, 1800, 2100, 2600]
for f in frecuencias:
    print(f"f={f} MHz")

# 4. Recorrer claves diccionario
mod = {'QPSK': 2, '16QAM': 4, '64QAM': 6}
for clave in mod.keys():
    print(clave)

Pregunta 2 y 3: Clase Celda en Python (6 puntos)

Fíjate en cómo implementamos el método dunder __str__ para el formateo y usamos isinstance para validar que el ruido sea numérico en el método margen.

Pregunta 4: Listas, diccionarios y mejor celda (2 puntos)

Para encontrar la mejor celda, Python nos ofrece la maravillosa función integrada max(), pasándole una función lambda como key.

Conclusión

¡Y con esto tendríamos el 20/20! Si te has atascado en algún paso, no te desanimes. La fluidez en programación se consigue tecleando mucho y equivocándose aún más.

Si necesitas ayuda extra, en nuestra academia tenemos grupos reducidos donde resolvemos exámenes de convocatorias anteriores paso a paso. ¿Qué parte te ha parecido más difícil, la rigidez de Java o la abstracción de Python? ¡Déjanoslo en los comentarios!

Aa

Contenido restringido

Acceso de usuarios existentes
   
Registro de un nuevo usuario
*Campo necesario

Categories:

Tags:

Comments are closed

Estado de acceso
ESTADO DE ACCESO
TRADUCTORES
COMPARTENOS
Insert math as
Block
Inline
Additional settings
Formula color
Text color
#333333
Type math using LaTeX
Preview
\({}\)
Nothing to preview
Insert
error: CONTENIDO PROTEGIDO