Você está na página 1de 153

Captulo 1.

Introduccin: Aprender a
programar
Jos Francisco Quesada

Captulo 1

Introducci
on: Aprender a
programar

Indice
1.1. Aprender a programar: tecnologa y metodologa . . . . . .

1.2. Arrancando con Scratch . . . . . . . . . . . . . . . . . . . . .

1.2.1. Scratch Online . . . . . . . . . . . . . . . . . . . . . . . . . .

1.2.2. Scratch Offline . . . . . . . . . . . . . . . . . . . . . . . . . .

1.3. El editor de Scratch . . . . . . . . . . . . . . . . . . . . . . . .

10

1.4. Un primer programa . . . . . . . . . . . . . . . . . . . . . . .

12

1.4.1. Objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

12

1.4.2. Bloques e instrucciones . . . . . . . . . . . . . . . . . . . . .

13

1.4.3. Eventos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

14

1.4.4. Arrastrar y soltar . . . . . . . . . . . . . . . . . . . . . . . . .

14

1.4.5. Un saludo . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

15

1.4.6. Instrucciones y parametros . . . . . . . . . . . . . . . . . . .

16

1.5. Guardar y recuperar proyectos . . . . . . . . . . . . . . . . .

16

1.5.1. El men
u Archivo en el Editor offline . . . . . . . . . . . . . .

17

1.5.2. El men
u Archivo en el Editor online . . . . . . . . . . . . . .

18

2015 Jose F. Quesada


Club Scratch Iberoamericano Organizaci
on de Estados Iberoamericanos (OEI)

Esta obra est


a bajo una Licencia Creative Commons Atribuci
on-NoComercial-SinDerivar

APRENDER A PROGRAMAR
CAPITULO 1. INTRODUCCION:

1.1.

Aprender a programar: tecnologa y metodologa

La programaci
on inform
atica es actualmente una disciplina compleja y extensa. Normalmente se ense
na en niveles formativos intermedios como especializacion profesional,
o en titulaciones universitarias. As que la pregunta basica e inicial que nos tenemos
que plantear es:
Para que aprender a programar?
O dicho de otra forma, tiene interes aprender a programar si no queremos ser expertos
programadores?
Podramos pensar en distintos argumentos que nos llevan a respuestas negativas. Pero
creo que hay muchas m
as razones que nos llevan a respuestas positivas.
Por un lado, aprender a programar no tiene que ser lo mismo que ser un experto programador. Podemos tener conocimientos de historia sin ser historiadores profesionales. Y
tenemos conocimientos m
as o menos basicos o avanzados de matematicas sin dedicarlos profesionalmente a las matem
aticas. As pues, aparece el argumento que podramos
denominar de cultura general. Esta claro que la informatica, en el sentido amplio de
tecnologas de la informaci
on y las comunicaciones, se ha introducido totalmente en
nuestro da a da. Y el ritmo de incorporacion es cada vez mas pronunciado.
En muchos pases existe adem
as un claro deficit de vocaciones cientfico-tecnicas. Mediante la difusi
on de este tipo de contenidos se pretende favorecer una vision mas
cercana de
areas relacionadas con la ingeniera y la ciencia.
Es importante tambien resaltar que en los u
ltimos a
nos esta cobrando gran relevancia la
introducci
on del aprendizaje de la programacion desde edades tempranas, y han surgido
iniciativas de gran impacto internacional as como m
ultiples proyectos en distintos
pases tanto a nivel p
ublico como privado.
El objetivo principal de este curso es por tanto iniciar la familiarizacion con un campo como es la programaci
on informatica. Ahora bien, no nos interesa la tecnologa en
s misma. Es importante conseguir destrezas y conocimientos, habilidades y competencias para utilizar sistemas informaticos, y en particular para conocer un lenguaje de
programaci
on y utilizarlo de forma adecuada. Pero la clave esta en utilizar dicha tecnologa en el contexto de una metodologa coherente. En este sentido, la metodologa
que inspira este curso es el pensamiento computacional. A lo largo del mismo iremos
introduciendo algunas nociones clave relativas a este ambito.
El planteamiento de este curso es eminentemente practico, as que iremos introduciendo
los conceptos y estrategias a la vez que vamos aprendiendo a usar la tecnologa que nos
servira de apoyo.
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 2

APRENDER A PROGRAMAR
CAPITULO 1. INTRODUCCION:

1.2.

Arrancando con Scratch

Vamos a comenzar usando el entorno Scratch para aprender a programar. Seg


un la
propia descripci
on de este sistema que ofrecen sus creadores:
Con Scratch puedes programar tus propias historias interactivas, juegos y
animaciones y compartir tus creaciones con otros en la comunidad en
lnea.
Scratch ayuda a los j
ovenes a aprender a pensar creativamente, razonar
sistem
aticamente, y trabajar colaborativamente habilidades esenciales
para la vida en el siglo XXI.
Scratch es un proyecto del Grupo Lifelong Kindergarten del Laboratorio de
Medios del MIT. Se ofrece de forma gratuita.
La siguiente cita que se encuentra en la pagina web del proyecto Scratch es especialmente importante ya que conecta con los objetivos de este curso:
La habilidad para programar computadores es una parte importante del alfabetismo en la sociedad actual. Cuando las personas
aprenden a programar en Scratch, aprenden estrategias importantes para resolver problemas, dise
nar proyectos y comunicar
ideas.
Scratch es un lenguaje de programacion y una comunidad en lnea, donde puedes crear
tus propias historias interactivas, juegos y animaciones, y compartir tus creaciones con
todo el mundo. Al dise
nar y programar proyectos de Scratch, se aprende a pensar
creativamente, razonar sistem
aticamente y trabajar colaborativamente.
Scratch se puede usar tanto online, es decir, con un navegador web directamente, o bien
con un programa instalado en tu propio ordenador. Los dos entornos de trabajo son
funcionalmente identicos. La diferencia clave es que para usar el sistema online deberas
tener en todo momento conexi
on a internet, ya que todo lo estaras ejecutando en los
servidores del proyecto Scratch.
A continuaci
on explicaremos c
omo usar ambos entornos.

Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 3

APRENDER A PROGRAMAR
CAPITULO 1. INTRODUCCION:

1.2.1.

Scratch Online

Para acceder al entorno de trabajo de Scratch debes conectarte a la siguiente direccion:


scratch.mit.edu
En la figura 1.1 aparece la imagen principal. De momento observa que en la esquina
superior derecha aparecen dos etiquetas que te permiten:

Unete
a Scratch: crear una nueva cuenta si eres nuevo y a
un no formas parte
del club Scratch.
Ingresar: entrar en el entorno con tu identificacion si ya tienes una cuenta.

Figura 1.1: Pagina web de Scratch

Unete
a Scratch
Empezaremos explicando que debes hacer para crear una cuenta. Si pulsas sobre la

etiqueta Unete
a Scratch se te abrira una ventana como la indicada en la figura 1.2.
Ahora debes elegir un nombre de usuario y la contrase
na que usaras para identificarte.

Figura 1.2: Creando una cuenta en Scratch - Etapa 1


Ten en cuenta que el sistema no te dejara elegir un nombre de usuario que ya tenga
otra persona. Una vez elegido, pasaras a la siguiente ventana en la que te pide algunos
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 4

APRENDER A PROGRAMAR
CAPITULO 1. INTRODUCCION:
datos de identificaci
on y que utilizan los investigadores de Scratch para conocer el perfil
de las personas que lo usan: Figura 1.3.

Figura 1.3: Creando una cuenta en Scratch - Etapa 2


A continuaci
on debes indicar una cuenta de correo electronico a la que quedara vinculado tu usuario en Scratch (figura 1.4). Por u
ltimo, se te mostrara un mensaje en
el que se te da la bienvenida, y ademas se te enviara un mensaje a la direccion de
correo electr
onico que has indicado (figura 1.5). Este mensaje es muy importante, ya
que aunque hayas creado la cuenta, debes confirmar ese mensaje si quieres compartir
tus proyectos.

Figura 1.4: Creando una cuenta en Scratch - Etapa 3

Figura 1.5: Creando una cuenta en Scratch - Final


Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 5

APRENDER A PROGRAMAR
CAPITULO 1. INTRODUCCION:
De hecho, tras haber creado la cuenta, el sistema te habra introducido en tu cuenta.
Para comprobarlo observa que en la esquina superior derecha, donde antes apareca el

texto Unete
a Scratch ahora aparece tu nombre de usuario. Pero podras observar
que aparece un mensaje que indica:
Confirm your email to enable sharing
Es decir, te indica que debes confirmar tu email para permitir la comparticion de
proyectos. En el mensaje que has debido recibir en la cuenta que indicaste, observaras
que aparece un texto que indica:
... Please confirm your email address by clicking the buttom below:
En funci
on del tipo de entorno de lectura de correo que tengas lo veras de una forma
u otra, pero en cualquier caso si pulsas sobre dicho enlace el proceso de creacion de tu
cuenta habr
a finalizado.
Una nota importante. Aunque de momento han aparecido algunos mensajes en ingles,
en cuanto entremos en nuestra cuenta podremos configurar Scratch para trabajar en
castellano.
Bien, una vez creada la cuenta y confirmada la direccion de correo, veras que en la
esquina superior derecha aparece tu nombre de usuario como habamos indicado. Si
pulsas sobre dicho nombre te aparecera una lista de opciones tal y como se muestra en
la figura 1.6.

Figura 1.6: Men


u asociado al nombre de usuario
La opci
on Perfil te permite editar algunos datos sobre t, para presentarte a la comunidad de usuarios de Scratch. En el bloque Mis cosas podras ver organizados los
proyectos en los que est
as trabajando (veremos su funcionamiento al final de este captulo). La opci
on Configuraci
on de la cuenta te permitira modificar los valores creados
al crear la cuenta, tales como el pas, la contrase
na o el correo electronico. Finalmente,
la opcion Salir te permite cerrar la sesion de trabajo.
De momento, usaremos esta u
ltima opcion Salir para terminar esta primera actividad.
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 6

APRENDER A PROGRAMAR
CAPITULO 1. INTRODUCCION:
Ingresar

Si ya tienes una cuenta y quieres trabajar en Scratch (version online), debes pulsar el
boton Ingresar que se encuentra en la esquina superior derecha de la pagina principal.
A continuaci
on se abrir
a una peque
na ventana (figura 1.7) que te pide el nombre de
usuario y la contrase
na asociada, y con eso ya estaras listo para empezar a trabajar.

Figura 1.7: Ingresar


Una vez que has ingresado, te aparecera una ventana similar a la figura 1.8

Figura 1.8: Accediendo al entorno online


Observa las opciones que aparecen en la barra superior: tras el logo de Scratch aparecen
las opciones Crear, Explorar, Comentar y Ayuda.
Pulsa sobre la opci
on Crear. Ya estas en el editor online de Scratch. Y ya estamos
listos para comenzar a programar: figura 1.9.
De este editor, de momento observa que en la barra superior de opciones, aparece el
logo de Scratch, a continuaci
on una especie de esfera terrestre, a la que le siguen las
opciones Archivo, Editar, etc. Si pulsas sobre el icono con la esfera puedes seleccionar
el idioma con el que quieres trabajar: figura 1.10.
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 7

APRENDER A PROGRAMAR
CAPITULO 1. INTRODUCCION:

Figura 1.9: Editor online de Scratch

Figura 1.10: Seleccionando el idioma de trabajo

1.2.2.

Scratch Offline

Como hemos indicado m


as arriba, para trabajar en este curso puedes utilizar tanto el
entorno online, tal y como se ha descrito en la seccion anterior, o en entorno offline.
Ambos son funcionalmente equivalentes. Te sera u
til este segundo entorno si tienes que
trabajar sin conexi
on a Internet en alg
un momento. A continuacion te explicamos como
debes hacer la instalaci
on.
Para poder utilizar el entorno offline de Scratch, debes descargarlo en primer lugar de
la siguiente direcci
on:
scratch.mit.edu/scratch2download/
Al acceder a dicha p
agina te aparecera la figura 1.11.
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 8

APRENDER A PROGRAMAR
CAPITULO 1. INTRODUCCION:

Figura 1.11: P
agina web con la distribucion del Editor Offline de Scratch 2

Debes tener en cuenta que para poder utilizar el editor, necesitas tener instalado en
tu ordenador el software Adobe AIR, que es lo que se te indica como paso 1. Debes
descargarlo pulsando sobre el enlace adecuado seg
un tu sistema operativo. En funcion tambien del sistema operativo debes seguir las instrucciones correspondienes de
instalaci
on.
Una vez instalado Adobe AIR, el segundo paso consiste en la propia instalacion del
editor offline de Scratch. Es lo que aparece como paso 2 en la pagina anterior. De nuevo
tienes que descargar el sistema seg
un el tipo de sistema operativo que estes usando.
Una vez descargado, la instalaci
on es muy sencilla. El tercer apartado de esta pagina
te permite descargar alg
un material de aprendizaje extra. De momento no lo vamos a
usar.
Como resultado se te abr
a instalado una aplicacion en tu ordenador. Cuando la arranques te aparecer
a un entorno como el que aparece en la figura 1.12. Observa que realmente es identico al editor online que vimos en la figura 1.10. Incluso los men
us son
iguales, y dispones tambien del icono con una especie de esfera terrestre donde puedes
elegir el idioma en el que trabajaras.
Ambos editores son pr
acticamente identicos. Veremos que hay peque
nas variaciones
entre uno y otro que afectan sobre todo al hecho de que uno se esta usando localmente
en nuestro ordenador y el otro se esta ejecutando en la web.
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 9

APRENDER A PROGRAMAR
CAPITULO 1. INTRODUCCION:

Figura 1.12: Editor Offline de Scratch 2

1.3.

El editor de Scratch

Este editor, bien en su versi


on online u offline, constituira nuestra herramienta inicial
de trabajo, as que es importante que nos familiaricemos con el.
El entorno est
a formado por una serie de areas principales, tal y como se muestra en
la figura 1.13. Aunque iremos analizando de forma progresiva la funcionalidad de cada
una de estas
areas, es importante saber que contiene cada una de ellas:
La zona de Men
us contiene distintos bloques de opciones. En particular seran
muy importantes el men
u Archivo y Editar.
El
area Escenario es donde se ejecuta el programa que construyamos. La filosofa
de Scratch se basa en la creacion de uno o mas objetos que ejecutaran las ordenes
que se le indiquen. Esos objetos se muestran en el area del escenario, donde se
ir
an desplazando, mostrando, dibujando, etc.
En el
area Lista de objetos tendremos un listado de todos los objetos creados
en el proyecto activo. As mismo, podemos ver que a la izquierda de esta zona
aparece un apartado correspondiente al escenario o fondo. Es decir, el escenario es
tambien un objeto de nuestras animaciones. Tendra una funcionalidad reducida,
ya que el fondo o escenario por ejemplo no se puede mover.
Las instrucciones con las que podemos programar estan organizadas en bloques
seg
un su funcionalidad. El area Paleta de bloques contiene los identificativos
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 10

APRENDER A PROGRAMAR
CAPITULO 1. INTRODUCCION:
de estos grandes bloques. En Scratch 2 se diferencian 10 bloques basicos, como
por ejemplo Movimiento, Apariencia, etc.
Cada uno de los bloques de instrucciones contiene una serie de comandos u operaciones b
asicas. El
area Instrucciones del bloque muestra en cada momento las
instrucciones correspondientes al bloque seleccionado en la zona de paleta de bloques. Puedes practicar seleccionando distintos bloques en la paleta, y observaras
como cambia el contenido del area de Instrucciones del bloque.

El Area
de programas es la zona en la que iremos creando nuestro programa.
Inicialmente est
a vaca. Tambien es importante resaltar que cada vez que pulsemos
sobre el icono de un objeto en la zona Lista de objetos cambiara el contenido
del
area de programas. Esto es importante porque nos sirve para indicar que cada
objeto tendr
a definidos sus propios programas.

Figura 1.13: Areas


principales del editor de Scratch

Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 11

APRENDER A PROGRAMAR
CAPITULO 1. INTRODUCCION:

1.4.

Un primer programa

Ha llegado el momento de crear nuestro primer programa.

1.4.1.

Objetos

Tal y como hemos visto, un programa en Scratch estara formado en primer lugar por
objetos. Cada vez que arrancamos Scratch, nos creara un proyecto vaco, pero que
contendr
a un objeto. El objeto inicial con el que se arranca es el famoso gato o mascota
de Scratch. Podemos ver que el objeto aparece dibujado en el centro del escenario, y
ademas se encuentra en la zona de la lista de objetos, con un icono mas peque
no. De
entrada el nombre de este objeto es Sprite1. Sprite es el termino en ingles utilizado
por el equipo de Scratch para nombrar un objeto. Nosotros utilizaremos los terminos
objeto o personaje con este fin.
En la figura 1.14 hemos resaltado como aparece el icono del objeto inicial (Sprite1) en
el area de la lista de objetos.

Figura 1.14: El objeto inicial: Sprite1


Es importante observar el simbolito con una letra i en blanco sobre un crculo azul
situado en la esquina superior derecha del icono del objeto. Si pulsas sobre esa letra
aparecer
a un men
u con toda la Informaci
on del objeto (figura 1.15).

Figura 1.15: Ficha de informacion de un objeto


En esta ficha o men
u informativo del objeto podemos ver la siguiente informacion:
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 12

APRENDER A PROGRAMAR
CAPITULO 1. INTRODUCCION:
Nombre del objeto: Aparece un area de texto, inicialmente con el descriptor Sprite1. Pero ah podemos escribir y asignarle al objeto el nombre que nos interese.
Esto es importante ya que posteriormente podremos hacer referencia a los objetos
por su nombre.
Coordenadas y direcci
on: En este apartado se nos indican las coordenadas del
objeto en los ejes x e y del escenario, as como la direccion a la que apunta. Si
no has modificado nada, las coordenadas deben ser 0 en los dos ejes, y debe estar
mirando hacia la derecha (90 grados). En el siguiente captulo veremos como se
organiza el escenario para entender este sistema de coordenadas y posiciones.
Estilo de rotaci
on: ver
as que aparecen tres posibilidades. La primera (activa) con
una especie de rueta, la segunda con una lnea con doble flecha, y la tercera con
un punto.
A continuaci
on aparecen dos selectores, es decir, opciones que podemos activar
o desactivar. Observa por ejemplo como el selector mostrar tiene un impacto
inmediato ya que si eliminas la seleccion el objeto desaparece del escenario. De
momento, nos interesar
a que el objeto se muestre.
Puedes cerrar este men
u informativo del objeto pulsando sobre el icono con una especie
de flecha sobre un crculo azul situado en la parte superior izquierda del dibujo del
objeto.

1.4.2.

Bloques e instrucciones

Hemos visto que en la paleta de bloques aparecen 10 etiquetas asociadas a distintos


bloques o grupos de instrucciones. Cada paleta lleva asociado un color, que nos permite
ademas clasificar las instrucciones seg
un el bloque al que pertenece: figura 1.16.

Figura 1.16: Paleta de bloques


Puedes observar que si pulsas en cada una de estas etiquetas cambia el contenido del
area de instrucciones. Y adem
as que todas las instrucciones de un mismo bloque utilizan
el mismo color identificativo.
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 13

APRENDER A PROGRAMAR
CAPITULO 1. INTRODUCCION:
Vamos a crear a continuaci
on un sencillo programa utilizando instrucciones de varios
bloques. De momento no es importante entender y conocer todas las instrucciones de
todos los bloques. Lo hiremos haciendo de forma progresiva.

1.4.3.

Eventos

Un concepto muy importante es el de evento. Un evento es un suceso o fenomeno que el


sistema es capaz de detectar o incluso de provocar. Cuando construyamos un proyecto,
cada uno de sus componentes (script o guion) debera comenzar por la deteccion de un
evento. De esta forma, los eventos act
uan como disparadores de los procesos.
Pulsa sobre la etiqueta Eventos de la Paleta de bloques. Veras que cambia el contenido del
area de instrucciones.
Uno de los eventos que m
as usaremos es el denominado Al pulsar la bandera verde.
Observa el escenario (el
area grande de fondo blanco situada en la esquina superior
izquierda del editor). Justo encima del escenario, a la derecha, aparece un icono con
una bandera verde y otro con una octogono rojo.

Figura 1.17: Evento: Al pulsar la bandera verde


La convenci
on que se usar
a en Scratch es que utilizaremos la bandera verde para arrancar nuestros programas. Por tanto, cuando nosotros pulsemos la bandera verde sobre
el escenario se producir
a un evento (la propia pulsacion), que los programas detectaran mediante la instrucci
on Al pulsar la bandera verde. Por tanto esta instruccion se
utilizar
a para indicar los puntos de inicio de un programa.
Por otro lado, al pulsar el oct
ogono rojo (que recuerda la se
nal de Stop) estaremos
forzando la interrupci
on inmediata de todo lo que se este ejecutando.

1.4.4.

Arrastrar y soltar

Para crear un programa, debemos ir construyendo bloques o secuencias de instrucciones


en el area de programas. Para ello, tenemos que seleccionar la instruccion que nos
interese en la zona de instrucciones, una vez que la hemos seleccionando clickando
sobre ella con el rat
on, sin soltarla la desplazamos al area de programas. Veremos que
se desplaza una copia de la instruccion. La movemos con el raton hasta la zona que nos
interese y la soltamos dejando de pulsar el raton.
De esta forma, podemos comenzar construyendo un primer programa, seleccionando la
instrucci
on Al pulsarla bandera verde de la paleta Eventos y soltandola en la zona de
programas
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 14

APRENDER A PROGRAMAR
CAPITULO 1. INTRODUCCION:

Figura 1.18: Arrastrando una instruccion a la zona de programas

1.4.5.

Un saludo

Seleccionemos a continuaci
on la paleta Apariencia. Veremos que se activan una serie
de instrucciones de color morado en la zona de instrucciones debajo de la paleta. En
concreto, la primera instrucci
on de esta paleta es Decir algo por N segundos (figura
1.19).

Figura 1.19: Apariencia: Decir algo por N segundos


A continuaci
on, arrastre esta instruccion al bloque de programas. Observe que si antes
de soltar la instrucci
on la acerca a la parte inferior de la instruccion que ya habamos
colocado previamente (Al pulsar la bandera verde) aparece una franja blanca entre
ambas: 1.20. Si en ese momento sueltas el raton, ambas instrucciones quedaran pegadas.

Figura 1.20: Pegando instrucciones para construir programas


Como pr
actica, sera interesante que intentes separar de nuevo las instrucciones, simplemente pulsando sobre alguna de ellas y desplazandola. Tambien puedes eliminar
definitivamente una instrucci
on arrastrandola con el raton hasta el area de instrucciones (fuera del
area de programas en cualquier caso).
Una vez construido este programa podemos observar como si pulsamos la bandera
verde, se inicia la ejecuci
on del programa, lo que supone que durante 2 segundos el gato
nos saludar
a diciendo Hello! (figura 1.21).
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 15

APRENDER A PROGRAMAR
CAPITULO 1. INTRODUCCION:

Figura 1.21: Un primer saludo!

1.4.6.

Instrucciones y par
ametros

La instrucci
on

hace que el objeto correspondiente diga un

mensaje. Como se ha podido observar, en este caso decir supone la aparicion de una
especie de bocadillo similar a los que se utilizan en los comics, en el que se escribe un
mensaje. Adem
as, ese mensaje se muestra durante un tiempo determinado.
Decimos que esta instrucci
on utiliza parametros para modificar su comportamiento.
Es decir, podemos cambiar el valor de estos parametros y la misma funcion hara operaciones diferentes. Para ello, simplemente pulsa con el raton sobre la zona de fondo
blanco donde aparecen los valores actuales y cambialos por valores nuevos. Por ejemplo,
hagamos que el programa nos salude en castellano, durante 5 segundos:

Figura 1.22: Cambiando los parametros del saludo

1.5.

Guardar y recuperar proyectos

Aunque el proyecto que acabamos de construir es especialmente simple y facil de volver a programar, habitualmente querremos guardar nuestro trabajo para recuperarlo
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 16

APRENDER A PROGRAMAR
CAPITULO 1. INTRODUCCION:
en futuras ocasiones, o incluso para compartirlo en el entorno de Scratch con otros
compa
neros, estudiantes, etc.
Para ello, Scratch nos permite guardar y recuperar los proyectos en los que estamos
trabajando.
Esta funcionalidad cambia un poco entre el editor online y el offline, as que la vamos
a describir por separado, aunque las ideas son muy parecidas.

1.5.1.

El men
u Archivo en el Editor offline

Si estamos usando el editor offline (local a nuestro ordenador), al pulsar sobre la opcion
Archivo de la barra de men
us superiores nos aparecen varias opciones: Figura 1.23.

Figura 1.23: Editor offline: men


u Archivo
Nuevo: Esta opci
on nos permite crear un proyecto nuevo. Se borrara todo lo que
tengamos en ese momento, y se creara un proyecto vaco desde el principio. Es
decir, un proyecto donde estara u
nicamente el objeto gato inicial (Sprite1), sin
ning
un programa. El sistema nos avisara antes de borrar para que confirmemos
que queremos abandonar lo que estamos haciendo.
Abrir: Esta opci
on nos permite cargar en el editor un proyecto ya realizado
y previamente guardado. Puesto que esta opcion tambien elimina todo lo que
tengamos en edici
on en ese momento, el sistema nos advertira si queremos borrarlo
por si no lo hemos guardado.
Guardar: Nos permite almacenar en nuestro ordenador el proyecto en el que
estamos trabajando. Si guardamos un proyecto por primera vez, nos pedira la
carpeta donde lo queremos grabar y el nombre que le queremos dar al proyecto.
Si ya lo habamos guardado previamente, esta opcion simplemente actualiza la
copia guardada con lo que en ese momento tengamos en el editor.
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 17

APRENDER A PROGRAMAR
CAPITULO 1. INTRODUCCION:
Guardar como: Similar a la opcion Guardar, lo que nos permite es guardar la
versi
on actual que tengamos en el editor como un proyecto diferente.
Compartir al sitio web: Nos permite publicar en la web de Scratch el proyecto
que hemos hecho para que otros usuarios lo puedan ver. El sistema nos pedira el
nombre que le queremos dar al proyecto as como nuestro usuario y contrase
na
(los mismos que habramos creado para acceder al editor online).
Buscar actualizaciones: Nos permite comprobar si nuestra version del editor
no est
a actualizada y a continuacion instalar la u
ltima version disponible.
Quit: Termina la sesi
on de trabajo en Scratch.
As pues, en este momento, podramos guardar el trabajo que hemos hecho creando el
proyecto denominado por ejemplo saludo. Observe que en el sistema operativo, se guarda un fichero denominado saludo.sb2. La extension sb2 se utiliza como identificador
de los proyectos de Scratch para la version 2.
Sera interesante que comprobases que si sales del editor y vuelves a entrar puedes
cargar el fichero con el proyecto que has grabado usando la opcion Abrir.

1.5.2.

El men
u Archivo en el Editor online

Observemos que en este caso las opciones son algo diferentes. Al pulsar sobre el men
u Archivo aparecen las opciones que muestra la figura 1.24.

Figura 1.24: Editor online: men


u Archivo
Lo primero que tenemos que tener en cuenta para entender este entorno es que estamos
trabajando en los servidores del proyecto Scratch. En estos servidores, cada usuario que
se crea cuenta tendr
a zona personal de trabajo. Esa zona se denomina Mis cosas.
La segunda idea importante que tenemos que tener en cuenta es que todo proyecto
tiene un nombre. En el caso del editor offline, el nombre del proyecto es el mismo que el
del fichero en el que lo hemos grabado. Pero observemos en el editor online, que justo
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 18

APRENDER A PROGRAMAR
CAPITULO 1. INTRODUCCION:
encima del escenario, y a la izquierda de la bandera verde aparece un area de texto.
Posiblemente contenga un descriptor del tipo Untitled-1 (es decir, Sin ttulo, n
umero
1). En esa zona es donde debemos escribir el nombre de nuestro proyecto.
Por ejemplo, una vez construido el programa de saludo que hemos analizado anteriormente, podramos escribir en dicha zona directamente saludo.
Veamos a continuaci
on las opciones del men
u Archivo del editor online.
Nuevo: De forma similar, nos permite crear un proyecto vaco. Eliminara todo lo
que tengamos en el editor, previa confirmacion, y creara un proyecto que contendr
au
nicamente al gato y sin ning
un programa asociado.
Guardar ahora: Guarda el estado actual de nuestro proyecto, y con el nombre que
tenga asignado en la casilla de nombre de proyecto (situada encima del escenario)
en la zona personal Mis cosas.
Guardar una copia: Crea una copia del proyecto actual. Esta copia la crea en la
zona de edici
on, en el nombre del proyecto le a
nade automaticamente la terminanci
on copy para diferenciarlo del anterior. Esto nos permite crear rapidamente
una copia de un proyecto, manteniendo el original, por si queremos hacer cambios
y deseamos quedarnos con la version anterior por alg
un motivo.
Ir a Mis Cosas: Accedemos al entorno de almacenamiento en la red donde tenemos todos nuestros proyectos.
Por ejemplo, si en este momento tenemos el proyecto de saludo que hemos creado
previamente, y hemos introducido el ttulo saludo en la zona de nombre de proyecto,
y a continuaci
on seleccionamos la opcion Guardar ahora, este proyecto se grabara. No
en nuestro ordenador, sino en los servidores del proyecto Scratch.
A continuaci
on podemos pulsar sobre la opcion Ir a Mis Cosas. Si solo hemos grabado
el proyecto saludo nos aparecer
a algo similar a lo que muestra la figura 1.25.
En la zona de la izquierda de esta figura podemos ver la clasificacion de nuestros
proyectos entre compartidos y no compartidos. Los proyectos compartidos se publican
en el servidor y otras personas pueden acceder a ellos y usarlos. Los no compartidos
permanecen en estado privado y solo accesibles a nosotros mismos. En el bloque central
podemos ver la lista de proyectos que tenemos. De momento aparece un solo proyecto,
denominado saludo. Las opciones clave que tenemos son:
Borrar: que destruye totalmente el proyecto.
Ver dentro: que abre el editor con el contenido de este proyecto.
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 19

APRENDER A PROGRAMAR
CAPITULO 1. INTRODUCCION:

Figura 1.25: Editor online: Mis Cosas


Continuando con el men
u Archivo del entorno online, las dos siguientes opciones nos
permiten conectar el mundo Internet con nuestro ordenador personal:
Subir de tu computadora: nos permite abrir un fichero que tengamos en local
(por ejemplo construido mediante el editor offline) para ser usado por el editor
online.
Descargar a tu computadora: realiza la operacion contraria, es decir, graba
en nuestro ordenador local el contenido del proyecto que estamos editando.
Terminamos aqu esta primera unidad del curso. Es importante sobre todo que te
familiarices con el entorno de trabajo que vamos a empezar a usar, y que aprendas
a crear, modificar proyectos, aunque de momento sean tan simples que solo permitan
saludar.

Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 20

Captulo 2.
Escenario y movimiento.
Programas y algoritmos
Jos Francisco Quesada

Captulo 2

Escenario y movimiento.
Programas y algoritmos.

Indice
2.1. El escenario . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

22

2.1.1. La posici
on de un objeto . . . . . . . . . . . . . . . . . . . . .

22

2.1.2. Direcciones en el escenario . . . . . . . . . . . . . . . . . . . .

23

2.2. Movimientos relativos . . . . . . . . . . . . . . . . . . . . . . .

23

Ejemplo 1: Dibujar un cuadrado - Movimientos relativos . . . . . . .

25

2.3. Esperar: deteniendo los objetos . . . . . . . . . . . . . . . . .

26

Ejemplo 2: Dibujar un cuadrado - Movimientos relativos y esperas .

27

2.4. El l
apiz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

28

Ejemplo 3: Dibujar un cuadrado - Movimientos relativos, esperas y


trazo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

29

2.5. Movimientos absolutos . . . . . . . . . . . . . . . . . . . . . .

30

Ejemplo 4: Dibujar un cuadrado - Movimientos absolutos, esperas y


trazo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

31

2.6. Deslizamiento . . . . . . . . . . . . . . . . . . . . . . . . . . . .

32

Tarea 1: Dibujar un cuadrado - Deslizamientos y trazo

. . . . . . .

2015 Jose F. Quesada


Club Scratch Iberoamericano Organizaci
on de Estados Iberoamericanos (OEI)

Esta obra est


a bajo una Licencia Creative Commons Atribuci
on-NoComercial-SinDerivar

21

33

CAPITULO 2. ESCENARIO Y MOVIMIENTO. PROGRAMAS Y ALGORITMOS.

2.1.

2.7. Algoritmos y programas . . . . . . . . . . . . . . . . . . . . .

33

2.7.1. Algoritmo . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

33

2.7.2. Programas, guiones e instrucciones . . . . . . . . . . . . . . .

35

2.7.3. Proyecto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

36

Tarea 2: Figuras geometricas . . . . . . . . . . . . . . . . . . . . . .

37

El escenario

Hemos visto en el captulo anterior que los componentes basicos con los que vamos a
trabajar son los objetos. Asociados con dichos objetos iremos creando distintos guiones
(secuencias de instrucciones) que definen las operaciones que cada uno de los objetos
realizar
an.
Las instrucciones b
asicas con las que construimos los guiones o secuencias estan organizadas en bloques, y mediante la paleta podemos ir activando cada uno de esos bloques.
De ellos, podemos utilizar las instrucciones concretas simplemente arrastrandolas hasta
el area de programas, donde vamos construyendo los guiones agrupando las instrucciones correspondientes.
As mismo, hemos visto que las instrucciones pueden realizar operaciones, y que dichas
operaciones suelen utilizar par
ametros para adaptar su comportamiento a las necesidades especficas.
Tambien hemos indicado que los objetos se muestran y mueven por el escenario, un
area especialmente importante del entorno. Vamos a continuacion a estudiar con un
poco m
as de detalle esta zona.
Podemos considerar el escenario como una superficie (area plana con dos dimensiones
o dos ejes). La figura 2.1 muestra graficamente esta estructura. Es decir, se trata de
una superficie cuyas coordenadas en el eje horizontal (X) va desde la posicion -240
(izquierda) hasta la posici
on 240 (derecha). Por su parte, el eje vertical (Y) va desde
la posici
on -180 (abajo) hasta la posicion 180 (arriba).
La posici
on central del escenario sera por tanto el punto (0,0).

2.1.1.

La posici
on de un objeto

Aunque un objeto se muestra en la pantalla ocupando un area mas o menos grande en


funcion de la figura representada, el objeto siempre esta asociado con un punto u
nico
en el escenario. Ese punto es en el que se encuentra su posicion central. Es interesante
recordar que en el captulo 1, al analizar la ficha de informacion de un objeto, apareca
las coordenas X e Y en las que se encuentra dicho objeto.
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 22

CAPITULO 2. ESCENARIO Y MOVIMIENTO. PROGRAMAS Y ALGORITMOS.

Figura 2.1: Escenario de Scratch

2.1.2.

Direcciones en el escenario

Ademas de tener una posici


on, los objetos apuntan o se dirigen hacia una direccion. Las
direcciones en el espacio bidimensional definido por el escenario se indican en la figura
2.2. En los siguientes ejemplos explicaremos con mas detalle este modelo.

2.2.

Movimientos relativos

Una vez que conocemos las caractersticas basicas del escenario en el que nos vamos a
mover, comencemos a estudiar algo mas en profundidad el bloque o paleta de instrucciones de movimiento (figura 2.3).

Esta instrucci
on mueve tantos pasos hacia adelante como se indique en el parametro. Es decir, esta instrucci
on tiene en cuenta la posicion y direccion actual del
objeto, y simplemente lo mueve N pasos a partir de la direccion actual y siguiendo
la direcci
on a la que apunta.
Podemos ver que en la plantilla de la instruccion se indica por defecto el valor 10,
indicando por tanto mover 10 pasos. No obstante, el valor 10 se puede modificar
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 23

CAPITULO 2. ESCENARIO Y MOVIMIENTO. PROGRAMAS Y ALGORITMOS.


45

45

I
@


6

@
@
@
@

e
j
e
y

90

@
@

@t
@
@

- 90
@
@
@

135

180
180

@
@
R 135
@

?


eje-x

Figura 2.2: Direcciones en el escenario

Figura 2.3: Paleta de Movimiento

Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 24

CAPITULO 2. ESCENARIO Y MOVIMIENTO. PROGRAMAS Y ALGORITMOS.


cuando se copia la instrucci
on en el area de programas para indicar el valor que
nos interese.

Esta instrucci
on modifica la direccion a la que apunta el objeto, cambiando N
grados en el sentido de las agujas del reloj. Para simplificar diremos que hacemos
un giro a la derecha para este tipo de giro.

De forma similar a la instruccion anterior, pero el cambio de direccion se produce


en sentido contrario a las agujas del reloj. Tambien en este caso, simplificaremos
la expresi
on diciendo que realizamos un giro a la izquierda del objeto.
Es importante tener en cuenta que estas tres instrucciones provocan un cambio relativo,
ya que la posici
on o direcci
on final del objeto dependen de la posicion y direccion que
tuviese antes de aplicarse la instruccion.

Ejemplo 1

Dibujar un cuadrado - Movimientos relativos


Utilizando las instrucciones anteriores, nos vamos a plantear un primer problema: c
omo conseguir que un objeto de Scratch se mueva por el escenario
describiendo un cuadrado?
Una primera versi
on para realizar este problema podra conseguirse mediante movimientos y giros relativos. 1
[Proyecto: cuadrado-relativo]
Es decir, podramos hacer que el objeto se mueva inicialmente una serie de pasos,
por ejemplo 100, a continuaci
on gire en el sentido de las agujas del reloj 90 grados, a
continuaci
on vuelva a avanzar otros 100 pasos, vuelva a girar y as lo haramos hasta
completar la figura. Tambien podemos usar el giro en el sentido contrario a las agujas
1

En el material complementario asociado con esta documentaci


on se incluyen los proyectos desarrollados en el mismo. Te recomendamos como pr
actica general que en primer lugar intentes realizar
t
u mismo los ejercicios, y posteriormente consultes las soluciones que te proponemos. Por otro lado,
ten siempre en cuenta que un mismo problema puede tener m
ultiples soluciones, por lo que el hecho
de que tu soluci
on sea diferente a la propuesta no quiere decir que sea incorrecta. Junto al enunciado
del ejemplo aparece una etiqueta con el ttulo Proyecto que indica el nombre del proyecto en Scratch
que contiene la soluci
on al ejemplo propuesto.

Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 25

CAPITULO 2. ESCENARIO Y MOVIMIENTO. PROGRAMAS Y ALGORITMOS.


del reloj, pero lo importante es que una vez elegido un tipo de giro debemos hacer el
mismo las 4 veces.
Podemos describir de forma detallada los pasos necesarios para realizar esta tarea siguiendo el siguiente esquema:
1.
2.
3.
4.
5.
6.
7.
8.
9.

al pulsar la bandera verde


mover 100 pasos
girar 90 grados en el sentido
mover 100 pasos
girar 90 grados en el sentido
mover 100 pasos
girar 90 grados en el sentido
mover 100 pasos
girar 90 grados en el sentido

de las agujas del reloj


de las agujas del reloj
de las agujas del reloj
de las agujas del reloj

Si trasladamos este esquema a un proyecto Scratch deberamos obtener lo que se muestra en la figura 2.4.

Figura 2.4: Cuadrado usando movimientos y giros relativos


No obstante, cuando ejecutamos este proyecto pulsando sobre la bandera verde, nos sorprender
a el hecho de que aparentemente no sucede nada. El gato se queda en el mismo
sitio en el que se encontraba al empezar. Realmente el gato ha hecho los movimientos,
pero de una forma tan r
apida que no la llegamos a percibir.

2.3.

Esperar: deteniendo los objetos

Dentro de la paleta Control, la primera instruccion disponible permite detener la


ejecucion de un programa.
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 26

CAPITULO 2. ESCENARIO Y MOVIMIENTO. PROGRAMAS Y ALGORITMOS.

Esta instrucci
on detiene la ejecucion del bloque de instrucciones en el que aparece.
La parada durar
a tantos segundos como se indique en su parametro de configuraci
on. Ten en cuenta que tambien puedes usar fracciones de segundo utilizando
n
umeros con decimales: por ejemplo 0.5 segundos forzara una parada de medio
segundo.

Ejemplo 2

Dibujar un cuadrado - Movimientos relativos y esperas


Modifica el ejemplo anterior, de forma que el gato se detenga medio segundo
en cada una de las esquinas del cuadrado por las que pasa.
[Proyecto: cuadrado-relativo-con-esperas]
Observa que lo que debemos hacer es introducir una instruccion de espera cada vez que
el gato llega a una de las esquinas del cuadrado:
1. al pulsar la bandera verde
2. mover 100 pasos
3. girar 90 grados en el sentido de las agujas del reloj
4. esperar 0.5 segundos
5. mover 100 pasos
6. girar 90 grados en el sentido de las agujas del reloj
7. esperar 0.5 segundos
8. mover 100 pasos
9. girar 90 grados en el sentido de las agujas del reloj
10. esperar 0.5 segundos
11. mover 100 pasos
12. girar 90 grados en el sentido de las agujas del reloj
13. esperar 0.5 segundos
A la hora de construir el programa en Scratch, puedes observar que si arrastras una
instrucci
on nueva y la situas entre dos instrucciones de un guion ya creado, la instruccion
automaticamente se inserta entre las dos. El modelo final lo podemos ver en la figura
2.6.
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 27

CAPITULO 2. ESCENARIO Y MOVIMIENTO. PROGRAMAS Y ALGORITMOS.

Figura 2.5: Cuadrado relativo con esperas

2.4.

El l
apiz

Fijemonos en la paleta denominada L


apiz.
Scratch utiliza una idea heredada del lenguaje de programacion Logo, que conceba los
objetos como una especie de tortugas que se iban moviendo tambien por un escenario.
Trasladada a Scratch esta idea, debemos imaginarnos que todo objeto tiene asociado un
lapiz, que estara posicionado justo en su centro (las coordenadas x e y del objeto). El
lapiz puede estar subido o bajado. Cuando el lapiz esta subido, si el objeto se desplaza
no sucede nada. Pero si el l
apiz esta bajado, cada vez que el objeto se desplaza deja un
rastro por el escenario. Es decir, el lapiz pinta una lnea conforme se desplaza.

Esta instrucci
on hace que el lapiz se baje para empezar a dibujar.

Por su parte, esta instrucci


on se encarga de subir el lapiz. A partir de ese momento,
cuando el objeto se desplace, ya no dibujara la lnea.

Ahora bien, c
omo borrar las lneas que ya hemos dibujado? Scratch incluye esta
instrucci
on que borra todas las lneas dibujadas sobre el escenario.
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 28

CAPITULO 2. ESCENARIO Y MOVIMIENTO. PROGRAMAS Y ALGORITMOS.

Ejemplo 3

Dibujar un cuadrado - Movimientos relativos, esperas y


trazo
Modifica el ejemplo anterior, de forma que adem
as de ir deteniendose en
los vertices, el gato dibuje un trazo cuando se desplaza creando al final la
imagen de un cuadrado.
[Proyecto: cuadrado-relativo-con-esperas-y-trazo]
Para conseguir esta funcionalidad sera necesario bajar el lapiz antes de iniciar los movimientos.
Ademas, convendra subir el l
apiz al final del proceso. Es una buena practica que los
guiones o programas dejen los objetos al finalizar con el lapiz subido. Y finalmente,
antes de comenzar a dibujar el cuadrado sera u
til borrar todas las lneas del escenario.
De esta forma, si volvemos a ejecutar el proyecto una segunda vez, podremos ver como
se va dibujando progresivamente.
Por tanto, la nueva secuencia de instrucciones quedara de esta forma:
1. al pulsar la bandera verde
2. borrar
3. bajar l
apiz
4. mover 100 pasos
5. girar 90 grados en el sentido de las agujas del reloj
6. esperar 0.5 segundos
7. mover 100 pasos
8. girar 90 grados en el sentido de las agujas del reloj
9. esperar 0.5 segundos
10. mover 100 pasos
11. girar 90 grados en el sentido de las agujas del reloj
12. esperar 0.5 segundos
13. mover 100 pasos
14. girar 90 grados en el sentido de las agujas del reloj
15. esperar 0.5 segundos
16. subir l
apiz
El resultado de la ejecuci
on de este proyecto se muestra en la figura 2.7.
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 29

CAPITULO 2. ESCENARIO Y MOVIMIENTO. PROGRAMAS Y ALGORITMOS.

Figura 2.6: Cuadrado relativo con esperas y trazos

Figura 2.7: Cuadrado relativo con esperas y trazos: Resultado

2.5.

Movimientos absolutos

Hemos visto y usado varias instrucciones que ejecutan un movimiento relativo del objeto correspondiente. En la paleta Movimiento hay algunas instrucciones mas. En
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 30

CAPITULO 2. ESCENARIO Y MOVIMIENTO. PROGRAMAS Y ALGORITMOS.


concreto, las dos siguientes instrucciones se denominan absolutas ya que la posicion
(en el caso del desplazamiento) o la direccion (en el caso del giro) no dependen de la
posicion o direcci
on iniciales sino u
nicamente de los valores indicados en el argumento
correspondiente.

En este caso, el objeto se desplaza a las coordenadas exactas que indiquemos para
los valores x e y.

Hace que el objeto apunte exactamente a la direccion que se indique en su argumento.

Ejemplo 4

Dibujar un cuadrado - Movimientos absolutos, esperas y


trazo
Nos planteamos ahora la siguiente cuesti
on: C
omo podemos dibujar el mismo cuadrado que hemos hecho en el u
ltimo ejemplo, pero utilizando instrucciones de movimiento absoluto?
[Proyecto: cuadrado-absoluto-con-esperas-y-trazo]
Si consideramos que el objeto parte de la posicion inicial (0,0), y el primer lado del cuadrado es el horizontal hacia la derecha de dicha posicion, debera por tanto moverse en
primer lugar hasta la posici
on 100 puntos a la derecha en el eje horizontal, y permanecer
en la misma posici
on vertical (0). Por tanto debera ir a la posicion (100,0).
En segundo lugar debera desplazarse a la esquina o vertice inferior derecho del cuadrado. Esa posici
on est
a por debajo (eje vertical) de la actual. Si la posicion en el eje
y es la 0 deber
a moverse hasta la -100. Es decir, la segunda esquina es la posicion
(100,-100).
A continuaci
on debera ir hasta la esquina inferior izquierda, lo que supone 100 posiciones a la izquierda de la actual, es decir a la posicion (0,-100). Y por u
ltimo regresara
al punto de partida (0,0).
La secuencia de pasos exacta sera:

Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 31

CAPITULO 2. ESCENARIO Y MOVIMIENTO. PROGRAMAS Y ALGORITMOS.


1. al pulsar la bandera verde
2. borrar
3. bajar l
apiz
4. ir a 100 , 0
5. esperar 0.5 segundos
6. ir a 100 , -100
7. esperar 0.5 segundos
8. ir a 0 , -100
9. esperar 0.5 segundos
10. ir a 0 , 0
11. esperar 0.5 segundos
12. subir l
apiz

Figura 2.8: Cuadrado absoluto con esperas y trazos

2.6.

Deslizamiento

Regresemos de nuevo a la paleta de Movimiento. Detengamonos un momento en la


siguiente instrucci
on:

La instrucci
on deslizar hace que el objeto se desplace hasta las coordenadas x
e y que se indiquen. En este sentido es identica a la instruccion ir. No obstante,
mientras que la instrucci
on ir realiza un movimiento instantaneo, la instruccion
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 32

CAPITULO 2. ESCENARIO Y MOVIMIENTO. PROGRAMAS Y ALGORITMOS.


deslizar hace que el objeto se vaya moviendo poco a poco, en concreto tardando
tanto tiempo (en segundos) como se indique en el primer parametro.

Tarea 1
Dibujar un cuadrado - Deslizamientos y trazo
Modifica el u
ltimo ejemplo realizado de forma que se construya el mismo
cuadrado pero utilizando instrucciones de deslizamiento. Observa que ya
no ser
a necesario detener el programa en las esquinas ya que el propio
deslizamiento nos permite ver c
omo se va dibujando la figura. 2

2.7.

Algoritmos y programas

Es el momento de introducir alguna terminologa, aclarar terminos y poner un poco de


orden. Hemos venido usando con cierta imprecision terminos como instruccion, bloque,
guion, programa o proyecto. Intentemos definir con mas claridad que es cada uno y
como lo vamos a usar de aqu en adelante de una forma mas precisa.

2.7.1.

Algoritmo

El termino algoritmo es muy importante. La Real Academia Espa


nola de la lengua
define este termino como
1. m. Conjunto ordenado y finito de operaciones que permite hallar la
soluci
on de un problema.
2. m. Metodo y notaci
on en las distintas formas del calculo.
En 1966, Donald E. Knuth, una de las personas mas importantes en la historia de las
ciencias de la computaci
on, escriba en un artculo titulado Las ciencias de la computaci
on y sus relaciones con las matem
aticas:
1. Qu
e son las ciencias de la computaci
on? Ya que las ciencias de la
computaci
on son relativamente nuevas, debo comenzar explicando que son.
Al menos, mi mujer me dice que debe explicarlo cada vez que alguien le pregunta que hago, y supongo que mucha gente hoy en da tiene una percepcion
algo distinta a la ma de este campo. De hecho, no habra dos informaticos
2

Las tareas son ejercicios de refuerzo que debes realizar para afianzar lo que est
as aprendiendo.

Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 33

CAPITULO 2. ESCENARIO Y MOVIMIENTO. PROGRAMAS Y ALGORITMOS.


que den probablemente la misma definicion; lo cual no es sorprendente ya
que es tan difcil como encontrar dos matematicos que den la misma definici
on de las Matem
aticas. Afortunadamente, esta de moda en los u
ltimos
a
nos tener crisis de identidad, as que los informaticos estamos totalmente
a la moda.
Para m, la mejor forma para describir las ciencias de la computacion es
como el estudio de los algoritmos. Un algoritmo es un secuencia de reglas
definida con precisi
on que indican como producir una informacion de salida
determinada a partir de una informacion dada de entrada en un n
umero
finito de pasos. Se denomina programa a una representacion concreta de un
algoritmo, ... Quiz
as el descubrimiento mas importante obtenido con la aparici
on de las ciencias de la computacion sean los algoritmos, los cuales, como
objetos de estudio, son extraordinamiente ricos en propiedades interesantes;
por otro lado, un punto de vista algortmico se convierte en una forma u
til
3
de organizaci
on del conocimiento en general.
Es un texto realmente interesante, ya que muestra la vision novedosa de la informatica
en esos a
nos, y por otro lado, la importancia que ya tena la idea de algoritmo.
Y de la misma definici
on de Knuth, es importante resaltar varias ideas clave. Un algoritmo es una:
1. Secuencia
2. Ordenada
3. Precisa
4. Finita
5. de Reglas
6. que procesan datos de entrada para generar un resultado o salida.
De alguna forma, el algoritmo es la idea o estrategia que se nos ocurre para resolver un
problema.
Y a continuaci
on indica Knuth que cuando ese algoritmo se representa de una forma
concreta podemos hablar de programa.
Lo que ocurre es que en la pr
actica tambien nos interesa expresar los propios algoritmos.
En la historia de la inform
atica han aparecido varias estrategias para describir un
3

Donald E. Knuth (1966): Computer Science and its relation to Mathematics.


https://www.maa.org/sites/default/files/pdf/upload library/22/Ford/DonaldKnuth.pdf

Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 34

CAPITULO 2. ESCENARIO Y MOVIMIENTO. PROGRAMAS Y ALGORITMOS.


algoritmo: utilizando pseudoc
odigo (que es el enfoque que inspira las secuencias de
instrucciones que hemos usado en los ejemplos anteriores de este captulo), diagramas
de flujo, etc.
En general, decimos que estamos describiendo un algoritmo cuando lo estamos haciendo
a un nivel independiente del lenguaje de programacion.
La programaci
on inform
atica consistira en el proceso de traduccion desde un algoritmo
(expresado con generalidad) hasta el lenguaje concreto. Es algo as como si tuviesemos
una idea (que ni siquiera puedo escribir porque ya estara usando un lenguaje). Y esa
idea la pudieramos a continuaci
on expresar en castellano, chino, arabe o ingles. En ese
momento estaramos en el nivel de programa, porque estamos usando las caractersticas
que nos da cada lenguaje. Cada lenguaje, en este caso natural, tiene un alfabeto, un
lexico, unas reglas gramaticales, etc.
Algo similar ocurre con los lenguajes de programacion. Cada uno de ellos nos ofrece
unas posibilidades tanto ling
usticas como operativas para trabajar.
En este curso nos interesar
a tanto descubrir algoritmos, estrategias abstractas de resolucion de un problema, as como las estrategias especficas para implementarlos o
convertirlos en programas concretos en un lenguaje de programacion. Al igual que
ocurre con los lenguajes naturales, los lenguajes de programacion tambien imponen
restricciones y de esta forma hay cuestiones que es mas facil hacer en un lenguaje que
en otro.
Desde el punto de vista operativo es interesante trabajar de forma simultanea el estudio
de los algoritmos y su programaci
on. Hay manuales y cursos centrados exclusivamente
en el estudio de algoritmos (lo que se denomina algoritmia como disciplina especfica); y hay manuales y cursos centrados u
nicamente en el estudio de un lenguaje de
programaci
on.
En nuestro caso, abordamos un enfoque hbrido en el que estudiaremos problemas,
buscaremos estrategias de soluci
on y nos interesara ver como se programan, por ejemplo
en Scratch, tal y como hemos empezado a hacer. Y para poder hacerlo, evidentemente
necesitaremos conocer c
omo funciona el lenguaje de programacion concreto que estamos
usando.

2.7.2.

Programas, guiones e instrucciones

Instrucciones: comandos y par


ametros
Si nos centramos ya en Scratch como un lenguaje de programacion especfico, hemos
visto que los elementos estructuralmente mas simple de este lenguaje son las instrucciones. Ejemplos de instrucciones son ir a x y, bajar el l
apiz, esperar N segundos.
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 35

CAPITULO 2. ESCENARIO Y MOVIMIENTO. PROGRAMAS Y ALGORITMOS.


Las instrucciones tendr
an un comando u operacion (ir, bajar lapiz, esperar, ...) y algunas
de ellas podr
an usar uno o m
as parametros. Por ejemplo, la instruccion bajar el l
apiz
no utiliza ning
un par
ametro ya que el lapiz se baja o no, no hay nada que modificar en
dicha acci
on. Mientras que la instruccion esperar s que necesita saber cuanto tiempo
tiene que esperar.
Guiones
A las secuencias ordenadas de instrucciones las denominaremos guiones. Un guion,
siguiendo el sentido del termino, da unas pautas de comportamiento.
Sera posible, e incluso habitual, que un objeto tenga mas de un guion.
El termino programa se utiliza en muchas ocasiones como sinonimo de guion. De hecho
en los ejemplos anteriores hemos podido hacer referencia al programa que dibuja un
cuadrado con trazos, esperas y movimientos relativos.
En realidad, hay un algoritmo que describe la solucion a ese problema, y la secuencia de
instrucciones se corresponde con la version en Scratch de dicho algoritmo, y por tanto
es un programa.
Pero ser
a adecuado utilizar el termino guion para referirnos especficamente a cada
secuencia o bloque de instrucciones.

2.7.3.

Proyecto

Denominaremos proyecto al conjunto de todos los objetos y todos sus guiones que
constituyen la soluci
on completa a un problema. Hasta ahora hemos visto proyectos
formados por un solo objeto con un solo guion, pero no sera lo habitual.
Lo que s ser
a com
un en Scratch es que un proyecto se almacene en un fichero.
Desafortunadamente, el termino programa tambien se usa en muchas ocasiones como
sinonimo de proyecto, e indicaremos que hemos hecho un programa para hacer un
videojuego con coches de carreras. Evidentemente, estamos haciendo referencia en dicho
caso a un proyecto que incluye varios objetos, cada uno de los cuales tiene a su vez
m
ultiples guiones.
Aunque la ambig
uedad existe, normalmente queda claro por el contexto a lo que nos
referimos nosotros o incluso a lo que se refieren los textos que podais leer en distintas
fuentes.

Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 36

CAPITULO 2. ESCENARIO Y MOVIMIENTO. PROGRAMAS Y ALGORITMOS.

Tarea 2
Figuras geom
etricas
Con el objetivo de practicar las instrucciones estudiadas en este captulo,
es interesante que intentes crear un proyecto por cada una de las figuras
que se muestran en la figura 2.9. Es importante que intentes practicar con
distintas estrategias, usando instrucciones de movimiento absoluto, relativo
o desplazamiento.
Para las figuras ver
as que aparecen en rojo notas explicativas: longitudes
para los lados y los
angulos de giro.
Y un u
ltimo reto, seras capaz de conseguir todos los dibujos en el mismo
proyecto de forma que apareciesen en el escenario todos a la vez, exactamente tal y como aparecen en la figura? Evidentemente, no se deben incluir
los textos explicativos y por otro lado, sera necesario ajustar los tama
nos
de las figuras para que todas quepan simult
aneamente en el escenario.

Figura 2.9: Ejemplos de figuras geometricas

Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 37

CAPITULO 2. ESCENARIO Y MOVIMIENTO. PROGRAMAS Y ALGORITMOS.

Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 38

Captulo 3.
Datos
Jos Francisco Quesada

Captulo 3

Datos

Indice
3.1. Memoria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

40

3.2. Posici
on y direcci
on . . . . . . . . . . . . . . . . . . . . . . . .

43

3.2.1. Monitores de las variables . . . . . . . . . . . . . . . . . . . .

43

3.3. Preguntas y respuestas . . . . . . . . . . . . . . . . . . . . . .

44

Ejemplo 1: Saludar y preguntar el nombre . . . . . . . . . . . . . . .

46

3.3.1. Operadores: unir mensajes . . . . . . . . . . . . . . . . . . . .

47

Ejemplo 2: Saludar, preguntar el nombre y responder educadamente

48

3.4. Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

48

Ejemplo 3: Media aritmetica de dos n


umeros . . . . . . . . . . . . .

48

3.5. Creaci
on de variables . . . . . . . . . . . . . . . . . . . . . . .

49

Tarea 1: Media aritmetica de tres n


umeros . . . . . . . . . . . . . . .

55

2015 Jose F. Quesada


Club Scratch Iberoamericano Organizaci
on de Estados Iberoamericanos (OEI)

Esta obra est


a bajo una Licencia Creative Commons Atribuci
on-NoComercial-SinDerivar

39

CAPITULO 3. DATOS
En muchas ocasiones se ha definido un programa informatico como un sistema que es
capaz de recibir unos datos de entrada, manipularlos aplicando distintas operaciones
para terminar generando unos datos de salida.
Por ejemplo, un programa podra recibir las notas de todos los alumnos de una asignatura y tras procesarlas devolvernos la media aritmetica. De esta forma, podramos
diferenciar tres fases en el dise
no: la fase de lectura en la cual leemos los datos (es decir,
el programa tiene que ir obteniendo la informacion que necesita para trabajar); la fase
de proceso (en la cual el programa opera con dichos datos); y la fase de salida (en la
cual el programa proporciona los resultados obtenidos).
Aunque es una simplificaci
on, y no todos los programas operan de esta forma, ni ejecutan secuencialmente estas tres fases, es cierto que en cierta medida, los programas
necesitan informaci
on que est
a en el exterior a ellos mismos, que realizan determinadas
operaciones o c
alculos y que generan un resultado. El resultado no tiene que ser un valor numerico final, como en el ejemplo de la media aritmetica. Por ejemplo, podramos
pensar en un programa que lee una lista de ttulos de libros y nos los devuelve ordenados alfabetivamente. O la salida puede ser mas compleja. Podemos pensar por ejemplo
en un videojuego en el que el sistema esta capturando constantemente informacion
de entrada (por ejemplo, las pulsaciones que el jugador realiza sobre los mandos que
este usando), procesa esa informacion teniendo en cuenta la logica del juego definida
(lo que constituye en parte el propio programa) y genera un resultado (que en este
caso puede consistir en visualizar fenomenos graficos: desplazamientos de personajes,
cambios de escenario, etc.).
Pero en pr
acticamente todos los programas medianamente u
tiles lo que observamos es
un patr
on: Un programa realiza una serie de operaciones sobre unos datos. Es decir, necesitamos datos con los que operar, y necesitamos controlar como vamos a ir realizando
dichas operaciones.
Este captulo se centra en el primer ingrediente basico: Datos y el siguiente captulo
abordar
a las estructuras de Control.

3.1.

Memoria

Evidentemente para poder operar con datos necesitamos guardarlos, almacenarlos en


alg
un sitio. Y ese es el principal objetivo de la memoria de un ordenador. En la memoria
se almacenan tambien los propios programas, pero ese es un tema mas avanzado que
no veremos aqu.
As que la memoria nos servir
a como una especie de bloc de notas en el que poder ir
registrando informaci
on.
La memoria de un ordenador se organiza como un conjunto de casillas. No entraremos
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 40

CAPITULO 3. DATOS
en los detalles tecnicos de almacenamiento, representacion y gestion de memoria. No
obstante, ser
a importante que entendamos la memoria de un ordenador como una especie de casillero, donde tenemos una serie de posiciones, casillas o celdas. Podemos
imaginar una estructura similar a la representada en la figura 3.1.

Figura 3.1: Celdas de memoria


En cada una de estas casillas podremos almacenar un valor. Evidentemente, toda casilla
queda identificada por su posici
on en la estructura. Por ejemplo, la figura 3.2 muestra
una secuencia de numeraci
on de casillas de memoria a partir de una zona.

Figura 3.2: Numeracion de las celdas de memoria


No obstante, una cosa es la direccion o posicion de una celda de memoria y algo muy
distinto es su contenido. Por ejemplo, podemos suponer que estamos construyendo un
programa en el que hemos almacenado el nombre y la edad de un alumno. La figura 3.3
muestra que en la posici
on 1525 de memoria se encuentra almacenado el valor David
mientras que en la posici
on 1526 se encuentra almacenado el valor 14.

Figura 3.3: Almacenando datos en la memoria


El n
umero de posiciones es realmente grande. Cuando hablamos de que un ordenador
tiene 1 KB (kilobyte) de memoria estamos indicando que tiene 1024 (210 ) casillas.
Cuando hablamos de 1 MB (megabyte) estaramos hablando de mas de un millon de
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 41

CAPITULO 3. DATOS
posiciones (exactamente 220 , es decir, 1 MB es 1024 veces 1024). Y en este orden de
magnitudes, 1 GB (gigabyte) se corresponde con 230 posiciones, es decir mas de 1000
millones de casillas.
Por tanto, recordar donde est
a un dato almacenado usando su direccion es poco practico. En su lugar, resultar
a m
as c
omodo darle nombres a dichas casillas. Y as aparece
la idea de Variable.
Una variable por tanto no es m
as que el nombre que le damos a una region de memoria.
Cuando nosotros creamos una variable, el sistema informatico, en este caso Scratch,
se encarga de reservar las posiciones necesarias y vincular dichas posiciones con el
nombre que le hemos indicado. De esta forma, cada vez que en el futuro usemos el
nombre de la variable, internamente el sistema estara utilizando la posicion o posiciones
correspondientes.
De hecho, al crear las variables lo que hacemos es generar una tabla que relaciona las
variables que creamos con las posiciones correspondientes. En la figura 3.4 podemos
observar c
omo la variable denominada nombre se ha asociado con la posicion 1525, y
de forma similar la variable edad esta enlazada con la posicion 1526.

Figura 3.4: Tabla de memoria


Realmente a efectos pr
acticos podemos asumir que una variable realmente apunta a la
zona de memoria correspondiente, tal y como se representa de forma resumida en la
figura 3.5.

Figura 3.5: Memoria: nombres de variables y contenido


Resumiendo, la memoria de un ordenador esta organizada en celdas, que quedan identificadas mediante su n
umero o posicion en el sistema de memoria general.
Una variable es una referencia creada para acceder a la memoria. La variable tiene por
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 42

CAPITULO 3. DATOS
tanto un nombre (que ser
a el identificador que usaremos para hacer referencia a ella).
Automaticamente queda asociada a una posicion de memoria (aunque esa operacion
es transparente a nosotros como programadores), y tendra un contenido, que s que
tendremos que controlar.
Es evidente que las dos operaciones basicas que podemos hacer con la memoria, y por
tanto con una variable, ser
an:
Leer: es decir, pedirle a la memoria que nos indique que contenido tiene exactamente la memoria y que nos lo devuelva.
Escribir: lo que supone modificar el contenido de la memoria colocando el dato
que le indiquemos en lugar del dato que tuviese.

3.2.

Posici
on y direcci
on

En el captulo 2 se han explicado los conceptos de escenario y movimiento. Y en concreto, se ha visto que todo objeto esta ubicado en el escenario en unas coordenadas
(posiciones en los ejes x e y) y que esta orientado hacia una direccion concreta.
Pues bien, estos datos (ubicaci
on y direccion) para cada objeto se almacenan en variables. Estas variables las crea de forma automatica Scratch. Pero lo importante es que
las podemos usar.
Comencemos por tanto observando la paleta Movimiento del editor de Scratch. En
la parte inferior de esta paleta aparecen unas construcciones nuevas (figura 3.6). Veras
que cuando todas las instrucciones de una paleta no caben en la pantalla puedes desplazarte usando la barra de desplazamiento o scroll situada a la derecha del bloque de
instrucciones.

Figura 3.6: Variables de posicion y direccion en la paleta de Movimiento


Las variables se denominan posici
on-x, posici
on-y y direcci
on. Veremos que las
podemos utilizar en cualquier contexto donde podamos usar una variable.

3.2.1.

Monitores de las variables

Observa los peque


nos cuadraditos que aparecen a la izquierda del nombre de estas
variables. Si pulsas sobre el cuadradito aparecera una peque
na marca en el cuadrado.
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 43

CAPITULO 3. DATOS
Pero el efecto inmediato m
as interesante es que en el escenario aparecera un rectangulo
por cada uno de los cuadrados que marques. La figura 3.7 muestra el resultado tras
haber marcado los tres cuadraditos en un proyecto recien creado.

Figura 3.7: Activando los monitores de posicion y direccion


Para cada cuadrito observa que aparece en primer lugar, sobre fondo gris, el identificador del objeto. En este caso el objeto se denomina Sprite1, pero el sistema utilizara el
nombre que le hayas dado al objeto. A continuacion el nombre de la variable, por ejemplo direcci
on, y por u
ltimo, un un recuadro con fondo azul, el valor. En este momento,
el valor de direcci
on es 90.
Estas estructuras se denominan Monitores ya que nos permiten observar el contenido
de una variable en todo momento.
Dejemos esta lnea de trabajo de momento, y continuemos en paralelo por otro apartado.

3.3.

Preguntas y respuestas

Vamos a comenzar a trabajar con una paleta nueva. Se trata de la paleta denominada Sensores. De esta paleta nos interesan dos bloques que aparecen exactamente
en la quinta y sexta posici
on del bloque. En concreto, las denominadas preguntar y
respuesta (figura 3.8).
Puedes observar que el bloque respuesta tiene una apariencia similar al visto para
las variables de posici
on y direcci
on. Efectivamente, se trata de un bloque de variable,
que tiene asociado un cuadradito. Si lo pulsas observaras que tambien te aparece un
monitor en el escenario.
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 44

CAPITULO 3. DATOS

Figura 3.8: Paleta: Sensores


Aunque lo veremos con detalle m
as adelante, aqu aparece una idea muy importante.
Podras observar que mientras que las variables de posicion y direccion indicaban (en sus
monitores) el nombre del objeto, el monitor de la variable respuesta no indica ning
un
nombre de objeto. La idea es que hay variables que son especficas de un objeto (solo
las puede manipular dicho objeto) y hay variables globales que son accesibles a todos
los objetos de un proyecto.
En este caso, la posici
on y direccion son datos particulares de un objeto, y por tanto
para hacer referencia a una posici
on concreta tenemos tambien que saber de que objeto
se trata. O dicho de otra forma, si tenemos dos objetos, tendremos una posicion-x para
el objeto A y una posici
on-x para el objeto B, y as para la posicion-y y la direccion.
Por el contrario, respuesta es una variable global, u
nica para todos los objetos.
Los bloques asociados con las variables no los podemos usar para construir guiones o
secuencias de instrucciones. Observa que no tienen muescas arriba y abajo para engarzarlas con otros bloques.
Pero observa ahora la instrucci
on preguntar:

Esta instrucci
on lanza una pregunta al usuario, utilizando como texto de la pregunta lo que se escriba en el parametro. A continuacion, abre un cuadro de lectura
de texto que se sit
ua en la parte inferior del escenario. En ese momento se puede
escribir cualquier cosa en dicha area. Cuando se pulse intro lo que se haya escrito
en el
area de lectura se guardara en la variable respuesta.

Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 45

CAPITULO 3. DATOS

Ejemplo 1

Saludar y preguntar el nombre


Para practicar el uso de la construcci
on preguntar y su relaci
on con la
variable respuesta vamos a construir un proyecto en el que el gato nos
salude y nos pregunte el nombre. A continuaci
on, nos permitir
a escribir
nuestro nombre, que una vez introducido se reflejar
a en el monitor de la
variable respuesta.
[Proyecto: saludar-y-preguntar-nombre]
La soluci
on a este ejercicio es realmente trivial (figura 3.9). Solo debemos asociar al
objeto gato un gui
on que detecte la pulsacion de la bandera verde (como evento que
dispara el inicio del programa), y a continuacion ejecute la instruccion preguntar
donde habremos modificado el parametro para indicar el saludo que nos interese.
Es imporante haber marcado tambien la activacion del monitor de la variable respuesta en la paleta Sensores.

Figura 3.9: Saludar y preguntar el nombre


Pero el gato debera ser algo m
as educado. Si nos ha preguntado el nombre, estara
bien que nos respondiera. Por ejemplo, si le hemos dicho que nuestro nombre es Jose,
podra respondernos diciendo Hola, Jose
Para ello podemos utilizar el bloque

de la paleta Apariencia. Ahora bien,

que debemos colocar en el par


ametro de este bloque?
Si colocamos directamente la expresion Hola, Jose lo que ocurrira es que siempre
nos responder
a con este mensaje sea cual sea el nombre que hayamos indicado. Pero
observad que es posible hacer lo siguiente:
A partir del programa de la figura 3.9, arrastramos la instruccion

la colocamos despues de la instruccion preguntar que ya tenamos.


Ahora nos vamos a la paleta Sensores, seleccionamos el bloque correspondiente
a la variable respuesta y lo arrastramos hasta colocarlo en el hueco (parametro)
de la instrucci
on decir, tal y como aparece en la figura 3.10
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 46

CAPITULO 3. DATOS

Figura 3.10: Saludar, preguntar el nombre y primera respuesta

3.3.1.

Operadores: unir mensajes

A
un no nos ha respondido tal y como queramos, pero ya nos vamos acercando. Realmente debemos construir un mensaje formado por dos trozos: el primero de ellos con el
texto Encantado y el segundo con el contenido de la respuesta que hayamos dado (que
es nuestro nombre).
Los operadores son instrucciones que permiten manipular expresiones o datos para
crear datos nuevos. Por ejemplo, el operador de suma permite tomar dos n
umeros y
obtener la suma de ambos.
La paleta Operadores de Scratch contiene los operadores mas comunes. Puedes observar que si seleccionas esta paleta, al principio te aparecen bloques para los operadores de
suma, resta, multiplicaci
on y division. Mas adelante los usaremos. Observa un operador
denominado unir:

El operador unir utiliza dos argumentos de entrada y obtiene como resultado la


uni
on o concatenaci
on de sus valores.
Por ejemplo, si el primer valor es Hola. y el segundo valor es Adios., el resultado
de unir ambos valores ser
a Hola.Adios.. Es importante tener en cuenta que si
se trata de cadenas de texto (mensajes) los espacios en blanco son importantes.
Por tanto si quieres que tras el punto de Hola. aparezca un espacio debes de
introducirlo a final de la primera expresion o al principio de la segunda.
Y una cosa interesante, cualquiera de los operandos (parametros) utilizados por el
operador de uni
on puede ser una variable.

Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 47

CAPITULO 3. DATOS

Ejemplo 2

Saludar, preguntar el nombre y responder educadamente


Modificar el ejemplo anterior de forma que tras leer el nombre, el gato nos
responda con un saludo que incluya el nombre introducido.
[Proyecto: saludar-preguntar-y-responder]
Para realizar este ejercicio, lo que debemos hacer es introducir la instruccion decir tras
la instrucci
on preguntar que ya tenamos. A continuacion, en el hueco de la instruccion
decir colocamos el operador unir. Y ya podemos indicar en el primer apartado de este
operador el texto Encantado (recuerda poner un espacio al final; en caso contrario,
observa lo que sucede); y por u
ltimo colocamos el bloque de la variable respuesta, tal y
como aparece en la figura 3.11, asociado al proyecto saludar-preguntar-y-responder.

Figura 3.11: Saludar, preguntar el nombre y responder educadamente

3.4.

Variables

Hemos visto hasta ahora distintas variables que el propio sistema crea de forma automatica.
Ahora bien, en muchas ocasiones, necesitaremos crear nuestras propias variables para
realizar un programa. Consideremos el siguiente problema: calcular la media aritmetica
de dos n
umeros.

Ejemplo 3

Media aritm
etica de dos n
umeros
Realizar un proyecto en el que el gato de Scratch nos pregunte sucesivamente
por dos n
umeros y nos indique al final cual es la media aritmetica de ambos.
Por ejemplo, si indicamos como primer valor 8 y como segundo valor 20,
nos tendr
a que indicar que la media aritmetica es 14 (resultado de sumar
8 m
as 20 y a continuaci
on dividirlo entre 2).
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 48

CAPITULO 3. DATOS
[Proyecto: media-aritmetica-de-dos-numeros]
Para resolver este problema, pensemos en una primera aproximacion al mismo. Los
principales pasos que debemos realizar son:
1.
2.
3.
4.
5.

al pulsar la bandera verde


leer el primer n
umero
leer el segundo n
umero
calcular la media aritmetica del primer y segundo n
umeros ledos
mostrar el resultado obtenido

Ahora bien, en la operaci


on 4 anterior debemos usar simultaneamente los dos n
umeros
que hemos ledo. Hasta ahora hemos visto que disponemos de una variable ya creada
(denominada respuesta). Podramos usar esta variable en la operacion 2, y usar la
instrucci
on
para preguntar por el primer n
umero, esperar a que
el usuario lo escriba, y a continuacion guardar el valor escrito en la variable respuesta.
No obstante, si aplicamos la misma estrategia a la operacion 3, volveramos a preguntar
en esta ocasi
on por el segundo n
umero, pero al leerlo y grabarlo en la misma variable
respuesta, estaramos perdiendo en valor del primer n
umero, con lo cual no podramos
usar simult
aneamente ambos valores en la operacion 4 para calcular la media.
Obviamente, necesitamos m
as variables.

3.5.

Creaci
on de variables

En primer lugar, observe lo que aparece en la paleta Datos (figura 3.12). Observamos
que aparecen dos botones. Es decir, no son instrucciones que podamos arrastrar al area
de programas sino botones que ejecutan una accion al ser pulsados. Se nos permite
Crear una variable o Crear una lista.

Figura 3.12: Paleta Datos


Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 49

CAPITULO 3. DATOS
De momento, empezaremos a trabajar con variables. Para ello, observemos lo que sucede
al pulsar el bot
on Crear una variable: figura 3.13.

Figura 3.13: Variable nueva


Este formulario nos permite indicar el nombre de la variable. Por ejemplo, podramos
indicar como nombre de la variable numero1. Por otro lado nos permite indicar si la
variable se crea:
Para todos los objetos: denominaremos a estas variables globales, y se caracterizan
porque las podemos usar en todos los objetos que se creen en el proyecto. La
variable respuesta que hemos comentado previamente es de este tipo.
S
olo para este objeto: a este tipo de variables las denominaremos locales, ya que
solo podr
an ser usada por el objeto que tenemos activo en este momento. Una
cuesti
on interesante es que podemos tener variables locales con el mismo nombre
en distintos objetos, ya que en realidad son variables diferentes. Por ejemplo,
las variables de posici
on y direccion son locales a los objetos. Los monitores de
las variables locales mostraran el nombre del objeto asociado ademas del propio
nombre de la variable.
En este caso, puesto que s
olo tenemos un objeto, es indiferente lo que usemos, aunque
por defecto ser
au
til dejar marcada la opcion Para todos los objetos: figura 3.14.

Figura 3.14: Creando la variable numero1


Observemos lo que ocurre al pulsar Ok en el formulario de creacion de una variable
nueva (figura 3.15). Autom
aticamente aparecen un grupo de bloques de instruccion en
la paleta de Datos que previamente no existan. Y estos s son bloques que podemos
usar para construir nuestros programas.
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 50

CAPITULO 3. DATOS

Figura 3.15: Bloque de datos tras la creacion de la variable numero1

A esta construcci
on o bloque la denominaremos informador de la variable. Los
informadores devuelven el valor contenido en la memoria para que lo podamos
usar en un momento determinado. Es decir, un informador accede a la memoria,
lee el dato que este registrado y lo devuelve al programa.

El monitor no es realmente una instruccion. El cuadradito asociado a toda variable


permite activar o desactivar el monitor que visualiza el contenido de la variable
en la zona del escenario.

Esta instrucci
on permite asignarle un valor a la variable correspondiente.
Es importante observar que esta instruccion tiene dos parametros. El primero de
ellos se selecciona pulsando sobre el rectangulo donde aparece el nombre de la
variable y tiene una peque
na flecha hacia abajo. Si en este momento solo hay una
variable ser
a la u
nica opci
on, pero cuando creemos mas variables, podremos en
dicho selector elegir la variable que queremos usar.
En el segundo par
ametro podemos indicar directamente el valor que queremos
asignarle. Por defecto aparece 0, pero podemos indicar un valor directamente,
otra variable o el resultado de un operador.

Esta instrucci
on es similar a la de fijar, pero lo que hace es modificar el valor de
la variable.
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 51

CAPITULO 3. DATOS
Es decir, imaginemos que tenemos una variable, por ejemplo, numero1, cuyo
contenido en un instante determinado es igual a 10.
Si en ese momento utilizamos la instruccion fijar numero1 a 2, se asignara el
valor 2 a dicha variable. Es decir, asignamos o fijamos el valor de la variable
independientemente del valor anterior.
Por el contrario, si utilizamos la instruccion cambiar numero1 por 2, lo que
ocurre es que se modifica el valor actual sumandole el indicado en el parametro.
En este caso, el valor nuevo sera 12.
Tambien se pueden usar valores negativos. De esta forma, si numero1 vale 10,
y aplicamos la instrucci
on cambiar numero1 por -1, entonces el valor nuevo
ser
a 9.
En realidad, una instrucci
on del tipo:
cambiar VARIABLE por VALOR
es equivalente a:
fijar VARIABLE a VARIABLE + VALOR

Hemos visto que el cuadradito situado a la izquierda del informador de la variable en la paleta de Datos activa el monitor de la variable en el escenario. Pero
esta opci
on solo nos permite activar o desactivar el monitor mientras hacemos el
programa. Para poder controlar la aparicion del monitor durante la ejecucion de
un programa podemos usar la instruccion mostrar, donde de nuevo tenemos que
seleccionar en el hueco rectangular el nombre de la variable a la que le queremos
aplicar la funci
on.

De forma equivalente, esta instruccion ocultara (escondera) el monitor de la


variable seleccionada del escenario en el momento de ejecutarse.
Una vez analizados el proceso de creacion de variables y los bloques de instrucciones
basicos asociados con las mismas, volvamos al ejemplo en el que estabamos trabajando:
como calcular la media aritmetica de dos n
umeros?
Aunque realmente se puede hacer con menos variables, sera u
til plantear el problema utilizando cuatro variables: necesitaremos una variable para el primer n
umero (le
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 52

CAPITULO 3. DATOS
llamaremos numero1), otra para el segundo n
umero que nos proporcione el usuario
del programa (numero2), vamos a usar otra variable para sumar estos dos n
umeros
(suma), y finalmente otra variable para calcular la media aritmetica (media).
As que para realizar este programa comenzaremos creando estas cuatro variables tras
como aparece en la figura 3.16.

Figura 3.16: Media aritmetica: creacion de las cuatro variables


Recuperemos el algoritmo generico que habamos planteado para este problema:
1.
2.
3.
4.
5.

al pulsar la bandera verde


leer el primer n
umero
leer el segundo n
umero
calcular la media aritmetica del primer y segundo n
umeros ledos
mostrar el resultado obtenido

La operaci
on 2 leer
a un dato usando la instruccion

pero dicha

informaci
on queda almacenada en la variable general de Scratch respuesta. As que si
queremos que dicho valor permanezca en la variable que acabamos de crear numero1
deberemos utilizar la instrucci
on fijar para asignarle a la variable numero1 el valor
de respuesta. De esta forma, una version mas detallada del algoritmo sera:
1.
2.
3.
4.
5.

al pulsar la bandera verde


leer el primer n
umero
fijar numero1 a respuesta
leer el segundo n
umero
fijar numero2 a respuesta

...
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 53

CAPITULO 3. DATOS
En este momento ya tenemos los valores correctos en las variables numero1 y numero2. Necesitamos a continuacion calcular la suma de ambos valores, para despues
dividir este valor entre 2 obteniendo el valor de la media que es lo que mostraremos:
...
6. fijar suma a (numero1 + numero2)
7. fijar media a (suma / 2)
8. decir (unir La media es y media)
Es decir, necesitaremos usar el operador de suma de n
umeros (situado en la paleta
de Operadores) para obtener la suma. Y los argumentos de este operador seran los
informadores de las variables correspondientes.
En la operaci
on 7, debemos fijar el valor final de media utilizando de nuevo un operador
matematico, en este caso el de division, y usando como argumentos en primer lugar el
informador de la variable suma y en segundo lugar el valor literal 2.
Finalmente, para que el sistema nos muestre el resultado utilizaremos la instruccion
decir de la paleta Apariencia. Pero queremos concatener un mensaje formado por el
texto literal La media es seguido del propio valor de la media. Por tanto, usaremos
el operador unir asociado con los argumentos correspondientes. El guion completo con
la soluci
on para este problema aparece en la figura 3.17.

Figura 3.17: Media aritmetica: guion con la solucion


Si en este momento lo ejecutas, e introduces como primer valor 8 y como segundo
valor 20, como resultado obtendr
as lo que aparece en la figura 3.18 donde ademas se
muestran los monitores de las variables usadas.

Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 54

CAPITULO 3. DATOS

Figura 3.18: Media aritmetica: resultado de la ejecucion

Tarea 1
Media aritm
etica de tres n
umeros
Modifica el proyecto anterior de forma que se pueda calcular la media aritmetica de tres valores. El sistema deber
a leer cada dato por separado y finalmente
devolver la respuesta correcta.

Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 55

CAPITULO 3. DATOS

Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 56

Captulo 4.
Control
Jos Francisco Quesada

Captulo 4

Control

Indice
4.1. Los elementos del lenguaje . . . . . . . . . . . . . . . . . . . .

58

4.1.1. Constantes o literales . . . . . . . . . . . . . . . . . . . . . .

58

4.1.2. Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

59

4.1.3. Expresiones y operadores . . . . . . . . . . . . . . . . . . . .

59

4.1.4. Operadores de comparacion . . . . . . . . . . . . . . . . . . .

60

4.1.5. Operadores l
ogicos . . . . . . . . . . . . . . . . . . . . . . . .

62

4.1.6. Condiciones . . . . . . . . . . . . . . . . . . . . . . . . . . . .

63

4.2. Ejecuci
on condicional . . . . . . . . . . . . . . . . . . . . . . .

64

Ejemplo 1: Indicar si un n
umero es positivo o negativo . . . . . . . .

64

4.2.1. Condicionales anidados . . . . . . . . . . . . . . . . . . . . .

65

Ejemplo 2: Indicar si un n
umero es cero, positivo o negativo . . . . .

66

Tarea 1: Leer dos n


umeros y decir cual es el mayor . . . . . . . . . .

67

4.2.2. Condicional simple . . . . . . . . . . . . . . . . . . . . . . . .

68

4.3. Repeticiones . . . . . . . . . . . . . . . . . . . . . . . . . . . .

68

4.3.1. Repetici
on finita . . . . . . . . . . . . . . . . . . . . . . . . .

69

Ejemplo 3: Dibujar un cuadrado repetiendo las instrucciones que dibujan los lados . . . . . . . . . . . . . . . . . . . . . . . . . .

69

2015 Jose F. Quesada


Club Scratch Iberoamericano Organizaci
on de Estados Iberoamericanos (OEI)

Esta obra est


a bajo una Licencia Creative Commons Atribuci
on-NoComercial-SinDerivar

57

CAPITULO 4. CONTROL
4.3.2. Repetici
on infinita . . . . . . . . . . . . . . . . . . . . . . . .

70

Ejemplo 4: Movimiento aleatorio infinito . . . . . . . . . . . . . . . .

71

4.3.3. Repetici
on condicionada . . . . . . . . . . . . . . . . . . . . .

73

Ejemplo 5: Sumatorio de los primeros n


umeros . . . . . . . . . . . .

73

Tarea 2: Sumatorio de los primeros n


umeros usando el algoritmo de
Gauss . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

77

Tarea 3: Factorial de un n
umero . . . . . . . . . . . . . . . . . . . .

77

Un programa es la traducci
on de un algoritmo a un lenguaje de programacion. Un
algoritmo es una secuencia finita y organizada de instrucciones construidas para resolver
un problema. En uno u otro nivel, nos encontramos con una secuencia de instrucciones.
Podemos pensar que las instrucciones se ejecutan una tras otra desde la primera hasta
la u
ltima. As lo hemos venido realizando en los captulos anteriores. Por ejemplo, el
programa para calcular la media aritmetica de dos n
umeros estaba formado por un
grupo finito, ordenado y secuencial de instrucciones.
Ahora bien, en muchas ocasiones tendremos que tomar decisiones y ejecutar unas u
otras instrucciones en funci
on de determinadas condiciones. O incluso tendremos que
repetir un mismo proceso o bloque de instrucciones mientras que ocurra algo o hasta
que ocurra algo.
En definitiva, necesitaremos instrucciones que controlan la ejecuci
on de otras
instrucciones. Este captulo estudia de forma sistematica estas instrucciones.

4.1.

Los elementos del lenguaje

En los primeros captulos nos hemos venido familiarizando con las caractersticas de
Scratch como lenguaje de programacion. Es el momento de definir y clarificar algunos
conceptos y nociones con mayor precision.

4.1.1.

Constantes o literales

Se denomina constante o literal a un valor introducido directamente. Los ejemplos mas


comunes de literales son los n
umeros o las cadenas de texto que escribimos en nuestras
instrucciones.
Por ejemplo, en la instrucci
on

el valor 10 es una constante.

De forma similar, en la instrucci


on

el texto Ayuda! y el

n
umero 0.5 son literales. Podemos incluso decir que el primer valor es un literal de tipo
texto, tambien denominado cadena de caracteres, y el segundo es un literal o constante
numerica.
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 58

CAPITULO 4. CONTROL

4.1.2.

Variables

Las variables que hemos aprendido a crear en el captulo anterior son tambien elementos
importantes del lenguaje.
Hacen referencia a valores, pero podemos cambiar su contenido (de ah la nocion de
variable).
Literales y variables constituyen los elementos mas simples o elementos de todo lenguaje.

4.1.3.

Expresiones y operadores

Un operador es una construcci


on que devuelve un calculo a partir de unos argumentos
de entrada.
Consideremos la suma. La suma es un operador matematico que si recibe dos n
umeros
devuelve el resultado de sumarlos.
Podramos por tanto hablar de expresiones simples (que seran las constantes o literales, junto con las variables) y de expresiones compuestas que seran las formadas por
operadores y otras expresiones.
Por ejemplo, consideremos la expresion:
2 + 3
que en Scratch podemos construir como
En este caso, 2 y 3 son expresiones (en concreto literales, o expresiones simples). Combinadas con el operador de suma, crean una nueva expresion (compuesta).
Lo interesante es que la expresi
on resultante tambien se puede usar como argumento
de otros operadores.
Podemos recordar que en el ejemplo del calculo de la media aritmetica tenamos dos
variables (numero1 y numero2) que primero tenamos que sumar y posteriormente
dividir entre 2.
As pues, a partir de las dos variables podemos crear la expresion de suma:

En dicho ejemplo, el resultado de este calculo se asignaba (fijar) a la variable suma,


que posteriormente se utilizaba para calcular la media con otra expresion matematica,
formada por el operador de divisi
on y dos expresiones simples (en este caso, una variable
y un literal):
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 59

CAPITULO 4. CONTROL

Pues bien, tambien podramos haber construido una u


nica expresion usando el siguiente
modelo:

Es importante resaltar que en este caso tenemos una expresion cuyo operador principal
es una divisi
on, la cual utiliza dos argumentos. El primer argumento de la division es
una expresi
on compuesta (formada por el operador suma y dos expresiones simples en este caso las variables numero1 y numero2). El segundo argumento de la division
es una expresi
on simple (el literal 2).
Es importante observar que tanto las variables como los operadores que devuelven resultados de tipo texto o n
umero tienen bordes redondeados. Es decir, los informadores
que se crean asociados a las variables tienen forma de rectangulos con los bordes redondeados. Tambien tienen dicha forma los operadores (en la paleta verde de Operadores)
de suma, resta, multiplicaci
on o division (todos ellos devuelven resultados numericos
a partir de argumentos numericos). Tambien tiene esta forma redondeada el operador
unir que ya vimos se utiliza para concatenar cadenas de caracteres.
Los otros operadores los iremos estudiando a lo largo de este captulo y los siguientes.

4.1.4.

Operadores de comparaci
on

Si observamos la paleta de Operadores algunos de ellos tienen un borde puntiagudo.


Estos operadores no devuelven un resultado de tipo texto o n
umero, sino que lo que
devuelven es un valor l
ogico. Es decir, devuelven un valor que puede ser Verdadero o
Falso.
Existen dos grupos de operadores de este tipo: operadores de comparacion y operadores
logicos. Comenzaremos analizando los operadores de comparacion, que son los siguientes
tres:

Este operador utiliza dos expresiones como argumentos. Compara sus valores y
nos indica si el valor correspondiente al primero es estrictamente menor que el
valor del segundo argumento.
Por ejemplo, si creamos la expresion 2 < 3 el resultado sera Verdadero. Mientras
que si indicamos 3 < 2 el resultado sera Falso.
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 60

CAPITULO 4. CONTROL
Los argumentos pueden ser expresiones de cualquier tipo, por tanto, podramos
incluir en cada uno de los argumentos expresiones compuestas.
Es posible comparar n
umeros, pero tambien se pueden comparar cadenas de texto.
En dicho caso, se utiliza el orden alfabetico para determinar si un valor es menor,
igual o mayor que otro. Por ejemplo, si comparamos hola < adi
os obtendremos
como resultado Falso.

En este caso, se compara si los dos valores de la comparacion son exactamente


iguales, en cuyo caso se devuelve Verdadero y en caso contrario se devuelve
Falso.

Indica si el primer valor es estrictamente mayor que el segundo.


As pues, tenemos un grupo nuevo de expresiones, cuyo valor resultante es de tipo logico
(los valores de verdad o falsedad). Hemos visto que las expresiones numericas o de texto
van asociadas con construcciones que tienen un borde redondeado. Las expresiones que
devuelven un valor l
ogico tienen un borde puntiagudo.
Scratch utiliza un mecanismo que permite discriminar que tipo de valores se pueden
utilizar como argumentos de otras expresiones o instrucciones. Por ejemplo, el operador
matematico de suma
utiliza dos argumentos usando bordes redondeados. Por
tanto, solo podremos utilizar como valores posibles en los huecos de este operador,
expresiones con borde redondeado: variables, u otros operadores que tambien tienen una
forma redondeada. Incluso podemos observar que podemos escribir literales numericos
pero no podemos escribir literales con texto dentro de los argumentos del operador de
suma.
Y no podramos incluir una expresion de tipo comparacion como argumento de una
suma: no podemos encajar una construccion con bordes puntiagudos en argumentos
con un formato redondeado.
Pero adem
as hay construcciones que utilizan huecos con forma cuadrada o rectangular,
como por ejemplo la instrucci
on
o los mismos operadores de comparacion
vistos

La regla es que en una estructura cuadrada o rectangular podemos introducir tanto


elementos redondeados como puntiagudos. Es decir, podemos introducir una expresion
de comparaci
on como argumento de una instruccion decir.
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 61

CAPITULO 4. CONTROL
Por ejemplo, consideremos el sencillo programa que aparece en la figura 4.1. Como
podemos observar le estamos indicando al objeto que muestre (diga) el resultado de
una comparaci
on.

Figura 4.1: Mostrar el resultado de una comparacion: Programa


En este caso, la comparaci
on es verdadera y lo que podremos ver en el escenario es lo
que se muestra en la figura 4.2. Es decir, el resultado verdadero se muestra usando la
expresion en ingles true. Por su parte, una comparacion falsa se mostrara usando el
termino false.

Figura 4.2: Mostrar el resultado de una comparacion: Resultado

4.1.5.

Operadores l
ogicos

Dentro de la paleta de Operadores, justo debajo de los operadores de comparacion


que acabamos de analizar hay otros tres operadores que tambien tienen un borde puntiagudo. Van asociados con los terminos y, o y no. La principal particularidad de estos
operadores es que sus operandos tienen tambien bordes puntiagudos.
Es decir, son operadores que reciben como entrada expresiones logicas y devuelven
como salida tambien expresiones logicas. Examinemoslos con detenimiento:

El operador de negaci
on invierte el valor del argumento que reciba. Es decir, si
su argumento tiene un valor verdadero el resultado sera falso, y si el argumento
es falso, el resultado ser
a verdadero.
Por ejemplo, si consideramos un argumento logico denominado p, la siguiente
tabla muestra los valores correspondientes a la expresion no p en funcion de los
valores del operando o argumento p:
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 62

CAPITULO 4. CONTROL
Operando
p
true
false

Expresion
no p
false
true

Por su parte, el operador y se denomina conjunci


on y lo que determina es si los
dos argumentos que reciba son a la vez verdaderos.
Operandos
p
q
true true
true false
false true
false false

Expresion
pyq
true
false
false
false

Es decir, tendremos 4 posibles combinaciones de valores en los argumentos u operandos. Cuando ambos sean verdaderos (true) entonces el resultado sera verdadero
(y); en los dem
as casos ser
a falso (false).

El operador o de disyunci
on determina si al menos alguno de sus dos operandos es
verdadero. O dicho de otro modo, solo sera falso si ambos argumentos son falsos:
Operandos
p
q
true true
true false
false true
false false

4.1.6.

Expresion
poq
true
true
true
false

Condiciones

Se denomina Condici
on a cualquier expresion que devuelve un valor logico (es decir,
verdadero o falso).
Como hemos visto, los operadores de comparacion y logicos generan condiciones. Pero
Scratch incluye expresiones adicionales de tipo condicion. Por ejemplo, si observas la
paleta Sensores de color azul claro veras que aparecen bloques con los bordes puntiagudos. Por ejemplo, el primer bloque de dicha paleta es tocando ...?. Estas construcciones las iremos viendo m
as adelante. Pero es interesante que en este momento
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 63

CAPITULO 4. CONTROL
observes que tienen un formato con bordes puntiagudos, y que para enfatizar el hecho de ser condiciones que responden a una pregunta, estan marcados con signos de
interrogaci
on.

4.2.

Ejecuci
on condicional

Como se indicaba al principio de este captulo los programas que hemos ido construyendo hasta ahora se basan en una secuencia de instrucciones que se ejecutan desde el
principio hasta el final paso a paso.
Pero en ocasiones ser
a necesario que un bloque de instrucciones se ejecuten o no en
funcion de determinadas situaciones, en definitiva, en funcion de determinadas condiciones.

Ejemplo 1

Indicar si un n
umero es positivo o negativo
Debemos construir un programa que le pregunte al usuario por un n
umero,
y a continuaci
on le responda diciendo si es positivo o negativo.
[Proyecto: numero-positivo-o-negativo]
La logica del programa es aparentemente simple. Tras detectar el inicio del programa
(al pulsar la bandera verde) deberamos preguntarle al usuario para que escriba un
n
umero. El valor resultante se quedara grabado en la variable respuesta.
A continuaci
on podemos escribir el mensaje:
El n
umero es negativo.
o bien el mensaje
El n
umero es positivo.
Pero hemos de decidir que escribir en funcion del valor almacenado en la respuesta.
Para ello, necesitamos usar la ejecucion condicional. Si activas la paleta Control puedes
observar que la quinta instrucci
on tiene la siguiente apariencia:

Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 64

CAPITULO 4. CONTROL
Esta instrucci
on tiene tres partes. En primer lugar, entre las palabras si y entonces
aparece un hueco con bordes puntiagudos donde por tanto podemos introducir una
condici
on.
Pero adem
as aparecen dos bocas, dos zonas que en realidad te permiten introducir
otras instrucciones. Observa que si arrastras las instrucciones desde los bloques de
las distintas paletas, los puedes ubicar dentro de estas bocas, y que las bocas se van
agrandando progresivamente seg
un vas introduciendo mas instrucciones.
La logica es relativamente simple. Esta instruccion evaluara en primer lugar la condicion
que recibe al lado de la palabra si. Si el resultado es verdadero entonces ejecutara todas
las instrucciones de la primera boca. Pero si es falso ejecutara las instrucciones ubicadas
en la segunda boca (tras de la expresion si no).
As pues, regresemos al ejemplo que queremos construir. Podemos pensar en el siguiente
algoritmo:
1. Al pulsar la bandera verde
2. Preguntar Dime un n
umero: y esperar
3. Si respuesta < 0 entonces
3.1 Decir El n
umero es negativo.
si no
3.2 Decir El n
umero es positivo.

Este algoritmo, traducido a Scratch aparece en la figura 4.3. Como funciona este programa? Bien, supongamos que lo activamos pulsando la bandera verde. A continuacion
aparecer
a el mensaje Dime un n
umero: , y se abrira el recuadro de entrada de datos en
la parte inferior del escenario. Supongamos que en ese momento escribimos el valor 20
y pulsamos Intro. Incluso podramos ver que el valor se ha almacenado en la variable
respuesta si activamos su monitor.
En ese momento el programa llegara a la instruccion 3. Comparamos si respuesta <
0. Puesto que respuesta vale 20, es falso que sea menor que 0, as que pasamos a la
instrucci
on 3.2 y se ignora la instruccion 3.1. Como resultado veremos que el gato nos
dice que el n
umero es positivo.

4.2.1.

Condicionales anidados

Pero, que ocurre si introducimos como respuesta el valor 0?. Si seguimos la misma
logica del programa, observaremos que puesto que la pregunta es si la respuesta introducida es menor que 0, y el 0 no es menor que 0, la comparacion es falsa, y tambien
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 65

CAPITULO 4. CONTROL

Figura 4.3: Numero negativo o positivo


nos indicar
a que el n
umero es positivo. No obstante, si queremos ser precisos y no equivocarnos, deberemos tener en cuenta esta situacion, ya que para los matematicos el 0
no es un n
umero positivo, ni negativo.

Ejemplo 2

Indicar si un n
umero es cero, positivo o negativo
A partir del ejemplo anterior, modificarlo para que el programa nos indique
si el n
umero es negativo, o bien es cero o bien es positivo.
[Proyecto: numero-cero-positivo-o-negativo]
Ahora tenemos tres posibles situaciones:
N
umero negativo: si es estrictamente menor que 0
N
umero cero: cuando es igual a 0
N
umero positivo: cuando es estrictamente mayor que 0
Pero sin embargo, la instrucci
on si ... entonces solo nos permite controlar dos situaciones.
Pensemos en el algoritmo anterior que habamos construido. La instruccion 3 preguntaba si la respuesta era menor que cero. En caso de ser cierto (condicion primera)
estamos seguros de que es negativo y ejecutamos la instruccion 3.1. Pero si esa condicion es falsa, escribamos que el n
umero es positivo (instruccion 3.2), lo cual puede
estar equivocado.
Es decir, cuando lleg
abamos a la instruccion 3.2 realmente deberamos discriminar
otras dos situaciones.
Algortmicamente, la soluci
on sera:
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 66

CAPITULO 4. CONTROL
1. Al pulsar la bandera verde
2. Preguntar Dime un n
umero: y esperar
3. Si respuesta < 0 entonces
3.1 Decir El n
umero es negativo.
si no
3.2 Si respuesta = 0 entonces
3.2.1 Decir El n
umero es cero.
si no
3.2.2 Decir El n
umero es positivo.

Es decir, hemos incluido toda una instruccion condicional dentro de una de las ramas de
otra condici
on. A esta estructura la denominaremos condicional anidado. Aunque no
es adecuado anidar muchos condicionales, ya que terminaramos perdiendo legibilidad
del programa, se trata de una pr
actica de programacion que puede resultar muy u
til.

Figura 4.4: Numero negativo, cero o positivo

Tarea 1
Leer dos n
umeros y decir cu
al es el mayor
Debes ahora realizar un proyecto. El gato te pedir
a en primer lugar un n
umero. A continuaci
on un segundo n
umero. Finalmente te dir
a cual de los dos
es el mayor.
Por ejemplo, si se introduce como primer valor 14 y como segundo 9, el
programa debera terminar diciendo: El valor mayor es: 14.
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 67

CAPITULO 4. CONTROL

4.2.2.

Condicional simple

En la paleta de Control justo encima de la instruccion si ... entonces, sino que


acabamos de ver aparece la instruccion:

Esta instrucci
on es muy parecida a la anterior. Se utiliza una condicion que se eval
ua.
En caso de ser verdadera la condicion se ejecuta el bloque que aparece incluido en la
boca de esta instrucci
on. La diferencia es que si la condicion es falsa, entonces no se
ejecuta un bloque especfico.
En cualquiera de los casos, la ejecucion continuara por el siguiente bloque tras el
condicional.

4.3.

Repeticiones

Otra de las estrategias b


asicas de programacion consiste en la repeticion de bloques de
instrucciones.
Recordemos el ejemplo Dibujar un cuadrado con movimientos relativos, esperas y trazo
que se introdujo en el captulo 2. El algoritmo que se dise
no tena los siguientes pasos:
1. al pulsar la bandera verde
2. borrar
3. bajar l
apiz
4. mover 100 pasos
5. girar 90 grados en el sentido de las agujas del reloj
6. esperar 0.5 segundos
7. mover 100 pasos
8. girar 90 grados en el sentido de las agujas del reloj
9. esperar 0.5 segundos
10. mover 100 pasos
11. girar 90 grados en el sentido de las agujas del reloj
12. esperar 0.5 segundos
13. mover 100 pasos
14. girar 90 grados en el sentido de las agujas del reloj
15. esperar 0.5 segundos
16. subir l
apiz
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 68

CAPITULO 4. CONTROL
Si lo observamos detenidamente, las instrucciones 4-5-6 son exactamente iguales a
las instrucciones 7-8-9, as como al bloque 10-11-12 y tambien al formado por las
instrucciones 13-14-15.
Por tanto, en lugar de haber escrito 4 veces las mismas instrucciones podramos haber
indicado que se hiciera una repeticion de las mismas.

4.3.1.

Repetici
on finita

La instrucci
on repetir forma parte de la paleta de Control:

Esta instrucci
on repetir
a tantas veces como se indique el parametro asociado a la palabra repetir (por defecto aparece un 10), el bloque de instrucciones incluidas dentro de
la misma. En ese sentido funciona de forma similar a un condicional, ya que es posible
introducir una o m
as instrucciones dentro de la boca de esta instruccion.

Ejemplo 3

Dibujar un cuadrado repetiendo las instrucciones que dibujan los lados


En este ejemplo vamos a realizar un cuadrado, pero repitiendo las instrucciones correspondientes a cada uno de los lados.
[Proyecto: cuadrado-por-repeticion]
La clave consistir
a en compactar el algoritmo usando la siguiente estrategia:
1.
2.
3.
4.

al pulsar la bandera verde


borrar
bajar l
apiz
repetir 4
4.1. mover 100 pasos
4.2. girar 90 grados en el sentido de las agujas del reloj
4.3. esperar 0.5 segundos
5. subir l
apiz
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 69

CAPITULO 4. CONTROL
Como se puede observar, comenzamos con una fase de inicializacion en la que borramos
y bajamos el l
apiz. A continuaci
on, se ejecuta un proceso de repeticion que se realizara 4
veces exactamente. En cada uno de los ciclos o iteraciones, se ejecutaran todas las
instrucciones incluidas en el bloque. En este caso, las instrucciones mover, girar y
esperar.
Cada una de estas repeticiones se corresponde con todo lo que se realizara para dibujar
el lado del cuadrado. Finalmente, una vez terminadas las 4 repeticiones, se sale del bucle
y se contin
ua por la siguiente instruccion, que en este caso sube el lapiz.

Figura 4.5: Cuadrado con repeticiones

4.3.2.

Repetici
on infinita

En la paleta de Control se encuentra, justo a continuacion de la instruccion de repeticion finita analizada en la secci
on anterior, una instruccion realmente extra
na: por
siempre:

Se trata de una instrucci


on que provoca la repeticion de las instrucciones que contenga
en su interior (dentro de la boca asociada), pero la repeticion no finalizara nunca.
Por tanto, esta instrucci
on cuando se encuentre en un guion, no podra tener ninguna
instrucci
on siguiente. De hecho, observa que el lmite inferior de esta instruccion no tiene
ninguna muesca, por lo que no es posible enlazarle nuevas instrucciones a continuacion.
Aunque pueda parecer inicialmente extra
no habra situaciones en las que nos interese
hacer una repetici
on infinita.
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 70

CAPITULO 4. CONTROL

Ejemplo 4

Movimiento aleatorio infinito


En este ejemplo vamos a construir un proyecto que haga que el gato comience a moverse por el escenario, y lo haga indefinidamente. Cada vez
que choque con un borde del escenario comenzar
a a moverse en cualquier
otra direcci
on, y as sucesivamente.
[Proyecto: movimiento-aleatorio-infinito]
Para resolver este problema, te proponemos que analices el siguiente algoritmo:
1. al pulsar la bandera verde
2. por siempre
2.1. mover 10 pasos
2.2. esperar 0.1 segundos
2.3. si el objeto est
a tocando el borde del escenario
2.3.1. retroceder 10 pasos
2.3.2. apuntar en una direcci
on aleatoria (entre 0 y 360 grados)

Es decir, el n
ucleo del programa consiste en una repeticion infinita (instruccion 2). En
cada repetici
on, nos movemos 10 pasos y nos detenemos un breve instante de tiempo
(instrucciones 2.1 y 2.2). Si tras habernos movido y esperado NO estamos tocando el
borde, se volver
a a hacer un movimiento y una espera. Y as sucesivamente.
Pero en alg
un momento se llegar
a al borde, con lo que la condicion de la instruccion
2.3 ser
a verdadera. En ese momento, para dejar de tocar el borde, retrocemos los
mismos pasos que habamos acabado de avanzar (es decir, retrocedemos 10 pasos).
Y a continuaci
on elegimos al azar una nueva direccion. Tras haber elegido la nueva
direccion aleatoria, se volvera al por siempre, de nuevo moviendo 10 pasos, ahora
hacia la direcci
on que acabamos de seleccionar y continuamos con el proceso: mirando
si volvemos a chocar con un borde del escenario en cuyo caso se vuelve a cambiar la
direccion.
Para poder implementarlo en Scratch, necesitamos introducir algunas instrucciones
nuevas. En concreto, necesitamos poder detectar que un objeto esta tocando un borde
del escenario.
Para ello, observa el primer bloque situado en la paleta Sensores:

Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 71

CAPITULO 4. CONTROL
El hecho de que tenga los bordes puntiagudos ya nos indica que se trata de una condicion. Esta condici
on detecta si el objeto correspondiente esta tocando algo. Ese algo
que puede tocar se puede parametrizar en el recuadro que tiene una peque
na flecha
hacia abajo. Observa que si lo pulsas, inicialmente tendra dos opciones: puntero del
rat
on o borde. Debes elegir el borde para detectar si el objeto esta tocando alguno de
los bordes del escenario.
Por otro lado, retroceder un n
umero de pasos es tan simple como mover utilizando un
n
umero negativo.
Finalmente, necesitamos cambiar la direccion y ademas de una forma aleatoria. Scratch
incluye un operador que permite realizar esta operacion. Para ello selecciona la paleta
Operadores y observa el bloque que aparece entre los operadores matematicos y los
de comparaci
on: n
umero al azar entre:

Este operador utiliza dos operandos (como por ejemplo el de suma), y lo que hace es
devolver un n
umero aleatorio comprendido en el rango de los valores indicados como
parametros. Por tanto, si queremos generar una direccion nueva del objeto, podemos
indicar que el objeto apunte a la direccion generada por el operador de azar entre 0 y
360.

Figura 4.6: Movimiento aleatorio infinito


Antes de continuar, sera interesante que te plantearas la siguiente pregunta: por que es
necesario retroceder en el programa anterior? Es decir, por que se tiene que realizar
la operaci
on 2.3.1 que mueve hacia atras el objeto?
Te sugerimos que pruebes a ejecutarlo quitando esa instruccion.
Veras que cuando el objeto llega hasta el borde, si no tiene esa instruccion de retroceso
le cuesta bastante m
as trabajo escaparse del borde.
Para entenderlo es importante saber en que consiste que un objeto choque con un borde:
un objeto choca con el borde del escenario cuando alguna de sus partes lo alcanza. Por
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 72

CAPITULO 4. CONTROL
tanto, si tras haber detectado que ha chocado con el borde cambiamos la direccion,
es muy probable que el objeto siga tocando el borde. Podra dejar de tocarlo si como
consecuencia del giro, cambian de posicion las partes del objeto y deja de tocar el borde.

4.3.3.

Repetici
on condicionada

La estrategia de repetici
on condicionada permite repetir un bloque de instrucciones
hasta que se cumpla una condici
on, a la que denominaremos condicion de terminacion.
Por ejemplo, podramos hacer que un objeto se mueva hasta que toque el borde.
Para ello disponemos de la instruccion repetir hasta que dentro de la paleta de
Control:

El modelo es similar a los vistos hasta ahora: las instrucciones includas dentro de esta
se repetir
an, pero la repetici
on se realizara hasta que la condicion asociada sea cierta.
O dicho de otro modo, se repetir
a mientras la condicion sea falsa.

Ejemplo 5

Sumatorio de los primeros n


umeros
Cu
al es el valor de la suma de los primeros cinco n
umeros naturales? Es
decir, cu
al es el resultado de 1 + 2 + 3 + 4 + 5?
En este proyecto debemos realizar un programa que pida un n
umero. Le
deberemos dar un valor, por ejemplo, 5, y el programa nos deber
a decir
cu
anto vale la suma correspondiente. Para el caso de 5, el resultado sera
15.
[Proyecto: sumatorio-numeros]
Busquemos en primer lugar un enfoque para abordar este problema. Es decir, intentemos analizar un posible algoritmo.
En primer lugar, vamos a utilizar una variable que denominaremos limite. El objetivo
es obtener la suma que va desde el valor 1 hasta el propio valor limite.
Aunque hay varias alternativas para obtener este resultado, comenzaremos con una
estrategia que se basa en recorrer todos los valores que van desde el 1 hasta el lmite
mencionado. Para ello utilizaremos una variable adicional, que denominaremos n
umero.
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 73

CAPITULO 4. CONTROL
Por otro lado, utilizaremos una variable denominada suma que contendra el valor del
sumatorio que queremos calcular.
Al empezar el proceso, supongamos que el limite es 5 como indicabamos en el ejemplo.
En ese momento, la variable numero comenzara en 0, y el total sera igual a cero (todava
no hemos sumado nada).
Debemos realizar una repetici
on hasta que el valor de numero sea mayor que el valor
de limite. En cada iteraci
on aumentaremos el valor de suma a
nadiendole lo que valga
numero, y esta variable pasar
a al siguiente valor.
Si este proceso lo convertimos en un algoritmo el resultado sera:
1.
2.
3.
4.
5.
6.

al pulsar la bandera verde


preguntar Dime el lmite de la suma: y esperar
fijar limite a respuesta
fijar numero a 0
fijar suma a 0
repetir hasta que numero > limite
6.1. cambiar suma por numero
6.2. cambiar numero por 1
7. decir La suma es: suma

As pues, supongamos que en una ejecucion determinada el programa nos pregunta


por el lmite y contestamos con el valor 3. Tras ejecutar las instrucciones 3, 4 y 5 del
algoritmo anterior, tendremos tres variables cuyos valores son:
limite
3

numero
0

suma
0

En este momento, comienza la ejecucion del bucle de repeticion (instruccion 6). Esta claro que numero no es mayor que limite, por lo que se ejecuta el bucle. Por tanto, se
ejecuta la instrucci
on 6.1 que modifica el valor actual de suma (que vale 0) a
nadiendole
lo que vale n
umero (que es tambien 0). Por tanto, suma se mantiene como 0. Y a continuacion se ejecuta la instrucci
on 6.2, que modifica el valor de numero a
nadiendole una
unidad:
limite
3

numero
1

suma
0

De nuevo volveramos a la condicion de control del bucle de repeticion, que vuelve a


comprobar si en este momento numero > limite. Como esta condicion sigue siendo
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 74

CAPITULO 4. CONTROL
falsa, se vuelve a ejecutar el cuerpo de la repeticion. La instruccion 6.1 modifica suma
a
nadiendole el valor de numero. Y como consecuencia suma pasa a valer 1, mientras que
la instrucci
on 6.2 aumenta en una unidad el valor de numero:
limite
3

numero
2

suma
1

De nuevo se regresa a la condici


on del bucle de repeticion. La condicion es falsa, y por
tanto se ejecutar
an otra vez las instrucciones 6.1 y 6.2. La primera de ellas le a
nade
el valor de numero al actual de suma, por lo que esta valdra ahora 3. Y as mismo,
aumenta numero en una unidad:
limite
3

numero
3

suma
3

De nuevo en la condici
on de chequeo del bucle, y sigue siendo falsa, puesto que aunque
los valores son iguales, lo que se comprueba es si numero es estrictamente mayor que
limite. Al fallar la condici
on, se ejecutan las instrucciones 6.1 y 6.2. Como resultado,
suma se aumenta en el valor que ahora mismo registra numero (y por tanto valdra 6),
y a continuaci
on numero aumenta en una unidad:
limite
3

numero
4

suma
6

En este momento, la condici


on ya falla. Hemos terminado la repeticion, y el resultado
es que la variable suma contiene el valor correcto de la sumatoria: 1+2+3.
Puedes probar con n
umeros especialmente grandes como se muestra en la figura 4.7. El
sumatorio de los primeros 123456 n
umeros enteros es 7620753696.

Figura 4.7: Sumando n


umeros muy grandes
Pero te puedes imaginar cu
antas operaciones aritmeticas ha necesitado hacer nuestro
programa para obtener el resultado? En muchas ocasiones no solo interesa encontrar
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 75

CAPITULO 4. CONTROL
una soluci
on a un problema, sino que ademas nos interesara que la solucion sea lo
mas eficiente posible. Y una estrategia para medir la eficiencia de un programa es ver
cuantas operaciones necesita hacer.
El problema de las sumas es un clasico de las clases de matematicas. Posiblemente
hayas escuchado que el matem
atico aleman Gauss, ya era un genio siendo un ni
no. Se
cuenta que estando en lo que actualmente sera una clase de primaria, la profesora les
pidio a todos los alumnos que sumaran los 100 primeros n
umeros. Suponiendo que esto
les llevara un buen tiempo, a los pocos segundos Gauss respondio diciendo que tena
la soluci
on. Simplemente dijo: Es 5050.
Y el razonamiento de Gauss fue extraordinario. Se dio cuenta que 1 + 100 (es decir
el primer n
umero m
as el u
ltimo) sumaban lo mismo que 2 + 99 (el segundo mas el
pen
ultimo), y que 3 + 98. Y as sucesivamente. Es decir, todos estos pares siempre
sumaban 101. Pero si vamos sumando pares, al final tendremos solo la mitad de sumandos (la mitad en relaci
on al total de n
umeros que tenemos que sumar). Por lo tanto
el resultado de la sumatoria de los primeros n
umeros es igual a la suma del primero
mas el u
ltimo, multiplicada por el total entre dos (la mitad del total). La figura 4.8
ilustra este razonamiento.

Figura 4.8: Estrategia de Gauss para sumar los 100 primeros n


umeros

Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 76

CAPITULO 4. CONTROL

Tarea 2
Sumatorio de los primeros n
umeros usando el algoritmo de
Gauss
Escribe el algoritmo para el c
alculo de la sumatoria de dos n
umeros usando
la estrategia de Gauss.
A continuaci
on construye un proyecto en Scratch que implemente este algoritmo.

Tarea 3
Factorial de un n
umero
Si el sumatorio de n se calcula como 1 + 2 + ... + n; el factorial de un
n
umero es similar pero con multiplicaciones.
Por ejemplo, el factorial de 4 ser
a igual a 1 * 2 * 3 * 4 = 24.
Debes escribir el algoritmo para calcular el factorial y a continuaci
on escribir el proyecto correspondiente en Scratch.
NOTA: Ten en cuenta que cualquier n
umero multiplicado por cero es igual
a cero. As que evita utilizar el cero en la cadena de multiplicaciones.

Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 77

CAPITULO 4. CONTROL

Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 78

Captulo 5.
Mltiples tareas, mltiples
objetos y eventos
Jos Francisco Quesada

Captulo 5

M
ultiples tareas, m
ultiples
objetos y eventos

Indice
5.1. M
ultiples tareas . . . . . . . . . . . . . . . . . . . . . . . . . .

80

Ejemplo 1: Andar y contar . . . . . . . . . . . . . . . . . . . . . . . .

83

5.1.1. Comentarios . . . . . . . . . . . . . . . . . . . . . . . . . . .

84

5.2. Crear nuevos objetos . . . . . . . . . . . . . . . . . . . . . . .

85

Ejemplo 2: Dos objetos moviendose al azar por el escenario . . . . .

86

5.3. Disfraces y apariencia de los objetos . . . . . . . . . . . . . .

87

5.3.1. Disfraces

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

87

5.3.2. Cambio de disfraces . . . . . . . . . . . . . . . . . . . . . . .

88

Ejemplo 3: Dos objetos moviendose al azar por el escenario y cambiando de disfraz . . . . . . . . . . . . . . . . . . . . . . . . .

89

5.3.3. Mostrar y esconder . . . . . . . . . . . . . . . . . . . . . . . .

89

5.3.4. Control del tama


no de un objeto . . . . . . . . . . . . . . . .

90

5.4. Eventos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

90

5.4.1. Control del movimiento de un objeto por el escenario . . . . .

91

Ejemplo 4: El gato se mueve hacia donde le indiquemos . . . . . . .

92

2015 Jose F. Quesada


Club Scratch Iberoamericano Organizaci
on de Estados Iberoamericanos (OEI)

Esta obra est


a bajo una Licencia Creative Commons Atribuci
on-NoComercial-SinDerivar

79

CAPITULO 5. MULTIPLES
TAREAS, MULTIPLES
OBJETOS Y EVENTOS
Ejemplo 5: Un fantasma que aparece y desaparece aleatoriamente . .

93

Ejemplo 6: Atrapando al fantasma . . . . . . . . . . . . . . . . . . .

94

Tarea 1: La carrera de Lewis Carroll: Alicia en el Pas de las Maravillas 95

Podemos hacer m
as de una cosa a la vez? En un momento determinado, podemos ir
andando, hablando con una o m
as personas a nuestro lado y atentos a otras personas,
obstaculos, coches, etc. que se nos puedan cruzar en nuestro camino.
No vamos a entrar en este curso ni en este momento en analizar la capacidad fsica,
neuronal o cerebral que nos permite realizar estas operaciones. Pero lo cierto es que
en los sistemas inform
aticos actuales estamos tambien acostumbrados a trabajar con
entornos denominados multitarea. Es decir, en un ordenador tenemos a la vez abierto un
navegador web que se est
a descargando una pagina, estamos escribiendo un documento
en un procesador de textos y posiblemente escuchando m
usica que esta reproduciendo
el propio ordenador, grabando ficheros, etc. Realmente los recursos con los que cuenta
el ordenador son limitados, pero nos consigue dar la sensacion de que realiza muchas
tareas de forma simult
anea.
En el caso de Scratch, hasta ahora hemos construido proyectos en los que trabajamos
con un u
nico objeto (la famosa mascota de Scratch: el gato), y dicho objeto ejecuta
un u
nico script. Comenzaremos a analizar a continuacion como vamos a trabajar con
m
ultiples operaciones de forma simultanea.

5.1.

M
ultiples tareas

Como podramos hacer una aplicacion que le permitiese al gato andar indefinidamente
por el escenario y a la vez ir contando n
umeros?
Aunque para realizar esta tarea existen varias alternativas, pensemos en la siguiente
estrategia. Por un lado, sabemos como hacer que el gato se vaya moviendo. Podramos
tener un bucle que va por ejemplo moviendose 10 pasos y esperandose un poco de
tiempo, por ejemplo una decima de segundo. Cada vez que toque con el borde del
escenario, puede rebotar y de esa forma continuara moviendose de forma indefinida.
Podemos conseguir esta funcionalidad con un programa como el contenido en la figura
5.1.
En esta ocasi
on hemos introducido un bloque de movimiento que no habamos usado
hasta ahora, pero que es bastante facil de entendrer:

Como su nombre indica, esta instruccion provoca que el objeto correspondiente


rebote cuando toque un borde cualquiera del escenario. Es necesario tener en
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 80

CAPITULO 5. MULTIPLES
TAREAS, MULTIPLES
OBJETOS Y EVENTOS

Figura 5.1: Movimiento infinito por el escenario


cuenta que tras rebotar el objeto girara o no en funcion de la configuracion de
giro que hayamos establecido en la ficha de configuracion del objeto (figura 5.2).

Figura 5.2: Ficha de informacion de un objeto


Para el objetivo del programa que queremos construir en este momento, sera adecuado
activar el modelo de giro izquierda a derecha, para que cuando el gato vuelva desde el
borde derecho hasta el izquierdo lo haga sin girarse (es decir, manteniendose siempre
con la cabeza hacia arriba).
De hecho, para que el programa de movimiento infinito por el escenario este completo
sera adecuado establecer la inicializacion del programa. Es decir, sera interesante colocar el objeto en su posici
on inicial (el centro del escenario), mirando hacia la derecha,
e incluso podemos fijar el estilo de rotacion.
Ademas de poder controlar el estilo de rotacion en la ficha del objeto, tambien se puede
hacer con un bloque de instrucci
on, que se encuentra en la paleta de Movimiento, justo
debajo de la instrucci
on de rebote que acabamos de ver:

Esta instrucci
on permite cambiar durante la ejecucion de un programa el estilo
de rotaci
on de un objeto. Observa que puedes establecer los tres estilos basicos
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 81

CAPITULO 5. MULTIPLES
TAREAS, MULTIPLES
OBJETOS Y EVENTOS
utilizando la flechita de seleccion de opciones del rectangulo de esta instruccion:
izquierda-derecha
no rotar
en todas direcciones
Incluyendo la inicializaci
on, el programa de movimiento quedara de la siguiente forma:

Figura 5.3: Movimiento infinito por el escenario - con inicializacion


El problema que nos planteamos a continuacion es como conseguir que el gato vaya
contando segundos de 1 en 1. Es decir, empezara en 0, pasado un segundo dira 1,
pasado otro segundo dir
a 2 ... y as sucesivamente.
Para saber que ha transcurrido un segundo tenemos varias alternativas. Una de ellas,
podra ser esperar un segundo (utilizando la instruccion de espera que ya hemos visto).
Esta instrucci
on nos asegura que cuando se ejecuta el programa correspondiente estara detenido un segundo. Por tanto, podramos crear una variable que denominaremos
tiempo. Al iniciar el programa le asignaremos el valor 0, y durante la repeticion (bucle
infinito por siempre) iremos deteniendo el tiempo un segundo exacto, a continuacion
aumentamos el valor de tiempo en 1 (instruccion cambiar).
El resultado (incorrecto) se muestra en la figura 5.4:
Por que est
a mal este programa? En primer lugar, aunque el objeto anda y cuenta,
realmente no nos da la sensaci
on de que lo haga a la vez. Cada vez que tiene que contar,
se espera un segundo y deja de andar. Ademas, si lo analizamos bien, veremos que en
primer lugar dice un n
umero (por ejemplo 0 al empezar). A continuacion se espera
1 segundo completo en el que el programa esta detenido. Inmediatamente despues
aumenta el valor de tiempo a uno mas (valdra 1), se mueve 10 pasos y se espera una
decima de segundo. Por lo que realmente habra tardado un segundo y una decima en
volver a decir el nuevo valor, y este retraso se ira acumulando.
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 82

CAPITULO 5. MULTIPLES
TAREAS, MULTIPLES
OBJETOS Y EVENTOS

Figura 5.4: Andar y contar - Erroneo


Es cierto que podramos aprovecharnos del hecho de que cada tras un movimiento se
espera 0.1 segundos, y entonces agrupar los movimiento en bloques de 10, y cada bloque
supondr
a un segundo. Esta alternativa es correcta, pero la solucion es cada vez mucho
mas compleja de programar.
Pensemos una alternativa diferente:

Ejemplo 1

Andar y contar
Construir un programa en el que el gato vaya moviendose constantemente
por el escenario rebotando de izquierda a derecha y de derecha a izquierda
de forma indefinida. De forma simult
anea deber
a ir contando los segundos
que van transcurriendo.
[Proyecto: andar-y-contar]
La soluci
on que proponemos se basa en crear dos scripts para un mismo objeto. Observemos la figura 5.5.
En primer lugar, observamos que el proyecto cuenta con dos scripts. Cada uno de
los scripts comienza a ejecutarse cuando se pulsa la bandera verde, por tanto los dos
se pondr
an a actuar cuando iniciemos su ejecucion pulsando la bandera verde. Ahora
bien, una vez que arrancan, cada uno comienza a ejecutarse por separado. Como detalle
importante, cuando el script de la derecha se detiene un segundo (esperar) dicha espera
no le afecta al script de movimiento de la izquierda.
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 83

CAPITULO 5. MULTIPLES
TAREAS, MULTIPLES
OBJETOS Y EVENTOS

Figura 5.5: Andar y contar

5.1.1.

Comentarios

En el proyecto anterior han aparecido unas estructuras nuevas. Justo debajo de los
scripts aparecen unos mensajes en texto con ciertas explicaciones.
Cuando est
as situado en el
area de programas, si pulsas el boton derecho del raton,
observa que te aparecen dos opciones: limpiar y a
nadir comentario. La primera de
las opciones recoloca los scripts que tengas bien ordenados en el area de programas. La
segunda te permite introducir un comentario.
Un comentario no es m
as que una explicacion que a
nadimos a los programas que hacemos. Es una pr
actica de programacion que debemos aplicar constantemente. En ocasiones, creamos una variable que posteriormente podemos olvidar para que se utilizaba, o
bien realizamos un proceso que no es facil de entender. Tanto para nosotros mismos como para que nuestros programas sean comprendidos por otras personas, es importante
a
nadir comentarios. En los programas de este curso, no se a
nadiran normalmente ya
que los programas est
an explicados en el material y supondra solamente una extension
a
nadida redundante.
Para crear un comentario observa que tras seleccionar la opcion a
nadir comentario
te aparece una caja con un color amarillento. En dicha zona de texto puedes escribir
lo que consideres adecuado. Puedes desplazar las cajas de comentario por el area de
programas para ubicarlas en las zonas que consideres mas adecuadas.
Tambien puedes modificar su tama
no pulsando sobre la esquina inferior derecha (en
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 84

CAPITULO 5. MULTIPLES
TAREAS, MULTIPLES
OBJETOS Y EVENTOS
la zona con dos franjas diagonales). Tambien puedes borrar o duplicar un comentario
pulsando con el bot
on derecho del raton en la franja superior del comentario (con un
color amarillento m
as fuerte).

5.2.

Crear nuevos objetos

Ademas de poder trabajar con m


as de un script para un objeto, en nuestros proyectos
sera com
un que necesitemos m
as de un objeto.
Como hemos visto, cada vez que creamos un proyecto nuevo, Scratch lo crea con el gato
por defecto.
Pero observemos la zona de Scratch situada en el cuadrante inferior izquierdo: el recuadro que denominamos Lista de objetos (figura 5.6).

Figura 5.6: Lista de objetos


En la franja superior derecha de esta zona, justo a continuacion del texto Nuevo objeto
aparecen cuatro iconos, que nos permiten, respectivamente:

Elegir un objeto desde la biblioteca: podemos abrir la galera de imagenes


que Scratch incluye para elegir alguna de las imagenes incluidas y cargarla como
un objeto nuevo.

Dibujar nuevo objeto: Accederemos a un editor grafico con el que podemos


crear nuestro propio dibujo.

Cargar objeto desde archivo: Podemos utilizar imagenes grabadas en nuestro


ordenador para crear los objetos.

Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 85

CAPITULO 5. MULTIPLES
TAREAS, MULTIPLES
OBJETOS Y EVENTOS

Nuevo objeto desde c


amara: Si disponemos de una camara conectada a nuestro
ordenador podemos capturar una imagen (hacer una fotografa) que pasara a ser
la imagen del nuevo objeto creado.
Vamos a usar la opci
on Elegir un objeto desde la biblioteca para introducir
rapidamente un nuevo objeto. Al seleccionar esta opcion observa que aparece una ventana denominada Biblioteca de objetos donde veras m
ultiples imagenes. En la parte
izquierda tienes adem
as varios men
us que clasifican los objetos seg
un categoras. Ten en
cuenta que los objetos disponibles cambian con las versiones, pero las ideas que debes
conocer son las mismas aunque cambien los dibujos o los objetos.
Selecciona la categora Fantasa y veras un personaje denomiando Giga walking como
el primer objeto de la segunda fila:

Figura 5.7: Biblioteca de objetos


Si lo seleccionas haciendo doble click con el raton sobre la imagen correspondiente,
automaticamente se colocar
a como un nuevo objeto en la lista de objetos de Scratch, y
su figura aparecer
a en el escenario.
Una cosa importante que ya debes tener en cuenta constantemente. Si tienes varios
objetos, cada uno de ellos tendr
a sus propios programas o scripts. Seleccionando en el
area de la lista de objetos el icono correspondiente se activaran en el area de programas
los scrips de dicho objeto.

Ejemplo 2

Dos objetos movi


endose al azar por el escenario
Construir un programa en el que tendremos dos objetos (el gato y Giga)
moviendose indefinidamente por el escenario. Cada vez que uno de ellos
toque con un borde debe comenzar a moverse en una direcci
on al azar.
[Proyecto: dos-objetos-moviendose-aleatoriamente]
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 86

CAPITULO 5. MULTIPLES
TAREAS, MULTIPLES
OBJETOS Y EVENTOS
Para llevar a cabo el movimiento al azar podemos utilizar la estrategia que ya vimos en
el captulo anterior consistente en detectar si se ha tocado un borde y en ese momento
retroceder y apuntar en una direccion al azar. Una curiosidad: teniendo en cuenta la
forma geometrica y el tama
no relativo de las figuras sera necesario que tengas que
retroceder m
as o menos para facilitar el giro.
La imagen 5.8 muestra los dos objetos ya creados y en movimiento. Y en concreto
podemos observar el programa asociado al objeto Giga. Observa que hemos colocado
un retroceso de 20 pasos en este caso. El script del gato es similar. Lo interesante es que
cuando pulsamos la bandera verde, ambos empiezan a moverse de forma simultanea.

Figura 5.8: Dos objetos moviendose aleatoriamente

5.3.

Disfraces y apariencia de los objetos

Antes de seguir avanzando en el control de los objetos, es interesante que nos detengamos en una propiedad de los objetos. Hasta ahora practicamente hemos confundido la
identidad de un objeto con la imagen que vemos del mismo en el escenario.
Pero es importante entender que para Scratch una cosa es el objeto (la propia entidad
con sus scripts o programas) y otra cosa es la apariencia con la que aparece en el
escenario. Es m
as, podr
a ocurrir que un objeto simplemente se oculte (deje de mostrarse
en el escenario) y sin embargo siga haciendo cosas (ejecutando los programas asociados).

5.3.1.

Disfraces

En la franja superior central de la ventana de Scratch aparecen tres pesta


nas: Programas,
Disfraces y Sonidos. Hasta ahora hemos usado la de programas como la principal de
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 87

CAPITULO 5. MULTIPLES
TAREAS, MULTIPLES
OBJETOS Y EVENTOS
trabajo.
Utilizando el ejemplo anterior que acabamos de construir (dos-objetos-moviendose-aleatoriamente)
activa el objeto gato y a continuacion selecciona la pesta
na Disfraces:

Figura 5.9: Disfraces del gato


En esta ventana puedes ver los dos disfraces del gato, con sus nombres correspondientes
(disfraz1 y disfraz2). El propio disfraz lo puedes modificar ya que en la zona de la
derecha de la ventana tienes ahora activo el editor de imagenes. Y ademas puedes crear
nuevos disfraces para el personaje utilizando las mismas opciones que ya vimos para
crear objetos.
Pero bien, consideremos de momento los dos disfraces que ya tenemos disponibles para
el gato. Observa que para el personaje Giga walking tienes disponibles 4 disfraces.

5.3.2.

Cambio de disfraces

Mientras ejecutamos un programa nos podra interesar que un personaje cambie de


disfraz en funci
on de determinada situacion. Para conseguir este efecto, la paleta
Apariencia de la pesta
na Programas cuenta con dos instrucciones relacionadas con
los disfraces:

Nos permite activar un disfraz determinado para el objeto correspondiente. Observa que en el recuadro de esta instruccion se puede seleccionar cualquiera de los
disfraces posibles del objeto.

Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 88

CAPITULO 5. MULTIPLES
TAREAS, MULTIPLES
OBJETOS Y EVENTOS

En este caso, se activa el siguiente disfraz. Los disfraces estan ordenados seg
un el
mismo criterio que aparece cuando los vemos en la pesta
na de Disfraces. As que
si estamos en el disfraz que ocupa por ejemplo la segunda posicion como disfraz
actual, pasaremos autom
aticamente al que ocupe la tercera posicion. Si el disfraz activo es el u
ltimo, el siguiente disfraz es el primero, creando un ciclo en el
recorrido.

Ejemplo 3

Dos objetos movi


endose al azar por el escenario y cambiando de disfraz
Modifica el ejemplo anterior, para que los dos objetos (el gato y Giga), a la
vez que van caminando vayan cambiando de disfraz.
[Proyecto: dos-objetos-cambiando-disfraces]
Para conseguir este efecto basta con que en la fase de inicializacion del objeto activemos
el primer disfraz, y tras cada movimiento (los 10 pasos y la espera) hagamos un cambio
al siguiente disfraz:

Figura 5.10: Dos objetos cambiando disfraces: programa correspondiente al gato

5.3.3.

Mostrar y esconder

Como hemos comentado previamente, un objeto puede incluso desaparecer del escenario. Para ello podramos usar un disfraz con el mismo color que el escenario (una especie
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 89

CAPITULO 5. MULTIPLES
TAREAS, MULTIPLES
OBJETOS Y EVENTOS
de estrategia de camuflaje o mimetismo). Pero como el escenario tambien puede tener
dibujos y efectos diversos, no siempre nos valdra. As que Scratch nos ofrece dos instrucciones que permiten esconder o volver a mostrar el objeto al que se le apliquen:

Hace que el objeto aparezca, es decir, se muestre en la pantalla.

El objeto se oculta, desaparece del escenario.

5.3.4.

Control del tama


no de un objeto

Todo objeto (o quiz


as m
as bien, todo disfraz de un objeto que es lo que realmente
vemos) tiene un tama
no digamos normal, con el que se visualiza si no lo modificamos.
Pero es posible cambiar el tama
no de visualizacion.
Para eso, la paleta de Apariencia cuenta con dos instrucciones especficas:

Esta instrucci
on asigna (fija) el tama
no del objeto a un valor exacto. Pero es muy
importante, el valor que indicamos es un porcentaje sobre el tama
no original del
objeto. Si indicamos por ejemplo 50 % el nuevo tama
no sera la mitad del original.
Y si indicamos 200 % haremos que se vea al doble de tama
no. Siempre usaremos
porcentajes sobre el tama
no original.

En este caso, aumentamos o disminuimos el tama


no relativo del objeto teniendo
en cuenta el tama
no que tenga en el momento de ejecutar esta instruccion.

5.4.

Eventos

Un evento es un suceso externo a un objeto, pero que el objeto tiene que percibir y
ante el cual reaccionar
a ejecutando determinadas acciones.
El evento con el que ya hemos estado trabajando es Al presionar la bandera verde.
Este evento lo provoca el usuario del programa. Los objetos estan preparados para
detectar ese fen
omeno, y en cuanto reciben la se
nal correspondiente activan los scripts
que se deben ejecutar.
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 90

CAPITULO 5. MULTIPLES
TAREAS, MULTIPLES
OBJETOS Y EVENTOS
Pero adem
as de la bandera verde existen mas fenomenos o eventos que pueden actuar
sobre los objetos.
Uno de los eventos m
as habituales es la deteccion de pulsaciones de teclas. Es decir,
como usuarios de un programa hecho en Scratch podemos modificar su comportamiento
pulsando distintas teclas. Por ejemplo, podemos dirigir un personaje pulsando las flechas: si pulsamos flecha hacia arriba se debera mover unos cuantos pasos hacia arriba,
y as sucesivamente.
Para ilustrar el funcionamiento de los eventos as como del resto de funciones que
hemos introducido en este captulo, nos proponemos construir un proyecto con las
siguientes caractersticas. Vamos a realizar un juego en el que participaran dos objetos
o personajes. En primer lugar el gato, que nos representara a nosotros como jugadores
en el juego. El gato se podr
a mover en las cuatro direcciones (arriba, abajo, derecha e
izquierda) siguiendo nuestras instrucciones (las pulsaciones de flechas correspondientes).
El segundo objeto ser
a un fantasma. Teniendo en cuenta su capacidad de aparecer y
desaparecer el fantasma podr
a aparecer en cualquier parte del escenario, permanecer
alg
un tiempo visible y r
apidamente ocultarse, para volver a aparecer en cualquier otra
parte. Nuestro objetivo es capturar tantos fantasmas como sea posible en un intervalo
de tiempo.
Para conseguir el juego completo, necesitaremos ir abordando varias etapas en su dise
no
y construcci
on, introduciendo progresivamente mas funciones y componentes.

5.4.1.

Control del movimiento de un objeto por el escenario

Como indicamos previamente, uno de los eventos mas habituales consiste en pulsar
teclas del teclado. Estas pulsaciones las pueden detectar los objetos y responder de
forma adecuada.
Observa que en la paleta Eventos, el segundo bloque de instruccion es:

Esta instrucci
on detecta el evento correspondiente a la pulsacion de una tecla.
En el recuadro asociado a la instruccion se puede seleccionar la tecla a la que se
quiere asociar este evento.
Observa que todos los detectores de un evento son instrucciones que comienzan con
una zona circular en la parte superior. Esto supone que no pueden unirse a otras
instrucciones por la parte superior, y seran siempre los iniciadores de un nuevo script.

Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 91

CAPITULO 5. MULTIPLES
TAREAS, MULTIPLES
OBJETOS Y EVENTOS

Ejemplo 4

El gato se mueve hacia donde le indiquemos


Vamos a construir un proyecto en el que al principio el gato se situar
a en
el centro del escenario. Cada vez que pulsemos una de las cuatro flechas, el
gato se mover
a 10 pasos en la direcci
on correspondiente.
[Proyecto: controlando-el-movimiento-del-gato]
Para realizar este proyecto, tendremos que crear en primer lugar un script que detecta
el inicio del juego (al pulsar la bandera verde), y lo u
nico que haremos es situar al
objeto (el gato, que es el u
nico que necesitamos) en el centro del escenario (mediante
una instrucci
on ir a x: 0 y: 0).
Ahora bien, C
omo conseguimos que al pulsar la flecha hacia arriba se mueva 10 pasos
hacia arriba?
Tendramos que crear un script nuevo que sera disparado por el evento al pulsar la
tecla flecha arriba. En ese momento, para conseguir que se mueva como queremos,
giramos el objeto en direcci
on arriba, y nos desplazamos 10 pasos.
La misma operaci
on la realizaremos para las restantes flechas, tal y como se muestra
en la figura

Figura 5.11: Controlando el movimiento del gato

Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 92

CAPITULO 5. MULTIPLES
TAREAS, MULTIPLES
OBJETOS Y EVENTOS

Ejemplo 5

Un fantasma que aparece y desaparece aleatoriamente


Al proyecto anterior le vamos a a
nadir un segundo objeto. En concreto,
utilizaremos el personaje denominado Ghost1 de la categora Fantasa, de
la Biblioteca de objetos.
Tendremos que conseguir que el objeto aparezca y desaparezca en una posici
on al azar del escenario. Cada vez que aparezca, permanecer
a visible un
tiempo entre 2 y 4 segundos, y cada vez que desaparezca dejaremos de verlo
entre 0 y 2 segundos.
Adem
as, para introducir m
as variaciones queremos que cada vez que aparezca tambien lo haga con un tama
no diferente.
[Proyecto: el-fantasma-aparece-y-desaparece]
La soluci
on es relativamente simple. Incluiremos el nuevo objeto utilizando el mecanismo que ya hemos visto en este mismo captulo. Este objeto tendra un u
nico script
que se comienza a ejecutar al pulsar la bandera verde tambien. De forma indefinida
estaremos ejecutando la siguiente secuencia de procesos:
1. al pulsar la bandera verde
2. por siempre
2.1. Fijar un tama
no del objeto al azar
2.2. Fijar una posici
on del escenario al azar
2.3. Mostrarse (visualizarse en el escenario)
2.4. Esperar (visible) entre 2 y 4 segundos
2.5. Esconderse (ocultarse en el escenario)
2.6. Esperar (invisible) entre 0 y 2 segundos

Todas las instrucciones necesarias para construir este algoritmo como un programa ya
las hemos estudiado, as que solo nos queda que ajustar los valores de aleatoriedad que
queremos usar. En la figura 5.12 se propone una posible estrategia.

Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 93

CAPITULO 5. MULTIPLES
TAREAS, MULTIPLES
OBJETOS Y EVENTOS

Figura 5.12: Un fantasma difcil de predecir

Ejemplo 6

Atrapando al fantasma
Queremos modificar el proyecto anterior de forma que contemos el n
umero
de veces que atrapamos al fantasma. Es decir, puesto que podemos mover
el gato usando las flechas de direcci
on, cada vez que veamos el fantasma
aparecer en el escenario debemos movernos hacia el. Cuando lo alcancemos (antes de que desaparezca) si lo tocamos lo habremos atrapado. Como
resultado debemos aumentar un punto en nuestro contador.
[Proyecto: atrapando-al-fantasma]
Para realizar esta modificaci
on, evidentemente tendremos que utilizar una variable (por
ejemplo Puntos), que empezar
a valiendo cero y que aumentara cada vez que el gato
toque al fantasma.
Para detectar que un objeto toque a otro disponemos del sensor tocando:

El recuadro de control de este sensor puede activarse para detectar si tocamos el borde del escenario, pero tambien para detectar si se toca a cualquier de los objetos que
tenemos creados en nuestro proyecto.
En principio la estrategia parece simple, pero puede complicarse. Pensemos: necesitamos
iniciar el valor de la variable Puntos a cero. A continuacion iniciaremos otro buble
infinito, que estar
a constantemente comprobando si los objetos se tocan. En cuanto se
toquen, aumentaremos el valor de la variable en un punto mas.
Pero puesto que esta operaci
on es muy rapida, cuando el gato toque al fantasma
sera posible que lo toque durante decimas de segundo o incluso segundos enteros. En
ese perodo de tiempo, se ir
a aumentando progresivamente el contador de puntos, y
podra ocurrir que con solo haberlo capturado una vez el contador se coloque en un
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 94

CAPITULO 5. MULTIPLES
TAREAS, MULTIPLES
OBJETOS Y EVENTOS
n
umero muy elevado. Hay varias soluciones posibles a esta situacion. Pero entre las
disponibles con las herramientas que tenemos, una opcion sera: en cuanto detectamos
que los objetos se han tocado, aumentamos el valor de puntos, e inmediatamente se
vuelve a esconder el fantasma. De esa forma, ya deja de tocarlo, y habra que esperar a
que vuelva a aparecer para volver a buscarlo.
Pero si queremos que desaparezca el fantasma, entonces este script lo tiene que ejecutar
el propio fantasma. En definitiva, tendremos que a
nadir el siguiente algoritmo al objeto
fantasma:
1. al pulsar la bandera verde
2. fijar Puntos a 0 (previamente habramos creado la variable Puntos)
3. por siempre
3.1. si tocando Gato?
3.1.1. cambiar Puntos por 1
3.1.2. esconder

Figura 5.13: Contador de puntos para la partida

Tarea 1
La carrera de Lewis Carroll: Alicia en el Pas de las Maravillas
Uno de los pasajes divertidos y a la vez crticos de Alicia en el Pas de
las Mararillas es la carrera que organiza el Dodo, y que se ha traducido en
muchas ocasiones como la Carrera en comite.
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 95

CAPITULO 5. MULTIPLES
TAREAS, MULTIPLES
OBJETOS Y EVENTOS
Vamos a simular una primera versi
on de esta carrera en Scratch, usando
las herramientas introducidas hasta este momento (es importante intentar
hacer este ejercicio con las u
nicas instrucciones vistas hasta este captulo).
Debemos construir una animaci
on con tres objetos: por ejemplo, un caballo, un conejo y un rat
on. Los tres tienen que iniciar una carrera infinita,
comenzando en la esquina inferior izquierda del escenario y corriendo alrededor del escenario en el sentido de las agujas del reloj. El caballo ir
a al
doble de la velocidad que el conejo, y al triple que el rat
on.
Cuando el caballo (que es el m
as r
apido) toque al conejo (adelant
andolo)
dir
a algo (por ejemplo Te estoy pillando Conejo, y algo parecido cuando
este adelantando al rat
on. Cuando el conejo adelante al rat
on tambien le
dir
a algo.

Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 96

Captulo 6.
Mensajes, coordinacin y
sincronizacin de objetos
Jos Francisco Quesada

Captulo 6

Mensajes, coordinaci
on y
sincronizaci
on de objetos

Indice
6.1. Mensajes: enviar y recibir . . . . . . . . . . . . . . . . . . . .

98

Ejemplo 1: La atleta y el entrenador . . . . . . . . . . . . . . . . . . 100


6.1.1. Versi
on 1: Preparandose para entrenar . . . . . . . . . . . . . 100
6.1.2. Versi
on 2: Contador de vueltas . . . . . . . . . . . . . . . . . 101
6.1.3. Versi
on 3: Controlando el n
umero de vueltas para terminar el
entrenamiento . . . . . . . . . . . . . . . . . . . . . . . . . . 103
6.2. Sincronizaci
on de objetos . . . . . . . . . . . . . . . . . . . . . 105
6.2.1. Adivinando n
umeros . . . . . . . . . . . . . . . . . . . . . . . 107
6.3. Escenarios y botones . . . . . . . . . . . . . . . . . . . . . . . 109
Ejemplo 2: Construyendo los escenarios y botones del juego . . . . . 109
6.3.1. Botones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
6.3.2. Transiciones entre escenarios . . . . . . . . . . . . . . . . . . 111
6.3.3. Mensajes y transiciones . . . . . . . . . . . . . . . . . . . . . 114
6.4. B
usqueda binaria en un espacio de n
umeros . . . . . . . . . 116
Ejemplo 3: El adivino de n
umeros

. . . . . . . . . . . . . . . . . . . 116

2015 Jose F. Quesada


Club Scratch Iberoamericano Organizaci
on de Estados Iberoamericanos (OEI)

Esta obra est


a bajo una Licencia Creative Commons Atribuci
on-NoComercial-SinDerivar

97

Y SINCRONIZACION
DE
CAPITULO 6. MENSAJES, COORDINACION
OBJETOS
Tarea 1: Un mago que descubre los enga
nos . . . . . . . . . . . . . . 118

Los programas de Scratch est


an preparados para capturar eventos (sucesos) y actuar
de forma acorde. Estos eventos normalmente son fenomenos que el usuario provoca, por
ejemplo, pulsar la bandera verde, presionar teclas, u otros fenomenos como clickar con
el raton sobre el propio objeto. Pero todos estos eventos son fenomenos que suceden
fuera del propio programa.
El siguiente problema que nos planteamos es como podemos conseguir que un objeto
act
ue sobre otro objeto, o dicho de otra forma, como un objeto A puede actuar o
condicionar su comportamiento teniendo en cuenta la actuacion de otro objeto B?
Esto lo podemos entender de dos formas distintas. Una alternativa sera pensar que
B enva un evento que debe capturar A. Tambien hay otra forma de entenderlo. Si el
comportamiento de un objeto queda determinado por el de otro, en u
ltima instancia
estamos coordinando sus comportamientos.
La forma en que Scratch implementa este objetivo es mediante el paso de mensajes.
Esta tecnica se utiliza en muchos ambitos de las ciencias de la computacion y la programaci
on. En el caso de Scratch, la idea no es especialmente compleja, pero requiere
entenderla y analizarla con cierto detenimiento, a lo que se dedica este captulo.

6.1.

Mensajes: enviar y recibir

Siguiendo con el smil anterior, podemos entender un mensaje como un evento que lanza
un objeto.
Un mensaje quedar
a identificado mediante una etiqueta (podemos pensar que el mensaje es una especie de texto que un objeto le enva a otro). As pues, las dos operaciones
clave relacionadas con los mensajes son el envo y la recepcion de los mismos. Estas
instrucciones se encuentran dentro de la paleta Eventos:

Esta instrucci
on enva un mensaje. En el recuadro asociado podemos indicar el
mensaje.
Para cada proyecto, Scratch mantiene la lista de todos los mensajes que hemos
creado. Al principio, tendremos disponible un mensaje denominado message1,
pero observaremos que pulsando la flechita asociada con esta instruccion tenemos
la opci
on para crear un nuevo mensaje. Es importante que utilicemos palabras
representativas a la acci
on que realiza un mensaje. Es decir, si creamos mensajes
que se denominan mensaje24 o env
oNuevo, sera difcil saber posteriormente
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 98

Y SINCRONIZACION
DE
CAPITULO 6. MENSAJES, COORDINACION
OBJETOS
para que sirven. Es m
as conveniente utilizar etiquetas como inicioDePartida,
turnoJugador, etc.

Esta instrucci
on tiene un formato similar a las capturas de eventos que ya hemos
visto, y en realidad, es totalmente equivalente. Es decir, esta instruccion permite
capturar un mensaje. Tendremos que indicar exactamente que mensaje queremos
capturar. Una vez capturado se ejecutaran las instrucciones correspondientes que
constituyen este script.
Es importante tener en cuenta que cuando se enva un mensaje se le enva a todos
los objetos, includo al mismo objeto que lo enva, as que podremos utilizar los
mensajes incluso para hacer que un script provoque la ejecucion de otro script del
mismo objeto.
Tambien es importante tener en cuenta que el mismo mensaje puede ser capturado
por uno o m
as objetos de forma simultanea. Y todos los scripts preparados para
capturar el mensaje activar
an los scripts asociados.

Cuando construimos un script formado por la siguiente secuencia de instrucciones:


Instrucci
on X
Enviar mensaje
Instrucci
on Y

El objeto que este ejecutando este script, tras ejecutar la Instrucci


on X enviar
a el mensaje que indiquemos, y sin detenerse, continuara con la ejecucion de
la Instrucci
on Y.
Ahora bien, la instrucci
on enviar y esperar modifica este comportamiento. Si
el algoritmo tuviese la forma:
Instrucci
on X
Enviar mensaje y esperar
Instrucci
on Y

una vez que se enva el mensaje, este script queda detenido hasta que el o los
scripts que reciben el mensaje terminen de ejecutarse.
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 99

Y SINCRONIZACION
DE
CAPITULO 6. MENSAJES, COORDINACION
OBJETOS

Ejemplo 1

La atleta y el entrenador
Una atleta debe hacer sus ejercicios, pero va a estar supervisada por su
entrenador. El ejercicio de hoy consiste en correr alrededor del escenario.
La atleta se debe situar en la posici
on de salida del circuito. A continuaci
on
el entrenador le dir
a cu
antas vueltas tiene que dar (por ejemplo, eligiendo
un valor al azar entre 2 y 4).
Cuando el entrenador le de la se
nal, la atleta podr
a comenzar a correr.
Cada vez que la chica complete una vuelta al circuito, es decir, cuando
pase por la lnea de salida, se lo deber
a decir al entrenador para que lo
vaya anotando. Pero en su concentraci
on entrenando, nuestra deportista
no recuerda cuantas vueltas ha dado y cuando debe terminar. As que el
entrenador, le tendr
a que decir cuando se debe detener, una vez que complete
todas las vueltas necesarias.
Podemos observar que la deportista y el entrenador se tienen que comunicar muchas
cosas entre s. Para eso nos ser
an muy u
tiles los mensajes.
Con el fin de estructurar el problema de forma adecuada, vamos a dise
narlo paso a
paso.

6.1.1.

Versi
on 1: Prepar
andose para entrenar

En esta primera versi


on vamos a realizar las siguientes operaciones:
Elegiremos un bonito fondo de escenario para hacer el entrenamiento.
Elegiremos nuestro entrenador (puede ser el mismo gato).
Elegiremos de la galera de imagenes a nuestra deportista. En lo que sigue vamos
a trabajar con el personaje Girl3 que encontraras en la Biblioteca de objetos
(categora Deportes).
Renombraremos a los objetos. Vamos a utilizar entrenador y atleta.
Una vez hecho todo esto, vamos a pensar en las instrucciones iniciales que van a ejecutar
estos dos personajes. El entrenamiento lo comenzara el entrenador, as que el algoritmo
inicial para este personaje ser
a:
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 100

Y SINCRONIZACION
DE
CAPITULO 6. MENSAJES, COORDINACION
OBJETOS
1.
2.
3.
4.
5.

Al pulsar la bandera verde


Dar un mensaje de bienvenida a la atleta, anim
andola
Fijar el n
umero de vueltas que tendr
a el entrenamiento de hoy
Decir cu
antas vueltas tendr
a el entrenamiento
Enviarle una se
nal (mensaje PreparateParaEmpezar) a la deportista para
que se vaya a la lnea de salida

Por su parte, la deportista s


olo atendera cuando reciba la se
nal para empezar a entrenar.
Es decir:
1.
2.
3.
4.

Al recibir el mensaje PreparateParaEmpezar


Decir que se ha enterado
Moverse hasta la salida
Decir que ya ha llegado
[Proyecto: la-atleta-y-el-entrenador-version-1]

La implementaci
on de estos algoritmos iniciales en Scratch lo encontraras en el proyecto
la-atleta-y-el-entrenador-version-1.
El programa correspondiente al entrenador se muestra en la figura 6.1. Lo u
nico nuevo
que hemos incorporado en este script ha sido la instruccion enviar a la que le hemos
asociado un mensaje que acabamos de crear usando la etiqueta PreparateParaEmpezar
Por otro lado, observa que hemos creado una variable denominada TotalVueltas para
almacenar el n
umero total de vueltas que el entrenador quiere que corra la deportista.

Figura 6.1: La atleta y el entrenador - Version 1 - El entrenador


Por su parte, la atleta al recibir dicho mensaje, se pone en marcha, tal y como muestra
el script de la figura 6.2.

6.1.2.

Versi
on 2: Contador de vueltas

Siguiendo con los objetivos de este proyecto, debemos incorporar un contador de vueltas. Para ello, crearemos una nueva variable, que vamos a denominar ContadorVueltas.
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 101

Y SINCRONIZACION
DE
CAPITULO 6. MENSAJES, COORDINACION
OBJETOS

Figura 6.2: La atleta y el entrenador - Version 1 - La atleta


Algortmicamente, al principio, es decir, cuando el entrenador da la se
nal de salida, el
contador se debe poner a cero. Y cada vez que la atleta complete una vuelta se lo debe
comunicar al entrenador para que este las vaya sumando.
Por tanto, el script inicial del entrenador simplemente a
nade la instruccion 6 a la lista
previa:
1.
2.
3.
4.
5.

Al pulsar la bandera verde


Dar un mensaje de bienvenida a la atleta, anim
andola
Fijar el n
umero de vueltas que tendr
a el entrenamiento de hoy
Decir cu
antas vueltas tendr
a el entrenamiento
Enviarle una se
nal (mensaje PreparateParaEmpezar) a la deportista para
que se vaya a la lnea de salida
6. Fijar el ContadorVueltas a cero

La atleta, una vez que este en la salida, debe comenzar a dar vueltas alrededor del
circuito (elegiremos las coordenadas que mejor se adapten al escenario que tengamos).
Cada vez que complete una vuelta debe enviar el mensaje VueltaCompletada:
1.
2.
3.
4.
5.

Al recibir el mensaje PreparateParaEmpezar


Decir que se ha enterado
Moverse hasta la salida
Decir que ya ha llegado
Repetir por siempre
5.1. Realizar una vuelta completa por el circuito
5.2. Enviar el mensaje VueltaCompletada

Como contrapartida, el personaje Entrenador debe estar preparado para recibir este
nuevo mensaje y actuar de forma acorde:
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 102

Y SINCRONIZACION
DE
CAPITULO 6. MENSAJES, COORDINACION
OBJETOS
1. Al recibir el mensaje VueltaCompletada
2. Cambiar ContadorVueltas por 1

[Proyecto: la-atleta-y-el-entrenador-version-2]
La soluci
on completa para esta segunda version en la que se ha incorporado el segundo
script del Entrenador se encuentra en el proyecto la-atleta-y-el-entrenador-version-2.
Observa en la imagen 6.3 los dos scripts para el entrenador.

Figura 6.3: La atleta y el entrenador - Version 2 - El entrenador


Por su parte, la figura 6.4 contiene la nueva version del script para la atleta en la que
hemos introducido las instrucciones necesarias para realizar una vuelta en el circuito, y cada vez que completa una vuelta (realiza los cuatro tramos) enva el mensaje
correspondiente.

6.1.3.

Versi
on 3: Controlando el n
umero de vueltas para terminar el
entrenamiento

Por u
ltimo, nos queda que controlar el final del entrenamiento. A partir de lo que
ya hemos realizado, la l
ogica del problema es ya simple. Cada vez que el entrenador
reciba un mensaje indicando que se ha completado una vuelta, tras aumentar en uno
el contador, debe comprobar si ya se ha llegado al total. Para ello, utilizaremos un
condicional con una comparaci
on. En caso de haberse llegado a dicho lmite, debe
informarle a la atleta para que deje de correr.
Utilizaremos un nuevo mensaje FinDelEntrenamiento. Cuando la atleta reciba este
mensaje, debe de terminar de correr.
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 103

Y SINCRONIZACION
DE
CAPITULO 6. MENSAJES, COORDINACION
OBJETOS

Figura 6.4: La atleta y el entrenador - Version 2 - La atleta


Y aqu aparece un fen
omeno interesante. En el script principal, la atleta esta ejecutando un proceso (tal y como lo hemos planteado infinito ya que hemos colocado una
instrucci
on por siempre. Y ahora vamos a construir un nuevo script que detectara el
final del entrenamiento. Este nuevo script podra por ejemplo utilizar la instruccion
decir para que la atleta muestra un texto como Por fin, ya estaba agotada, y se podra
poner a descansar. Pero ojo, el script de movimiento de la atleta sigue funcionando,
por lo que a seguira dando vueltas por el escenario.
As que un script tiene que tener capacidad para detener la ejecucion de otros componentes (de otros scripts en definitiva).
Observa la instrucci
on detener situada en la paleta de Control:

Esta instrucci
on permite configurarse con un parametro que tiene tres opciones:
1. todos: Detiene todos los programas de todos los objetos.
2. este programa: Solamente detiene el programa (script) que ejecuta esta
acci
on. El resto de scripts de este objeto o de otros objetos seguiran funcionando.
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 104

Y SINCRONIZACION
DE
CAPITULO 6. MENSAJES, COORDINACION
OBJETOS
3. otros programas en el objeto: Detiene los demas programas del objeto,
excepto este mismo.
Para el caso de la atleta, el script que recibe el mensaje FinDelEntrenamiento debe
detener al script que est
a encargado de correr (otros programas en el objeto). Y
a continuaci
on podra realizar otras acciones (este mismo script), como por ejemplo,
cambiar de disfraz, irse a descansar, etc.
La versi
on final completa, con controles de tama
no de los personajes, disfraces, etc., la
puedes encontrar en el proyecto la-atleta-y-el-entrenador-version-3.
La figura 6.5 contiene los dos scripts del entrenador, mientras que la figura 6.6 los
correspondientes para la atleta en la version final.

Figura 6.5: La atleta y el entrenador - Version 3 - El entrenador

6.2.

Sincronizaci
on de objetos

Una de las funciones m


as u
tiles de los mensajes es la sincronizacion de objetos. Es
decir, cuando incluimos varios objetos en un proyecto, como hemos visto en el u
ltimo
ejemplo, el comportamiento de cada uno de ellos puede estar condicionado por el de
los dem
as.
Mediante el paso de mensajes podemos enviar informacion entre objetos, y estos pueden
actuar de forma acorde.
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 105

Y SINCRONIZACION
DE
CAPITULO 6. MENSAJES, COORDINACION
OBJETOS

Figura 6.6: La atleta y el entrenador - Version 3 - La atleta


Con el objetivo de ilustrar con mas detalle este funcionamiento, as como introducir
varias estrategias de trabajo con Scratch muy habituales, vamos a abordar un proyecto
de una complejidad media, en la que veremos las siguientes operaciones:
Creaci
on de varios fondos de escenario, que iran cambiando seg
un pasemos por
distintos estados o fases del juego.
Creaci
on de botones, es decir, objetos que podemos pulsar para seleccionar determinadas opciones.
Dise
no de un juego interactivo en el que el usuario tiene que participar en el juego.
Modelado de un problema basado en el algoritmo de la b
usqueda binaria.
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 106

Y SINCRONIZACION
DE
CAPITULO 6. MENSAJES, COORDINACION
OBJETOS
Pero vayamos paso a paso. Lo primero es entender o tener una vision global de lo que
queremos hacer.

6.2.1.

Adivinando n
umeros

Nuestro objetivo es construir un juego, ya clasico, en el que un jugador piensa un


n
umero entre un rango determinado (por ejemplo, entre 0 y 1000 sera lo que haremos
en nuestra versi
on), y el otro jugador debe adivinarlo haciendo intentos. En cada intento
el jugador que sabe el n
umero debe decirle si la opcion que le ofrece el que adivina es
igual, menor o mayor que su n
umero (secreto).
Para hacerlo, vamos a construir un proyecto que tendra tres escenarios:
La bienvenida al juego
La bienvenida al juego la haremos usando un escenario tal y como se muestra en la
figura 6.7.

Figura 6.7: Adivinando n


umeros: El escenario de bienvenida
Observemos los elementos de esta pantalla:
En primer lugar, hemos usado un fondo de escenario especial, que tendremos que
seleccionar de la biblioteca de fondos incluidos en la distribucion de Scratch.
En segundo lugar, tenemos un nuevo personaje, el mago, que nos da la bienvenida
al juego.
Y en tercer lugar, vemos que aparecen dos botones en la parte inferior del escenario, que nos permiten seleccionar lo que queremos hacer a continuacion:
Instrucciones: Para ver las instrucciones del juego.
Jugar: Para jugar una partida.
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 107

Y SINCRONIZACION
DE
CAPITULO 6. MENSAJES, COORDINACION
OBJETOS
Las instrucciones del juego
Cuando pulsemos el bot
on Instrucciones aparecera una ventana como la que se muestra en la figura 6.8.
Esta ventana es la m
as simple del todo ya que muestra un texto con las instrucciones
sobre un nuevo fondo de escenario.
El personaje principal de este proyecto (el mago) se ha desplazado para que podamos
leerlas bien, y nos aparece en nuevo boton Inicio que nos permitira volver a la pantalla
principal una vez que hayamos ledo estas instrucciones.

Figura 6.8: Adivinando n


umeros: El escenario de instrucciones
Jugando una partida
Si desde el escenario principal pulsamos el boton Juego nos aparece el escenario en el
que se realizar
a la partida tal y como muestra la figura 6.9.
En este escenario volvemos a tener el mago dispuesto a adivinar el n
umero (que nos
invita a pensar), tambien aparece el boton de Inicio por si queremos interrumpir la
partida y volver a la pantalla principal, y bien, en esta ventana, como veremos mas
adelante, es donde se desarrollar
a el juego.
Quizas es buen momento para jugar con este proyecto durante unos minutos y familiarizarte con la funcionalidad antes de estudiar como se ha construido. El proyecto final
completo se encuentra en el fichero el-adivino-de-numeros.

Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 108

Y SINCRONIZACION
DE
CAPITULO 6. MENSAJES, COORDINACION
OBJETOS

Figura 6.9: Adivinando n


umeros: El escenario de instrucciones

6.3.

Escenarios y botones

Ejemplo 2

Construyendo los escenarios y botones del juego


La primera fase de desarrollo de este proyecto se va a centrar exclusivamente
en la construcci
on de los escenarios y los botones necesarios para permitir
la transici
on entre ellos.
Tendremos as mismo que definir los mensajes necesarios para coordinar el
comportamiento de estos objetos.
[Proyecto: escenarios-y-botones]
Para lograr este objetivo, comenzaremos creando un proyecto nuevo. A continuacion
vamos a incluir los escenarios que necesitamos. Si seleccionas el objeto Escenario ubicado en el
area de objetos (rect
angulo inferior izquierdo) veras que la franja central de
Scratch activa las pesta
nas Programas, Fondos y Sonidos (figura 6.10). Es decir, los
escenarios en lugar de tener disfraces tienen fondos.
Observa que justo debajo de la etiqueta Fondo nuevo aparecen cuatro opciones para
crear un fondo nuevo, y que son similares a las que ya hemos visto para crear un disfraz
de un personaje. Es decir, podemos importarlo desde la galera de imagenes disponibles,
pintarlo, utilizar un fichero gr
afico nuestro o tomar una foto.
Si elegimos la primera opci
on (Elegir un fondo desde la biblioteca) nos aparecera un selector de fondos, tambien clasificados por categoras. Busca los tres que hemos
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 109

Y SINCRONIZACION
DE
CAPITULO 6. MENSAJES, COORDINACION
OBJETOS

Figura 6.10: Fondos para el escenario


elegido para nuestro proyecto y que has podido ver en las imagenes anteriores, seleccionalos y a
n
adelos a la lista de fondos disponibles para el escenario. En concreto hemos
usado:
spotlight-stage: para la pantalla inicial de bienvenida.
rays: para la ventana de instrucciones.
chalkboard: para el juego.

6.3.1.

Botones

Estamos habituados a usar botones en m


ultiples sistemas informaticos. Basicamente se
trata de zonas de la pantalla que podemos pulsar para dar una orden.
Con Scratch podemos crear botones. Pero es importante tener en cuenta que un boton
no es m
as que un objeto m
as, similar a los que ya hemos venido usando. La diferencia
esta en la funcionalidad que le vamos a asignar.
Veremos c
omo podemos crear un boton a continuacion. Elige la opcion Elegir un
objeto desde la biblioteca disponible en el area de objetos justo a continuacion de
la etiqueta Nuevo objeto:
.
Dentro de la Biblioteca de objetos, en la categora Cosas veras varios botones: Button1
(redondo de color verde), Button2 de forma rectangular con bordes redondeados y color
azul, o Button3 de color gris.
En este proyecto vamos a usar el segundo boton de color azul. Incl
uyelo. A continuacion
usa el editor de im
agenes de la pesta
na de Disfraces para introducir un texto. Por
ejemplo, puedes usar el icono con una T situado a la derecha del editor de imagenes,
elegir el color en el selector situado en la parte inferior y a continuacion colocar el texto
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 110

Y SINCRONIZACION
DE
CAPITULO 6. MENSAJES, COORDINACION
OBJETOS
en el lugar adecuado dentro del boton. Es importante que practiques con las distintas
opciones que te ofrece el editor de pinturas o imagenes para sacarle el mayor partido a
este herramienta: figura 6.11.

Figura 6.11: Editando un boton


Por u
ltimo, incluye el personaje del mago. Utiliza la biblioteca de imagenes. En nuestro
caso hemos elegido Wizard Boy, que se encuentra en la categora Fantas
a.
Una u
ltima nota a este nivel. Observa el escenario con las instrucciones. Hemos utilizado tambien el editor de im
agenes para introducir sobre dicho fondo de escenario un
rectangulo con un fondo gris, y sobre el mismo hemos escrito el texto con las intrucciones. Una operaci
on similar hemos realizado en el fondo del escenario de la pantalla de
juego para recordarle siempre al jugador lo que debe indicar durante la partida.
Para que nos sea m
as f
acil recordar los elementos que intervienen, hemos cambiado el
nombre de los fondos y los personajes que intervienen.

6.3.2.

Transiciones entre escenarios

Tenemos ya nuestra lista de fondos de escenario:


1. fondo-inicio
2. fondo-instrucciones
3. fondo-juego
as como la lista de personajes que van a intervenir:
1. Escenario (s, el escenario es un personaje mas).
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 111

Y SINCRONIZACION
DE
CAPITULO 6. MENSAJES, COORDINACION
OBJETOS
2. Mago
3. BotonInicio
4. BotonInstrucciones
5. BotonJugar
El siguiente objetivo es establecer la estrategia de transiciones entre escenarios y objetos.
Por ejemplo, en la pantalla de bienvenida (Inicio) tendremos activo el fondo-inicio
y aparecer
an los objetos BotonInstrucciones y BotonJugar, junto al Mago, pero no
debe aparecer el bot
on Inicio ya que estamos realmente en el inicio de la partida.
Para organizar la l
ogica de estas transiciones vamos a utilizar tres mensajes, que los
objetos se ir
an enviando entre s para coordinarse. Los tres mensajes que usaremos
seran exactamente:
1. Inicio
2. Instrucciones
3. Juego
Arrancar el proyecto
Al arrancar el proyecto, solo un objeto debe detectar la pulsacion de la bandera verde.
Podra ser cualquiera de los objetos, incluso el mismo escenario, el encargado de captar
el arranque al presionar bandera verde. Le vamos a asignar esa tarea al mago. Lo
u
nico que debe hacer es capturar el evento, y simplemente enviar el mensaje Inicio:
de esta forma todos los objetos reciben la se
nal de que tienen que ponerse en modo
Inicio.
Estado Inicio
Que debe hacer cada objeto en el estado Inicio?
El escenario debe mostrar el fondo-inicio.
El BotonInicio debe esconderse.
El BotonInstrucciones debe aparecer en la zona inferior izquierda.
El BotonJuego debe aparecer en la zona inferior derecha.
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 112

Y SINCRONIZACION
DE
CAPITULO 6. MENSAJES, COORDINACION
OBJETOS
El propio Mago debe dar la bienvenida al juego.
Los tama
nos y ubicaciones exactas las podemos decidir para que la presentacion quede
lo mejor posible, pero lo importante es tener clara la logica.
Siguiendo estas indicaciones, los dos primeros scripts del Mago se muestran en la figura
6.12.

Figura 6.12: Scripts iniciales del Mago


Por su parte, pensemos en el BotonInstrucciones. Cuando reciba el mensaje Inicio
hemos indicado que debe mostrarse. Y ahora aparece la funcionalidad nueva que lo
convierte en un bot
on:

Se trata de un evento nuevo. Este evento permite capturar el hecho de que el


objeto correspondiente se pulse con el raton. Al pulsarse, el script que comienza
con este bloque comenzar
a a ejecutarse.
Siguiendo este modelo, los primeros scripts del BotonInstrucciones se muestran en
la figura 6.13.

Figura 6.13: Scripts iniciales del BotonInstrucciones


Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 113

Y SINCRONIZACION
DE
CAPITULO 6. MENSAJES, COORDINACION
OBJETOS
Como podemos ver, al recibir el mensaje Inicio este boton aparece en la posicion
-120, -100. Si se pulsa el objeto, entonces se enva (a todos los objetos) el mensaje
Instrucciones. Y si este mismo objeto recibe dicho mensaje simplemente desaparece
(se esconde).

6.3.3.

Mensajes y transiciones

Si integramos todo el modelo, la l


ogica para cada uno de los objetos sera:
Escenario
1. Al recibir Inicio
2. Cambiar fondo a fondo-inicio
1. Al recibir Instrucciones
2. Cambiar fondo a fondo-instrucciones
1. Al recibir Juego
2. Cambiar fondo a fondo-juego

Mago
1. Al presionar Bandera verde
2. Enviar Inicio y esperar
1.
23.
4.

Al recibir Inicio
Mostrar
Colocarse en el centro del escenario
Decir un mensaje de bienvenida

1. Al recibir Instrucciones
2. Colocarse en la esquina inferior izquierda del escenario
1. Al recibir Juego
2. Colocarse en la parte central izquierda del escenario
Ademas ser
a necesario controlar el tama
no del objeto para que se ajuste a los escenarios
as como controlar cuando dice un mensaje y otro, pero lo anterior define la logica
general del algoritmo.
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 114

Y SINCRONIZACION
DE
CAPITULO 6. MENSAJES, COORDINACION
OBJETOS
BotonInicio
1. Al recibir Inicio
2. Esconder
1. Al recibir Instrucciones
2. Mostrar
3. Colocarse en la parte inferior derecha
1. Al recibir Juego
2. Mostrar
3. Colocarse en la parte superior derecha
1. Al clickear este objeto
2. Enviar Inicio

BotonInstrucciones
1. Al recibir Inicio
2. Mostrar
3. Colocarse en la parte inferior izquierda
1. Al recibir Instrucciones
2. Esconder
1. Al recibir Juego
2. Esconder
1. Al clickear este objeto
2. Enviar Instrucciones

BotonJugar
1. Al recibir Inicio
2. Mostrar
3. Colocarse en la parte inferior derecha
1. Al recibir Instrucciones
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 115

Y SINCRONIZACION
DE
CAPITULO 6. MENSAJES, COORDINACION
OBJETOS
2. Esconder
1. Al recibir Juego
2. Esconder
1. Al clickear este objeto
2. Enviar Juego

6.4.

B
usqueda binaria en un espacio de n
umeros

Ejemplo 3

El adivino de n
umeros
Incorporar al proyecto anterior la funcionalidad que permitir
a que el mago
adivine el n
umero que ha pensado el usuario del juego.
[Proyecto: el-adivino-de-numeros]
Vamos a dejar de momento los escenarios, los objetos y los mensajes y centremonos
en el problema que nos ocupa en este momento. El usuario ha pensado un n
umero, y
nuestro mago debe adivinarlo.
Existen muchas alternativas para realizar esta tarea. Supongamos para simplificar que
el rango de n
umeros que puede utilizar el usuario es de 0 a 10. Una estrategia, muy
simple e ingenua, podra consistir en comenzar preguntando si es el 0, a continuacion el
1 ... y as secuencialmente hasta que acertemos el n
umero o lleguemos al u
ltimo. De
esta forma, estamos totalmente seguros de que realmente lo descubriremos. Si se trata
de 10 n
umeros quiz
as podra parecernos valida, pero si el rango es de 1000 n
umeros no
parece una estrategia
optima.
Vamos a utilizar una estrategia que se basa en la idea de b
usqueda binaria, y que supone
un modelo muy habitual en las ciencias de la computacion.
La idea se basa en utilizar dos variables: minimo contendra el primer valor del intervalo,
maximo almacenar
a el mayor de los valores. En el ejemplo que estamos considerando
seran 0 y 10. Adem
as vamos a ir recordando el n
umero de intentos. En cada intento
calcularemos el valor medio entre el minimo y el maximo.
La siguiente tabla muestra el estado de estas variables al realizar el primer intento.
Tan solo aclarar que el valor de medio se calcula como la media (division entre 2) de
la suma de minimo y maximo, aunque redondeada (quitando decimales). En este caso,
tendramos que 0 + 10 es igual a 10, dividido entre 2 (media), es 5.
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 116

Y SINCRONIZACION
DE
CAPITULO 6. MENSAJES, COORDINACION
OBJETOS
intento

minimo

maximo

medio

10

En este momento preguntamos si el valor calculado como medio es el n


umero correcto, si
es menor o si es mayor. Supongamos que hemos pensado el 7 (nuestro n
umero secreto).
Como nuestro n
umero (7) es mayor que el que el mago nos sugiere (5), seg
un las
instrucciones deberamos responder con un 1.
Ahora bien, que ha aprendido el mago tras este intento? No solo ha aprendido que el
5 no es el n
umero secreto. Adem
as sabe que puesto que nuestro n
umero es mayor que
el 5, no podr
a ser ni el 1, ni el 2, ni el 3 ni el 4. Es decir, el minimo n
umero posible
pasa a ser medio + 1. Y eso es lo que hacemos para el segundo intento. Reasignamos
el minimo, y calculamos el nuevo valor de medio: redondeo de (6 + 10) / 2 = 8.
intento

minimo

maximo

medio

10

Puesto que nuestro n


umero secreto es el 7, ahora el mago se ha pasado con un n
umero
muy grande, as que tendremos que responder con un -1 (nuestro n
umero es menor).
Como resultado de esta respuesta, lo que el mago sabe es que el maximo n
umero posible
sera ahora medio - 1. Por tanto, recalcula los valores para su nuevo intento. Ahora
el mnimo sigue siendo el 6, el m
aximo pasa a ser el 7. Para calcular el punto medio,
sumamos mnimo y m
aximo, lo dividimos entre 2, pero en este caso obtendramos 6.5,
as que es necesario redondearlo. El redondeo de este valor para Scratch es 7, as que
el tercer intento sera:
intento

minimo

maximo

medio

El mago ha adivinado nuestro n


umero, en este caso en 3 intentos.
La soluci
on completa la puedes encontrar en el proyecto el-adivino-de-numeros.sb2.
En la figura 6.14 te mostramos la implementacion de la logica de la b
usqueda binaria
de n
umeros en Scratch. Es interesante que observes el resto de este proyecto para
entender c
omo se sincronizan en la version completa todos los objetos: se ha introducido
un mensaje nuevo para empezar una Partida, y cuando se inicia una partida sera
necesario tener en cuenta si hay una partida a medias, por lo que se deben detener
todos los programas del mago para evitar interferencias.
Observa tambien en este algoritmo como hemos controlado la respuesta que pueda dar
el usuario para responder si su n
umero es igual, menor o mayor que el ofrecido por el
mago.
Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 117

Y SINCRONIZACION
DE
CAPITULO 6. MENSAJES, COORDINACION
OBJETOS

Figura 6.14: B
usqueda binaria para adivinar un n
umero

Tarea 1
Un mago que descubre los enga
nos
Que ocurre en el proyecto del adivino de n
umeros si intentamos enga
nar
al mago. Es decir, le decimos cosas incongruentes. Activa los monitores de
las variables y observa que valores van tomando.
Se te ocurre alguna estrategia para que el mago detecte que lo est
an enga
nando?
Y otra cuesti
on interesante: si tenemos un total de N n
umeros en el rango
de valores para adivinar, cu
al ser
a el n
umero m
aximo de intentos que
realizar
a el mago para descubrirlo?

Jose F. Quesada

Aprende a programar con Scratch


Club Scratch Iberoamericano - OEI

Pagina 118

Captulo 7.
Listas
Jos Francisco Quesada

Captulo 7

Listas

Indice
7.1. Operaciones b
asicas sobre listas . . . . . . . . . . . . . . . . . 121
7.1.1. Crear listas de datos . . . . . . . . . . . . . . . . . . . . . . . 121
7.1.2. Mostrar / esconder listas . . . . . . . . . . . . . . . . . . . . 122
7.2. A
nadir y eliminar elementos de una lista . . . . . . . . . . . 124
7.2.1. A
nadir elementos a una lista . . . . . . . . . . . . . . . . . . 124
Ejemplo 1: Crear una lista con los nombres de tres pintores . . . . . 124
7.2.2. Listas: longitud . . . . . . . . . . . . . . . . . . . . . . . . . . 126
7.2.3. Listas: posiciones y valores . . . . . . . . . . . . . . . . . . . 126
7.2.4. Borrar elementos de una lista . . . . . . . . . . . . . . . . . . 127
Ejemplo 2: Crear los pintores borrando previamente el contenido de
la lista . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
Ejemplo 3: Borrar todos los pintores de uno en uno . . . . . . . . . . 128
Tarea 1: Borrar todos los elementos de uno en uno sin variables . . . 131
7.2.5. Insertar elementos en una posicion . . . . . . . . . . . . . . . 131
7.2.6. Modificar el contenido de una lista . . . . . . . . . . . . . . . 132
7.2.7. Buscar elementos en una lista . . . . . . . . . . . . . . . . . . 133
7.3. Duplicando listas . . . . . . . . . . . . . . . . . . . . . . . . . . 133

2015 Jose F. Quesada


Club Scratch Iberoamericano Organizaci
on de Estados Iberoamericanos (OEI)

Esta obra est


a bajo una Licencia Creative Commons Atribuci
on-NoComercial-SinDerivar

119

CAPITULO 7. LISTAS
Ejemplo 4: Crear una lista de nombres a partir de los datos introducidos por el usuario . . . . . . . . . . . . . . . . . . . . . . . . 133
Ejemplo 5: Crear una copia de la lista de m
usicos . . . . . . . . . . . 135
7.4. Construyendo listas . . . . . . . . . . . . . . . . . . . . . . . . 137
7.4.1. Una lista de valores aleatorios . . . . . . . . . . . . . . . . . . 137
Ejemplo 6: Lista con n
umeros aleatorios entre 1 y 100 . . . . . . . . 137
7.4.2. Variables con deslizador . . . . . . . . . . . . . . . . . . . . . 137
7.4.3. Buscando valores en una lista . . . . . . . . . . . . . . . . . . 141
Ejemplo 7: Lista con n
umeros aleatorios no repetidos . . . . . . . . . 141
7.4.4. Listas ordenadas . . . . . . . . . . . . . . . . . . . . . . . . . 142
Ejemplo 8: Lista con n
umeros aleatorios no repetidos y ordenados

. 142

Jose F. Quesada
Mi primer programa
Pagina 120
Introducci
on a la programacion y las ciencias de la computacion
Cursos Thales-CICA 2015 (ED15-15-MPP)

CAPITULO 7. LISTAS
Las listas son una de las estructuras de datos mas simples, y as mismo mas usadas
en las ciencias de la computaci
on. La estructura lista en Scratch es parecida a la idea
de vector o array utilizada en otros lenguajes de programacion. Es decir, una lista es
una secuencia de elementos que podemos almacenar y manipular teniendo en cuenta la
posicion en la que se encuentran.
En este captulo abordaremos el estudio detallado de las listas. Analizaremos como se
puede crear una lista as como las operaciones basicas de manipulacion de listas: a
nadir
o borrar elementos de una lista, insertarlos en posiciones concretas o bien sustituir sus
valores.

7.1.
7.1.1.

Operaciones b
asicas sobre listas
Crear listas de datos

Una lista se parece en gran medida a una variable. De hecho, podemos entender que
una lista es una variable con m
ultiples datos. O dicho de otra forma, una lista es una
secuencia de elementos.
Supongamos que hemos creado una variable denominada pintor donde queremos almacenar el nombre de un famoso pintor como parte de un programa que estamos
construyendo:
Picasso
Es decir, habremos seleccionado un espacio de memoria, al que referenciamos mediante
el nombre pintor cuyo contenido es la palabra Picasso.
Una lista no es m
as que una secuencia contigua de variables. Como tal, la lista tendra un
nombre, y puesto que contiene m
as de un elemento, deberemos acceder a los elementos
individuales de una lista indicando la posicion (o ndice) en el que se encuentran dentro
de la lista. Por ejemplo, podemos crear una lista que denominaremos pintores y que
contendr
a tres elementos (indicados por su ndice o posicion):
1
2
3

Picasso
Caravaggio
Rubens

La lista completa se denomina pintores, y cada uno de los nombres de un pintor se


encuentra en una posici
on de dicha lista. Por ejemplo, Caravaggio ocupa el elemento
segundo de la lista.
Jose F. Quesada
Mi primer programa
Pagina 121
Introducci
on a la programacion y las ciencias de la computacion
Cursos Thales-CICA 2015 (ED15-15-MPP)

CAPITULO 7. LISTAS
Por tanto, para crear una lista utilizaremos un mecanismo similar al utilizado para
crear variables. En concreto, en la paleta Datos podemos observar que justo debajo del
boton Crear una variable aparece una opcion para Crear una lista (figura 7.1).

Figura 7.1: Paleta Datos


Al seleccionar el bot
on de creaci
on de una nueva lista aparece un formulario (figura 7.2)
similar al que estudiamos en su momento para crear una variable. De hecho, hemos de
indicar el nombre que le asignamos a la lista, e indicar si se trata de una lista global
(creada Para todos los objetos) o local (accesible S
olo para este objeto).

Figura 7.2: Lista nueva


Supongamos que queremos crear una lista con varios nombres de pintores. La figura
7.3 muestra el estado de la pantalla de Scratch tras haber creado esta lista.

7.1.2.

Mostrar / esconder listas

En el propio escenario podemos ver un rectangulo con la etiqueta pintores. El contenido (inicial) es vaco (empty) y el total de elementos que contiene es 0 (largo: 0). Al
igual que las variables podemos visualizar (mostrar) el contenido de las listas.

Al igual que las variables, las listas tambien tienen asociadas un monitor. Observa
que justo al lado del nombre de la lista recien creada aparece un cuadradito.
Pulsando sobre el mismo podemos activar o desactivar el monitor de la lista
sobre el escenario.
Jose F. Quesada
Mi primer programa
Pagina 122
Introducci
on a la programacion y las ciencias de la computacion
Cursos Thales-CICA 2015 (ED15-15-MPP)

CAPITULO 7. LISTAS

Figura 7.3: Estado tras la creacion de una nueva lista

Figura 7.4: Contenido inicial (vaco) de una lista


Por otro lado, una vez que aparece el monitor sobre el escenario, observa que
en la esquina inferior derecha del recuadro correspondiente aparecen dos marcas diagonales (figura 7.3). Puedes pulsar sobre esas marcas para modificar el
tama
no del recuadro en el escenario para adecuarlo a la cantidad de elementos
que tenga la lista o la cantidad que quieras visualizar. Si el n
umero de elementos
Jose F. Quesada
Mi primer programa
Pagina 123
Introducci
on a la programacion y las ciencias de la computacion
Cursos Thales-CICA 2015 (ED15-15-MPP)

CAPITULO 7. LISTAS
contenidos en la lista superase el tama
no de visualizacion aparecera una barra
de desplazamiento o scroll para poder mover los elementos visualizados.

Desde un script tambien se puede modificar el estado de visualizacion de una lista.


Para ello, disponemos de la instruccion mostrar lista creada tras la creacion
de la primera lista y ubicada en la paleta Datos. Esta instruccion, al igual que el
resto de instrucciones de manipulacion de listas, contiene un recuadro en el que
podemos seleccionar el nombre de la lista con la que queremos operar. Cada vez
que creemos una lista, quedara a
nadida a la relacion de opciones que podemos
usar en estas instrucciones.

De forma equivalente, la instruccion esconder lista elimina el monitor de la


lista seleccionada, dejando de mostrarse en el escenario.

7.2.

A
nadir y eliminar elementos de una lista

7.2.1.

A
nadir elementos a una lista

Como hemos indicado, una lista es una secuencia de elementos. Tras crear la lista, no
tiene ning
un elemento. Es decir, su contenido es vaco y su longitud es 0.
Scratch incorpora una instrucci
on para a
nadir elementos a una lista:

Esta instrucci
on a
nade un nuevo elemento a la lista indicada en el recuadro selector de listas. El valor introducido sera el que indiquemos en el recuadro con fondo
en blanco, cuyo valor por defecto inicial es thing. En este recuadro podemos
indicar un texto, un n
umero, una variable, o el resultado de un calculo usando
alguno de los operadores disponibles.

Ejemplo 1

Crear una lista con los nombres de tres pintores


Realizar un proyecto en Scratch que contenga una lista (denominada pintores)
con los nombres de tres famosos pintores.
[Proyecto: tres-pintores]
Jose F. Quesada
Mi primer programa
Pagina 124
Introducci
on a la programacion y las ciencias de la computacion
Cursos Thales-CICA 2015 (ED15-15-MPP)

CAPITULO 7. LISTAS
Observemos el programa que se muestra en la figura 7.5. Tras haber creado la lista
pintores simplemente tenemos un script que ejecuta tres veces la instruccion a
nade
incorporando en cada caso un nombre de pintor a dicha lista.

Figura 7.5: Insercion de nombres de pintores


Si la ejecutamos, podremos observar que el contenido del monitor de pintores cambia
tal y como se refleja en la figura 7.6.

Figura 7.6: Estado de la lista pintores tras a


nadir tres datos
Como podemos observar, en la lista se han ido introduciendo los elementos que hemos
indicado. En primer lugar, se ha creado en la posicion 1 el elemento cuyo contenido es
Picasso. En segundo lugar, se ha creado en la posicion 2 el elemento cuyo contenido
es Caravaggio. Y de forma similar, en la posicion 3 aparece Rubens.
En definitiva, cada vez que se a
nade un elemento, se a
nade al final de la lista,
como un elemento nuevo adicional. Como resultado, en este caso, la lista tiene tres
elementos (largo: 3).
Pero, que ocurre si volvemos a pulsar la bandera verde de nuevo?
Aunque parezca sorprendente el resultado que se muestra en la figura 7.7 es totalmente
razonable ya que se han aplicado las instrucciones tal y como las acabamos de explicar.
Tras pulsar la bandera verde, lo primero que se hace es a
nadir el valor Picasso a la
lista pintores. Puesto que la lista ya tena 3 elementos, este valor Picasso se incorpora
como el cuarto elemento, y lo mismo se ha realizado para los otros dos.
De este ejemplo podemos obtener un par de consecuencias bastante interesantes. En
primer lugar, una lista puede contener elementos repetidos, es decir, que tengan el
mismo valor, aunque estar
an en posiciones diferentes. En segundo lugar, la operacion
Jose F. Quesada
Mi primer programa
Pagina 125
Introducci
on a la programacion y las ciencias de la computacion
Cursos Thales-CICA 2015 (ED15-15-MPP)

CAPITULO 7. LISTAS

Figura 7.7: Estado de la lista pintores tras a


nadir de nuevo los tres datos
de a
nadir simplemente incorpora un elemento como una nueva entrada tras la u
ltima
posicion de la lista.

7.2.2.

Listas: longitud

A partir de lo visto en la secci


on anterior, podemos observar claramente la idea de
estructura posicional de una lista. Es decir, una lista es una secuencia de elementos
identificados por su posici
on.
Toda lista tendr
a un atributo b
asico, que es su longitud, en la que se indica el n
umero
exacto de elementos que contiene la lista.

Este bloque es en realidad una funcion, que aplicada a una lista, nos devuelve el
n
umero de elementos (longitud) exacto actual de la lista correspondiente.

7.2.3.

Listas: posiciones y valores

Para cada uno de los elementos de la lista (entre 1 y su longitud) se puede obtener el
valor correspondiente almacenado en dicha posicion.
Es decir, podemos observar la lista pintores previa, como una estructura donde distinguimos posiciones (o ndices) y valores:

Indice

Valor

1
2
3

Picasso
Caravaggio
Rubens

Jose F. Quesada
Mi primer programa
Pagina 126
Introducci
on a la programacion y las ciencias de la computacion
Cursos Thales-CICA 2015 (ED15-15-MPP)

CAPITULO 7. LISTAS
La instrucci
on elemento tambien es una funcion, que en este caso utiliza dos
argumentos, en primer lugar la posicion o ndice y en segundo lugar el nombre de
la lista, y el resultado es el valor almacenado en la posicion indicada.
Observa que en la primera casilla puedes indicar un valor posicional exacto, por
ejemplo 1 o 3. Scratch tambien incluye la posibilidad de seleccionar directamente
el
ultimo elemento de la lista. Pero es importante tener en cuenta que se trata
de una abreviaci
on que tambien se podra conseguir usando la longitud.
Es decir, observa que el valor devuelto mediante:

deber
a ser el mismo que el obtenido mediante:

7.2.4.

Borrar elementos de una lista

En muchas ocasiones ser


a tambien muy u
til poder eliminar, borrar, elementos de una
lista. Para ello Scratch incluye la instruccion borrar de:

Ejemplo 2

Crear los pintores borrando previamente el contenido de la


lista
Debemos modificar el programa anterior de inserci
on de nombres de pintores
para que cada vez que ejecutemos el programa se incluyan los nombres de
los pintores con los que vamos a trabajar, y no solo se a
nadan a los que ya
pudieran estar almacenados.
[Proyecto: borrar-y-a
nadir-pintores]
Para conseguir este objetivo ser
a una buena practica eliminarlos de la lista al comenzar
tal y como se muestra en la figura 7.8
De esta forma, cada vez que ejecutamos el programa al pulsar la bandera verde, estamos
seguros de que quedar
an los tres pintores con los que queremos trabajar.

La instrucci
on borrar de permite eliminar un elemento de una lista. Para ello
hemos de indicar la posici
on del elemento que queremos borrar.
Jose F. Quesada
Mi primer programa
Pagina 127
Introducci
on a la programacion y las ciencias de la computacion
Cursos Thales-CICA 2015 (ED15-15-MPP)

CAPITULO 7. LISTAS

Figura 7.8: Borrar y a


nadir pintores
Observa que tambien es posible seleccionar la opcion para borrar todos los elementos de la lista. Al seleccionar esta opcion nos aseguramos que la lista quedar
a totalmente vaca.
Es u
til observar que la funcionalidad borrar todos tambien la podramos conseguir
mediante la aplicaci
on repetida del borrado de elementos individuales.

Ejemplo 3

Borrar todos los pintores de uno en uno


Borrar todos los pintores de la lista, pero de uno en uno.
[Proyecto: borrar-de-uno-en-uno-y-a
nadir-pintores]
Para lograr este objetivo, en la version que te proponemos observa que se han creado
dos variables, a las que hemos denominado longitud y posici
on. El programa final
que borra todos los elementos que pueda tener la lista se muestra en la figura 7.9.
Estudiemos la l
ogica de este algoritmo. En primer lugar, asignamos a la variable
longitud la longitud de la lista pintores. En este caso, el valor asignado sera 3
(si suponemos que ya habamos ejecutado previamente el programa y la lista de pintores
contena los tres nombres).
En segundo lugar, asignamos posicion a 1. Si en este momento observamos el contenido
de las variables y la propia lista veramos lo siguiente:
longitud

posicion

pintores

Indice
Valor
1
Picasso
2
Caravaggio
3
Rubens

Jose F. Quesada
Mi primer programa
Pagina 128
Introducci
on a la programacion y las ciencias de la computacion
Cursos Thales-CICA 2015 (ED15-15-MPP)

CAPITULO 7. LISTAS

Figura 7.9: Borrar de uno en uno y a


nadir pintores
Tendremos que llamar a la funci
on borrar (con el primer elemento) tantas veces como
elementos existan, o dicho de otro modo, tendremos que hacer una repeticion hasta que
posici
on > longitud.
Para cada una de estas repeticiones tendremos que hacer dos operaciones: eliminar un
elemento, y aumentar el contador de posicion.
As pues, ejecutamos la instrucci
on borrar elemento 1 de pintores y a continuacion
cambiar posicion por 1. Como resultado, el contenido de memoria cambiara para
obtener:
longitud

posicion

pintores

Valor
Indice
1
Caravaggio
2
Rubens

Varias cuestiones importantes para entender esta ejecucion:


1. El valor de longitud sigue siendo 3 aunque la lista ahora tiene dos elementos. La
raz
on es que nosotros asignamos el valor a esta variable antes de iniciar el bucle
de repetici
on, y la variable no se ha actualizado, as que el valor sigue siendo el
mismo. En este caso no importa, de hecho, es importante que siga valiendo 3 ya
que hemos de controlar cu
antas veces se tiene que repetir el proceso de borrado
de elementos (que tienen que ser 3 en total).
2. Tras haber eliminado el primer elemento de la lista, los ndices se han reajustado.
Es decir, no se creado una especie de vaco con el primer ndice de la lista en
Jose F. Quesada
Mi primer programa
Pagina 129
Introducci
on a la programacion y las ciencias de la computacion
Cursos Thales-CICA 2015 (ED15-15-MPP)

CAPITULO 7. LISTAS
blanco. Se ha eliminado el valor asociado al primer elemento de la lista, y esta,
de alguna forma, se ha encogido para almacenar los u
nicos dos elementos que a
un
quedan.
Siguiendo con la l
ogica, a
un el valor de posicion no es mayor que el de longitud por
lo que se vuelve a ejecutar el cuerpo del bucle repetir que provoca de nuevo que se
elimine el primer elemento de la lista y se aumente en 1 el valor del contador posicion.
Tras estas ejecuciones, el contenido sera:
longitud

posicion

pintores

Indice Valor
1
Rubens

Como vemos el proceso sigue siendo identico, tras eliminarse el primer elemento de la
lista (asociado previamente al valor Caravaggio) los siguientes elementos han subido y
ahora Rubens se encuentra en la primera posicion o ndice de la lista.
De nuevo volveramos a ejecutar el cuerpo del bucle, eliminando el primer elemento, y
aumentando en 1 el valor de posicion:
longitud

posicion

pintores

Indice Valor

En este momento, posicion vale 4, y por tanto es mayor que longitud, con lo que
hemos finalizado el proceso de borrado de todos los registros o elementos de la lista.
Analizado como algoritmo la estructura es:
1.
2.
3.
4.

Al pulsar la bandera verde


Fijar longitud a la longitud de la lista
Fijar posicion a 1
Repetir hasta que posicion longitud
4.1. Borrar elemento 1 de la lista
4.2. Cambiar posicion por 1

Y siguiendo este esquema, que ocurrira si la lista ya estuviese vaca al ejecutarlo?


Bien, en el paso 2 se fija la longitud a 0 (puesto que esta vaca), y en el paso 3 se
fija posicion a 1. En este momento, ya es cierto que posicion > longitud, y por
tanto las instrucciones de repetir no se llegan a ejecutar nunca: la lista estaba vaca
y contin
ua vaca.
Jose F. Quesada
Mi primer programa
Pagina 130
Introducci
on a la programacion y las ciencias de la computacion
Cursos Thales-CICA 2015 (ED15-15-MPP)

CAPITULO 7. LISTAS
Por tanto, hemos visto que borrar todos ... es una opcion que nos permite compactar de una forma elegante este proceso.

Tarea 1
Borrar todos los elementos de uno en uno sin variables
Implementa el mismo programa anterior pero sin variables. Es decir, debemos borrar todos los elementos de una lista, pero sin utilizar la opci
on
borrar todos, sino borr
andolos de uno en uno. Ahora bien, el reto de esta
tarea consiste en conseguirlo sin utilizar ninguna de las variables anteriores:
posicion y longitud.

7.2.5.

Insertar elementos en una posici


on

Hemos visto que la instrucci


on a
nade introduce un nuevo elemento al final de la lista.
Independientemente de la longitud (n
umero de elementos o ndices de la lista), esta
instrucci
on crea un nuevo elemento al final de la misma.
Ahora bien, tambien es posible insertar un elemento en una posicion exacta data. Para
ello disponemos de la instrucci
on:

Esta instrucci
on a
nade un elemento, pero colocandolo en la posicion que indiquemos como argumento. Es importante tener en cuenta que la lista automaticamente
se expander
a para hacerle sitio al nuevo elemento. Es decir, como resultado de la
operaci
on de inserci
on la lista tendra un elemento mas de los que ya tena.
Por ejemplo, si en un instante determinado tenemos la lista pintores con el
contenido:

Indice
1
2
3

Valor
Picasso
Caravaggio
Rubens

Y en ese momento ejecutamos:


inserta Apeles en 2 de pintores
el nuevo contenido de la lista pintores sera:
Jose F. Quesada
Mi primer programa
Pagina 131
Introducci
on a la programacion y las ciencias de la computacion
Cursos Thales-CICA 2015 (ED15-15-MPP)

CAPITULO 7. LISTAS

Indice
1
2
3
4

Valor
Picasso
Apeles
Caravaggio
Rubens

Como vemos, las anteriores posiciones 2 y 3 se han desplazado hacia abajo para
hacerle sitio al nuevo valor (Apeles) que debe insertarse en la posicion 2.
Podr
as observar que no todos los valores son posibles como nuevo ndice de inserci
on. Por ejemplo, si una lista tiene 3 elementos, solo podras usar los ndices que
van de 1 a 4. Es decir, no puedes usar un valor negativo o igual a 0, y si utilizas
el valor por ejemplo 100 de una lista con 3 elementos, simplemente se ignora la
instrucci
on. Si utilizas 4 cuando la lista tiene 3 elementos el resultado es analogo
a la instrucci
on a
nadir, es decir, se inserta como u
ltimo elemento de la lista.

7.2.6.

Modificar el contenido de una lista

Otra operaci
on que ser
a muy u
til consiste en modificar o reemplazar el valor de una
posicion o ndice por otro diferente. En este caso s que se produce una sustitucion. La
lista no modifica su tama
no, pero el valor del ndice correspondiente se sustituye por
uno nuevo.

Esta instrucci
on modifica el valor del elemento cuyo ndice o posicion se indica
en primer lugar, de la lista indicada a continuacion, asignandole el valor indicado
en el u
ltimo par
ametro.
Por ejemplo, si tras crear la lista con los tres famosos pintores tenemos el siguiente
contenido:

Indice
1
2
3

Valor
Picasso
Caravaggio
Rubens

Y en este momento ejecutamos la instruccion:


reemplazar elemento 2 de pintores con Apeles
el nuevo contenido de la lista ser
a:
Jose F. Quesada
Mi primer programa
Pagina 132
Introducci
on a la programacion y las ciencias de la computacion
Cursos Thales-CICA 2015 (ED15-15-MPP)

CAPITULO 7. LISTAS

Indice
1
2
3

7.2.7.

Valor
Picasso
Apeles
Rubens

Buscar elementos en una lista

Con bastante frecuencia necesitaremos comprobar si un valor determinado se encuentra


en una lista.
Para facilitar esta tarea, la paleta de Datos activa un bloque de instruccion al crear las
listas:

Determina si un determinado valor forma parte de una lista.


Es importante observar que se trata de una construccion logica, es decir, devuelve
un valor de verdad indicando verdadero o falso.
Por otro lado, esta instrucci
on nos indica si el valor esta, pero no en que posicion
se encuentra.

7.3.

Duplicando listas

Como podemos hacer una copia de una lista A en una lista B? Es decir, supongamos
que tenemos una lista de elementos cualquiera (A) y queremos hacer una copia de todos
sus elementos en una segunda lista (B). Este proceso suele ser relativamente habitual
as que analizaremos a continuaci
on una estrategia para conseguirlo.
Para estudiar este problema vamos a realizar un ejemplo estructurado en varias fases.

Ejemplo 4

Crear una lista de nombres a partir de los datos introducidos por el usuario
En primer lugar, vamos a crear un proyecto en el que le pediremos al usuario
que vaya escribiendo nombres de m
usicos famosos usando la instrucci
on
preguntar de Scratch. Cada nombre de m
usico lo iremos introduciendo en
una lista que previamente habramos creado.
Podemos utilizar dos estrategias para controlar el n
umero de nombres que
queremos introducir. En primer lugar, podramos preguntar cu
antos nombres introduciremos y posteriormente repetir el proceso consistente en preguntar y almacenar el dato correspondiente en la lista tantas veces como
Jose F. Quesada
Mi primer programa
Pagina 133
Introducci
on a la programacion y las ciencias de la computacion
Cursos Thales-CICA 2015 (ED15-15-MPP)

CAPITULO 7. LISTAS
se indique en el n
umero inicial. O bien podramos indicarle al usuario que
puede introducir tantos nombres como quiera hasta que indique por ejemplo
un nombre vaco al final o un nombre especial (por ejemplo Fin).
En esta versi
on que te proponemos hemos utilizado la opci
on de detectar la
palabra FIN para terminar de introducir nombres.
[Proyecto: introducir-nombres-de-musicos]
La soluci
on a este problema inicial aparece en la figura 7.10. Como podemos observar,
la clave est
a en borrar todos los datos de la lista al principio, y a continuacion repetir
un proceso hasta que la respuesta sea igual a FIN. En cada iteracion, preguntamos
por un nombre, y dicho nombre (almacenado en la variable respuesta) lo a
nadimos a
la lista s
olo si es diferente a FIN.
Algortmicamente el proceso se puede resumir por tanto en las siguientes instrucciones:
1. Al presionar la bandera verde
2. Borrar todos los elementos de musicos
3. Repetir hasta que respueta = FIN
3.1. Preguntar por un nombre (almacenando el valor en respuesta)
3.2. Si (NO (respuesta = FIN))
3.2.1. A
nade respuesta a musicos

Figura 7.10: Introducir nombres de m


usicos

Jose F. Quesada
Mi primer programa
Pagina 134
Introducci
on a la programacion y las ciencias de la computacion
Cursos Thales-CICA 2015 (ED15-15-MPP)

CAPITULO 7. LISTAS

Ejemplo 5

Crear una copia de la lista de m


usicos
Una vez que hemos creado la lista de m
usicos, debemos crear una copia de
todos los elementos de la lista recien creada (denominada musicos) en una
nueva lista a la que denominaremos musicos2.
Pero ya que es posible que el usuario haya repetido alg
un nombre durante
el proceso inicial de introducci
on, queremos asegurarnos de que en la copia
de nombres no haya ning
un duplicado.
[Proyecto: introducir-y-copiar-nombres-de-musicos]
Al algoritmo anterior se debe ampliar tal y como sigue:
1.
2.
3.
4.

Al presionar la bandera verde


Borrar todos los elementos de musicos
Borrar todos los elementos de musicos2
Repetir hasta que respueta = FIN
4.1. Preguntar por un nombre (almacenando el valor en respuesta)
4.2. Si (NO (respuesta = FIN))
4.2.1. A
nade respuesta a musicos
5. Fijar posicion a 1
6. Repetir hasta que posicion > longitud de musicos
6.1. Fijar nombre a elemento posicion de musicos
6.2. Si (No (musicos2 contiene nombre)) entonces
6.2.1. A
nade nombre a musicos2
6.3. Cambiar posicion por 1

Es decir, al principio borramos todos los elementos tanto de la lista inicial (musicos)
como de la nueva lista donde haremos la copia (musicos2).
Una vez terminado el proceso de lectura (bloque de instrucciones 4), hemos de repetir
un proceso para todos los elementos de la lista musicos. Para ello usamos una nueva
variable (posicion) cuyo valor inicial es 1 (instruccion 5). Repetiremos el proceso hasta
que la posicion sea mayor que la longitud de la lista original (instruccion 6), y en cada
iteracion el valor de posici
on pasa a la siguiente (instruccion 6.3).
En cada iteraci
on (cada valor posible de posicion entre 1 y la longitud de la lista), obtenemos el contenido de dicha posicion y lo almacenamos en la variable nombre. Y ahora
aparece un proceso importante: hemos de comprobar si el nombre que acabamos de
Jose F. Quesada
Mi primer programa
Pagina 135
Introducci
on a la programacion y las ciencias de la computacion
Cursos Thales-CICA 2015 (ED15-15-MPP)

CAPITULO 7. LISTAS
obtener ya se encuentra en la lista que estamos creando (musicos2). Si no se encuentra
(instrucci
on 6.2) entonces lo a
nadimos (instruccion 6.2.1).
La figura 7.11 contiene el programa en Scratch correspondiente a este algoritmo. Por
otra parte, la figura 7.12 muestra un ejemplo de utilizacion en el que intencionadamente
se han repetido varios nombres de m
usicos.

Figura 7.11: Introducir nombres de m


usicos y copiarlos sin repeticiones

Jose F. Quesada
Mi primer programa
Pagina 136
Introducci
on a la programacion y las ciencias de la computacion
Cursos Thales-CICA 2015 (ED15-15-MPP)

CAPITULO 7. LISTAS

Figura 7.12: Ejemplo de uso del programa de copia de nombres de m


usicos

7.4.

Construyendo listas

Con el objetivo de afianzar los conocimientos introducidos en la primera parte del


captulo, vamos a contruir a continuacion varios ejemplos que utilizaran listas.

7.4.1.

Una lista de valores aleatorios

Ejemplo 6

Lista con n
umeros aleatorios entre 1 y 100
Crear un proyecto que genere una lista de n
umeros aleatorios. Los valores
de estos n
umeros ser
an obtenidos al azar en el intervalo 1 a 100.
La cantidad de n
umeros que tendr
a la lista se asignar
a mediante una variable de control que ser
a modificada mediante un deslizador.
[Proyecto: numeros-aleatorios]

7.4.2.

Variables con deslizador

Vamos a aprovechar este ejercicio para introducir una funcionalidad nueva. Se trata de
una variable con deslizador.
El objetivo del proyecto es generar una lista de n
umeros aleatorios. Pero cuantos
n
umeros tendr
a la lista? Esa opci
on la controlara el usuario. Podramos haber aplicado
Jose F. Quesada
Mi primer programa
Pagina 137
Introducci
on a la programacion y las ciencias de la computacion
Cursos Thales-CICA 2015 (ED15-15-MPP)

CAPITULO 7. LISTAS
una estrategia en la que el personaje correspondiente (por ejemplo, el gato) le pregunta
al usuario cu
al ser
a dicho valor y el resultado almacenado en respuesta pasara a ser
la cantidad de n
umeros.
Con el objetivo de ver otras opciones, vamos a utilizar el mecanismo basado en deslizadores.
Para ello en primer lugar crearemos una variable, que denominaremos cuantos (ya que
representar
a cuantos elementos queremos que contenga la lista).
Una vez creada, aparecer
a su monitor en el escenario. Coloca el raton sobre dicho
monitor y pulsa el bot
on derecho del raton. Observaras que aparece un men
u de opciones
como se muestra en la figura 7.13.

Figura 7.13: Configuracion del monitor de una variable


Como podemos observar es posible cambiar el tama
no del monitor, eligiendo entre
tama
no normal (el que aparece por defecto y que podemos observar en este momento)
o tama
no grande (en el que no aparece el nombre de la variable, sino u
nicamente su
valor, y este con un tipo de letra mas grande).
Tambien podemos esconder la variable desde este men
u, y por u
ltimo aparece una
opcion para construir un deslizador.
Si elegimos la opci
on deslizador observaremos que justo debajo del nombre de la
variable aparece una barra con un boton que se puede desplazar a lo largo de la barra
horizontal: figura 7.14.

Figura 7.14: Deslizador


Si una vez creado el deslizador, vuelves a pulsar con el boton derecho del raton sobre el
monitor de la variable, ver
as que la lista de opciones ha incluido una nueva tal y como
Jose F. Quesada
Mi primer programa
Pagina 138
Introducci
on a la programacion y las ciencias de la computacion
Cursos Thales-CICA 2015 (ED15-15-MPP)

CAPITULO 7. LISTAS
muestra la figura 7.15.

Figura 7.15: Configuraci


on del monitor de una variable con deslizador
Si en este momento eliges la opci
on Fijar rango del deslizador te aparece un formulario en el que puedes introducir los valores menor y mayor del deslizador.

Figura 7.16: Rango del deslizador


Puedes fijar los valores que consideres adecuados seg
un la aplicacion que se haga del
deslizador. En nuestro caso, fijaremos como mnimo 5 y como maximo 20. El objetivo
es que queremos crear listas de n
umeros aleatorios cuya longitud este situada entre
dichos valores.
El usuario podr
a mover el deslizador y fijar el valor que desee. Cuando a continuacion pulse la bandera verde para ejecutar el programa, se creara una lista con tantos
elementos como indique esta variable.
Observa en cualquier caso que una vez fijados los lmites, puedes desplazar el boton del
deslizador con el rat
on y el valor de la variable se va modificando simultaneamente.
Como podemos a continuaci
on crear una lista que contenga esa cantidad de n
umeros
aleatorios?
Te proponemos el siguiente algoritmo, en el que damos por supuesto que estamos usando
la variable cuantos as como una lista denominada numeros (que deberemos haber
creado previamente):
1. Al presionar la bandera verde
2. Borrar todos los elementos de numeros
Jose F. Quesada
Mi primer programa
Pagina 139
Introducci
on a la programacion y las ciencias de la computacion
Cursos Thales-CICA 2015 (ED15-15-MPP)

CAPITULO 7. LISTAS
3. Repetir cuantos
3.1. A
nade (n
umero al azar entre 1 y 100) a numeros

Es decir, en primer lugar, borramos todos los elementos que pudiera contener la lista
de n
umeros. Ten en cuenta que si no haces esto, cada vez que ejecutes el programa, los
nuevos n
umeros se a
nadiran a los que ya tuviera la lista.
A continuaci
on tenemos que obtener tantos n
umeros como indique la variable cuantos,
que hemos asociado con el deslizador. De esta forma, la repeticion se hara tantas veces
como indique esta variable.
Para cada una de las repeticiones hemos de obtener un n
umero al azar y a
nadirlo a la
lista de n
umeros.

Figura 7.17: N
umeros aleatorios
El programa final, bastante simple, se muestra en la figura 7.17. Puedes observar que
cada vez que lo ejecutes se crear
a una lista con tantos elementos como se indique en
cuantos y estos valores estar
an elegidos al azar. En la figura 7.18 se muestra un ejemplo
de ejecuci
on para 10 n
umeros.

Figura 7.18: Construyendo una lista de 10 n


umeros al azar
Jose F. Quesada
Mi primer programa
Pagina 140
Introducci
on a la programacion y las ciencias de la computacion
Cursos Thales-CICA 2015 (ED15-15-MPP)

CAPITULO 7. LISTAS

7.4.3.

Buscando valores en una lista

Ejemplo 7

Lista con n
umeros aleatorios no repetidos
Puesto que la lista tiene pocos elementos y el rango de valores es grande (1
a 100) ser
a improbable que el mismo valor se repita. Pero podra ocurrir.
De hecho en la figura 7.18 el valor 91 aparece en las posiciones 2 y 8.
Debemos a continuar modificar el proyecto anterior para lograr construir
una lista de elementos aleatorios pero sin repeticiones.
En este caso, es importante tener en cuenta que si el n
umero de elementos
de la lista que queremos generar es mayor que el rango de valores posibles,
realmente no podramos resolver la tarea.
[Proyecto: numeros-aleatorios-no-repetidos]
La clave para resolver este ejercicio es la siguiente: iremos generando n
umeros al azar.
Cada vez que generemos un nuevo n
umero (utilizaremos la variable valor para almacenarlo), debemos comprobar si ya se encuentra en la lista de los previamente creados.
Si no se encuentra lo a
nadimos a la lista. Y si se encuentra, pues realmente ignoramos
ese n
umero y buscamos uno nuevo al azar.
Y cuantas veces tenemos que realizar este proceso? No podemos basarnos en la estrategia anterior, es decir, repetir cuantos veces, ya que si hay alg
un valor repetido
entonces la lista final tendra menos elementos. Hay varias formas de controlar esta
situacion. En este caso, es tan simple como repetir el proceso de insercion hasta que la
longitud de la lista sea igual al valor que queremos que tenga (cuantos).
Por tanto, el algoritmo para dise
nar la solucion a este ejercicio sera:
1. Al presionar la bandera verde
2. Borrar todos los elementos de numeros
3. Repetir hasta que (longitud de numeros) = cuantos
3.1. Fijar valor a (n
umero al azar entre 1 y 100)
3.2. Si (No (numeros contiene valor))
3.2.1. A
nadir valor a numeros

Es decir, para poder a


nadir el valor nuevo a la lista tendra que ocurrir que dicha lista
NO contenga el valor.
Imaginemos que en un momento determinado la lista contiene los elementos:
Jose F. Quesada
Mi primer programa
Pagina 141
Introducci
on a la programacion y las ciencias de la computacion
Cursos Thales-CICA 2015 (ED15-15-MPP)

CAPITULO 7. LISTAS

Indice
1
2
3

Valor
90
18
43

Y en ese momento se obtiene el valor al azar 17. Como este elemento no esta contenido
en la lista se a
nadira a la misma, y su contenido a continuacion sera:

Indice
1
2
3
4

Valor
90
18
43
17

Si en este momento el azar vuelve a seleccionar el valor 43, se detectara que ya esta contenido en la lista. Por tanto, no se a
nade, y como consecuencia se vuelve a la repeticion.
La longitud de la lista no ha cambiado, y se volvera a elegir un n
umero nuevo al azar.
As se continuara hasta que la lista tenga tantos elementos (longitud) como hemos
establecido en el deslizador de cuantos.

7.4.4.

Listas ordenadas

El problema de la ordenaci
on de datos es uno de los temas de estudio en algoritmos
mas persistente. Puede llegar a ser un tema complejo, pero por otro lado es un buen
aliciente para pensar estrategias siguiendo un planteamiento algortmico. Proponemos
a continuaci
on una tarea algo m
as compleja. Dentro de la estructura de este material
es una tarea opcional. Deberas intentar leerla y analizar la solucion que se propone. Si
la entiendes, perfecto. Intenta a continuacion construir t
u mismo la solucion desde cero
en un proyecto nuevo. Si no la entiendes, no te preocupes. Vuelve sobre ella pasado
unos das, a leerla y estudiarla, hasta que consigas dominarla.

Ejemplo 8

Lista con n
umeros aleatorios no repetidos y ordenados
El objetivo es construir la lista de n
umeros aleatorios, sin repeticiones, y
adem
as de forma que esten ordenados de menor a mayor una vez terminada
la generaci
on.
[Proyecto: numeros-aleatorios-no-repetidos-ordenados]
Jose F. Quesada
Mi primer programa
Pagina 142
Introducci
on a la programacion y las ciencias de la computacion
Cursos Thales-CICA 2015 (ED15-15-MPP)

CAPITULO 7. LISTAS
Para resolver este problema caben m
ultiples enfoques. Por ejemplo, podramos generar
en primer lugar la lista completa, y a continuacion ordenarla.
A continuaci
on se propone una solucion que va ordenando los n
umeros a la vez que se
van generando. Es decir, cada vez que se genera un n
umero se coloca en la posicion
correcta seg
un el orden que debe tener y los n
umeros elegidos hasta el momento.
Partiremos del algoritmo descrito para el ejemplo anterior: generacion aleatoria de
n
umeros no repetidos:
1. Al presionar la bandera verde
2. Borrar todos los elementos de numeros
3. Repetir hasta que (longitud de numeros) = cuantos
3.1. Fijar valor a (n
umero al azar entre 1 y 100)
3.2. Si (No (numeros contiene valor))
3.2.1. A
nadir valor a numeros

La principal diferencia es que no debemos a


nadir valor a n
umeros que lo a
nade al
final de la lista sea cual sea su valor, sino que debemos colocarlo (insertarlo) en la
posicion correcta.
Por tanto, el algoritmo anterior, se debera modificar inicialmente de la siguiente forma.
Ahora posicion es una variable nueva que se utilizara para calcular la posicion donde
se debe insertar el valor:
1. Al presionar la bandera verde
2. Borrar todos los elementos de numeros
3. Repetir hasta que (longitud de numeros) = cuantos
3.1. Fijar valor a (n
umero al azar entre 1 y 100)
3.2. Si (No (numeros contiene valor))
3.2.1. Buscar la posicion donde se debe insertar el valor
3.2.2. Insertar valor en posicion de numeros

El problema se centrar
a ahora en buscar la posicion donde se debe insertar el valor.
Analicemos el problema por casos:
Caso 1: La lista est
a vaca
Si la lista est
a vaca entonces debemos insertar el valor en la posicion 1 (sera el u
nico
y primer elemento).
Jose F. Quesada
Mi primer programa
Pagina 143
Introducci
on a la programacion y las ciencias de la computacion
Cursos Thales-CICA 2015 (ED15-15-MPP)

CAPITULO 7. LISTAS
Caso 2: La esta no est
a vaca
Si la lista no est
a vaca, tendr
a alg
un elemento, pero puesto que todos los elementos
los hemos ido introduciendo ordenados hasta ahora, tendremos una lista de n
umeros
aleatorios ordenados y un nuevo valor.
Para ilustrar la situaci
on, supongamos que tenemos una lista con 3 valores:

Indice
1
2
3

Valor
18
43
90

Y el nuevo valor que hemos obtenido al azar es el 32. La estrategia que vamos a seguir
es colocarnos en el u
ltimo elemento de la lista actual (el ndice 3 cuyo valor es el 90),
e ir hacia atr
as hasta que el valor de la posicion sea menor que el nuevo valor que
queremos introducir.
Por ejemplo, nos situamos en el ndice 3 (valor 90). Como este valor (90) es mayor que
el nuevo (32), retrocedemos una posicion en el ndice.
Ahora estaramos en el ndice 2 (valor 43). Como a
un este valor es mayor que el nuevo,
volvemos a retroceder una posici
on. En el ndice 1 nos encontramos un valor que es
menor que el nuevo (18 < 32). Por tanto, detenemos el proceso y podremos insertar el
nuevo valor en la siguiente posici
on al ndice actual.
Hemos de tener en cuenta que no podemos rebasar hacia atras el ndice 1. De esta forma,
si el nuevo n
umero es menor que cualquiera de los de la lista, nos detendramos al llegar
al ndice 0 (que no existe) e insertaramos el nuevo valor en la posicion correspondiente
a dicho ndice m
as 1, lo cual es correcto.
En definitiva, el algoritmo, una vez considerados ambos casos, quedara de la siguiente
forma:
1. Al presionar la bandera verde
2. Borrar todos los elementos de numeros
3. Repetir hasta que (longitud de numeros) = cuantos
3.1. Fijar valor a (n
umero al azar entre 1 y 100)
3.2. Si (No (numeros contiene valor))
3.2.1. Fijar posicion a longitud de numeros
3.2.2. Repetir hasta que (posicion = 0) O (elemento en posicion de numeros) < valor
3.2.2.1. Cambiar posicion por -1
3.2.3. Insertar valor en (posicion+1) de numeros

Jose F. Quesada
Mi primer programa
Pagina 144
Introducci
on a la programacion y las ciencias de la computacion
Cursos Thales-CICA 2015 (ED15-15-MPP)

CAPITULO 7. LISTAS

Figura 7.19: N
umeros aleatorios sin repeticiones y ordenados
Trasladado a un programa en Scratch este algoritmo se corresponde con la figura 7.19.
Realmente hemos implementado el denominado algoritmo de ordenacion por insercion,
que tambien se puede aplicar a una lista de datos ya creada.

Jose F. Quesada
Mi primer programa
Pagina 145
Introducci
on a la programacion y las ciencias de la computacion
Cursos Thales-CICA 2015 (ED15-15-MPP)

CAPITULO 7. LISTAS

Jose F. Quesada
Mi primer programa
Pagina 146
Introducci
on a la programacion y las ciencias de la computacion
Cursos Thales-CICA 2015 (ED15-15-MPP)

Você também pode gostar