Lenguajes de programación: fundamentos y estructuras — Cuerpo de Técnicos Auxiliares de Informática de la Administración del Estado
Test de 31 preguntas con explicaciones justificadas.
Pregunta 1: ¿Cuál de los siguientes paradigmas de programación se caracteriza por la evaluación de expresiones matemáticas y la ausencia de efectos secundarios?
- A) Programación imperativa
- B) Programación orientada a objetos
- C) Programación funcional
- D) Programación lógica
El paradigma funcional, como en Haskell, se basa en la evaluación de funciones matemáticas puras, evitando el cambio de estado y efectos secundarios, enfocándose en la composición de funciones.
Pregunta 2: En un lenguaje de programación, ¿qué estructura de control permite ejecutar un bloque de código repetidamente mientras se cumpla una condición?
- A) Estructura de selección simple (if)
- B) Estructura de secuencia
- C) Estructura de selección múltiple (switch)
- D) Estructura de iteración (while)
La estructura de iteración 'while' es un bucle precondicional que repite la ejecución de un bloque mientras la condición booleana evaluada sea verdadera.
Pregunta 3: ¿Cuál de los siguientes es un lenguaje interpretado y de scripting típicamente usado para automatización de tareas en sistemas UNIX/Linux?
- A) C
- B) Java
- C) Bash
- D) C++
Bash es un lenguaje de scripting e intérprete de comandos en entornos UNIX/Linux, diseñado para automatizar tareas del sistema operativo sin necesidad de compilación.
Pregunta 4: La propiedad de un lenguaje que permite tratar datos de diferentes tipos de manera uniforme mediante una misma interfaz se denomina:
- A) Herencia
- B) Polimorfismo
- C) Encapsulamiento
- D) Abstracción
El polimorfismo en programación orientada a objetos permite que una misma interfaz (como un método) pueda ser utilizada por diferentes tipos de datos, seleccionando la implementación adecuada en tiempo de ejecución.
Pregunta 5: ¿Qué tipo de dato compuesto almacena una colección de elementos del mismo tipo, accesibles mediante un índice numérico?
- A) Registro (struct)
- B) Array (vector)
- C) Lista enlazada
- D) Conjunto (set)
Un array (o vector) es una estructura de datos homogénea que almacena elementos del mismo tipo en posiciones contiguas de memoria, accesibles mediante un índice entero.
Pregunta 6: Un procedimiento se diferencia de una función principalmente porque:
- A) Un procedimiento siempre devuelve un valor.
- B) Un procedimiento no devuelve un valor, mientras que una función sí.
- C) Una función no puede tener parámetros.
- D) Un procedimiento no puede ser invocado.
En la teoría de lenguajes de programación, un procedimiento es una subrutina que ejecuta una tarea sin devolver un valor, mientras que una función siempre devuelve un valor como resultado de su ejecución.
Pregunta 7: ¿Qué concepto de programación implica que una función se llame a sí misma para resolver un problema dividiéndolo en subproblemas más pequeños?
- A) Iteración
- B) Recursividad
- C) Modularidad
- D) Serialización
La recursividad es una técnica en la que una función se invoca a sí misma, directamente o indirectamente, para resolver un problema reduciéndolo a instancias más simples del mismo, requiriendo un caso base para terminar.
Pregunta 8: ¿Cuál de los siguientes lenguajes se considera de bajo nivel, ya que su código tiene una correspondencia directa con el código máquina?
- A) Python
- B) Ensamblador (assembly)
- C) Java
- D) JavaScript
El lenguaje ensamblador es de bajo nivel porque sus instrucciones mapean directamente a las instrucciones de código máquina del procesador, ofreciendo un control muy detallado del hardware.
Pregunta 9: En el paradigma de programación lógica, los programas se expresan como:
- A) Secuencias de comandos que alteran el estado.
- B) Conjuntos de hechos y reglas en un sistema de deducción lógica.
- C) Jerarquías de clases y objetos.
- D) Composición de funciones puras.
La programación lógica, como en Prolog, se basa en la definición de hechos y reglas que forman una base de conocimiento, y el motor de inferencia deduce respuestas a consultas mediante un proceso de unificación y resolución.
Pregunta 10: ¿Qué estructura de control permite ejecutar diferentes bloques de código en función del valor de una expresión?
- A) Bucle 'for'
- B) Estructura de selección múltiple (switch/case)
- C) Bucle 'do-while'
- D) Secuencia de instrucciones
La estructura de selección múltiple 'switch' (o 'case') evalúa una expresión y dirige el flujo de ejecución a uno de varios bloques de código posibles según el valor coincidente.
Pregunta 11: Un lenguaje compilado como C se caracteriza porque:
- A) Se ejecuta directamente por un intérprete línea a línea.
- B) Requiere un proceso de traducción completo a código máquina antes de su ejecución.
- C) Siempre es más lento que uno interpretado.
- D) No necesita enlazador (linker).
Un lenguaje compilado como C pasa por una fase de compilación donde todo el código fuente se traduce a código máquina nativo (o a un código intermedio), generando un ejecutable independiente que la CPU puede procesar directamente.
Pregunta 12: ¿Qué término describe la capacidad de un lenguaje para decidir el tipo de una variable en tiempo de ejecución, sin declaración explícita?
- A) Tipado estático
- B) Tipado dinámico
- C) Tipado fuerte
- D) Inferencia de tipos
El tipado dinámico, presente en lenguajes como Python, significa que el tipo de una variable se asocia en tiempo de ejecución y puede cambiar, a diferencia del tipado estático donde el tipo se define en tiempo de compilación.
Pregunta 13: ¿Cuál de las siguientes opciones es un ejemplo de estructura de datos lineal y dinámica?
- A) Array estático
- B) Pila (stack)
- C) Registro (struct)
- D) Entero (int)
Una pila (stack) es una estructura de datos lineal y dinámica que sigue el principio LIFO (Last In, First Out). Su tamaño puede cambiar durante la ejecución, a diferencia de un array estático que tiene tamaño fijo.
Pregunta 14: En programación orientada a objetos, ¿qué mecanismo permite a una clase heredar características (métodos y atributos) de otra clase?
- A) Polimorfismo
- B) Encapsulamiento
- C) Herencia
- D) Abstracción
La herencia es un principio de la programación orientada a objetos que permite crear una nueva clase (subclase) a partir de una existente (superclase), reutilizando y extendiendo su comportamiento y datos.
Pregunta 15: ¿Cuál de estos lenguajes es principalmente imperativo y también soporta programación orientada a objetos?
- A) Haskell
- B) Prolog
- C) Python
- D) HTML
Python es un lenguaje multiparadigma que, aunque permite programación imperativa y orientada a objetos de forma nativa, también soporta aspectos de programación funcional, pero su núcleo es imperativo.
Pregunta 16: La sentencia 'if-else' en un lenguaje de programación corresponde a una estructura de:
- A) Iteración
- B) Selección (bifurcación condicional)
- C) Secuencia
- D) Recursión
La estructura 'if-else' es una estructura de selección o bifurcación condicional que permite ejecutar un bloque de código u otro en función de la evaluación de una condición booleana.
Pregunta 17: ¿Qué característica distingue a un lenguaje de scripting como Python de un lenguaje compilado como C?
- A) Los lenguajes de scripting siempre son más rápidos en ejecución.
- B) Los lenguajes de scripting no necesitan un entorno de ejecución.
- C) Los lenguajes de scripting suelen ser interpretados y de alto nivel, enfocados a tareas de automatización.
- D) Los lenguajes de scripting no permiten estructuras de control.
Los lenguajes de scripting como Python son generalmente interpretados, de muy alto nivel, y se utilizan para automatizar tareas, prototipado rápido y desarrollo web, a diferencia de los compilados como C que se centran en eficiencia y control del hardware.
Pregunta 18: En recursividad, ¿qué condición es esencial para evitar una recursión infinita?
- A) Que la función no tenga parámetros.
- B) Que exista al menos un caso base que termine la recursión.
- C) Que la función llame a otras funciones.
- D) Que la función sea estática.
El caso base en una función recursiva es una condición que detiene las llamadas recursivas, proporcionando un resultado directo sin más llamadas, evitando así un bucle infinito y el desbordamiento de pila.
Pregunta 19: ¿Qué tipo de operación sobre una pila (stack) elimina y devuelve el elemento situado en la parte superior?
- A) Push
- B) Pop
- C) Peek
- D) Insert
En la estructura de datos pila, la operación 'pop' elimina el elemento superior de la pila y lo devuelve, siguiendo el principio LIFO. 'Push' inserta, y 'Peek' observa sin eliminar.
Pregunta 20: ¿Cuál de los siguientes es un lenguaje de programación que sigue principalmente el paradigma funcional?
- A) C++
- B) Lisp
- C) Pascal
- D) SQL
Lisp (y sus dialectos como Scheme, Clojure) es uno de los primeros y más puros lenguajes funcionales, donde el código se construye como evaluación de expresiones y funciones, con énfasis en la recursión y listas.
Pregunta 21: En el contexto de los lenguajes de programación, ¿qué significa que un lenguaje tenga 'tipado fuerte' (strong typing)?
- A) Que las variables deben declararse con un tipo que no puede cambiar.
- B) Que no se permiten conversiones implícitas entre tipos incompatibles.
- C) Que el tipo de variable se decide en tiempo de compilación.
- D) Que solo existe un tipo de dato numérico.
El tipado fuerte (strong typing) implica que el lenguaje impone restricciones estrictas en las operaciones entre tipos diferentes, evitando conversiones automáticas que pudieran causar errores, como sumar un string y un entero sin una conversión explícita.
Pregunta 22: Un bucle 'for' en la mayoría de los lenguajes imperativos se utiliza principalmente para:
- A) Ejecutar un bloque de código una vez si se cumple una condición.
- B) Iterar un número conocido o predefinido de veces.
- C) Ejecutar un bloque de código al menos una vez.
- D) Definir funciones recursivas.
El bucle 'for' es una estructura de control iterativa que se usa comúnmente cuando se conoce el número de iteraciones (por ejemplo, al recorrer un array), combinando inicialización, condición e incremento en una sola línea.
Pregunta 23: ¿Qué término describe la traducción de código fuente a código máquina justo antes de su ejecución, combinando compilación e interpretación?
- A) Ensamblado
- B) Compilación cruzada
- C) Compilación JIT (Just-In-Time)
- D) Preprocesamiento
La compilación Just-In-Time (JIT) es una técnica usada por máquinas virtuales (como la JVM de Java) que traduce bytecode a código máquina nativo durante la ejecución del programa, mejorando el rendimiento respecto a la interpretación pura.
Pregunta 24: ¿Cuál de estos es un tipo de dato primitivo en la mayoría de lenguajes de programación?
- A) Array
- B) Lista
- C) Booleano
- D) Objeto
Los tipos de datos primitivos (como booleano, entero, carácter, flotante) son básicos, definidos por el lenguaje y no se componen de otros tipos, a diferencia de los tipos compuestos como arrays u objetos.
Pregunta 25: En el contexto de los lenguajes de programación, ¿qué se entiende por 'alcance' (scope) de una variable?
- A) El valor actual almacenado en la variable.
- B) La región del código donde la variable es accesible y válida.
- C) El tipo de dato de la variable.
- D) La dirección de memoria asignada a la variable.
El alcance (scope) de una variable define la visibilidad y tiempo de vida de la variable dentro del código. Puede ser global (accesible en todo el programa) o local (solo dentro de un bloque o función).
Pregunta 26: ¿Qué paradigma de programación enfatiza la descripción de 'cómo' se realizan los pasos para cambiar el estado del programa?
- A) Programación declarativa
- B) Programación funcional
- C) Programación imperativa
- D) Programación lógica
El paradigma imperativo (como en C o Pascal) se centra en describir una secuencia de comandos que alteran el estado del programa, es decir, especifica 'cómo' lograr un objetivo paso a paso.
Pregunta 27: ¿Cuál de las siguientes estructuras de datos funciona con el principio FIFO (First In, First Out)?
- A) Pila (Stack)
- B) Cola (Queue)
- C) Árbol (Tree)
- D) Grafo (Graph)
Una cola (queue) es una estructura de datos lineal que sigue el principio FIFO: el primer elemento insertado es el primero en ser eliminado, a diferencia de la pila que es LIFO.
Pregunta 28: Un lenguaje que permite la creación de tipos de datos complejos combinando otros tipos se dice que soporta:
- A) Tipos de datos abstractos
- B) Tipos de datos primitivos
- C) Tipos de datos simples
- D) Tipos de datos enumerados
Los tipos de datos abstractos (TDA) permiten definir estructuras de datos complejas (como listas, pilas, colas) ocultando su implementación interna y ofreciendo operaciones bien definidas, combinando tipos primitivos y otros TDA.
Pregunta 29: ¿Qué característica es propia de los lenguajes de alto nivel como Python o Java, en contraste con los de bajo nivel?
- A) Proporcionan un control directo sobre el hardware.
- B) Su sintaxis está muy cerca del código máquina.
- C) Son portables entre diferentes arquitecturas de hardware.
- D) Requieren gestión manual de memoria en todo momento.
Los lenguajes de alto nivel ofrecen portabilidad porque su código (o bytecode) puede ejecutarse en diferentes plataformas con la ayuda de un intérprete o máquina virtual, abstrayendo los detalles del hardware.
Pregunta 30: En Bash, ¿qué símbolo se utiliza para referirse al valor de una variable?
En el lenguaje de scripting Bash, el símbolo '$' se utiliza para acceder al valor almacenado en una variable (por ejemplo, $nombre). Sin él, se referencia solo el nombre de la variable como texto.
Pregunta 31: ¿Qué estructura de control garantiza que un bloque de código se ejecute al menos una vez?
- A) Bucle 'while'
- B) Bucle 'for'
- C) Bucle 'do-while'
- D) Condicional 'if'
El bucle 'do-while' (o 'repeat-until' en algunos lenguajes) es una estructura iterativa postcondicional: primero ejecuta el bloque de código y luego evalúa la condición, por lo que el bloque se ejecuta al menos una vez.