Volver a la portadaPensamiento Computacional y Programación · III-IV medio · Cambiar asignatura
Empezar gratis
Diferenciado M2 · Pensamiento Computacional y Programación
Sistemas informáticos · Programación textual

Las estructuras de un programa

Te conviene dominar: Algoritmos y pensamiento computacional (I medio)

El cajero automático de un banco te pide la clave, te deja equivocarte tres veces y después bloquea la tarjeta. Detrás hay un programa, y por complejo que sea siempre se arma con las mismas piezas: variables que guardan datos, decisiones que eligen un camino, repeticiones que ejecutan lo mismo varias veces y funciones con nombre. Aquí aprendes a leer y diseñar esas piezas en pseudocódigo y diagramas de flujo. Al final volveremos al cajero.

Variables, constantes y tipos de dato

Código de asignación con la constante IVA, que se fija una vez, y la variable precio, que cambia de valor al sumarle el impuesto. IVA ← 0,19 precio ← 20000 precio ← precio + precio · IVA constante variable no cambia cambia

Piensa en un videojuego: la variable puntos empieza en 0 y sube cada vez que pasas de nivel con puntos ← puntos + 100. En cambio, el IVA de 19 % de una tienda en línea se guarda en una constante, porque no debe cambiar mientras el programa corre. Así, un producto de $\$20.000$ queda en $\$23.800$ con el impuesto (el 19 % de 20.000 son 3.800).

Listas y registros

Cuando hay muchos datos del mismo tipo, como las notas de un curso, no conviene crear una variable para cada uno: se usa una lista (arreglo), una variable con varios valores ordenados por posición. Por ejemplo, notas ← [5,5; 4,0; 6,2] y notas[1] es la primera nota. Si los datos son de distinto tipo pero describen una misma cosa, se agrupan en un registro: un estudiante con nombre (texto), rut (texto) y promedio (decimal). Una tabla de registros es una lista de estudiantes.

Practica★☆☆Sin empezar
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★☆☆Sin empezar
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 de IVA).

Resolver
Practica★☆☆Sin empezar
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 pasado de curso o no.

Resolver
Practica★☆☆Sin empezar
Lee este fragmento y haz la traza: Indica qué valor se muestra en 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 pantalla y explica por qué la segunda instrucción no es una ecuación matemática sino una asignación.

Resolver

Operadores: aritméticos, relacionales y lógicos

Con las variables se construyen expresiones usando operadores. Hay tres familias:

Familia Operadores Resultado
Aritméticos +, −, ·, /, mod un número
Relacionales <, ≤, >, ≥, =, ≠ verdadero o falso
Lógicos y, o, no verdadero o falso

Su uso más común es la divisibilidad: a es divisible entre b justo cuando a mod b = 0. Así, n mod 2 = 0 indica que n es par, y n mod 2 = 1 que es impar.

Estructuras condicionales (selectivas)

Practica★☆☆Sin empezar
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★★☆Sin empezar
Escribe en pseudocódigo un programa que lea la nota de una prueba (un número de 0 a 10) y escriba «apto» si la nota es 5 o mayor, y «no apto» en caso contrario. Usa una…

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

Resolver
Practica★★☆Sin empezar
Este programa clasifica a una persona según su edad: Haz la traza para una entrada de 17 y para una de 21, indicando en cada caso qué condición se evalúa y qué 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 la traza 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 pantalla.

Resolver

Comentarios en el código

Un comentario es texto dentro del código fuente que el computador ignora. Va dirigido a las personas que leerán el programa después (tu equipo o tú dentro de un mes).

Un buen comentario explica el porqué de una decisión, no lo que ya se ve en la línea.

Comentario Valoración
// suma 1 a n Inútil: repite lo que dice el código
// el IVA es 19 %; la boleta debe mostrarlo aparte Útil: explica una decisión
Practica★☆☆Sin empezar
¿Qué es un comentario en el código fuente? Explica a quién van dirigidos los comentarios (no al computador, sino a quien leerá el código después) y qué debe explicar un…

¿Qué es un comentario en el código fuente? Explica a quién van dirigidos los comentarios (no al computador, 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

Estructuras repetitivas: ciclos y su traza

Diagrama de flujo de un ciclo mientras: se lee n y, mientras n sea mayor que 0, se escribe n y se resta 1; cuando deja de cumplirse, el programa termina. inicio leer n n > 0 ? sí escribir n n ← n − 1 no fin

Por ejemplo, para escribir los números del 1 al 5 no hace falta cinco instrucciones escribir: basta un ciclo con una variable que cuenta.

El ciclo para (con contador)

Cuando sabes de antemano cuántas vueltas dar, el ciclo para es más cómodo: él mismo crea el contador, lo hace avanzar de 1 en 1 y lo comprueba. Se escribe para i desde 1 hasta 5 hacer ... fin para. Equivale a un mientras con i ← 1, la condición i ≤ 5 y la instrucción i ← i + 1 al final del cuerpo, pero no puedes olvidar el incremento.

Los ciclos para se pueden anidar: por cada valor del contador exterior, el interior recorre todos sus valores. Si el interior va desde i hasta N, sus vueltas dependen de i: con N = 3, para i = 1 da 3 vueltas, para i = 2 da 2 y para i = 3 da 1, en total 6.

Practica★☆☆Sin empezar
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★★☆Sin empezar
Lee este programa en pseudocódigo: Haz el seguimiento paso a paso (valor de suma y de n al final de cada vuelta) e indica cuántas veces se repite el ciclo 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 el seguimiento paso a paso (valor de suma y de n al final de cada vuelta) e indica cuántas veces se repite el ciclo y qué valor se escribe al final.

Resolver
Practica★★☆Sin empezar
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★★☆Sin empezar
Escribe en pseudocódigo un programa que escriba la cuenta atrás del 10 al 1 y, al terminar el bucle, escriba «¡despegue!». Usa una variable y un bucle mientras.

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

Resolver
Practica★★☆Sin empezar
Este programa suma los números que ingresa 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 tras…

Este programa suma los números que ingresa 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★★☆Sin empezar
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

Combinar ciclos y condicionales

Diagrama de flujo de un control de acceso: tras poner intentos a 0, un ciclo comprueba si quedan intentos, lee la clave y, si es incorrecta, suma un intento y vuelve a comprobar; si es correcta permite el acceso, y si no quedan intentos lo bloquea. inicio intentos ← 0 ¿quedan intentos? no Acceso bloqueado sí leer clave ¿clave correcta? sí Acceso permitido no intentos ← intentos + 1

Una condición compuesta en un ciclo puede dejar de actualizarse: si la condición usa una variable que solo se cambia después del ciclo, el ciclo sigue mientras no ocurra otra cosa. Al analizar un programa, haz una tabla de seguimiento con todas las variables de la condición.

Practica★★☆Sin empezar
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★★★Sin empezar
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 congestión provocada 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: amarillo 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

Funciones: dividir el programa en piezas

La función area_circulo se escribe una vez y se llama dos veces: con radio 1 devuelve un área de 3,14 y con radio 2 devuelve 12,57, el cuádruple. función area_circulo(radio) devolver π·radio² escribir area_circulo(1) radio = 1 ≈ 3,14 escribir area_circulo(2) radio = 2 ≈ 12,57

Una función es una generalización: en vez de calcular 5 · 3 para un caso, escribes area(base, altura) y sirve para cualquier rectángulo. Dos ventajas de trocear el código en funciones: reutilizas sin copiar y puedes entender y probar cada parte por separado.

Variables locales y globales (ámbito)

El ámbito de una variable es la parte del programa donde existe y puede usarse. Una variable local se crea dentro de una función y desaparece cuando la función termina; solo esa función la ve. Una variable global se declara fuera de todas las funciones y cualquier función puede leerla y modificarla.

Parece cómodo que todas las funciones compartan variables globales, pero tiene costos. Hay acoplamiento: la función depende de variables que están fuera de ella, así que no se puede reutilizar en otro programa sin llevarse esas variables. Es difícil de probar: su resultado depende del estado oculto del programa y no solo de lo que recibe. Y es fácil de romper: cualquier otra función puede cambiar la variable global sin que te des cuenta.

Una función puede validar sus parámetros y devolver un valor de error, y también puede llamar a otra función.

Por eso una buena función recibe sus datos por parámetros, calcula con variables locales y entrega el resultado con devolver. Así, la misma entrada produce siempre la misma salida y cada pieza se entiende por separado.

Diseño Cómo obtiene los datos Consecuencia
Con globales Lee secreto e intentos de fuera Atada a ese programa; difícil de probar
Con parámetros Recibe secreto e intentos al llamarla Reutilizable; se prueba con cualquier valor
Practica★☆☆Sin empezar
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★★★Sin empezar
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 el bloqueo estricto tras tres fallos consecutivos, asegurando que bajo ninguna circunstancia se muestre el mensaje de bienvenida si la tarjeta queda bloqueada.

Resolver
Practica★★★Sin empezar
La comisión de garantía de calidad de un establecimiento evalúa el siguiente algoritmo, destinado a determinar la calificación final de un módulo técnico a partir de…

La comisión de garantía de calidad de un establecimiento evalúa el siguiente algoritmo, destinado a determinar la calificación final de un módulo técnico a partir de tres notas parciales ($N_1, N_2, N_3 \in [0{,}0; 10{,}0]$). La normativa oficial establece: «El alumno resulta 'Apto' si el promedio ponderado ($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 notas individuales sea inferior a $4{,}0$; en caso contrario, resultará 'No apto'».

inicio

    leer N1, N2, N3

    promedio ← N1 · 0,3 + N2 · 0,3 + N3 · 0,4

    si promedio ≥ 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 tríos de notas de prueba $(N_1, N_2, N_3)$ que pongan en evidencia el fallo del algoritmo: uno que cause un falso positivo (el programa declare 'Apto' debiendo ser 'No apto') y otro 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 notas introducidas se encuentren dentro del rango válido $[0{,}0; 10{,}0]$.

Resolver

Resumen

Ver todos los ejercicios de este apartado