Escolar Documentos
Profissional Documentos
Cultura Documentos
Introduccin: Aprender a
programar
Jos Francisco Quesada
Captulo 1
Introducci
on: Aprender a
programar
Indice
1.1. Aprender a programar: tecnologa y metodologa . . . . . .
10
12
1.4.1. Objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12
13
1.4.3. Eventos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
14
1.4.5. Un saludo . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
16
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
APRENDER A PROGRAMAR
CAPITULO 1. INTRODUCCION:
1.1.
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
Pagina 2
APRENDER A PROGRAMAR
CAPITULO 1. INTRODUCCION:
1.2.
Jose F. Quesada
Pagina 3
APRENDER A PROGRAMAR
CAPITULO 1. INTRODUCCION:
1.2.1.
Scratch Online
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.
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.
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.
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.
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.
Pagina 7
APRENDER A PROGRAMAR
CAPITULO 1. INTRODUCCION:
1.2.2.
Scratch Offline
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
Pagina 9
APRENDER A PROGRAMAR
CAPITULO 1. INTRODUCCION:
1.3.
El editor de Scratch
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.
Jose F. Quesada
Pagina 11
APRENDER A PROGRAMAR
CAPITULO 1. INTRODUCCION:
1.4.
Un 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.
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
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
1.4.4.
Arrastrar y soltar
Pagina 14
APRENDER A PROGRAMAR
CAPITULO 1. INTRODUCCION:
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).
Pagina 15
APRENDER A PROGRAMAR
CAPITULO 1. INTRODUCCION:
1.4.6.
Instrucciones y par
ametros
La instrucci
on
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:
1.5.
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
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.
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.
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
Pagina 19
APRENDER A PROGRAMAR
CAPITULO 1. INTRODUCCION:
Jose F. Quesada
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
23
23
25
26
27
2.4. El l
apiz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
28
29
30
31
2.6. Deslizamiento . . . . . . . . . . . . . . . . . . . . . . . . . . . .
32
. . . . . . .
21
33
2.1.
33
2.7.1. Algoritmo . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
33
35
2.7.3. Proyecto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
36
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
Pagina 22
2.1.2.
Direcciones en el escenario
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
Pagina 23
45
I
@
6
@
@
@
@
e
j
e
y
90
@
@
@t
@
@
- 90
@
@
@
135
180
180
@
@
R 135
@
?
eje-x
Jose F. Quesada
Pagina 24
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.
Ejemplo 1
Jose F. Quesada
Pagina 25
Si trasladamos este esquema a un proyecto Scratch deberamos obtener lo que se muestra en la figura 2.4.
2.3.
Pagina 26
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
Pagina 27
2.4.
El l
apiz
Esta instrucci
on hace que el lapiz se baje para empezar a dibujar.
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
Pagina 28
Ejemplo 3
Pagina 29
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
Pagina 30
En este caso, el objeto se desplaza a las coordenadas exactas que indiquemos para
los valores x e y.
Ejemplo 4
Jose F. Quesada
Pagina 31
2.6.
Deslizamiento
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
Pagina 32
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
2.7.1.
Algoritmo
Las tareas son ejercicios de refuerzo que debes realizar para afianzar lo que est
as aprendiendo.
Jose F. Quesada
Pagina 33
Jose F. Quesada
Pagina 34
2.7.2.
Pagina 35
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
Pagina 36
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.
Jose F. Quesada
Pagina 37
Jose F. Quesada
Pagina 38
Captulo 3.
Datos
Jos Francisco Quesada
Captulo 3
Datos
Indice
3.1. Memoria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
40
3.2. Posici
on y direcci
on . . . . . . . . . . . . . . . . . . . . . . . .
43
43
44
46
47
48
3.4. Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
48
48
3.5. Creaci
on de variables . . . . . . . . . . . . . . . . . . . . . . .
49
55
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
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.
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.
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.
3.2.1.
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.
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
Pagina 44
CAPITULO 3. DATOS
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
Pagina 45
CAPITULO 3. DATOS
Ejemplo 1
Pagina 46
CAPITULO 3. DATOS
3.3.1.
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:
Jose F. Quesada
Pagina 47
CAPITULO 3. DATOS
Ejemplo 2
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
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.
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.
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.
Pagina 50
CAPITULO 3. DATOS
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.
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
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.
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.
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.
...
Jose F. Quesada
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.
Jose F. Quesada
Pagina 54
CAPITULO 3. DATOS
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
Pagina 55
CAPITULO 3. DATOS
Jose F. Quesada
Pagina 56
Captulo 4.
Control
Jos Francisco Quesada
Captulo 4
Control
Indice
4.1. Los elementos del lenguaje . . . . . . . . . . . . . . . . . . . .
58
58
4.1.2. Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
59
59
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
65
Ejemplo 2: Indicar si un n
umero es cero, positivo o negativo . . . . .
66
67
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
57
CAPITULO 4. CONTROL
4.3.2. Repetici
on infinita . . . . . . . . . . . . . . . . . . . . . . . .
70
71
4.3.3. Repetici
on condicionada . . . . . . . . . . . . . . . . . . . . .
73
73
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.
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
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
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
Pagina 59
CAPITULO 4. CONTROL
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
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
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.
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.
4.1.5.
Operadores l
ogicos
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
Pagina 62
CAPITULO 4. CONTROL
Operando
p
true
false
Expresion
no p
false
true
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
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
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
Pagina 65
CAPITULO 4. CONTROL
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
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.
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
Pagina 67
CAPITULO 4. CONTROL
4.2.2.
Condicional simple
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
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
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.
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:
Pagina 70
CAPITULO 4. CONTROL
Ejemplo 4
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
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.
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
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.
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
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
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
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.
Jose F. Quesada
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
Pagina 77
CAPITULO 4. CONTROL
Jose F. Quesada
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
83
5.1.1. Comentarios . . . . . . . . . . . . . . . . . . . . . . . . . . .
84
85
86
87
5.3.1. Disfraces
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
87
88
89
89
90
5.4. Eventos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
90
91
92
79
CAPITULO 5. MULTIPLES
TAREAS, MULTIPLES
OBJETOS Y EVENTOS
Ejemplo 5: Un fantasma que aparece y desaparece aleatoriamente . .
93
94
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:
Pagina 80
CAPITULO 5. MULTIPLES
TAREAS, MULTIPLES
OBJETOS Y EVENTOS
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
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:
Pagina 82
CAPITULO 5. MULTIPLES
TAREAS, MULTIPLES
OBJETOS Y EVENTOS
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
Pagina 83
CAPITULO 5. MULTIPLES
TAREAS, MULTIPLES
OBJETOS Y EVENTOS
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
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.
Jose F. Quesada
Pagina 85
CAPITULO 5. MULTIPLES
TAREAS, MULTIPLES
OBJETOS Y EVENTOS
Ejemplo 2
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.
5.3.
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
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:
5.3.2.
Cambio de 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
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
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
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:
5.3.4.
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.
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
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.
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
Pagina 91
CAPITULO 5. MULTIPLES
TAREAS, MULTIPLES
OBJETOS Y EVENTOS
Ejemplo 4
Jose F. Quesada
Pagina 92
CAPITULO 5. MULTIPLES
TAREAS, MULTIPLES
OBJETOS Y EVENTOS
Ejemplo 5
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
Pagina 93
CAPITULO 5. MULTIPLES
TAREAS, MULTIPLES
OBJETOS Y EVENTOS
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
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
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
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
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
. . . . . . . . . . . . . . . . . . . 116
97
Y SINCRONIZACION
DE
CAPITULO 6. MENSAJES, COORDINACION
OBJETOS
Tarea 1: Un mago que descubre los enga
nos . . . . . . . . . . . . . . 118
6.1.
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
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.
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
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
Pagina 100
Y SINCRONIZACION
DE
CAPITULO 6. MENSAJES, COORDINACION
OBJETOS
1.
2.
3.
4.
5.
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.
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
Pagina 101
Y SINCRONIZACION
DE
CAPITULO 6. MENSAJES, COORDINACION
OBJETOS
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.
Como contrapartida, el personaje Entrenador debe estar preparado para recibir este
nuevo mensaje y actuar de forma acorde:
Jose F. Quesada
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.
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
Pagina 103
Y SINCRONIZACION
DE
CAPITULO 6. MENSAJES, COORDINACION
OBJETOS
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
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.
6.2.
Sincronizaci
on de objetos
Pagina 105
Y SINCRONIZACION
DE
CAPITULO 6. MENSAJES, COORDINACION
OBJETOS
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
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.
Jose F. Quesada
Pagina 108
Y SINCRONIZACION
DE
CAPITULO 6. MENSAJES, COORDINACION
OBJETOS
6.3.
Escenarios y botones
Ejemplo 2
Pagina 109
Y SINCRONIZACION
DE
CAPITULO 6. MENSAJES, COORDINACION
OBJETOS
6.3.1.
Botones
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.
6.3.2.
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
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.
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
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
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
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
Pagina 116
Y SINCRONIZACION
DE
CAPITULO 6. MENSAJES, COORDINACION
OBJETOS
intento
minimo
maximo
medio
10
minimo
maximo
medio
10
minimo
maximo
medio
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
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
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
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).
7.1.2.
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
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.
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
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.
CAPITULO 7. LISTAS
7.2.2.
Listas: longitud
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.
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.
Ejemplo 2
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
Ejemplo 3
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
posicion
pintores
Valor
Indice
1
Caravaggio
2
Rubens
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.
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.
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
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.
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
CAPITULO 7. LISTAS
Indice
1
2
3
7.2.7.
Valor
Picasso
Apeles
Rubens
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
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
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.
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
7.4.
Construyendo listas
7.4.1.
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.
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.
CAPITULO 7. LISTAS
muestra la figura 7.15.
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.
CAPITULO 7. LISTAS
7.4.3.
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
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
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)