Guía de respuestas de Snap!

Esta guía te mostrará cómo emparejar los procedimientos en el lenguaje del examen de AP con los bloques en Snap!. Si necesitas una introducción rápida a la programación en Snap!, echa un vistazo al Curso intensivo de Snap!.

Asignación, visualización y entrada

Existen diferencias significativas entre el lenguaje utilizado en el examen de AP y Snap! en esta sección.

En el examen de AP
En Snap!
Notas
a ← expresión
fijar (a) a (expresión)

En Snap!, debes crear una variable primero, antes de asignarla un valor. Puedes usar el botón Declarar variable en la paleta de Variables para crear una variable globar o variables de programa (a) para crear una variable local (programa).

DISPLAY (expresión)
decir (expresión)
Variaciones de decir:
decir (¡Hola!) durante (2) s
pensar (Hmm...)
pensar (Me pregunto si...) durante (5) s
Otra forma de visualizarlo:
escribir (¡Bienvenido jugador!) tamaño (12)

Hay varias formas de mostrar datos al usuario en Snap!. Una manera es en forma de globos de texto que son "pronunciados" por los objetos del escenario. Aquí está el comportamiento que resulta al ejecutar la instrucción decir (expresión):
objeto de punta de flecha diciendo la palabra 'expresión' en un globo de diálogo

En Snap!, también existen variaciones de este bloque como:

El bloque escribir es muy diferente, pero todavía es una forma de salida para el usuario. Escribe los contenidos de la primera ranura de entrada en el escenario en el tamaño de letra escrito en la segunda ranura de entrada.

INPUT ()
preguntar () y esperar
respuesta
En Snap!, la entrada del usuario siempre se solicita ejecutando un comando preguntar. Al usuario se le hace la pregunta que se ha escrito en la ranura de entrada de preguntar, y su respuesta se puede acceder utilizando el bloque respuesta, que se puede colocar en una ranura de entrada al igual que una variable.

Operadores aritméticos y procedimientos numéricos

En esta sección, no hay diferencias importantes entre el lenguaje utilizado en el examen de AP y Snap!.

En el Examen de AP
En Snap!
Notas
a + b

a – b

a * b

a / b
(a) + (b)
(a) – (b)
(a) * (b)
(a) / (b)

Estos bloques son directos. Puedes colocar cualquier expresión numérica en las ranuras de entrada, incluyendo números o variables. Por ejemplo: (b) / (2) o ((5) × (c)) + (3)

a MOD b
(a) módulo (b)

Igual que antes: Puedes utilizar cualquier expresión numérica como entrada. Por ejemplo: (((5) × (c)) + (3)) módulo (7)

RANDOM (a, b)
número al azar entre (a) y (b)

Igual que antes: puedes utilizar cualquier expresión numérica como entrada.

Operadores relacionales y booleanos

Hay una diferencia entre el lenguaje utilizado en el examen de AP y Snap! en esta sección: tendrás que crear algunos procedimientos tú mismo.

En el Examen de AP
En Snap!
Notas
a = b

a ≠ b

a > b

a < b

a ≥ b

a ≤ b

(a) = (b)
No hay bloque .
(a) > (b)
(a) < (b)
No hay bloque .
No hay bloque .

La forma del bloque hexagonal indica que se trata de un bloque predicado; solo reporta (devuelve) verdadero o falso.

No existen los bloques (no es igual), (mayor o igual) ni (menor o igual) ya construidos en Snap!, pero son fáciles de construir: no ((a) = (b)), no ((a) > (b)), and no ((a) < (b)).

NOT condición
no ()

Las ranuras de entrada hexagonales indican que se espera una expresión de tipo predicado (verdadero/falso) como entrada (una condición).

condición1 AND condición2
() y ()

Igual que antes: las ranuras de entrada hexagonales requieren entradas de tipo predicado.

condición1 OR condición2
() or ()

Igual que antes: las ranuras de entrada hexagonales requieren entradas de tipo predicado.

Selección

No hay diferencias importantes entre el lenguaje utilizado en el examen de AP y Snap! en esta sección.

En el Examen de AP
En Snap!
Notas
IF (condición)
{
    <bloque de enunciados>
}
si

Este es un ejemplo de cómo el enunciado si se vería en Snap! cuando tiene una condición y una secuencia de enunciados:
si (puntuación del jugador > 100)
                    {
                        ir a x: (0) y: (0)
                        decir (¡Ganaste!)
}

IF (condición)
{
    <primer bloque de enunciados>
}
ELSE
{
    <segundo bloque de enunciados>
}
si / si no

Este es un ejemplo de cómo el enunciado si / si no se vería en Snap! cuando tiene una condición y dos secuencias de enunciados:
si (puntuación del jugador 1 > puntuación del jugador 2)
{
    ir a x: (100) y: (0)
    decir (¡Ganó el jugador 1!)
}
si no
{
    ir a x: (-100) y: (0)
    decir (¡Ganó el jugador 2!)
}

Iteración

No hay diferencias significativas entre el lenguaje utilizado en el examen de AP y Snap! en esta sección.

En el Examen de AP
En Snap!
Notas
REPEAT n TIMES
{
    <bloque de enunciados>
}
repetir

Este es un ejemplo de cómo el enunciado repetir se vería en Snap! cuando tiene un número como entrada y una secuencia de enunciados:
repetir (4) veces
{
    mover (100) pasos
    girar ↻ (90) grados
} objeto de punta de flecha acaba de dibujar un cuadrado

REPEAT UNTIL (condición)
{
    <bloque de enunciados>
}
repetir hasta que

Este es un ejemplo de cómo el enunciado repetir hasta que se vería en Snap! cuando tiene un número como entrada y una secuencia de enunciados:
fijar (longitud de cuadriral) a (100)
reptir hasta que (longitud de cuadriral) < 30
{
    mover (longitud de cuadriral) pasos
    girar ↻ (90) grados
    incrementar (longitud de cuadriral) en (-5)
} objeto punta de flecha acaba de dibujar una espiral cuadrada pero se detuvo antes de llegar al centro

Operaciones de lista

Existen solamente pequeñas diferencias en la redacción y estructura entre el lenguaje utilizado en el examen de AP y Snap! en esta sección.

En el Examen de AP
En Snap!
Notas
lista[i]
elemento (i) de (lista)

Por ejemplo,
lista (hola) (adiós) reporta la listat [hola, adiós]
elemento (2) de (lista (hola) (adiós)) reporta 'adiós'

Puedes identificar qué tipo de entrada se espera en cada ranura de entrada de un bloque en Snap! por su forma. Por ejemplo, elemento () de 'ranura de entrada de lista' toma un número como su primera entrada (indicado por la ranura de entrada redonda) y una lista como su segunda entrada (indicado por la pequeña imagen de una lista):
imagen de lista de 2 elementos
Además, hay un menú desplegable para la primera ranura de entrada que te permite seleccionar el primer elemento, el último o un elemento aleatorio de la lista en lugar de escribir un número o arrastrar y soltar una variable.

lista[i] ← lista[j]
reemplazar elemento (i) de (lista) con (elemento (j) de (lista))

A primera vista, esto parece un poco diferente en el examen que en Snap!, pero si lees en voz alta el código de Snap!, queda claro lo que hace: reemplaza el elemento en la posición número i en la lista con el elemento en la posición número j en la lista.

Aquí tienes un ejempo:
reemplazar elemento  (2) de (lista de la compra) con (pan de centeno)

lista ← [valor1, valor2, valor3]
fijar (lista) a (lista (valor1) (valor2) (valor3))

En Snap!, se recomienda no nombrar ninguna variable lista porque hay un bloque llamado lista que crea nuevas listas. Aquí tienes algunos ejemplos de nombres de lista mejores (realmente, cualquier nombre excepto "lista" está bien; ese nombre de variable solo se muestra a la izquierda para que coincida con la hoja de referencia del examen de AP): fijar (lista de la compra) a (lista (manzanas) (bananas) (naranjas) (zanahorias) (pan) (arroz)) fijar (nombres de artistas) a (lista (lista (Ariana) (Grande)) (lista (Bruno) (Mars)) (lista (Selena) (Gomez)) )

FOR EACH elemento IN lista
{
    <bloque de enunciados>
}
para cada (elemento) en (lista)

Puedes cambiar el nombre de la primera variable haciendo clic en ella.

Aquí tienes un ejemplo de cómo podría verse el enunciado para cada en Snap! cuando tiene un nombre de lista real y una instrucción dentro:
para cada (artículo de supermercado) en (lista de la compra) {
    decir (artículo de supermercado) durante (2) s
}

INSERT (lista, i, valor)
insertar (valor) en (i) de (lista)
El comando insertar de Snap! funciona igual que el procedimiento
INSERT
del lenguaje del examen de AP; solo cambia el orden de las entradas.
APPEND (lista, valor)
añadir (valor) a (lista)
El comando añadir de Snap! funciona como el procedimiento
APPEND
; solo cambia el orden de las entradas.
REMOVE (lista, i)
delete (i) of (list)
El comando borrar de Snap! funciona como el procedimiento
REMOVE
; solo cambia el orden de las entradas.
LENGTH (lista)
longitud de (lista)

Recuerda que Snap! tiene dos bloques de longitud:

Puedes distinguirlos por la paleta en la que se encuentran (Variables u Operadores), su color y la forma de su ranura de entrada (una pequeña imagen de una lista o una ranura de escritura blanca para palabras).

Procedimientos

En el Examen de AP
En Snap!
Notas
PROCEDURE nombre (parámetro1, parámetro2, ...)
{
    <instrucciones>
}
Definición del bloque comando en blanco nombre (parámetro1) (parámetro2) {}

En Snap!, los procedimientos que hacen algo se llaman comandos. Los bloques de comandos tienen una forma rectangular de pieza de rompecabezas porque son instrucciones para la computadora diseñadas para encajar una tras otra.

Cuando creas un bloque, eliges el nombre del bloque, los parámetros de entrada y la paleta en la que debería aparecer (el color). Luego, diseñas las instrucciones que se ejecutarán cuando se haga clic en el bloque. Aquí tienes un ejemplo de cómo podría ser la definición de un bloque de comando real en Snap!:
dibujar cuadrado, tamaño: (tamaño) {
   bajar lápiz
    repetir (4) {
        mover (tamaño) pasos
        girar ↻ (90) grados
    }
}

Puedes aprender más acerca de cómo hacer bloques y añadir entradas en la Guía de respuestas de Snap!.

PROCEDURE nombre (parámetro1, parámetro2, ...)
{
    <instrucciones>
    RETURN expresión
}
Definición del bloque reportero en blanco nombre (parámetro1) (parámetro2) {reportar ()}

En Snap!, los procedimientos que reportan (devuelven) un valor se llaman reporteros. Los bloques de reporteros tienen una forma redondeada y se puede hacer clic sobre ellos para reportar un valor al programador, o puedes arrastrarlos a una ranura de entrada vacía de otro bloque para utilizarlos como entrada.

Cuando creas un bloque reportero, la definición del bloque incluye automáticamente un bloque reportar. El valor de la expresión en la ranura de entrada de este bloque reportar es el valor que se devuelve cuando se ejecuta el reportero.

Aquí tienes un ejemplo de cómo se vería una definición de un bloque reportero real en Snap!:
doble (número)
{
    reportar (2 * x (número))
}

Robot

Estos bloques no existen en Snap!, pero Snap! tiene algo similar: el movimiento de los objetos. La gran diferencia es que los bloques de robot en el lenguaje de AP funcionan en una cuadrícula, por lo que el robot solo puede moverse vertical u horizontalmente. En Snap!, los objetos se mueven con mucha más flexibilidad, aunque puedes utilizar bloques de Snap! para simular el movimiento del robot.

En el Examen de AP
Notas sobre cómo recrearlo en Snap!
MOVE_FORWARD ()

En Snap!, puedes usar el bloque mover ( ) pasos para mover el objeto hacia adelante cualquier número de pasos.

En el examen, no puedes asignar una entrada a
MOVE_FORWARD ()
, por lo que si deseas que se mueva más de un cuadrado de la cuadrícula, tienes que llamar al procedimiento repetitivamente.
Puede usar el bloque mover de Snap! para simular el procedimiento
MOVE_FORWARD ()
de AP: basta con usar una entrada que sea exactamente del mismo tamaño que la longitud del lado de los cuadrados de la cuadrícula.
ROTATE_LEFT ()

ROTATE_RIGHT ()

En Snap!, puedes usar los bloques girar ↺ (90) grados y girar ↻ (90) grados para girar el objeto cualquier número de grados.

En el examen, no puedes asignar una entrada a
ROTATE_LEFT ()
o a
ROTATE_RIGHT ()
; estos procedimientos de AP siempre girar exactamente 90 grados ya que se usan solamente para mover a un robot en una cuadrícula.
Puedes usar los bloques girar ↺ o girar ↻ de Snap! para simular los procedimientos
ROTATE_LEFT ()
o
ROTATE_RIGHT ()
de AP: solo usa 90 grados como valor de entrada.
CAN_MOVE (dirección)
En Snap!, hay varias maneras de detectar lo que rodea a un objeto, pero ya que no es un robot, no hay algo como
CAN_MOVE (dirección)
, que devuelva verdadero o falso dependiendo de si el robot puede moverse o no en esa dirección sin chocarse con una pared o caminar fuera del laberinto.

En Snap!, puedes utilizar estos bloques para ayudar a que tus objetos determinen cómo moverse: ¿tocando el color 'ranura de entrada de color'?, ¿color 'ranura de entrada de color' tocando 'ranura de entrada de color'?, y
bloque ¿tocando el color () ? con el menú abierto que muestra tres opciones: puntero del ratón, borde del escenario y rastro del lápiz