Programación por bloques
Josué, en la computadora del centro escolar, quiere que su personaje salude, camine hasta una meta y avise cuando llegue. No sabe escribir código, pero sí encajar piezas como en un rompecabezas. ¿Alcanza con eso para decirle a la computadora qué hacer, en qué orden, cuándo repetir y cuándo decidir? Sí, y al final de la página vas a poder armar ese programa.
Las tres estructuras básicas
Un programa es una lista de instrucciones que la computadora ejecuta. En la programación por bloques (en un entorno visual como Scratch) cada instrucción es una pieza que se encaja con las demás. No hay que escribir código, pero la lógica es la misma que en pseudocódigo o en Python: «repetir» equivale a un bucle, «si … entonces» a un condicional.
Cualquier programa, por complicado que parezca, es una combinación de estas tres piezas.
Explicá con tus palabras qué hacen las tres estructuras básicas de un programa —secuencia, bucle y condicional— y poné un ejemplo de la vida diaria de cada una que no…
Explicá con tus palabras qué hacen las tres estructuras básicas de un programa —secuencia, bucle y condicional— y poné un ejemplo de la vida diaria de cada una que no tenga que ver con computadoras.
Un programa tiene estos bloques sueltos: «decir ¡Adiós!», «al hacer clic en la bandera», «esperar un momento», «decir ¡Hola!». Ordenalos en la pila correcta y describí…
Un programa tiene estos bloques sueltos: «decir ¡Adiós!», «al hacer clic en la bandera», «esperar un momento», «decir ¡Hola!». Ordenalos en la pila correcta y describí qué ocurrirá exactamente al ejecutar el programa.
El programa de la figura, formado por bloques encajados, debería hacer que un personaje recorra el cuadrado punteado y avise al terminar, pero dentro del bucle falta un…
El programa de la figura, formado por bloques encajados, debería hacer que un personaje recorra el cuadrado punteado y avise al terminar, pero dentro del bucle falta un bloque.
Indicá qué bloque falta dentro del bucle para que el personaje complete el recorrido del cuadrado y explicá qué hace cada parte del programa.
Un programa tiene esta pila: «al hacer clic en la bandera», «decir 3», «esperar un momento», «decir 2», «esperar un momento», «decir 1», «decir ¡Ya!». Describí con…
Un programa tiene esta pila: «al hacer clic en la bandera», «decir 3», «esperar un momento», «decir 2», «esperar un momento», «decir 1», «decir ¡Ya!». Describí con detalle qué verá y qué escuchará el usuario desde que hace clic en la bandera hasta el final, y explicá qué utilidad tienen las esperas.
Eventos, movimiento y el escenario
Un proyecto puede tener varias pilas, cada una con su propio evento, y funcionan de forma independiente: por ejemplo, una pila que mueve al personaje con las flechas y otra que lo hace saludar al hacer clic sobre él.
Para mover personajes necesitás ubicarlos. El escenario es un plano de coordenadas: x es la posición horizontal, y la vertical, y el centro es $(0, 0)$.
Los bloques de evento deciden cuándo empieza a funcionar una pila de bloques. Explicá qué hace arrancar cada uno de estos tres eventos: «al presionar la bandera», «al…
Los bloques de evento deciden cuándo empieza a funcionar una pila de bloques. Explicá qué hace arrancar cada uno de estos tres eventos: «al presionar la bandera», «al presionar la tecla espacio» y «al hacer clic en el personaje», y describí qué pasaría si un proyecto tiene dos pilas distintas con dos eventos distintos.
Estos bloques de apariencia están sueltos: «cambiar al disfraz de pirata», «decir ¡Hola, me llamo Marco! durante 2 segundos», «al hacer clic en la bandera», «esperar 1…
Estos bloques de apariencia están sueltos: «cambiar al disfraz de pirata», «decir ¡Hola, me llamo Marco! durante 2 segundos», «al hacer clic en la bandera», «esperar 1 segundo». Ordenalos para presentar a un personaje que primero saluda y luego se disfraza, y describí lo que verá el espectador.
El escenario de un programa por bloques funciona como un mapa de coordenadas: la «x» indica la posición horizontal y la «y» la vertical, y el centro es el punto…
El escenario de un programa por bloques funciona como un mapa de coordenadas: la «x» indica la posición horizontal y la «y» la vertical, y el centro es el punto $(0, 0)$. Explicá dónde aparecerá el personaje con el bloque «ir a x: 0, y: 0» y hacia dónde se moverá si la «x» aumenta o si la «y» disminuye.
Variables y bucles controlados
Además de «repetir 10 veces» hay dos bucles más:
| Bucle | Cuándo termina | Conviene si… |
|---|---|---|
| repetir n veces | después de n vueltas | sabés cuántas veces |
| repetir hasta que (condición) | cuando la condición se cumple | no sabés cuántas, pero sí cuándo parar (llegar a la meta) |
| por siempre | nunca (hasta detener el programa) | vigilar algo todo el tiempo |
Si en «repetir hasta que» la condición nunca llega a cumplirse, el bucle es infinito: el programa queda dando vueltas.
La animación muestra cómo una variable controla un bucle: seguí el resaltado.
Un programa quiere contar del uno al diez con estos bloques: «repetir 10 veces: decir el número; sumar 1 al número». Al ejecutarlo, la cuenta no empieza en uno y, cada…
Un programa quiere contar del uno al diez con estos bloques: «repetir 10 veces: decir el número; sumar 1 al número». Al ejecutarlo, la cuenta no empieza en uno y, cada vez que se vuelve a ejecutar, empieza en un número distinto. Explicá qué bloque falta y dónde debería colocarse, y en qué posición de la pila hay que poner el valor inicial del número.
Para animar un personaje se usa «repetir 4 veces: siguiente disfraz; esperar medio segundo». Explicá qué consigue ese bucle y calculá cuánto dura la animación completa…
Para animar un personaje se usa «repetir 4 veces: siguiente disfraz; esperar medio segundo». Explicá qué consigue ese bucle y calculá cuánto dura la animación completa si cada espera es de $0.5\ \text{s}$ y el cambio de disfraz es instantáneo.
La figura muestra dos programas que mueven a un personaje con dos tipos de bucle distintos. Explicá qué diferencia hay entre los dos bucles, poné una situación en la que…
La figura muestra dos programas que mueven a un personaje con dos tipos de bucle distintos.
Explicá qué diferencia hay entre los dos bucles, poné una situación en la que convenga usar cada uno y razoná qué puede ocurrir con el bucle de la derecha si la meta no existiera.
La figura muestra un programa con una variable llamada «puntos» que controla un bucle. Hacé la traza del programa: indicá cuántas veces se ejecuta el bucle y cuántos…
La figura muestra un programa con una variable llamada «puntos» que controla un bucle.
Hacé la traza del programa: indicá cuántas veces se ejecuta el bucle y cuántos pasos da el personaje en total. Después razoná qué ocurriría si el bloque «poner puntos a 0» estuviera dentro del bucle en lugar de antes.
Listas
Una variable guarda un solo valor. Cuando necesitás guardar varios (los nombres de los estudiantes, las compras del mercado), usás una lista: una variable con muchos elementos numerados. En bloques hay «añadir cosa a lista», «eliminar el elemento 2 de lista», «reemplazar el elemento 1 de lista por…» y «elemento 3 de lista». En pseudocódigo se escribe Agregar "mango" a frutas, Eliminar frutas[2] y Escribir frutas[3].
Condicionales y operadores lógicos
El bloque «si … entonces» ejecuta lo que tiene adentro solo si la condición es verdadera. Con «si … entonces … si no» hay un camino para cada caso.
Para que el programa vigile algo durante todo el juego, el condicional se mete adentro de un «por siempre». Por ejemplo, para que suene un «miau» justo cuando el perro alcanza al gato:
«por siempre: si ¿tocando perro? entonces tocar sonido miau».
Anidar es poner un «si» dentro de otro: se comprueba la primera condición y, solo si se cumple, la segunda. Eso se parece a un «y», pero en dos pasos.
En un juego, un gato corre por el escenario y un perro lo persigue. Explicá dónde colocarías el bloque «tocar sonido miau» para que suene exactamente cuando el perro…
En un juego, un gato corre por el escenario y un perro lo persigue. Explicá dónde colocarías el bloque «tocar sonido miau» para que suene exactamente cuando el perro alcanza al gato, qué bloque de comprobación lo acompaña y qué pasaría si el sonido estuviera fuera de esa comprobación.
Describí con tus palabras los bloques de un programa que pregunta la edad del usuario y responde «puedes pasar» si tiene 14 años o más, y «lo siento» en caso contrario.…
Describí con tus palabras los bloques de un programa que pregunta la edad del usuario y responde «puedes pasar» si tiene 14 años o más, y «lo siento» en caso contrario. Indicá qué tipo de bloque de decisión usarías y qué comprobación haría exactamente.
Una cafetería de la colonia regala un café solo a los socios y solo antes de las 10 de la mañana. Describí los bloques de decisión anidados del programa que lo comprueba…
Una cafetería de la colonia regala un café solo a los socios y solo antes de las 10 de la mañana. Describí los bloques de decisión anidados del programa que lo comprueba y explicá la diferencia entre poner dos «si» uno dentro de otro y poner dos «si» seguidos, usando este ejemplo.
Los bloques de operadores «y», «o» y «no» combinan comprobaciones. Explicá qué hace cada uno y describí las condiciones completas de estos dos sistemas: una puerta que…
Los bloques de operadores «y», «o» y «no» combinan comprobaciones. Explicá qué hace cada uno y describí las condiciones completas de estos dos sistemas: una puerta que se abre si la tarjeta es válida y además la huella coincide, y una alarma que suena si se abre la ventana o se rompe el cristal.
Errores típicos en juegos: velocidad, valores iniciales y orden
Depurar es encontrar y corregir errores. Tres fallos aparecen una y otra vez en los juegos hechos con bloques.
1. El bucle «por siempre» es muy rápido. Se ejecuta decenas de veces por segundo. Si adentro hay «si tocando Moneda entonces cambiar Puntos por 1», mientras el personaje siga tocando la moneda (aunque sea una fracción de segundo) la condición será verdadera en muchas vueltas seguidas y sumará muchas veces. Solución: después de sumar, «esconder» la moneda o agregar «esperar 1 segundo» (o esperar hasta que deje de tocar).
2. Valor inicial de un récord. Si buscás la máxima puntuación, el récord empieza en 0 y se reemplaza cuando la puntuación lo supera. Si buscás el menor tiempo, empezar en 0 es un error: ningún tiempo es menor que 0, así que nunca se actualiza. Hay que iniciar el récord en un valor muy grande (por ejemplo 9999), o actualizarlo también cuando valga 0.
3. Comparar con «=» cuando el valor puede pasarse. Si Vidas baja de 2 en 2 desde 3, llega a 1 y luego a -1: nunca vale exactamente 0. Usá «Vidas < 1» (o «Vidas ≤ 0»). Además, la comprobación de fin debe estar dentro del «por siempre»; si está antes, se revisa una sola vez al empezar.
En un videojuego, se ha incluido este bloque dentro del bucle «por siempre» del personaje principal: «si <tocando Moneda?> entonces [cambiar Puntos por 1]» «si <tocando…
En un videojuego, se ha incluido este bloque dentro del bucle «por siempre» del personaje principal:
-
«si entonces [cambiar Puntos por 1]»
-
«si entonces [cambiar Vidas por -1]»
-
«si entonces [detener todos]»
Al probarlo, se detectan dos fallos graves: al tocar una única moneda el contador sube de golpe entre 15 y 20 puntos, y al rozar a un enemigo las 3 vidas se pierden de forma instantánea.
- a) Justificá técnicamente por qué ocurre esto teniendo en cuenta la velocidad de ejecución de los bucles por segundo.
- b) Diseñá la modificación necesaria en los bloques de la moneda y del personaje para corregir ambos comportamientos sin pausar el movimiento general del juego (considerá ocultar/destruir objetos y períodos de invulnerabilidad).
En un juego de contrarreloj se quiere registrar el récord del menor tiempo empleado en completar un circuito. Un alumno escribe este código al llegar a la meta: «si…
En un juego de contrarreloj se quiere registrar el récord del menor tiempo empleado en completar un circuito. Un alumno escribe este código al llegar a la meta:
«si <Tiempo_Partida < Récord> entonces [fijar Récord a Tiempo_Partida]»
Sin embargo, al jugar por primera vez tras crear la variable Récord (que Scratch inicializa por defecto en 0), el récord nunca se actualiza, sin importar lo rápido que vaya el carro.
- a) Justificá por qué falla esta comprobación y explicá la diferencia de inicialización entre buscar un récord de máxima puntuación y uno de tiempo mínimo.
- b) Diseñá la estructura de bloques que resuelva este problema para la primera partida y las siguientes sin tener que escribir manualmente un valor inicial ficticio antes de pulsar la bandera verde.
Un juego de plataformas tiene este script en el personaje: «al presionar bandera verde: fijar Vidas a 3 si <Vidas = 0> entonces [detener todos] por siempre: si <tocando…
Un juego de plataformas tiene este script en el personaje:
«al presionar bandera verde:
fijar Vidas a 3
si entonces [detener todos]
por siempre:
si <tocando Trampa?> entonces:
cambiar Vidas por -2
esperar 0.5 s»
El juego presenta dos fallos: la partida nunca termina aunque el jugador toque la trampa repetidamente, y si un jugador cae en la trampa teniendo 1 vida, el marcador pasa a -1 vidas sin detener el juego.
- a) Justifica por qué la comprobación de fin de partida tal como está colocada no detiene el juego en ningún momento.
- b) Explica por qué utilizar la condición estricta es un error de diseño cuando el daño resta más de 1 vida.
- c) Diseña la solución reubicando y modificando los bloques condicionales para asegurar que la partida finalice exactamente cuando las vidas se agoten o queden por debajo de cero.
Comunicación entre personajes
En un proyecto hay dos personajes: un botón y un mago. Al hacer clic en el botón, el mago debe aparecer. Explicá para qué sirven los bloques de «enviar mensaje» y «al…
En un proyecto hay dos personajes: un botón y un mago. Al hacer clic en el botón, el mago debe aparecer. Explicá para qué sirven los bloques de «enviar mensaje» y «al recibir mensaje», describí las pilas de bloques que llevaría cada personaje y razoná por qué no basta con poner los bloques del mago dentro del botón.
Resumen
Volvé al principio: el programa de Josué se arma con un evento («al presionar la bandera»), una secuencia (decir ¡Hola!), un bucle («repetir hasta que tocando meta: mover 10 pasos») y un aviso final. Con las tres estructuras alcanza.