Las estructuras de un programa
El cajero automático de un banco en la Sexta Avenida te pide el PIN, 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, como ampliación, funciones con nombre. Aquí repasas cómo leer y diseñar esas piezas en pseudocódigo y diagramas de flujo. Al final volveremos al cajero.
Variables, constantes y tipos de dato
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 12 % de una tienda en línea de Quetzaltenango se guarda en una constante, porque no debe cambiar mientras el programa corre. Así, un producto de Q250 queda en Q280 con el impuesto, porque $250 + 250 \cdot 0.12 = 280$.
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?
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).
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 ganado la clase o no.
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.
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)
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.
Escribe en pseudocódigo un programa que lea el punteo de un examen (un número de 0 a 10) y escriba «apto» si el punteo es 5 o mayor, y «no apto» en caso contrario. Usa…
Escribe en pseudocódigo un programa que lea el punteo de un examen (un número de 0 a 10) y escriba «apto» si el punteo es 5 o mayor, y «no apto» en caso contrario. Usa una variable, una lectura de dato y una estructura condicional.
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.
Comentarios en el código
Un comentario es texto dentro del código fuente que la computadora 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 12 %; algunos productos están exentos |
Útil: explica una decisión |
¿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).
Estructuras repetitivas: ciclos y su traza
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.
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.
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.
El diagrama de flujo de la figura representa un programa con un ciclo: 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 ciclo: 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.
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 ciclo; (c) explica qué ocurriría si el usuario introdujera n = 0.
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.
Leer dentro del ciclo (centinela)
A veces no sabes cuántas vueltas habrá: el ciclo termina cuando el usuario escribe un valor especial, como 0, llamado centinela. Se lee un dato antes del ciclo para que la condición tenga con qué comprobarse la primera vez, y se vuelve a leer al final del cuerpo para que la condición pueda cambiar.
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 ciclo.
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
- a) Identifica el error: ¿qué le falta al cuerpo del bucle?
- b) Explica qué ocurre al ejecutar el programa tal como está escrito.
- c) Escribe el pseudocódigo corregido.
Combinar ciclos y condicionales
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.
(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.
Funciones: dividir el programa en piezas
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.
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 |
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).