20251024 Bucles_1 - Contenido educativo
Ajuste de pantallaEl ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:
así que no pasa nada
00:00:00
vale, lo que sí que
00:00:02
no se nos ha olvidado ninguno
00:00:05
es que seguimos con programación
00:00:06
estructurada, aquí todavía no tenemos
00:00:09
ni clases, ni objetos
00:00:10
con lo cual todo ese maravilloso
00:00:12
mundo de posibilidades
00:00:15
que nos habla programación estructurada de objetos
00:00:16
todavía no lo tenemos, pero
00:00:18
poquito a poco, en breve lo tendremos
00:00:20
¿vale? en cuanto acabemos esto de los bucles
00:00:22
lo tendremos
00:00:24
todavía estamos, por tanto, con programación estructurada
00:00:25
y
00:00:28
Y la programación estructurada ya sabemos que está basada en construir programas que sean una secuencia de sentencias, finita por supuesto, una tras otra, y esas sentencias son exclusivamente asignaciones a variables para incorporar datos, operaciones por supuesto también,
00:00:30
es decir, asignaciones a variables en general
00:00:56
me da igual que venga
00:00:58
que yo los leo del teclado o que yo hago una operación
00:00:59
asignaciones a variables
00:01:02
decisiones para permitir
00:01:03
que mi programa haga una cosa
00:01:06
u otra en función de condiciones
00:01:08
sobre los datos de entrada
00:01:10
normalmente
00:01:12
y nos falta una última sentencia
00:01:12
y ya está, ya no hay más en la aprobación estructurada
00:01:16
que es la sentencia
00:01:18
iterativa
00:01:20
la otra
00:01:21
era la sentencia de decisión
00:01:24
Y la sentencia iterativa que nos permite
00:01:26
Nos permite un bloque de código
00:01:31
Un bloque de código
00:01:35
Hacerlo varias veces
00:01:39
Ejecutar varias veces el mismo bloque de código
00:01:42
Esto hasta ahora no lo podíamos hacer, era imposible
00:01:47
Cada bloque de código, cada sentencia
00:01:51
se ejecutaba solo una vez
00:01:55
o ninguna
00:01:57
ninguna si estaba en una rama de una decisión
00:01:58
que no se cumplía
00:02:01
pero el mayor número de veces que se podría
00:02:02
ejecutar un bloque de código
00:02:05
con lo que nosotros sabemos hasta ahora es una vez
00:02:07
si cae dentro de la rama
00:02:09
cuya condición se hace cierta
00:02:11
si no, cero veces
00:02:13
pero que un mismo bloque de código se ejecute
00:02:15
varias veces, no lo podíamos hacer
00:02:17
¿es interesante
00:02:19
poder hacerlo?
00:02:22
Pues por supuesto que es interesante
00:02:22
¿Vale? Porque hay muchísimos programas
00:02:25
Que no son planteables
00:02:28
Si no tenemos un bucle
00:02:30
Por ejemplo
00:02:32
Ejemplo típico
00:02:34
Nos plantean un programa
00:02:37
Que ya directamente me dicen
00:02:39
Solicita un número
00:02:41
Pero ahora ya sí que nos van a pedir
00:02:43
Que validemos
00:02:45
Si el número
00:02:46
Tiene que ser positivo
00:02:49
Si no es positivo, el programa lo vuelve a solicitar una y otra vez. Ejemplito, programa cualquiera que hemos hecho que incorpore ahora una validación de los datos. Una validación en el sentido de que si el usuario no ha introducido un dato válido, te lo está pidiendo una y otra vez.
00:02:51
¿Cómo podemos hacer eso sin bucles?
00:03:13
Es imposible, ¿no?
00:03:16
No podemos hacer una sentencia de if uno tras otro.
00:03:17
Introduzca dato.
00:03:19
Si dato no válido, anidamos.
00:03:21
Eso no tendría ningún sentido.
00:03:23
Es decir, le diríamos al tío, introduzca el dato.
00:03:26
Leemos el dato, bla, bla, bla.
00:03:32
Si el dato no es válido, lo que sea,
00:03:35
pues entonces
00:03:39
otra vez introduzca
00:03:42
dato, si el
00:03:44
dato no es válido
00:03:48
otra vez introduzca dato
00:03:50
esto cuando acaba, este programa
00:03:51
es implanteable, así es que no se puede resolver
00:03:53
se puede resolver
00:03:56
¿vale? no se trata de que
00:03:57
un bucle nos permita
00:04:00
repetir un código varias veces
00:04:01
pero si yo no tengo bucles
00:04:03
no pasa nada porque lo que hago es poner
00:04:06
eso varias veces y listo, no
00:04:07
es que de partida, ya por el planteamiento
00:04:09
de los programas, es que hay cosas
00:04:12
que no se pueden hacer si yo no lo hago con un bucle
00:04:14
por ejemplo, esta situación
00:04:16
sencilla, de solicitar
00:04:18
un dato de entrada
00:04:20
y mientras ese dato no sea
00:04:21
válido, pedirlo otra vez
00:04:24
pedirlo otra vez, entonces si yo me olvido
00:04:25
de los bucles, con lo que sabemos ahora
00:04:28
esto me
00:04:29
¿hasta dónde escribo if?
00:04:31
es imposible, escribiría if hasta el infinito
00:04:33
¿verdad? no puedo hacer un programa
00:04:36
con infinitos ir, pero tendrían
00:04:38
que tener infinito.
00:04:41
¿Vale? Entonces, lógicamente
00:04:43
hay muchas cosas que
00:04:44
no se pueden hacer con las sentencias de decisión
00:04:46
exclusivamente, con las sentencias
00:04:48
exclusivamente de decisión. Como este ejemplo
00:04:50
que hemos dicho, ¿verdad?
00:04:53
Es un ejemplito sin más, para motivarlo.
00:05:02
Vale, pues entonces, vamos a asumir
00:05:08
que ahora sí que tenemos un bucle. ¿Cómo podríamos hacer eso?
00:05:09
Pues una vez que yo he
00:05:12
identificado que mi
00:05:13
problema necesita resolverse
00:05:15
haciendo algo muchas veces, pues ya me he dado cuenta
00:05:17
de que es un núcleo lo que necesito.
00:05:21
Primero, como siempre decimos, uno se mira bien su enunciado,
00:05:24
entiende lo que hay que hacer,
00:05:28
si no, se vuelve a reunir con aquel que se lo planteó,
00:05:30
pero tiene que tener muy claro lo que tiene que hacer.
00:05:35
Una vez que lo tenemos claro, ya empezamos a hacer
00:05:37
un diseño mental en la cabeza.
00:05:40
Pues en este caso, solamente esta parte,
00:05:42
introducir un número,
00:05:45
por ejemplo, y mientras ese número no sea positivo,
00:05:47
volverlo a pedir una y otra vez.
00:05:52
Entonces, introduce número, es negativo, vuelve a introducir.
00:05:54
Introduce número, es negativo, vuelve a introducir.
00:05:59
Introduce número, es negativo, vuelve a introducir.
00:06:01
Ese es el problema que nos han planteado.
00:06:04
Entonces, una vez que ya hemos entendido lo que hay que hacer,
00:06:06
ya vamos a este primer diseño mental.
00:06:09
Dicimos, bueno, esto es hacer algo un montón de veces.
00:06:11
Es hacer algo muchas veces.
00:06:16
¿Cuántas? No lo sé, ese es un segundo problema que ya resolveré, pero por lo menos ya me he dado cuenta de la primera parte importante, que es que este programa consiste en hacer algo muchas veces.
00:06:17
¿Cuántas? Repito, eso ya es una segunda pregunta, pero la primera es que me identifica que mi programa va a necesitar un bucle, porque voy a hacer algo muchas veces.
00:06:29
Bueno, pues aquí hay algo que voy a hacer un montón de veces
00:06:42
En este caso, ¿qué voy a hacer un montón de veces?
00:06:45
Pedir el número, ¿vale?
00:06:50
Con el mensajito
00:06:52
Y leerlo
00:06:53
Leer el número
00:06:54
Esto lo voy a hacer un montón de veces
00:06:56
Leer el número, leer el número, leer el número
00:06:58
Un montón de veces, ¿vale?
00:07:01
Luego esto se va a convertir en un programa
00:07:02
Que va a estar todo el rato haciendo esto
00:07:05
Esto por aquí
00:07:07
Y otra vez, y otra vez, y otra vez
00:07:09
Esto es un bucle, un trozo de código que yo he identificado que se va a hacer muchas veces y otra y otra y otra, muchas veces. Vale, gracias a que tenemos los bucles, por tanto, no tendré que escribir esto dentro de mis ifelse y ifelse porque no tenía sentido.
00:07:12
Luego, mi programa, mi primera arquitectura mental de programa es esto
00:07:27
Leer el número un montón de veces, un montón de veces
00:07:31
Pero claro, ningún programa puede ser infinito
00:07:33
Entonces, esto no puede ser dar vueltas al lazo todo el rato
00:07:37
¿Vale? Esto no puede ser dar vueltas al lazo
00:07:41
¿Vale? ¿Cuándo voy a dejar yo de dar vueltas al lazo?
00:07:44
Bueno, pues en algún sitio tendré que, tendrá que haber
00:07:48
En algún sitio tendrá que estar recogida
00:07:51
una condición, vamos a poner las condiciones
00:07:54
como las ponemos siempre, de alguna manera
00:08:00
tendrá que estar recogida sintácticamente
00:08:05
ahora veremos cómo será la sintaxis
00:08:07
de alguna manera tendrá que estar recogida una condición
00:08:09
que me va a fijar si el bucle
00:08:13
se vuelve a repetir y se vuelve a repetir
00:08:17
y se vuelve a repetir y se vuelve a repetir, de alguna manera tendrá que estar fijada
00:08:19
vale, pues ahora ya me hago la segunda parte
00:08:22
de mi diseño mental, la primera es identificar
00:08:25
que hay algo que lo voy a hacer muchas veces.
00:08:28
Esa es la primera.
00:08:31
La segunda es, ¿y qué es lo que voy a hacer muchas veces?
00:08:32
Pedir el número.
00:08:36
Un montón de veces.
00:08:36
Pedir el número, pedir el número, pedir el número.
00:08:37
Un montón de veces.
00:08:39
Vale, pues ya está.
00:08:39
Un montón de veces.
00:08:40
Y ya la tercera.
00:08:41
¿De qué depende que yo vuelva una y otra vez a dar la vuelta?
00:08:44
¿De qué depende de que este círculo se haga otra vez
00:08:49
y otra vez y otra vez?
00:08:52
Depende de una condición.
00:08:54
Bueno, pues ahora ya pienso en la condición.
00:08:56
¿Qué va a hacer que yo dé otra vuelta más y dé otra vuelta más?
00:08:59
Pues me han dicho que mientras que el número sea negativo,
00:09:02
porque el válido es el positivo,
00:09:06
entonces que yo dé otra vuelta y que dé otra vuelta y que dé otra vuelta
00:09:08
va a depender de que este número sea negativo.
00:09:12
Bueno, pues ya he fijado una condición.
00:09:15
Entonces, cuando el número sea negativo,
00:09:18
Efectivamente yo
00:09:22
Entraré aquí otra vez
00:09:24
¿Vale?
00:09:26
Y luego volveré a preguntarme la condición
00:09:28
Luego si el número es negativo
00:09:31
Me vendré por aquí
00:09:33
Y volveré a preguntarme la condición
00:09:35
Si sigue siendo negativo
00:09:37
Entraré por aquí
00:09:39
Y volveré a preguntarme la condición
00:09:40
Si sigue siendo negativo
00:09:42
Entraré por aquí y volveré a preguntármela
00:09:44
Pero claro, habrá alguna vez
00:09:46
Que el programa
00:09:49
que el usuario ya meta el número positivo
00:09:50
bueno, pues si
00:09:53
esta condición tiene
00:09:55
dos posibilidades, que se cumpla
00:09:57
o que no se cumpla
00:09:59
si se cumple ya sabemos que
00:10:00
otra vez, otra vez
00:10:03
y si no se cumple, ya el programa
00:10:05
ya sigue, ya el dato está válido
00:10:07
y ya pues lo que sea
00:10:09
la condición es
00:10:11
la contraria
00:10:17
a la que permite la salida
00:10:20
¿vale? la condición
00:10:22
es condición que mientras se cumpla
00:10:24
vuelves a entrar, vuelves a entrar
00:10:25
luego es la contraria de la salida
00:10:27
la contraria de la que fije
00:10:30
la salida
00:10:32
¿vale?
00:10:32
entonces, así más o menos es un diagramita
00:10:36
de lo que es un bucle
00:10:38
lo que pasa es que esto, puesto en diagrama de flujo
00:10:39
que es esa herramienta gráfica
00:10:42
que dijimos en su momento
00:10:44
que nos es de ayuda para entender el flujo
00:10:45
de un programa, en diagrama de
00:10:48
flujo, esto se queda un poco
00:10:50
más bonito. Un bucle en diagrama de flujo
00:10:52
sería esto. Mi programita viene
00:10:54
por aquí, haciendo las intenciones que sea.
00:10:56
Aquí tiene una condición.
00:10:58
¿El número
00:11:01
es menor que cero?
00:11:02
Sí, es menor que cero.
00:11:04
Entro en el bucle
00:11:06
y hago lo que tenga que hacer. En este
00:11:07
caso, pues por ejemplo,
00:11:10
el si soy, leer en.
00:11:12
Y vuelvo otra vez
00:11:14
aquí arriba.
00:11:16
a preguntarme la condición, que no, hemos terminado y el programa ya sigue por aquí
00:11:18
haciendo lo que tenga que hacer, mostrando dato válido, lo que sea, esto ya sí es la
00:11:24
foto de un diagrama de flujo de un bucle, ¿vale? Una condición, si se cumple hago
00:11:33
esto y si no he terminado y sigo, pero claro se distingue mucho de un if, porque hay veces
00:11:42
en algunos casos que
00:11:50
confundís los if y los while
00:11:51
y no, ah bueno
00:11:53
que esto es más fácil así
00:11:58
un if
00:11:59
ya sabemos que es esto
00:12:05
empieza igual, empieza con una condición
00:12:08
la que sea
00:12:11
si se cumple, hago una cosa
00:12:11
lo que sea
00:12:15
si no se cumple, hago otra
00:12:16
o no hago nada
00:12:19
tengo una rama vacía
00:12:21
pero en ambos casos el programa termina
00:12:22
Me da igual en una sentencia de decisión haber ido por esta rama que haber ido por esta, que una vez completado lo que haya que hacer, que podría no ser nada, podría aquí haber nada o podría aquí haber nada, pero sea lo que sea, una vez completado lo que haya que hacer, ya está.
00:12:25
sin embargo el while
00:12:43
también es una condición
00:12:45
el bucle es una condición
00:12:47
que como todas las condiciones
00:12:49
hay dos posibilidades, o se cumple o no, no hay más
00:12:51
si se cumple, hago algo
00:12:53
y a diferencia
00:12:55
del if, que ya me piro
00:12:57
de ahí y se acabó y continuo
00:12:59
con el programa, a diferencia
00:13:01
del if, el bucle
00:13:03
vuelve otra vez a preguntarse
00:13:04
la misma condición, que sigue siendo
00:13:07
cierta, repito esto
00:13:09
una segunda vez y vuelvo
00:13:11
otra vez a preguntármela. ¿Que sigue siendo cierta?
00:13:13
Ejecuto de nuevo
00:13:16
esta y vuelvo otra vez.
00:13:17
Luego esa es la diferencia, que aquí la rama del
00:13:19
sí no vuelve arriba. Se va
00:13:21
y listo. Y la rama
00:13:23
del no, si es que no, se
00:13:25
acabó. Continúo con el resto
00:13:27
del programa. Ya está. No hay más que hacer.
00:13:29
¿Vale? Entonces
00:13:31
esto nos permite, esta estructura
00:13:35
nos permite algo que yo he
00:13:37
identificado que tengo que hacer varias veces
00:13:39
que realmente se haga muchas veces.
00:13:41
¿Cuántas? Pues depende
00:13:43
En este ejemplo en concreto
00:13:46
¿Cuántas? Depende
00:13:47
De las que tarde el usuario meter un número positivo
00:13:49
En una ejecución
00:13:52
Igual lo hace solo una vez
00:13:54
Pero a lo mejor dentro de tres ejecuciones
00:13:55
Tarda siete veces en meter el positivo
00:13:58
Pues siete veces
00:14:00
Que va a estar ahí dando vueltas
00:14:02
¿Vale?
00:14:04
Cada una de las vueltas
00:14:06
Es lo que llamamos, es una iteración
00:14:08
Del bucle, cada una de las vueltas
00:14:10
es una iteración
00:14:12
y por eso esta es la sentencia
00:14:13
iterativa
00:14:17
que se llama, porque va haciendo iteraciones
00:14:18
esta es la sentencia
00:14:20
iterativa o repetitiva
00:14:23
iterativa
00:14:25
y la programación estructurada
00:14:25
no necesita nada más que esto
00:14:31
las variables
00:14:33
con sus operaciones
00:14:34
esto y esto
00:14:36
ya está, nada más
00:14:38
todo lo demás
00:14:40
son añadidos
00:14:42
para que el programa sea
00:14:45
más bonito, más reutilizable
00:14:46
separarlo en partes
00:14:49
porque si no el programa es
00:14:51
inmanejable, todo lo demás de la
00:14:53
programación está orientado
00:14:55
a esto que os digo, para la algoritmia
00:14:57
ya no hace falta nada más
00:14:59
para cualquier algoritmo
00:15:01
que yo tenga que hacer
00:15:02
lo voy a poder resolver con lo que
00:15:04
hemos visto hasta ahora
00:15:06
incluyendo el bucle, ya está
00:15:08
todo lo demás ya compete
00:15:10
a cómo almaceno los datos,
00:15:12
cómo organizo el programa,
00:15:15
qué variables declaro,
00:15:17
a conocimientos en relación a eso
00:15:20
para que mi programa se convierta en algo
00:15:22
realmente manejable, útil, escalable, modificable, etc.
00:15:24
¿Vale?
00:15:29
Bueno, pues entonces, ¿cómo ahora ya?
00:15:31
¿Cómo programamos esto?
00:15:34
Esto ya tiene una sintaxis, lógicamente.
00:15:35
Tiene una sintaxis, pues vamos ya
00:15:38
a verlo
00:15:40
ahí que
00:15:42
se queda más claro y más bonito
00:15:44
ahí, vale
00:15:46
venga
00:15:55
vale
00:16:00
vale, y vosotros decís entonces
00:16:17
si lo decís de verdad
00:16:20
este ejemplo, nos ha quedado
00:16:21
a todos claro que no hay otra forma
00:16:24
de hacerlo que no sea un bucle
00:16:25
¿vale? porque hombre
00:16:27
un programa que me dicen, lee 10
00:16:29
números, luego haz no sé qué
00:16:32
pues yo podría hacer las
00:16:33
10 lecturas una tras otra, me queda muy feo
00:16:36
si tengo un bucle, pues no lo hago
00:16:37
así, pero podría hacerlo sin bucles
00:16:40
es que este ni siquiera
00:16:42
no podemos
00:16:43
entonces, ah, ya que hemos entendido
00:16:44
que no podemos y que
00:16:47
estructura tendríamos que hacer
00:16:49
pues ahora ya podemos programarlo
00:16:51
venga
00:16:53
eh
00:16:55
el que se ha hecho automáticamente
00:17:07
hay una pestañita
00:17:11
abajo
00:17:15
que puedes marcar
00:17:16
pero mira, gracias a que no lo he descubierto hasta ahora
00:17:18
se lo sabe de memoria seguro perfectísimamente
00:17:21
claro, vale, pues entonces
00:17:23
vamos a hacer este ejemplo
00:17:26
Tenemos nuestro numerito, nuestro escáner para leer del teclado y aquí nuestro numerito N, ¿vale?
00:17:27
Entonces, ¿qué vamos a hacer aquí? Pues vamos a solicitar número hasta que se introduzca uno positivo.
00:17:49
Esto es lo que queremos hacer, ¿vale?
00:18:09
Pues entonces
00:18:17
Ya hemos identificado
00:18:19
Que sentencias queremos hacer un montón de veces
00:18:21
Un montón de veces
00:18:23
Ler número, ler número, ler número
00:18:24
Entonces un montón de veces
00:18:26
Vamos a
00:18:28
Querer hacer esto
00:18:30
Introduzca número
00:18:32
Y ahora
00:18:38
Un montón de veces queremos hacer esto
00:18:40
Vale
00:18:46
Luego esto va a estar dentro del bucle
00:18:46
La sintaxis del bucle
00:18:50
¿Cuál es?
00:18:55
empieza una de las posibles
00:18:56
la primera que vamos a ver
00:19:00
empieza con while
00:19:01
mientras como no podía ser de otra manera
00:19:04
y aquí es donde va esa condición
00:19:06
que tenemos que seguir perfilando
00:19:09
entonces
00:19:13
todo el código que se repite
00:19:15
dentro del bucle
00:19:19
todo el código que se repite
00:19:21
va entre llaves después del while
00:19:22
Ahí entre llaves
00:19:25
Ahora
00:19:27
¿Vale?
00:19:28
De nuevo con el mismo matiz de leave
00:19:31
Si lo que se repite fuera solo una sentencia
00:19:33
Puedo quitar las llaves
00:19:36
¿Vale?
00:19:38
Si lo que se va a repetir es solo una sentencia
00:19:39
Puedo quitarlas
00:19:41
Lo podemos poner aquí
00:19:42
Pesarias
00:19:45
Pesarias
00:19:49
Llaves
00:19:51
Si dentro del bucle
00:19:53
solo hay una sentencia
00:19:56
¿vale? en este caso hay dos
00:19:59
luego en este caso
00:20:04
obligatorio poner las llaves
00:20:06
de nuevo
00:20:08
sigamos las pautas de
00:20:09
sigamos las pautas de estilo
00:20:11
el while es una sentencia más
00:20:14
que empieza al mismo nivel que están
00:20:16
las otras, como esta de declaración de variables
00:20:18
y
00:20:20
la llave
00:20:22
que abre el código que va dentro del bucle
00:20:23
la pongo justo después del while, la pongo aquí
00:20:26
Y todo lo que va tabulado, no es obligatorio, repito, es una cuestión de estilo, todo lo que va dentro, perdón, lo tabulo por estilo para que se vea claro qué es lo que va dentro del while, para que se vea claro.
00:20:28
Una vez que ya he terminado todo lo que va dentro del bucle, cierro la llave y esa llave la cierro a la misma altura que se abrió el while, porque así queda claro esa llave que código cierra.
00:20:42
como pauta de estilo, repito
00:20:55
vale, entonces
00:20:58
parte de este programa
00:21:03
está hecho, estamos aquí
00:21:05
un montón de veces pidiendo
00:21:07
número, pidiendo número, pidiendo número
00:21:09
y ahora os hacemos la pregunta, me han dicho
00:21:10
que salga cuando
00:21:13
se introduce un número positivo
00:21:15
luego la condición que pongo aquí efectivamente es
00:21:16
la contraria a la
00:21:19
de salida, es decir
00:21:21
la condición que si se cumple
00:21:22
tengo que volver a repetir, tengo que volver a repetir
00:21:24
Aquí pongo la condición que me obliga a repetir
00:21:27
En este caso la condición que me obliga a repetir
00:21:30
¿Cuál sería?
00:21:33
N menor que 0, el número negativo
00:21:36
¿Vale?
00:21:38
Luego este programa estaría casi hecho
00:21:40
¿Vale?
00:21:42
Casi
00:21:44
Solo le falta un matiz
00:21:44
De hecho aquí estamos viendo un error de compilación
00:21:46
¿Vale?
00:21:49
Claro, tiene sentido
00:21:50
Ahora ya esto se empieza a ejecutar
00:21:51
¿Y cómo se ejecuta esto ya?
00:21:53
Pues la máquina virtual viene por aquí, variable n, estupendo, le creo un espacio en memoria para n, ahí se queda con valor indefinido porque no le has asignado nada.
00:21:57
Ahora empiezo, lo primero que haces es evaluar la condición, lo primero, si la condición fuera falsa de partida, es que jamás nunca se haría esto,
00:22:05
porque si la condición ya la primera vez que llegamos por aquí ya es falsa, es que ni se haría, saltaríamos por aquí.
00:22:17
Vamos a poner aquí una sentencia, el número introducido es n, ¿vale? Es decir, saldríamos por aquí, si el número ya de partida fuera, si esta condición de partida fuera falsa.
00:22:24
pero si es cierta, entramos
00:22:47
entramos una primera vez
00:22:50
pedimos el número
00:22:51
si el número es negativo
00:22:53
lo pedimos una segunda vez
00:22:56
entonces, ¿cómo se os ocurre
00:22:57
que podemos arreglar este programa?
00:23:00
porque una primera vez queremos entrar sí o sí
00:23:01
la primera petición queremos hacerla
00:23:04
por ejemplo, podríamos
00:23:06
hacer la primera petición
00:23:11
fuera, esta sería una posibilidad
00:23:13
pido el primer número fuera
00:23:14
introduzca número
00:23:17
si el número es negativo
00:23:19
Ya me va a pedir el segundo otra vez
00:23:20
Si el número es positivo
00:23:23
Ya de partida no entra
00:23:25
Luego este arreglo está bien
00:23:26
¿Vale?
00:23:28
De hecho si lo ejecutamos
00:23:30
Pues aquí se queda
00:23:31
Menos 6, menos 6
00:23:36
Menos 3, 4
00:23:40
Ahí se queda
00:23:41
Bla, bla, bla, encajado
00:23:43
Vale, este sería un arreglo
00:23:44
Aquí lo único, está bien
00:23:46
Lo único es que estamos duplicando código
00:23:49
Escribiendo esto dos veces
00:23:51
Si os ocurre algún otro arreglo
00:23:53
Claro, vamos a inicializar n
00:23:57
Con un número negativo cualquiera
00:24:04
Entonces, con un número negativo cualquiera
00:24:06
De partida esta condición es falsa
00:24:10
De partida es falsa
00:24:13
Con lo cual la primera vez va a entrar sí o sí
00:24:15
La primera vez va a entrar
00:24:18
Y ya las siguientes dependerá
00:24:19
De si el número es positivo o no
00:24:23
Sí, puedes meter aquí un if
00:24:24
Y cambiar salir a true o false
00:24:38
Claro, sí, pero esa variable booleana
00:24:41
Si tú pones aquí, tú te refieres a esto
00:24:45
Poner aquí un boolean
00:24:47
Salir, que de partida es false
00:24:49
Y ahora aquí
00:24:53
A este boolean
00:24:55
Sí, ya, pero lo tendrías que cambiar
00:24:56
De valor dentro
00:24:59
Salir, y ahora aquí salir
00:25:00
Y tendrás que volverla a actualizar.
00:25:03
Número mayor o igual que cero.
00:25:06
¿Vale?
00:25:12
Te refieres a esto.
00:25:12
¿No?
00:25:13
Sí.
00:25:14
Pero bueno, que si algún código es largo,
00:25:15
necesitas dejar más claro.
00:25:20
Pero aquí en realidad estamos añadiendo una complejidad.
00:25:22
Hacer un boolean.
00:25:25
Para poner aquí el boolean y aquí actualizarlo cada vez.
00:25:26
Estamos añadiendo que quizá en este caso es innecesaria.
00:25:28
¿Vale?
00:25:31
o sea, guardar la condición en un boolean aparte siempre
00:25:31
a veces puede dejar el programa más claro
00:25:34
si este bucle, por ejemplo, es larguísimo
00:25:37
puedes perder la noción de por qué necesitas
00:25:40
que esto sea menor que cero, entonces pues le puedes dar
00:25:44
pero si no, aparte que
00:25:46
de esta manera enmascaras parte de la información
00:25:49
porque yo veo este código de partida, yo estoy viendo el programa de otro
00:25:52
y veo while salir
00:25:56
y para entender por qué este código sale
00:25:57
tengo que mirar todo dentro del while
00:26:01
a ver qué valor le doy a salir
00:26:02
sin embargo, si pongo aquí la condición
00:26:05
yo de partida veo este bucle
00:26:07
cuándo va a salir y cuándo no
00:26:10
entonces, bueno, dependiendo de la situación
00:26:11
pues a lo mejor puede ser más claro, más legible
00:26:14
¿vale? depende de la situación
00:26:16
ahora mismo en particular, para no complicarlo
00:26:18
pues no vamos a...
00:26:21
¿vale?
00:26:24
vale
00:26:33
vale
00:26:34
bueno, pues entonces
00:26:39
podemos poner un valor negativo
00:26:41
y ya está, forzamos la primera iteración
00:26:44
vale
00:26:47
luego, el bucle
00:26:48
es única y exclusivamente
00:26:50
esto
00:26:52
el while con la condición
00:26:53
de la contraria
00:26:56
a la salida, o lo que es lo mismo
00:26:58
la condición que hace que vuelvas
00:27:00
que puede ser muy pequeña o puede ser muy grande
00:27:01
depende de lo que haga mi programa
00:27:04
¿vale? y luego ya
00:27:05
dentro lo que yo quiero que se repita
00:27:08
cuando la condición se hace
00:27:10
falsa, se acabó
00:27:12
y ya está
00:27:13
en este
00:27:15
en este caso en particular sí, porque
00:27:21
así no duplico código
00:27:23
aquí arriba, ¿vale? todo depende
00:27:25
de la situación, una vez que conocemos las herramientas
00:27:27
yo en este caso la inicializaría
00:27:30
a un número que ya fuerza la primera
00:27:32
claro, porque en este
00:27:34
ejemplo en particular, yo una primera
00:27:35
vez tengo que entrar sí o sí, ¿vale? Tengo que entrar. Vale, entonces, ¿por qué he puesto este
00:27:37
ejemplo? Para comparar esta versión de bucle con otra sintaxis posible que tiene, que es muy
00:27:46
parecida pero es igual, que es la sintaxis do while. Vale, entonces, esta sintaxis y lo que
00:27:53
hace, está entendida, ¿no?
00:28:00
Y este
00:28:03
bucle, si de partida
00:28:04
la condición fuera falsa,
00:28:06
que podría ocurrir,
00:28:09
esto nunca se ejecutaría. Luego
00:28:10
un bucle while puede ocurrir que lo que tenga dentro
00:28:12
nunca se haga, ¿vale? Puede ocurrir que
00:28:14
nunca se haga. De hecho,
00:28:16
en esta solución que teníamos aquí, sacando
00:28:18
este código fuera,
00:28:20
si metemos el número positivo
00:28:22
de partida, lo que hay aquí
00:28:24
dentro no se va a ejecutar jamás.
00:28:26
luego lo que hay dentro de un while puede que no se ejecute nunca
00:28:27
si la primera vez esta condición es falsa
00:28:30
vale, pero
00:28:35
hay programas, situaciones
00:28:37
hay mil posibilidades de programas a solucionar
00:28:40
en los cuales por la naturaleza del problema
00:28:42
resolver nosotros queremos que una primera vez
00:28:47
se haga sí o sí
00:28:50
incondicionalmente, sí o sí
00:28:51
sin mirar condición ni historias
00:28:54
y luego ya las siguientes dependiendo de la condición.
00:28:57
Es una situación típica.
00:29:01
Por ejemplo, en casos como este.
00:29:02
Cuando hacemos un menú de datos de entrada,
00:29:04
mostrar el menú y leer la opción,
00:29:08
una primera vez la queremos sí o sí.
00:29:09
¿Vale?
00:29:13
Entonces, vamos a ponerlo aquí.
00:29:13
Hay situaciones, problemas o programas
00:29:21
en las cuales necesitamos
00:29:23
Necesitamos
00:29:27
Que la
00:29:31
Primera
00:29:33
Ejecución
00:29:35
Se haga
00:29:37
Incondicionalmente
00:29:39
Que se haga sí o sí
00:29:42
Que se haga siempre
00:29:46
La primera ejecución del bucle
00:29:47
Y ya las demás dependiendo
00:29:49
La primera se haga sí o sí
00:29:51
si, ahora vemos la sintaxis
00:29:54
¿vale? pero por ejemplo
00:30:00
podría ser como esta, en este
00:30:02
bucle de pedir datos
00:30:04
sabemos que es un bucle, tiene que ser un bucle porque se va a hacer
00:30:05
varias veces, ¿vale? pero
00:30:08
también hemos visto que la primera vez
00:30:10
de la
00:30:12
primera vez, esto se
00:30:14
tiene que hacer, esta se tiene
00:30:16
que hacer, porque el primer
00:30:18
número lo tienes que pedir
00:30:20
entonces, para
00:30:21
forzar a que la primera vez se haga, hemos tenido
00:30:24
que hacer la trampa, entre comillas,
00:30:26
de por esto negativo. Hemos tenido que
00:30:29
hacer esa trampa, entre comillas,
00:30:30
para forzar la primera iteración.
00:30:32
¿Vale? Que no pasa nada,
00:30:35
no pasa nada, es lo más natural del mundo y lo más
00:30:36
habitual. Fuerzo la primera iteración.
00:30:38
Y a las segundas
00:30:41
vendrán dadas, por si este numerito
00:30:42
ya es negativo o no.
00:30:44
Vale, pero, bueno,
00:30:47
precisamente, para no tener
00:30:49
que hacer estas trampitas,
00:30:50
existe otra sintaxis del while
00:30:52
otra sintaxis del bucle
00:30:56
que fuerza a que la primera
00:30:57
iteración se haga sí o sí
00:31:00
que es la sintaxis do while
00:31:01
¿cómo es la sintaxis del bucle
00:31:04
do while? primero se escribe
00:31:11
do, se abren ahí
00:31:13
las llavecitas
00:31:15
y la condición se pone después
00:31:15
al final
00:31:18
y ya terminamos aquí en punto y coma
00:31:20
y ahora esto que
00:31:26
tenía que hacer lo meto aquí dentro
00:31:29
Vale, pues esto es un bucle igualmente
00:31:31
Esto es una sintaxis
00:31:37
De bucle igual
00:31:44
¿Qué es lo que se repite? Esto
00:31:45
¿Qué es lo único que cambia?
00:31:48
Lo único que cambia es que
00:31:51
La máquina virtual viene por aquí, pam, pam
00:31:52
Lo primero que hace es
00:31:54
Hacer una ejecución, sí o sí
00:31:56
Es lo primero que hace
00:31:58
Y a partir de ahí ya empieza a mirar la condición
00:31:59
¿Esto es negativo?
00:32:02
Vuelvo arriba y ejecuto
00:32:05
¿Sigue siendo negativo?
00:32:07
vuelvo arriba y ejecuto
00:32:08
pero la primera se hace sí o sí
00:32:10
y las siguientes ya
00:32:12
depende de la condición
00:32:14
aquí se termina con un punto y coma, etc.
00:32:18
entonces
00:32:26
el bucle do while se prestaría mejor
00:32:26
a este ejemplito nuestro
00:32:29
porque la primera petición
00:32:30
la va a hacer sí o sí
00:32:33
y ya las siguientes
00:32:34
pues dependerá
00:32:37
dependerá de si el número es negativo o no
00:32:38
vale, entonces yo aquí la variable
00:32:41
n, no tendría
00:32:57
por qué inicializarla
00:32:59
vale, o sea
00:33:01
de hecho voy a comentar todo lo anterior
00:33:03
aunque para
00:33:05
comprobarlo
00:33:07
comento aquí
00:33:08
la inicialización de la n
00:33:11
y comento este código
00:33:13
vale
00:33:18
vale, entonces tengo
00:33:20
mi variable n sin inicializar
00:33:23
limpia
00:33:25
y el do while no me da ningún error de compilación
00:33:26
¿por qué?
00:33:30
porque la primera vez que llega la condición
00:33:32
ha llegado después de una primera ejecución
00:33:34
esta ejecución se ha hecho una primera vez
00:33:37
con lo cual obligatoriamente la variable n tiene que tener un valor
00:33:39
porque eso se ha hecho una vez obligatorio
00:33:44
con lo cual la primera vez que evalúo la condición
00:33:46
n ya tiene algo seguro
00:33:50
luego esto pega muchísimo más
00:33:52
Para programas
00:33:58
Que te muestren un menú de opciones
00:34:01
Pega mucho más
00:34:02
Voy a dejarlo como estaba
00:34:05
¿Vale?
00:34:14
Podemos hacer la parte del while
00:34:18
Ese sería el do while
00:34:20
¿Y la variable, la n, la has declarado?
00:34:25
La n la he declarado antes
00:34:28
Y puede no tener valor
00:34:30
Tú prueba a hacer este programa
00:34:33
Con una n delante
00:34:36
sin ningún valor inicializado
00:34:37
y no hay ningún problema
00:34:39
porque como lo primero que hace es esto
00:34:41
ya aquí recibe su primer valor
00:34:43
claro, la inicialización de n
00:34:45
se hace en la primera
00:34:47
iteración del bucle, en la primera
00:34:49
y como esa primera
00:34:51
iteración se hace sí o sí
00:34:53
pues no hay duda, vamos a llegar
00:34:55
a la condición con n con un primer
00:34:57
valor, el de la primera lectura
00:34:59
¿vale?
00:35:01
esto
00:35:10
Un segundito y paramos
00:35:10
Vale
00:35:26
Es decir, el while es esto
00:35:31
Yo tengo mi condición
00:35:38
Que es lo primero que se hace
00:35:41
Si se cumple
00:35:43
Hago el código que sea
00:35:45
Y vuelvo arriba otra vez
00:35:47
Que no se cumple
00:35:49
Me voy
00:35:54
este es el while a secas
00:35:56
que hemos visto
00:36:00
el while condición
00:36:01
sentencias
00:36:03
y el do
00:36:05
sentencias while condición
00:36:06
esta es la condición que sea
00:36:10
la condición que sea, sería esto
00:36:13
primero
00:36:16
ejecuto el código que sea
00:36:17
lo primero de todo
00:36:20
y ahora ya
00:36:21
me planteo la condición
00:36:22
que se cumple
00:36:25
me voy
00:36:27
arriba
00:36:30
que no se cumple
00:36:30
sigo por abajo
00:36:33
luego ese es el while
00:36:34
y este es el do while
00:36:37
que no funcionan exactamente
00:36:38
igual, los dos son bucles
00:36:43
que hacen muchas veces algo
00:36:45
tienen una pequeña diferencia
00:36:46
que en el do while
00:36:49
lo que se ejecuta una primera
00:36:50
vez se hace sí o sí
00:36:53
y ya las siguientes dependen de la condición
00:36:55
porque si la condición la primera vez es falsa
00:36:57
solo se ejecuta una vez y luego ya me piro
00:37:00
se ejecuta una vez y me piro
00:37:02
pero en este bucle
00:37:04
si la condición es falsa
00:37:06
ya es que no se va a ejecutar nunca
00:37:08
ninguna
00:37:11
si es falsa como es lo primero que miro
00:37:11
al ser lo primero
00:37:14
si es falsa nunca se va a ejecutar esto
00:37:15
sin embargo en este caso
00:37:18
si la condición es falsa
00:37:20
la primera vez se ejecuta
00:37:21
y ya las siguientes no
00:37:23
Entonces dependiendo de mi funcionamiento
00:37:24
De programa, lo que yo quiera hacer
00:37:27
Pues pega más una o pega más la otra
00:37:29
¿Vale?
00:37:31
Queda más bonito uno o la otra
00:37:33
Todo lo podemos hacer con las dos
00:37:34
Pero habrá que hacer retoques
00:37:36
Lo que hemos hecho antes del menú
00:37:38
Se adaptaba mejor esto
00:37:40
Muestro menú, leo opción
00:37:44
No es válida
00:37:45
Muestro menú, leo opción
00:37:47
No es válida
00:37:48
Muestro menú, leo opción
00:37:49
Es válida, se acabó
00:37:50
Con esta
00:37:51
hemos tenido que hacer una trampa
00:37:52
para forzar a que la condición
00:37:56
sea falsa de partida
00:37:58
y hacerlo una primera vez
00:38:00
¿vale?
00:38:01
podemos hacer todo con cualquiera de los dos
00:38:04
pero entonces tendremos que hacer
00:38:06
los retoques correspondientes
00:38:07
para que haga exactamente lo que queremos que se haga
00:38:10
¿verdad?
00:38:12
vale, vamos a parar unos minutos
00:38:14
¿no?
00:38:18
- Materias:
- Programación
- Niveles educativos:
- ▼ Mostrar / ocultar niveles
- Formación Profesional
- Ciclo formativo de grado superior
- Segundo Curso
- Subido por:
- Raquel G.
- Licencia:
- Todos los derechos reservados
- Visualizaciones:
- 7
- Fecha:
- 26 de octubre de 2025 - 17:10
- Visibilidad:
- Clave
- Centro:
- IES ROSA CHACEL
- Duración:
- 38′ 20″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1920x1080 píxeles
- Tamaño:
- 1.06