Repetitivas Last updated: 01-06-2022

¿Qué son las repetitivas? ¿Qué son las repetitivas? ¿Qué son las repetitivas? ¿Qué son las repetitivas? ¿Qué son las repetitivas? ¿Qué son las repetitivas?

Perdón, se me quedó la repetitiva activada...

Empecemos. A veces es necesario hacer una misma tarea una y otra vez. Por ejemplo... cuando escuchamos música en Spotify, podemos activar la opción para que la app nos toque la misma canción una y otra vez.

Lo mismo sucede cuando vas a ver tus seguidores Instagram. La app tiene que hacer muchas veces lo mismo: ir a buscar un seguir y mostrarte su foto de perfil. Y esa acción se repite por cada uno de tus seguidores.

Entonces ¿cómo se hace eso? ¿Hay una persona mirando si tienen que enviar la misma canción una y otra vez? ¿O hay un programador que está contando cuántos contactos tenes y después tantas instrucciones como seguidores tengas?

No, lo que hay, es una estructura de código que permite repetir la ejecución de una misma terea hasta que se cumplan determinadas condiciones. Genial, ¿no?

info

Desafío #01

Dipli quiere saludar y luego, dar UN paso hacia adelante y finalmente avisar que arribó a destino... fácil ¿verdad? Son solo tres instrucciones.

info

Desafío #02

Ahora Dipli quiere hacer lo mismo pero esta vez...dar 1500 pasos hacia adelante... ¿y ahora? ¡¿que hacemos?! ¿Te animás a resolver esto? Te ayudamos con los primeros 10 pasitos...

info

Para Pensar

info

Así es. Necesitamos una nueva herramienta que nos permita resolver situaciones donde un mismo conjunto de instrucciones deben ejecutarse una y otra vez. Esa herramieta la llamamos estructura repetitiva.

Todos los lenguajes de programación suministran alguna forma de estructura repetitiva. Sin ellas, no podríamos controlar el flujo de ejecución de nuestros programas.


Para pensar: ¿Cómo te imaginás que podría ser una estructura repetitiva?

Dos elementos importantes a la hora de repetir

Parece razonable suponer que, en general, para hacer muchas veces lo mismo vamos a necesitar dos cosas: un área de repetición y una condición de repetición. El área de repetición es la parte de nuestro código donde ponemos las instucciones que queremos que se repitan.

¿Cómo contamos caramelos en un frasco?

Las estructuras repetitivas funcionan muy parecido a las estructuras mentales que construimos en nuestra mente cuando contamos caramelos de un frasco. Ya sea que estemos repetiendo canciones de una playlist, contando pasos de un robot, o contando caramelos de un frasco, siempre necesitamos 3 elementos:


info

INICIALIZACIÓN

¿Que hacemos cuando contamos caramelos de un frasco? Primero seleccionamos un valor de inicialización, es decir, un número desde el que comenzamos a contar. Es el número #0 o a veces el #1.

CONDICIÓN DE REPETICIÓN

Luego, definimos una condición de repetición, es decir, una expresión que debe cumplirse para seguir repitiendo, en el caso de los caramelos sería: "mientras queden caramelos en el frasco", o lo que es lo mismo, "mientras la cantidad de caramelos en el frasco sea mayor a cero".

INCREMENTO

Finalmente, necesitamos un incremento. El incremento nos permite saber cuándo parar, ya que sin el, la condición de repetición siempre sería verdadera y nunca se detendría nuestra repetitiva. El incremento para la cuenta de caramelos sería de a una unidad.

Contadores

Un contador es una variable a la que siempre le sumamos una unidad. Por ejemplo, si queremos contar pasos de Dipli, podemos tener una variable llamada contadorPasos y sumarle 1 cada vez que dipli de un paso.

info

Acumuladores

Un acumulador es una variable a la que siempre le asignamos el valor que tenía más una determinada cantidad que puede ser mayor a 1. Por ejemplo, si queremos contar la cantidad de pasos que dio cada robot amigo de Dipli, podemos tener una variable llamada acumuladorAmigos y sumarle grupos de amigos.

info

Hay varias formas de hacer repetitivas

Existen distintas estructuras de control para realizar repetitivas. Vamos a centrarnos en 3: la estructura FOR, la estructura DO WHILE y la estructura WHILE

REPETITIVAS: La estructura FOR

Existen situaciones donde sabemos exactamente cuántas veces debemos repetir un conjunto de instrucciones. Por ejemplo, para el minidesafio de saludar a los primos de Dipli, el número de repeticiones necesarias es conocido antes de comenzar a repetir. Para estos casos, donde siempre conocemos cuántas veces debemos iterar o repetir, debemos utilizar la estructura FOR.

Estructura FOR: una representación visual

Para el desafío #2, el área de repetición deberá incluír la instrucción alert("Hola! aquí comienzo mi viaje") y la condición de repetición será que se hayan realizado 150 pasos hacia adelante.

Veamos cómo podríamos representar gráficamente la estructura FOR:

info
info

Representación en Javascript

Ahora que ya sabemos cómo representar visualmente una estructura repetitiva FOR, será más fácil comprender cómo representarla en javascript. Abajo, te mostramos el formato de una instrucción FOR .

El FOR es una estructura que permite repetir un conjunto de instrucciones un número conocido de veces.

info

Minidesafío #3

Dipli quiere saber cuánto valdría la sumatoria de sus amigos. Es decir, si tiene 5 amigos, entonces debemos hacer el siguiente cálculo: 1+2+3+4+5 y mostrarlo.

info

Minidesafío #4

Excelente! Ahora que tenemos una buena idea de cómo usar repetitivas, veamos que se le ocurrió a Dipli.

Dipli nos pide que armemos una cadena de texto con los nombres de algunas de las mascotas que el recuerda. ¿Cómo podemos plantear este minidesafío?

info

Repetición condicional

A continuación, estudiaremos dos estructuras repetitivas que permiten repetir sin conocer a priori la cantidad de ciclos que habrán. Llamamos a estas estructuras, repetición condicional, y son la estructura DO WHILE y la estructura WHILE

REPETITIVAS: La estructura DO WHILE

Como vimos en el minidesafío #4, existen situaciones donde no sabemos exactamente cuántas veces debemos repetir un conjunto de instrucciones. Para estos casos, podemos utilizar otras estructuras repetitivas, por ejemplo, la estructura DO WHILE.

Estructura DO WHILE: una representación visual

Veamos cómo podríamos representar gráficamente la estructura repetitiva DO WHILE:

info
info

Representación en Javascript

Ahora que ya sabemos cómo representar visualmente una estructura repetitiva DO WHILE, será más fácil comprender cómo representarla en javascript. Abajo, te mostramos el formato de una instrucción DO WHILE .

El DO WHILE es una estructura que permite repetir un conjunto de instrucciones un número desconocido de veces.

info

Minidesafío #5

Es momento de probar nuestras destrezas en el manejo de repetitivas condicionales. Dipli nos propone el siguiente desafío.

Dipli quiere hacer una lista de invitación a una fiesta robótica en su taller. Solo invitará a amigos robots que tengan más de 2 ruedas. Nos pide hacer un programa que solicite el nombre del amigo, su cantidad de ruedas, y si corresponde, lo agregue a una lista de invitación.

info

Para Pensar

info

La estructura DO WHILE primero ejecuta y después pregunta. Esto está bien... para algunos casos. ¿Qué pasaría si estamos ante una situación en la que se ignore la cantidad de veces que se deberá repetir y que además presente una restricción para las acciones del área de repetición?

En otras palabras, ¿qué pasaría si primero debo preguntar antes de hacer?


Para pensar: ¿Cómo te imaginás que podría ser una estructura repetitiva que primero pregunte y luego haga?

Para recordar

La estructura DO WHILE primero ejecuta y luego pregunta. Por eso, es más apropiada para situaciones donde siempre habrá al menos una ejecución de la repetitiva.

Minidesafío #6

Ohh no... tenemos un problema! Dipli nos propone otro desafío.

A Dipli se le ocurrió hacer una lista de invitación a una fiesta robótica en su taller. Solo invitará a amigos robots que tengan más de 2 ruedas. Nos pide hacer un programa que solicite el nombre del amigo, su cantidad de ruedas, y si corresponde, lo agregue a una lista de invitación. Pero atención! Dipli tiene mala memoria! podría no recordar ningún amigo.

info

Repetitivas: La estructura WHILE

Estamos de acuerdo. Existen situaciones donde primero hay que preguntar y luego ejecutar. Para estos casos, lo más apropiado es utilizar una estructura WHILE.

Estructura WHILE: una representación visual

Veamos cómo podríamos representar gráficamente la estructura repetitiva WHILE:

info
info

Representación en Javascript

Obviamente, la estructura repetitiva WHILE, tiene una forma de representarla en javascript. Abajo, te mostramos el formato de una instrucción WHILE .

El WHILE es una estructura que permite repetir un conjunto de instrucciones un número desconocido de veces y no siempre ejecuta su área de repetición.

info

Retomando el Minidesafío #6

Vamos a retomar nuestro desafío #6 pero esta vez con el enfoque de la estructura repetitiva WHILE.

Recordemos el desafío: A Dipli se le ocurrió hacer una lista de invitación a una fiesta robótica en su taller. Solo invitará a amigos robots que tengan más de 2 ruedas. Nos pide hacer un programa que solicite el nombre del amigo, su cantidad de ruedas, y si corresponde, lo agregue a una lista de invitación. Pero atención! Dipli tiene mala memoria! podría no recordar ningún amigo.

info

Para Pensar

info

Podríamos hacer una primera clasificación entre estructuras repetitivas a partir de la información disponible de la cantidad de repeticiones. Si conocemos cuántas veces se deberá iterar (es decir, repetir) entonces sería mejor utilizar una estructura FOR. Si no conocemos la cantidad de repeticiones al momento de comenzar a iterar, será necesario seleccionar una estructura DO WHILE o la estructura WHILE. La selección entre ambas dependerá de si se debe iterar una o más veces, o bien, cero o más veces.


Para pensar: ¿Por qué es importante seleccionar bien la estructura repetitiva?

Para recordar

Siempre debemos tomarnos un tiempo para diseñar el algoritmo y seleccionar las mejores estructuras de control.

Diseñar vs Programar

Cuando hablamos del diseño de un algoritmo, nos referimos al tiempo que nos tomamos antes de comenzar a programar. Ese tiempo de diseño, es importante para tomar decisiones de implementación. Antes de escribir una sola línea de código, es bueno que nos preguntemos por qué necesitamos una estructura repetitiva, cuántas veces se deberá iterar, si conocemos o no la cantidad de iteraciones antes de que se comienze a ejecutar el bloque repetitivo, etc. Este análisis nos permitirá construír soluciones más sólidas, mas fáciles de mantener en el tiempo, más simples de implementar.

info

Videos

A continuación les dejamos un pequeño resumen de los temas que vimos en esta sección en formato de video!!

Repetitivas: EL FOR
Repetitivas: EL DO WHILE
Repetitivas: EL WHILE

Desafios FOR

Llegamos a la sección más interesante, al momento en que ponemos en práctica todo lo que aprendimos sobre repes.

Nivel 1: Contadores y Acumuladores (sin usar repes)

A- Contando mis amig@s

Generá un código que utilice un contador para contar tus amig@s. Por ejemplo, si tenes 3 amig@s, tu contador debe comenzar con el valor 0 y terminar con el valor 3.

B- Calculando los gastos del mes

Generá un código que utilice un acumulador para calcular todos los gastos del mes. Por ejemplo, si gastaste 100$ en la factura del celular y 500$ en un regalo para el profe de la diplo, al finalizar tu acumulador debería tener el valor 600$.

Nivel 2: Mis primeras repes

A - Mostrando el 1, 2, 3, 4 y 5

Generá una repe que muestre los números del 1 al 5.

B- Mostrando los números del 1 al N

Generá una repe que muestre los números del 1 al N.

HINT: modularizá convenientemente.

Nivel 3: Profesiones

A - Las artistas

Diseñá una repe que permita armar una sola cadena de texto donde estén tus 5 colores favoritos. Los colores deben preguntarse al usuario de a uno.

B- L@s enfermer@s.

Esto de ser artístas no nos funcionó. Mejor nos dedicamos a la medicina integral. Vamos a tomar la presión a 10 personas. Si la presión es mayor a 11 entonces debemos alertar al paciente para que baje el consumo de sal.

Nivel 4: El Tarot

A - Los Mediums (Sin repes)

Generá un módulo que a partir de 6 cartas del Tarot, entregue una profecía al usuario. Las cartas pueden ser:

  • "#1- Amor"
  • "#2- Cerveza"
  • "#3- Trillizos"
  • "#4- Parcial"
  • "#5- Casamiento"
  • "#6- Hospital"

Por ej. si la carta seleccionada es la número #4, podría entregarse una profecía como esta: "Te va a ir excelente en el parcial de la diplo DIPLI". Podes proponer tus propias profecías.

B- Tirando las cartas a N usuarios (Usar repe)

Generá otro módulo que dado un número N de usuarios (N representa un número entero cualquiera) se pida un número de carta al usuario y se le entregue una profecía a partir de la carta seleccionada.

Ej: Si el primer usuario selecciona la carta #4 entonces le mostramos la profecía que propusiste para esa carta, por ej. "Te va a ir excelente en el parcial de la diplo DIPLI".

Nivel 5: Liquidando sueldos de informátic@s

A - Liquidando un ítem (Sin Repes)

Generá un módulo llamado liquidaItem(item, cantidad) que reciba dos parámetros:

  • "Parámetro #1- Item. Estos ítems se corresponden a los 5 ítems del convenio colectivo de trabajo de los informáticos y tienen un monto asociado. Los ítem y sus montos son:
    • #1- Hora Extra: 100$
    • #2- Guardia de fin de semana: 100$
    • #3- Hora de Desarrollo Web: 300$
    • #4- Análisis de Requerimientos: 300$
    • #5- Diseño de Software: 200$
  • Parámetro #2- Cantidad. Es un número entero que representa la cantidad de ítems de un tipo que deben liquidarse.

Por ej. si el módulo liquidaItem(item, cantidad) recibe los parámetros ítem=#3 y cantidad=10, entonces el módulo debe retornar 3000$.

B- Liquidando un sueldo (Usando repes)

Generá otro módulo llamado liquidaSueldo(cantidadItemDistintos) que dado un número N de ítems distintos, (N representa un número entero cualquiera) calcule el sueldo de un empleado para ese mes.

Ej: Si invocamos a liquidaSueldo(cantidadItemDistintos) con cantidadItemDistintos=1, entonces se solicitará al usuario 1 vez un número de ítem y su cantidad, por ejemplo ítem #3 y cantidad 10, para luego utilizar el módulo liquidaItem(3, 10) acumulando cada liquidación de ítem en un acumulador y entregando el valor resultante. El parámetro cantidadItemDistintos puede tomar cualquier valor entero.

Desafios DO WHILE

Llegamos a la sección más interesante, al momento en que ponemos en práctica todo lo que aprendimos sobre repes.

Nivel 1: EL TAROT MISTERIOSO

RETOMAMOS EL DESAFÍO FOR #4

Pero ahora, consideremos que la secuencia de profecías se detiene cuando el usuario pide la carta número #5. Como ya no conocemos a priori cuántas ejecuciones deberán suceder hasta que el usuario escoja la carta #5, no podemos usar el FOR. Debemos reemplazarlo por una estructura DO WHILE.

Nivel 2: Repetitivas en la NASA

A - Los permisos de usuario

En la NASA tenemos a una fila de personas apuradas para enviar cohetes a Marte, pero antes de presionar el botón, debemos chequear los permisos del usuario. Para ello, tene en cuenta la siguiente lista de niveles de permisos:

  • "#1- Visitante"
  • "#2- Administrativo"
  • "#3- Ingeniero"
  • "#4- Piloto"
  • "#5- Director"

Solo un usuario que indique tener permiso de Director (#5) puede enviar cohetes a Marte. Desarrollá un código, para solicitar un nivel de permiso a un usuario y que retorne verdadero si el nivel tiene permitido enviar cohetes al espacio.

B- Enviando cohetes.

Desarrollá una repetitiva que permita a una cantidad desconocida de usuarios enviar cohetes al espacio. Los lanzamientos deben finalizar cuando alguien no tenga el permiso adecuado.

Desafios WHILE

Llegamos a la sección más interesante, al momento en que ponemos en práctica todo lo que aprendimos sobre repes.

Nivel 1:

A- CONTROL REMOTO

Como sabemos, Dipli funciona a batería, la cual, si está cargada al 100%, posee 30 unidades de energía. Pero lo que no sabías es que, por suerte, tiene un modo Control Remoto. Cada movimiento consume una cantidad determinada de niveles de energía. Esta es la tabla de consumo:

COMANDO ACCIÓN CONSUMO EN UNIDADES
#1 Saltito 5 unidades
#2 Patada Ninja 7 unidades
#3 Pasito de Baile 4 unidades
#4 Hacerse el muertito 6 unidades
#5 Autodestrucción nuclear 30 unidades
Tu misión consiste en desarrollar un módulo llamado actualizarEnergia(energiaActual, codigoComando) que retorna la cantidad de unidades de energía restante. Por ejemplo, si invocamos a actualizarEnergia(30, 5) nos retorna 0, porque el comando #5 consume 30 unidades de energía y se restan a la cantidad actual que ingresó como parámetro (30 unidades actuales - 30 unidades que consume el comando #5).

B- Controlando a Dipli.

Desarrollá una repetitiva que permita interactuar con Dipli mientras le quede batería.

Nivel 2: Liquidación de sueldos recargada!

Ohh no!!! la empresa prohibió las horas extras!!!

Ahora vamos a tener que modificar nuestro liquidador de sueldos. Esta vez, vamos a liquidar sueldos siempre y cuando no aparezca el ítem #1, de horas extras. Si alguno de los ítems llega a ser el #1, debemos detener la liquidación. No podemos liquidar un ítem #1... mucho cuidado!!

Desafío Dipli! - ¿Cuál es el Número?

Considerando todo lo que hemos aprendido durante este recorrido, te proponemos que pienses en el desafío Dipli del recorrido de Repetitivas y trates de incorporar las nuevas estructuras aprendidas.
Además de respetar las reglas ya planteadas en desafíos anteriores, también vamos aconsiderar que el desadío Dipli responda a las siguientes reglas:

  • VIDAS: El/la jugador/a comienza a jugar con 10 vidas.
  • Cada intento fallido consume una vida. Es necesario mostrar la cantidad de vidas restantes en cada intento fallido.
  • Si el/la jugador/a gana, entonces no debe seguir jugando.
  • Acumulador radioactivo: cada intento fallido incrementa el nivel de radioactividad en 150 REM (Roentgen Equivalent Man). Es necesario informar, en cada intento fallido, el nivel de radioactividad acumulado. A los 1500 REM se produce la muerte del jugador y la explosión nuclear de Dipli.

TIPS!

Pensá muy bien cuál de todas las estructuras repetitivas deberías utilizar. Suerte y a disfrutar programando!

info