06 - Bucles
Estructuras de control: iteraciones o bucles
Índice
El bucle
Tipos de bucles
El bucle while
do while
for
Ejemplos de while, do while y for
break y continue
Bucles infinitos
Prácticas
ALBERT BASSONS 2
Bucles
Un bucle o ciclo es la repetición de una serie de
instrucciones, hasta que la condición asignada a dicho bucle
deje de cumplirse.
Es utilizado para hacer una acción repetida sin tener que
escribir varias veces el mismo código.
Ahorra tiempo al programador, deja el código más claro y
facilita futuras modificaciones.
ALBERT BASSONS 3
Ejemplo
Imaginemos que queremos
sumar los números de n a m.
Para 1 y 10, tendremos que
sumar 1+2+3+4+5+6+7+8+9+10
= 55.
ALBERT BASSONS 4
Ejemplo
ALBERT BASSONS 5
Bucles
Existen tres tipos básicos de bucle, aunque siempre es
posible intercambiar uno por otro añadiendo o quitando
algunas instrucciones.
Los tres tipos son:
El bucle while
El bucle do… while
El bucle for
ALBERT BASSONS 6
Bucles
En muchos lenguajes existen también diversos tipos de bucles
variantes del for, como el foreach, for…in, for…as etc.
En JS tendremos for…in y for each…in que veremos en
las transparencias sobre objetos.
ALBERT BASSONS 7
El bucle while
while(condición){
acción;
acción
acción
acción;
… ...
}
cierto
falso
ALBERT BASSONS 8
El bucle while
Observa cómo se inicializa la
variable inductora del bucle (i)
y cómo se modifica en cada
iteración, de forma que en
algún momento dejará de
cumplirse la condición.
ALBERT BASSONS 9
El bucle while
Al dibujar diagramas de flujo, la
notación mostrada anteriormente
para el bucle while puede resultar acción
acción
liosa, especialmente con bucles …
anidados.
Podemos variar la notación, siempre
y cuando se siga comprendiendo el
diagrama.
ALBERT BASSONS 10
El bucle do while
do {
acción; acción;
acción;
… acción;
...
} while(condición);
cierto
falso
ALBERT BASSONS 11
El bucle do while
ALBERT BASSONS 12
El bucle do while
La diferencia entre while y do while es que, en el
segundo, siempre se ejecutan las acciones al menos una vez,
puesto que la comprobación se realiza al final.
acción;
acción;
acción …
acción
…
cierto
cierto
falso falso
ALBERT BASSONS 13
El bucle for
acción;
acción; for(init var; condición; incremento){
…
incremento; acción;
acción;
...
}
cierto
falso
ALBERT BASSONS 14
El bucle for
La mayoría de las veces, podemos interpretar las tres
sentencias que componen el for como:
“Desde” “Mientras” Variación
por iteración
for(init var; condición; incremento){
acción;
acción;
...
}
ALBERT BASSONS 15
El bucle for
ALBERT BASSONS 16
El bucle for
Los bucles for permiten gran variedad de combinaciones.
Piensa qué imprimen los siguientes bucles y luego pruébalos:
ALBERT BASSONS 17
Ámbito o alcance
La variable usada para llevar el
control de las iteraciones
(variable inductora) muchas
veces suele tener ámbito de
bloque.
Sin embargo, podemos
extender el ámbito o usar
variables que ya existían en
ámbitos de orden superior.
ALBERT BASSONS 18
Bucle infinito
En los bucles hay que tener cuidado
en modificar la variable inductora y
no provocar accidentalmente bucles
infinitos.
Un bucle infinito es el que no acaba
nunca.
Normalmente son debidos a errores
de programación, aunque puede
haber casos en los que nos
interesen.
ALBERT BASSONS 19
Bucle infinito
Error de programación
Parece que se pretendía un
bucle de 0 a 99
ALBERT BASSONS 20
Bucle infinito
Podemos provocar bucles infinitos de forma intencionada :
ALBERT BASSONS 21
Bucles anidados
Observa el siguiente ejemplo de bucles anidados, he omitido
las llaves de abrir y cerrar bloques:
¿Qué hace este código? Intenta analizarlo a mano y escribe
en papel lo que va sucediendo en cada paso.
ALBERT BASSONS 22
Break
break detiene la ejecución del bucle o bloque en el que se
ejecuta.
Podemos usarlo para forzar salidas de bucles en caso de que
se cumplan unas condiciones concretas, que no tengan que ver
con la variable inductora.
Si el break se encuentra en un bucle anidado, se detiene la
ejecución del bucle interno, pero no la del externo.
ALBERT BASSONS 23
Break
ALBERT BASSONS 24
Continue
Continue detiene la actual iteración del bucle y prosigue con la
siguiente.
A efectos prácticos, podemos decir que “se salta” el código que
tiene por debajo en la iteración actual.
ALBERT BASSONS 25
Ejercicios
Bucles
Ejercicios
1. Haz un programa que sume los 100 primeros números naturales
(sin utilizar la fórmula de Gauss). Necesitarás al menos dos
variables para poder hacerlo.
2. Haz un programa que muestre los 10 primeros múltiplos de un
número dado.
Por ejemplo, si nos dan el 5, mostrará: 5, 10, 15, 20, 25, 30, 35,
40, 45, 50
ALBERT BASSONS 27
Ejercicios
3. Realiza un programa que calcule el factorial de un número dado
.
Se calcula de la siguiente forma:
ALBERT BASSONS 28
Ejercicios
4. Escribe un programa que nos
diga todos los divisores de un
número n, introducido por el
usuario.
Básicamente, intenta dividir el
número n por 2,3,4… y si el resto
de la división es 0, imprime ese
número. Piensa en usar el
operador módulo (%).
ALBERT BASSONS 29
Ejercicios
5. Haz un programa que, a partir de dos números enteros “f” y
“c” introducidos por formulario, cree una tabla HTML con “f”
filas y “c” columnas como la que se muestra en la imagen:
Opcionalmente, puedes hacer también que las filas pares e impares
tengan formatos diferentes e introducir una fila de cabecera.
ALBERT BASSONS 30
Ejercicios
6. Modifica el ejemplo de las tablas de multiplicar para conseguir que
las tablas sean realmente tablas HTML (<table><tr><td>…).
ALBERT BASSONS 31
Ejercicios
7. Realiza un programa que calcule el resultado de elevar un
número a otro. Solamente debe funcionar para números
enteros y se debe tener en cuenta que cuando el exponente
es negativo, el cálculo es diferente.
Debéis realizar cálculos a mano y con la aplicación para validar
el correcto funcionamiento. No os olvidéis de las fases de
análisis, diseño y prueba.
No se puede usar Math.pow(); así que ni lo preguntéis
ALBERT BASSONS 32
Ejercicios
8. Realiza un programa que nos diga si un número introducido en
un input es primo o no.
Un número es primo si solamente es divisible por uno y por sí mismo.
Puedes hacer un bucle que vaya dividiendo el número por 2,3,4,5…
Si el resto de alguna de las divisiones es 0, el número no es primo.
Estos son los primos del 1 al 99 para validar:
ALBERT BASSONS 33
Ejercicios
9. Crea una pequeña aplicación para calcular la posición de un
vehículo (metros) en función del tiempo (segundos).
Se tiene que poder elegir si se trata de MRU o MRUA, indicando
todos los parámetros necesarios en cada caso (se deberá
deshabilitar el input destinado a la aceleración en el caso del
MRU).
El tiempo se debe indicar dos veces: tiempo inicial y tiempo
final; mostrando los resultados segundo a segundo de uno a
otro.
ALBERT BASSONS 34