Volver a la portadaPrincipios de Computación AP® · Principios de Computación AP · Cambiar asignatura
Empezar gratis
Apuntes

Ejercicios: Las estructuras de un programa

Practica★☆☆
Explica qué es una variable en un programa y pon un ejemplo: qué nombre y qué contenido tendría una variable en un videojuego que guarda los puntos del jugador. ¿Qué…

Explica qué es una variable en un programa y pon un ejemplo: qué nombre y qué contenido tendría una variable en un videojuego que guarda los puntos del jugador. ¿Qué operación cambiaría su valor al superar un nivel?

Resolver
Practica★☆☆
Explica qué es una estructura condicional (si... entonces... si no...) y escribe dos ejemplos de decisiones cotidianas expresadas con esa estructura, indicando la…

Explica qué es una estructura condicional (si... entonces... si no...) y escribe dos ejemplos de decisiones cotidianas expresadas con esa estructura, indicando la condición y las dos acciones posibles.

Resolver
Practica★☆☆
Explica qué es un bucle y qué problema resuelve frente a repetir las mismas instrucciones muchas veces. Escribe en pseudocódigo un bucle que escriba los números del 1 al…

Explica qué es un bucle y qué problema resuelve frente a repetir las mismas instrucciones muchas veces. Escribe en pseudocódigo un bucle que escriba los números del 1 al 5.

Resolver
Practica★☆☆
Explica la diferencia entre una variable y una constante en un programa, con un ejemplo de cada una en un programa de facturación (el precio del producto frente al…

Explica la diferencia entre una variable y una constante en un programa, con un ejemplo de cada una en un programa de facturación (el precio del producto frente al porcentaje del impuesto sobre las ventas).

Resolver
Practica★☆☆
Los datos de un programa tienen tipo: entero, decimal, texto o booleano. Indica el tipo más adecuado para cada dato y justifícalo: la edad de una persona, su altura en…

Los datos de un programa tienen tipo: entero, decimal, texto o booleano. Indica el tipo más adecuado para cada dato y justifícalo: la edad de una persona, su altura en metros, su nombre y si ha aprobado o no.

Resolver
Practica★☆☆
Explica qué es una función en un programa y dos ventajas de dividir el código en funciones con nombre (reutilizar sin copiar, entender y probar cada parte por separado).

Explica qué es una función en un programa y dos ventajas de dividir el código en funciones con nombre (reutilizar sin copiar, entender y probar cada parte por separado).

Resolver
Practica★☆☆
¿Qué es un comentario en el código fuente? Explica a quién van dirigidos los comentarios (no a la computadora, sino a quien leerá el código después) y qué debe explicar…

¿Qué es un comentario en el código fuente? Explica a quién van dirigidos los comentarios (no a la computadora, sino a quien leerá el código después) y qué debe explicar un buen comentario (el porqué de las decisiones, no lo que ya se ve).

Resolver
Practica★☆☆
Lee este fragmento y haz la traza: Indica qué valor se muestra en la pantalla y explica por qué la segunda instrucción no es una ecuación matemática sino una asignación.

Lee este fragmento y haz la traza:

inicio

    x ← 4

    x ← x + 2

    escribir x

fin

Indica qué valor se muestra en la pantalla y explica por qué la segunda instrucción no es una ecuación matemática sino una asignación.

Resolver
Practica★★☆
Lee este programa en pseudocódigo: Haz la traza paso a paso (valor de suma y de n al final de cada vuelta) e indica cuántas veces se repite el bucle y qué valor se…

Lee este programa en pseudocódigo:

inicio

    suma ← 0

    n ← 1

    mientras n ≤ 5 hacer

        suma ← suma + n

        n ← n + 1

    fin mientras

    escribir suma

fin

Haz la traza paso a paso (valor de suma y de n al final de cada vuelta) e indica cuántas veces se repite el bucle y qué valor se escribe al final.

Resolver
Practica★★☆
Escribe en pseudocódigo un programa que lea la calificación de un examen (un número de 0 a 10) y escriba «apto» si la calificación es 5 o mayor, y «no apto» en caso…

Escribe en pseudocódigo un programa que lea la calificación de un examen (un número de 0 a 10) y escriba «apto» si la calificación es 5 o mayor, y «no apto» en caso contrario. Usa una variable, una lectura de dato y una estructura condicional.

Resolver
Practica★★☆
El diagrama de flujo de la figura representa un programa con un bucle: lee un número n y, mientras n sea mayor que 0, escribe su valor y le resta 1, como se muestra en…

El diagrama de flujo de la figura representa un programa con un bucle: lee un número n y, mientras n sea mayor que 0, escribe su valor y le resta 1, como se muestra en la figura.

inicio leer n n > 0 ? sí escribir n n ← n − 1 no fin

Si el usuario introduce n = 3: (a) haz la traza indicando qué valores toma n y qué se escribe en cada vuelta; (b) indica cuántas veces se ejecuta el cuerpo del bucle; (c) explica qué ocurriría si el usuario introdujera n = 0.

Resolver
Practica★★☆
Este programa clasifica a una persona según su edad: Haz el seguimiento paso a paso para una entrada de 17 y para una de 21, indicando en cada caso qué condición se…

Este programa clasifica a una persona según su edad:

inicio

    leer edad

    si edad ≥ 18 entonces

        escribir "mayor de edad"

    si no

        escribir "menor de edad"

    fin si

fin

Haz el seguimiento paso a paso para una entrada de 17 y para una de 21, indicando en cada caso qué condición se evalúa y qué se escribe en la pantalla.

Resolver
Practica★★☆
Escribe en pseudocódigo un programa que muestre la cuenta regresiva del 10 al 1 y, al terminar el bucle, muestre «¡despegue!». Usa una variable y un bucle mientras.

Escribe en pseudocódigo un programa que muestre la cuenta regresiva del 10 al 1 y, al terminar el bucle, muestre «¡despegue!». Usa una variable y un bucle mientras.

Resolver
Practica★★☆
Este programa suma los números que introduce el usuario hasta que escribe un cero: Haz la traza para la secuencia de entradas 4, 3, 0: indica el valor de n y de suma…

Este programa suma los números que introduce el usuario hasta que escribe un cero:

inicio

    suma ← 0

    leer n

    mientras n ≠ 0 hacer

        suma ← suma + n

        leer n

    fin mientras

    escribir suma

fin

Haz la traza para la secuencia de entradas 4, 3, 0: indica el valor de n y de suma tras cada lectura y qué se escribe al final. Explica además por qué el primer leer n está fuera del bucle.

Resolver
Practica★★☆
El diagrama de flujo de la figura representa el control de acceso de un dispositivo: hay un máximo de tres intentos para introducir la clave correcta, como se muestra en…

El diagrama de flujo de la figura representa el control de acceso de un dispositivo: hay un máximo de tres intentos para introducir la clave correcta, como se muestra en la figura.

inicio intentos ← 0 ¿quedan intentos? no Acceso bloqueado sí leer clave ¿clave correcta? sí Acceso permitido no intentos ← intentos + 1

(a) Explica el recorrido completo del programa cuando el usuario falla la clave dos veces y acierta a la tercera. (b) Indica el número máximo de veces que el programa pide la clave. (c) Razona por qué la variable intentos se incrementa solo en una de las ramas del segundo rombo.

Resolver
Practica★★☆
Este programa debería escribir los números del 1 al 5, pero tiene un fallo: a) Identifica el error: ¿qué le falta al cuerpo del bucle? b) Explica qué ocurre al ejecutar…

Este programa debería escribir los números del 1 al 5, pero tiene un fallo:

inicio

    n ← 1

    mientras n ≤ 5 hacer

        escribir n

    fin mientras

fin
  1. a) Identifica el error: ¿qué le falta al cuerpo del bucle?
  1. b) Explica qué ocurre al ejecutar el programa tal como está escrito.
  1. c) Escribe el pseudocódigo corregido.
Resolver
Practica★★★
Un compañero afirma que para contar cuántos números entre dos valores enteros positivos cualesquiera $A$ y $B$ ($A \le B$) son divisibles simultáneamente por $3$ y por…

Un compañero afirma que para contar cuántos números entre dos valores enteros positivos cualesquiera $A$ y $B$ ($A \le B$) son divisibles simultáneamente por $3$ y por $5$, el siguiente pseudocódigo siempre funciona y es el más eficiente:

inicio

    leer A, B

    total ← 0

    mientras A ≤ B hacer

        si (A mod 3 = 0) o (A mod 5 = 0) entonces

            total ← total + 1

        fin si

        A ← A + 1

    fin mientras

    escribir total

fin

(a) Refuta dos deficiencias de su propuesta: un error de lógica condicional según la especificación pedida y una ineficiencia algorítmica (analiza cuántas iteraciones y evaluaciones de condiciones realiza si $B - A = 1\,000\,000$).

(b) Si obligatoriamente se debe emplear un bucle mientras, reescribe el algoritmo optimizando el valor inicial y el paso de incremento para realizar el menor número posible de iteraciones sin evaluar ningún condicional dentro del bucle.

(c) Diseña una solución matemática en tiempo constante $O(1)$ sin bucles en pseudocódigo y justifica formalmente la fórmula empleada.

Resolver
Practica★★★
Diseña en pseudocódigo un algoritmo para el juego de «adivina el número» donde los roles se inviertan: el usuario piensa un número secreto entero entre $1$ y $100$ y la…

Diseña en pseudocódigo un algoritmo para el juego de «adivina el número» donde los roles se inviertan: el usuario piensa un número secreto entero entre $1$ y $100$ y la computadora debe adivinarlo empleando la estrategia óptima de búsqueda binaria.

(a) Escribe el pseudocódigo del algoritmo. En cada iteración, la computadora propondrá el punto medio del intervalo actual y el usuario responderá si el número secreto es «mayor», «menor» o si la máquina ha «acertado».

(b) Incorpora un mecanismo de validación que detecte si el usuario comete una contradicción o hace trampas (por ejemplo, si los límites del intervalo de búsqueda se cruzan porque el límite inferior supera al superior), deteniendo el programa con un mensaje de alerta justificativo.

(c) Justifica formalmente cuál es el número máximo de intentos que necesitará la computadora para adivinar cualquier número en el rango $[1, 100]$ y predice cuántos intentos máximos se requerirían si el rango se ampliara a $[1, 1\,000]$.

Resolver
Practica★★★
Diseña en pseudocódigo el algoritmo de control para un semáforo de cruce peatonal regulado por pulsador que gestione de forma segura el tráfico de una avenida con los…

Diseña en pseudocódigo el algoritmo de control para un semáforo de cruce peatonal regulado por pulsador que gestione de forma segura el tráfico de una avenida con los siguientes requisitos:

  1. En reposo, el semáforo vehicular permanece en verde.

  2. Para evitar retenciones provocadas por llamadas continuas, debe garantizarse un tiempo mínimo de verde vehicular de $30$ segundos entre dos fases peatonales consecutivas.

  3. Una vez transcurrido dicho tiempo mínimo y detectada la pulsación de un peatón, la secuencia obligatoria es: ámbar vehicular durante $3$ segundos, rojo vehicular y verde peatonal durante $15$ segundos, y finalmente verde peatonal parpadeante durante $4$ segundos antes de restablecer el verde vehicular.

(a) Escribe el pseudocódigo del sistema estructurado dentro de un bucle continuo de supervisión.

(b) Analiza qué fallo de bloqueo sufriría el cruce si el sensor se averiara en estado activo continuo (pulsador atascado) y justifica cómo tu diseño previene que la avenida quede colapsada indefinidamente.

(c) Justifica técnicamente por qué en sistemas de control concurrentes en tiempo real es preferible consultar una marca temporal de reloj (tiempo_actual()) en lugar de suspender la CPU mediante esperas bloqueantes pasivas (esperar()).

Resolver
Practica★★★
Analiza el siguiente algoritmo que procesa pares de índices $(i, j)$: (a) Deduce y justifica algebraicamente una fórmula que exprese cuántas veces en total se evalúa la…

Analiza el siguiente algoritmo que procesa pares de índices $(i, j)$:

inicio

    leer N

    contador ← 0

    para i desde 1 hasta N hacer

        para j desde i hasta N hacer

            si (i + j) mod 2 = 0 entonces

                contador ← contador + 1

            fin si

        fin para

    fin para

    escribir contador

fin

(a) Deduce y justifica algebraicamente una fórmula que exprese cuántas veces en total se evalúa la condición si en función de $N$ (calculando la suma de iteraciones del bucle interno respecto al externo).

(b) Predice el valor final exacto de contador si la entrada es $N = 5$, elaborando una tabla de traza que muestre los valores de $i$, $j$, el resultado de la condición y las actualizaciones de contador.

(c) Un estudiante afirma: «Como el bucle anidado recorre parejas de números, cambiar para j desde i hasta N por para j desde 1 hasta N y dividir el resultado final entre $2$ produciría exactamente el mismo resultado para cualquier $N$». Demuestra mediante un razonamiento formal o un contraejemplo si dicha afirmación es verdadera o falsa.

Resolver
Practica★★★
Un analista de ciberseguridad revisa el siguiente pseudocódigo diseñado para controlar el acceso con tarjeta y PIN en un terminal bancario: (a) Identifica y justifica un…

Un analista de ciberseguridad revisa el siguiente pseudocódigo diseñado para controlar el acceso con tarjeta y PIN en un terminal bancario:

inicio

    pin_secreto ← 3852

    intentos ← 0

    bloqueada ← falso

    mientras intentos < 3 y no bloqueada hacer

        leer pin_ingresado

        si pin_ingresado = pin_secreto entonces

            escribir "Bienvenido al sistema"

        si no

            intentos ← intentos + 1

            escribir "PIN incorrecto"

        fin si

    fin mientras

    si intentos = 3 entonces

        bloqueada ← verdadero

        escribir "Tarjeta bloqueada por seguridad"

    fin si

fin

(a) Identifica y justifica un fallo grave de control de flujo que ocurre cuando el usuario ingresa el PIN correcto en el primer intento.

(b) Predice el comportamiento del programa y el valor final de las variables intentos y bloqueada si el usuario ingresa la secuencia de entradas: 1111, 3852, 9999.

(c) Reescribe el algoritmo en pseudocódigo corrigiendo el flujo de ejecución para garantizar una salida limpia inmediata tras el acierto y un bloqueo estricto tras tres fallos consecutivos, asegurando que bajo ninguna circunstancia se muestre el mensaje de bienvenida si la tarjeta queda bloqueada.

Resolver
Practica★★★
En el diseño de una instalación hidráulica se utilizan bujes cilíndricos de fundición nodular de sección anular (corona circular) con una densidad…

En el diseño de una instalación hidráulica se utilizan bujes cilíndricos de fundición nodular de sección anular (corona circular) con una densidad $\rho = 7.2\text{ g/cm}^3$.

(a) Diseña en pseudocódigo una función area_anillo(radio_int, radio_ext) que calcule y devuelva el área de la corona circular ($\pi \times (r_{ext}^2 - r_{int}^2)$). La función debe validar que $radio\_ext > radio\_int > 0$; si los parámetros incumplen esta condición física, debe devolver $-1.0$ como código de error. Considera $\pi \approx 3.1416$.

(b) Diseña una segunda función masa_tubo(radio_int, radio_ext, longitud, densidad) que invoque a area_anillo para calcular el volumen y la masa total del tramo en kilogramos (considerando que las dimensiones se introducen en centímetros y la densidad en $\text{g/cm}^3$). Si area_anillo devuelve error o la longitud es menor o igual a cero, la función debe propagar el valor $-1.0$.

(c) Realiza la traza completa de la ejecución de masa_tubo(4{,}0, 5{,}0, 100{,}0, 7{,}2), indicando los valores que entran y salen de cada función y justificando el resultado numérico obtenido.

Resolver
Practica★★★
La comisión de garantía de calidad de una escuela evalúa el siguiente algoritmo, destinado a determinar la calificación final de un curso técnico a partir de tres…

La comisión de garantía de calidad de una escuela evalúa el siguiente algoritmo, destinado a determinar la calificación final de un curso técnico a partir de tres calificaciones parciales ($N_1, N_2, N_3 \in [0.0; 10.0]$). La normativa oficial establece: «El alumno resulta 'Apto' si la media ponderada ($30\,\%$ para $N_1$, $30\,\%$ para $N_2$ y $40\,\%$ para $N_3$) es igual o superior a $5.0$, siempre y cuando ninguna de las calificaciones individuales sea inferior a $4.0$; en caso contrario, resultará 'No apto'».

inicio

    leer N1, N2, N3

    media ← N1 · 0.3 + N2 · 0.3 + N3 · 0.4

    si media ≥ 5.0 o (N1 ≥ 4.0 y N2 ≥ 4.0 y N3 ≥ 4.0) entonces

        escribir "Apto"

    si no

        escribir "No apto"

    fin si

fin

(a) Explica detalladamente por qué el programa no genera ningún error de sintaxis y se ejecuta con normalidad a pesar de contener un error lógico crítico en la estructura condicional.

(b) Diseña dos ternas de calificaciones de prueba $(N_1, N_2, N_3)$ que pongan en evidencia el fallo del algoritmo: una que cause un falso positivo (el programa declare 'Apto' debiendo ser 'No apto') y otra que cause un falso negativo (o justifica si este último es posible con la expresión actual).

(c) Reescribe el algoritmo en pseudocódigo corrigiendo la condición lógica y añadiendo una comprobación previa que verifique que las tres calificaciones introducidas se encuentren dentro del rango válido $[0.0; 10.0]$.

Resolver
Practica★★★
Un programador novel ha implementado el juego de «adivina el número» utilizando una única función que accede directamente a variables globales: (a) Justifica tres…

Un programador novel ha implementado el juego de «adivina el número» utilizando una única función que accede directamente a variables globales:

variables globales: secreto, intentos

funcion jugar_ronda()

    escribir "Introduce un número (1-100): "

    leer intento

    intentos ← intentos + 1

    si intento = secreto entonces

        escribir "¡Acertaste en ", intentos, " intentos!"

    si no

        si intento < secreto entonces

            escribir "El número secreto es mayor"

        si no

            escribir "El número secreto es menor"

        fin si

    fin si

fin funcion

(a) Justifica tres desventajas de este diseño basándote en los conceptos de acoplamiento, efectos secundarios y falta de cohesión. ¿Por qué mezclar la entrada/salida de la consola con la lógica de comparación impide reutilizar esta función en una interfaz gráfica o en una aplicación web?

(b) Redefine la arquitectura modular creando tres funciones con bajo acoplamiento: una función pura de comparación (que reciba el intento y el secreto y retorne un indicador de resultado), una función de validación de entrada (que verifique el rango $[1, 100]$) y una función de actualización de estado. Especifica para cada una su firma exacta (nombre, parámetros con tipo y tipo de retorno) y sus responsabilidades.

(c) Escribe en pseudocódigo el programa principal que coordine estas funciones mediante paso de parámetros y retornos, sin utilizar ninguna variable global.

Resolver