3.3 Lazos – Estructuras para Repetir

Referencia: Van Rossum 4.4 p21, Rodriguez 3.4.3.a p33, Downey 7.4

Estructuras para Repetir

En algunos problemas existen bloques de operaciones que se repiten. Estas operaciones se pueden repetir hasta que se cumpla una condición o se repiten mientras se cumpla una condición.


Repita-Hasta


Ejemplo:

En la universidad, luego de tomar un curso o materia de estudio tiene la condición de superar la nota mínima para aprobar.

 


Mientras- Repita

Ejemplo:

Es el procedimiento usado en las evaluaciones para nivel o curso de idiomas (inglés).

El estudiante primero realiza una prueba, si no obtiene la calificación mínima debe tomar el nivel/curso A, caso contrario, puede pasar al nivel/curso B.


Conforme la comodidad del planteamiento del problema, al escribir el algoritmo se escoge el lazo “repita-hasta” o “mientras-repita” . Sin embargo, se puede intercambiar la forma del lazo usando la negación de la expresión y cambiando la posición del condicional (inicio o al final).

Recomendación: De ser necesario para continuar, revisar la sección de Conceptos Básicos, contadores y acumuladores.



Ejemplo 1

1Eva_IIIT2003_T2 Números triangulares

Realice un algoritmo para encontrar el término n-ésimo de la secuencia de números triangulares.

Un número triangular puede entenderse como el número de elementos usados para formar una pirámide plana, como se muestra en la figura.

Referencia: ESPOL-FCNM. ICM00794-Fundamentos de Computación. Parcial III Término 2003 – 2004. Abril 02, 2004. Tema 2.

Desarrollo:
Usando la analogía de la construcción de una pirámide, se observa que para construir un piso se usa un bloque, para añadir el piso 2 se usan 2 bloques, para añadir el piso 3 se usan 3 bloques, etc.

Cuántos es la variable de ingreso que indica el número de pisos que se construirán.

Para iniciar los trabajos, se anuncia la construcción del primer piso y que se han usado 0 bloques.

En el procedimiento de construcción de la pirámide, piso es una variable tipo contador; usados es una variable tipo acumulador que registra los bloques usados en la construcción de cada piso. Se construye un nuevo piso, acumulando los bloques usados hasta que se hayan construido los pisos de la variable cuántos.

La variable de salida que muestra el valor resultante es: usados.

# Ejemplo 1. Números triangulares

# Ingreso
cuantos = int(input('cuantos pisos: '))

# Procedimiento
usados = 0
piso = 1
while not(piso>cuantos):
    usados =  usados + piso
    piso = piso + 1

# Salida
print(usados)
cuantos pisos: 4
10
>>>

El ejemplo se desarrolló usando el lazo Repita-Hasta, sin embargo, si se quiere cambiar el estilo usando el lazo Mientras-Repita, se lo expresa cambiando el condicional al inicio y negando la expresión:

Repita-Hasta: (pisos>cuántos)
//construir pisos hasta que se completen los pedidos en la variable cuántos

while not(pisos>cuántos)
while (pisos≤ cuántos)
//Construir pisos mientras sean menores e iguales a los pedidos en la variable cuántos.


Ejemplo 2

Extendiendo el ejercicio anterior, construya un algoritmo para determinar si un número t es triangular.

Para esto el lazo se debe controlar mediante el número de bloques usados comparados con el número t.

Si los usados son iguales o mayores a t, no es necesario continuar el proceso pues se obtuvo un resultado afirmativo, o los usados superan lo requerido y el número t no es triangular.

 

Puede mostrarse la respuesta como un valor verdadero (1) o falso (0) al comparar la igualdad entre t y usados.

# Ejemplo 2. Numero triangular

# Ingreso
t = int(input('número a revisar: '))

# Procedimiento
usados = 0
piso = 1
while not (usados>=t):
    usados = usados + piso
    piso = piso + 1

if (t==usados):
    respuesta = 1
else:
    respuesta = 0

# Salida
print(respuesta)
>>> 
número a revisar: 10
1
>>> 
número a revisar: 7
0
>>>

Propuesta: Realizar el ejercicio usando la forma mientras-repita.

Referencia: Elementos esenciales para programación: Algoritmos y Estructuras de Datos Latin Project. Primera Edición 2014. Sección 4.2. p.69