¿Hasta cuándo?

Repetir hasta...

Hasta ahora hemos visto cómo construir bucles que nos permiten repetir tareas siempre que sepamos exactamente el número de veces que queremos que se repita. Pero no siempre es así.

Volvamos al ejemplo de ir a la mesa del profesor de la clase de al lado. Imagínate que no conoces exactamente el número de pasos que hay que dar para llegar hasta la puerta de la otra clase. O, qué pasa si la longitud de tus pasos no es la misma que la mía. En ambos casos giraría antes o después de llegar a la puerta con total seguridad.

Para eso los programadores han encontrado una solución. Una instrucción que va a repetir las instrucciones que contenga hasta que se cumpla una condición. En nuestro ejemplo podría ser:

  • Una tarjeta de Repetir hasta que llegue a la puerta
    • Una tarjeta de Avanzar un paso

Código de Scratch con los bloques Repetir hasta, Llegar a puerta y Avanzar un paso

Esto obliga a que cada vez que se repite la instrucción hay que comprobar si se cumple la condición que hemos puesto. Si se cumple la condición se sale del bucle y si no se cumple se repite.

En nuestro ejemplo, Se va a avanzar un paso y, a continuación, se va a comprobar si se ha llegado a la puerta. Si se ha llegado a la puerta se sale del bucle y se continúa con las instrucciones siguientes. Pero si no se ha llegado a la puerta, se repite el bucle y se vuelve a ejecutar la tarjeta Avanzar un paso, comprobar si se ha alcanzado la puerta y así sucesivamente, hasta que se llegue a la puerta.

Para el ejemplo anterior, de tener que ir a la otra clase, el código quedaría de la siguiente forma:

Código con tarjetas para el ejemplo de código de la página anterior.

El código es igual de largo, pero no depende de que el número de pasos hasta la puerta lo hayamos medido una persona u otra.

Repetir hasta en Scratch

2

En la siguiente imagen podrás ver, explicado, cómo funciona el bloque "repetir hasta" de Scratch. Pulsa en los botones para leer u oir las explicaciones.

{"typeGame":"Mapa","instructions":"","showMinimize":false,"showActiveAreas":false,"author":"","url":"resources/B3_mapa.png","authorImage":"","altImage":"","itinerary":{"showClue":false,"clueGame":"","percentageClue":40,"showCodeAccess":false,"codeAccess":"","messageCodeAccess":""},"points":[{"id":"p1172183679150","title":"Repetir hasta","type":2,"url":"","video":"","x":0.055625,"y":0.3439846696524784,"x1":0,"y1":0,"footer":"","author":"","alt":"","iVideo":0,"fVideo":0,"eText":"","iconType":4,"question":"","question_audio":"","toolTip":"","link":"","map":{"id":"a1172183679150","pts":[{"id":"p1578285838876","title":"","type":0,"url":"","video":"","x":0,"y":0,"x1":0,"y1":0,"footer":"","author":"","alt":"","iVideo":0,"fVideo":0,"eText":"","iconType":0,"question":"","question_audio":"","toolTip":"","link":"","map":{"id":"a1578285838876","url":"","alt":"","author":"","pts":[]},"slides":[{"id":"s1578285838876","title":"","url":"","author":"","alt":"","footer":""}],"activeSlide":0}],"url":"","alt":"","author":"","active":0},"slides":[{"id":"s1172183679150","title":"","url":"","author":"","alt":"","footer":""}],"activeSlide":0,"audio":"resources/Clip_1"},{"id":"p1655110173933","title":"Condición","type":2,"url":"","video":"","x":0.510625,"y":0.3990038290791128,"x1":0,"y1":0,"footer":"","author":"","alt":"","iVideo":0,"fVideo":0,"eText":"","iconType":4,"question":"","question_audio":"","toolTip":"","link":"","map":{"id":"a1655110173933","pts":[{"id":"p672712288817","title":"","type":0,"url":"","video":"","x":0,"y":0,"x1":0,"y1":0,"footer":"","author":"","alt":"","iVideo":0,"fVideo":0,"eText":"","iconType":0,"question":"","question_audio":"","toolTip":"","link":"","map":{"id":"a672712288817","url":"","alt":"","author":"","pts":[]},"slides":[{"id":"s672712288817","title":"","url":"","author":"","alt":"","footer":""}],"activeSlide":0}],"url":"","alt":"","author":"","active":0},"slides":[{"id":"s1655110173933","title":"","url":"","author":"","alt":"","footer":""}],"activeSlide":0,"audio":"resources/Clip2.ogg"},{"id":"p597961958417","title":"Instrucciones del bucle","type":2,"url":"","video":"","x":0.141875,"y":0.6013026796538254,"x1":0,"y1":0,"footer":"","author":"","alt":"","iVideo":0,"fVideo":0,"eText":"","iconType":4,"question":"","question_audio":"","toolTip":"","link":"","map":{"id":"a597961958417","pts":[{"id":"p955560192083","title":"","type":0,"url":"","video":"","x":0,"y":0,"x1":0,"y1":0,"footer":"","author":"","alt":"","iVideo":0,"fVideo":0,"eText":"","iconType":0,"question":"","question_audio":"","toolTip":"","link":"","map":{"id":"a955560192083","url":"","alt":"","author":"","pts":[]},"slides":[{"id":"s955560192083","title":"","url":"","author":"","alt":"","footer":""}],"activeSlide":0}],"url":"","alt":"","author":"","active":0},"slides":[{"id":"s597961958417","title":"","url":"","author":"","alt":"","footer":""}],"activeSlide":0,"audio":"resources/Clip3.ogg"}],"isScorm":0,"textButtonScorm":"Guardar la puntuación","repeatActivity":false,"textAfter":"","evaluation":0,"selectsGame":[{"typeSelect":0,"numberOptions":4,"quextion":"","options":["","","",""],"solution":"","solutionWord":"","percentageShow":35,"msgError":"","msgHit":""}],"isNavigable":true,"showSolution":true,"timeShowSolution":3,"version":2,"percentajeIdentify":100,"percentajeShowQ":100,"percentajeQuestions":100,"autoShow":false,"optionsNumber":0,"msgs":{"msgSubmit":"Enviar","msgIndicateWord":"Proporcione una palabra o expresión","msgClue":"¡Genial! La pista es:","msgErrors":"Errores","msgHits":"Aciertos","msgScore":"Puntuación","msgMinimize":"Minimizar","msgMaximize":"Maximizar","msgFullScreen":"Pantalla Completa","msgNoImage":"Pregunta sin imágenes","msgSuccesses":"¡Correcto! | ¡Excelente! | ¡Genial! | ¡Muy bien! | ¡Perfecto!","msgFailures":"¡No era eso! | ¡Incorrecto! | ¡No es correcto! | ¡Lo sentimos! | ¡Error!","msgTryAgain":"Necesita al menos un %s% de respuestas correctas para conseguir la información. Vuelva a intentarlo.","msgEndGameScore":"Antes de guardar la puntuación comience la partida.","msgScoreScorm":"La puntuación no se puede guardar porque esta página no forma parte de un paquete SCORM.","msgPoint":"Punto","msgAnswer":"Responder","msgOnlySaveScore":"¡Sólo puede guardar la puntuación una vez!","msgOnlySave":"Sólo puede guardar una vez","msgInformation":"Información","msgYouScore":"Su puntuación","msgOnlySaveAuto":"Su puntuación se guardará después de cada pregunta. Sólo puede jugar una vez.","msgSaveAuto":"Su puntuación se guardará automáticamente después de cada pregunta.","msgSeveralScore":"Puede guardar la puntuación tantas veces como quiera","msgYouLastScore":"La última puntuación guardada es","msgActityComply":"Ya ha realizado esta actividad.","msgPlaySeveralTimes":"Puede realizar esta actividad cuantas veces quiera","msgClose":"Cerrar","msgPoints":"puntos","msgQuestions":"Preguntas","msgAudio":"Audio","msgAccept":"Aceptar","msgYes":"Sí","msgNo":"No","msgShowAreas":"Mostrar áreas activas","msgShowTest":"Mostrar cuestionario","msgGoActivity":"Pulsa aquí para realizar esta actividad","msgSelectAnswers":"Selecciona las opciones correctas y pulsa sobre el botón 'Responder'.","msgCheksOptions":"Marca todas las opciones en el orden adecuado y pulsa sobre el botón 'Responder'.","msgWriteAnswer":"Escribe la palabra o expresión correcta y pulsa en el botón 'Responder'.","msgIdentify":"Identifica","msgSearch":"Buscar","msgClickOn":"Pulsa sobre","msgReviewContents":"Debes repasar el %s% de los contenidos de la actividad antes de completar el cuestionario.","msgScore10":"¡Todo perfecto! ¡Enhorabuena! ¿Deseas repetir esta actividad?","msgScore4":"No has superado esta prueba. Repasa sus contenidos e inténtalo de nuevo. ¿Deseas repetir la actividad?","msgScore6":"¡Estupendo! Has superado la prueba, pero seguro que lo puedes mejorar. ¿Deseas repetir esta actividad?","msgScore8":"¡Casi perfecto! Aún lo puedes hacer mejor. ¿Deseas repetir esta actividad?","msgNotCorrect":"¡No es correcto! Has pulsado sobre","msgNotCorrect1":"¡No es correcto! Has pulsado sobre","msgNotCorrect2":"y la respuesta correcta es","msgNotCorrect3":"¡Prueba otra vez!","msgAllVisited":"¡Genial! Has visitado los puntos necesarios.","msgCompleteTest":"Puedes completar el cuestionario.","msgPlayStart":"Pulse aquí para empezar","msgSubtitles":"Subtítulos","msgSelectSubtitles":"Selecciona un archivo de subtítulos. Formatos válidos:","msgNumQuestions":"Número de preguntas","msgHome":"Inicio","msgReturn":"Volver"}}

El bloque naranja con el texto "repetir hasta que" va ha hacer que se repitan todos los bloques de instrucciones que queden dentro de él hasta que se cumpla la condición del bloque hexagonal de la derecha.

En este bloque se incluye la condición que se va a comprobar cada vez que se repita el bucle. Si se cumple, se repetirá una vez más. Si no se cumple, se saldrá del bucle sin ejecutar la instrucción.

En este espacio es donde se incluyen los bloques de todas las instrucciones o bloques que queremos que se repitan.

 

Su navegador no es compatible con esta herramienta.

Pregunta Verdadero-Falso

A continuación se te presentarán fragmentos de programas utilizando Scratch y deberás indicar si el comentario que los acompaña es correcto o no.

Pregunta 1

Si se ejecuta el siguiente fragmento de Scratch, no empezará a girar hasta que la tecla «a» no esté presionada.

Fragmento de programa de Scratch con los bloques: Bajar lápiz, Repetir hasta que ¿tecla a presionada?, Girar 15 grados.

Sugerencia

Va a comprobar si "¿tecla a presionada?" para detener el giro.

Pregunta 2

Si se ejecuta el siguiente fragmento de Scratch, avanzará hasta que se pulse el ratón.Fragmento de código de Scratch con los bloques Bajar lapiz, Repetir hasta que ¿ratón presionado? y Mover 10 pasos

Sugerencia

La instrucción se repite hasta que se pulse el ratón.

¿Qué hace el bucle con la instrucción repetir hasta?

Tiempo disponible:
5 minutos.
Participantes en el grupo:
4 participantes.

Discutid qué recorrido haría el personaje de Scratch si estuviera controlado con el siguiente programa:

Serie de bloques de Scratch con los bloques: Al hacer clic en bandera, Repetir hasta que ¿tocando borde?, Avanzar 10 pasos.
Licencia: Dominio público

Resumen

En programación tenemos una herramienta muy útil para simplificar la creación y comprensión de los programas, los bucles.

Además, hemos visto dos tipos de bucles diferentes:

  • el bucle "repetir", que va a hacer que se repita una serie de instrucciones un número determinado de veces un conjunto de instrucciones;
  • y el bucle "repetir hasta", que va a hacer que se repita una serie de instrucciones hasta que se cumpla una condición.

Hay otros tipos de bucles, pero los veremos en otro momento.

Resumiendo, las características de los bucles:

Diagrama resumiendo la características de los bucles vistos.

Y los tipos de bucles:

Diagrama de resumen de los tipos de bucles vistos

Obra publicada con Licencia Creative Commons Reconocimiento No comercial Compartir igual 4.0

Creado con eXeLearning (Ventana nueva)