Activa JavaScript para disfrutar de los vídeos de la Mediateca.
Clase 20-10-23 - 2 - 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:
Muy bonita la iglesia de Sant Andreu.
00:00:00
El belo entonces.
00:00:10
El archo.
00:00:15
Es que ellos no han pedido gracias.
00:00:22
Oye, ponelo en marcha.
00:00:28
Vale, bueno, pues a ver, es que a veces a la hora de programar confundís las dos situaciones.
00:00:31
Son dos situaciones muy distintas que sirven para cosas muy distintas.
00:00:38
En ambas empezamos evaluando una condición.
00:00:42
Que se cumple, hago unas sentencias.
00:00:47
Aquí igual.
00:00:50
Empiezo evaluando una condición.
00:00:51
Que se cumple, hago unas sentencias.
00:00:53
Hasta aquí estamos igual.
00:00:55
Pero con la sentencia de decisión que hemos visto, ya está, se acabó.
00:00:56
Se acabó la sentencia.
00:00:59
Ya no hay más que hacer.
00:01:00
Se acabó.
00:01:01
Con lo cual este conjunto de sentencias se va a hacer una vez.
00:01:02
Entonces en las situaciones en las cuales queremos que se haga solo una vez, eso es lo que queremos.
00:01:04
Pero habrá veces que hay situaciones, como los ejemplos que hemos puesto,
00:01:10
que hemos identificado que queremos que se haga muchas veces hasta que esta condición deje de ser cierta.
00:01:14
Pues entonces es esta.
00:01:20
Este es el diagrama que lo representa.
00:01:22
Se evalúa condición, que se cumple, hago las sentencias que yo he decidido que se van a repetir.
00:01:24
Estas son las sentencias que se tienen que hacer varias veces.
00:01:30
Y una vez que se han ejecutado, la máquina virtual vuelve automáticamente ella arriba a evaluar la condición.
00:01:35
Que se sigue cumpliendo, sigue siendo cierta.
00:01:41
Pues vuelvo a entrar por aquí y lo ejecuto otra vez.
00:01:45
Cuando ya he terminado, la máquina virtual vuelve arriba en lugar de salir por aquí.
00:01:48
Y vuelve a evaluar la condición.
00:01:52
Que se sigue cumpliendo.
00:01:55
Fenomenal.
00:01:56
Vuelvo a ejecutarlas.
00:01:57
Y así todo el rato.
00:01:58
Entonces esta condición llega en el momento en que deje de ser cierta.
00:01:59
¿Por qué?
00:02:02
Estas sentencias que se hacen aquí, la idea, para que esto sea una situación real que tenga sentido,
00:02:03
es que toquen variables que están aquí metidas en la condición.
00:02:09
Entonces llegará un momento en que el resultado de estas sentencias
00:02:13
mueva las variables de tal forma que esta condición deje de ser cierta.
00:02:17
Bueno, pues cuando deja de ser cierta, entonces se sale por la rama del no.
00:02:21
Igual que aquí.
00:02:26
Y la rama del no, que es lo que hace nada, la rama del no terminó, ya está.
00:02:27
Ya ha terminado la sentencia.
00:02:31
Ya ha terminado.
00:02:33
Pues esta es la sentencia de bucle o sentencia repetitiva.
00:02:34
Esto es un bucle.
00:02:39
¿Vale?
00:02:41
Y sin embargo esto es una decisión.
00:02:42
Entonces, mientras una condición se cumple, hacemos este rollo y otra vez se evalúa condición.
00:02:48
Mientras se cumple, hacemos este rollo y otra vez se evalúa.
00:02:54
¿Alguna vez dejará de cumplirse?
00:02:58
¿Alguna vez?
00:03:00
Pues cuando llegue esa vez, venimos por aquí y se acabó.
00:03:01
Ya no hay más que hacer, ya se ha acabado.
00:03:05
Y ya el programa continúa con lo que venga a continuación.
00:03:07
Con lo que venga a continuación.
00:03:10
Luego esto es otra sentencia más.
00:03:11
¿Vale?
00:03:14
Eso es otra sentencia más.
00:03:17
Compleja también, como las de Yves.
00:03:19
Compleja, porque aquí dentro hay sentencias.
00:03:22
Andrés, Moisés, Miguel, tú también.
00:03:25
Callaos.
00:03:31
¿Vale?
00:03:32
Que ya se te llama Johanna.
00:03:34
Bueno, está claro.
00:03:37
Entonces aquí programar esto obviamente es una tontería.
00:03:39
Es poner la sintaxis de Java correspondiente.
00:03:42
Insisto, lo difícil es identificar cuándo es esto lo que resuelve mi situación y cuándo es esto.
00:03:45
Y toda esa parte no se hace tecleando el ordenador.
00:03:52
Esa parte se hace antes, pensando, analizando el problema.
00:03:56
A lo mejor en un papel, haciendo uno sus cuentecitas.
00:03:59
Así se hace la parte difícil, que es decidir si necesito esto, necesito esto u otro.
00:04:05
Y una vez que lo he decidido, pues ya programar es inmediato.
00:04:11
¿Vale?
00:04:16
Bueno, pues, ¿cómo programaríamos esto?
00:04:17
Por ejemplo, aquí lo que hay que programar es dos cosas.
00:04:20
Una, las sentencias que se van a repetir.
00:04:24
Y dos, la condición que mientras se cumpla, las sentencias van a irse repitiendo.
00:04:27
O sea, cada pasada, cada vuelta del bucle, es lo que se le suele llamar iteración.
00:04:36
¿Vale?
00:04:41
Entonces el bucle va dando iteraciones.
00:04:42
Cada vuelta del bucle la llamamos iteración.
00:04:43
Iteración 1, iteración 2, iteración 3.
00:04:45
Podría ser que el bucle no hiciera ninguna iteración, porque ya de partida esto fuera que no.
00:04:48
Si de partida esto es que no, la sentencia esta de bucle no hace nada.
00:04:53
¿Vale?
00:04:58
No hace nada.
00:04:59
Pero si de partida es que sí, lo ejecutará una vez.
00:05:00
Que la segunda es que sí también, lo ejecutará dos veces.
00:05:02
Depende.
00:05:05
Lo ejecutará tantas veces, habrá tantas iteraciones como hagan falta hasta que esto sea falso.
00:05:06
Las que hagan falta.
00:05:11
Y si el programa está bien hecho, el bucle alguna vez tiene que salir.
00:05:12
Un bucle infinito no podemos hacerlo.
00:05:17
No puede haber un programa que se quede ahí en un bucle infinito.
00:05:20
Porque entonces la forma de pararlo cuál es.
00:05:23
Apagando el ordenador no hay otra y nunca jamás tendríamos que tener una aplicación
00:05:25
que no le quedara más remedio que ser apagada porque yo apague el ordenador
00:05:30
o porque dé al administrador de tareas y mate el proceso.
00:05:33
Eso no debería ocurrir.
00:05:37
Si un programa se queda en un bucle infinito es que lo hemos diseñado mal.
00:05:39
Es que esta condición está mal pensada
00:05:42
y no hemos tenido en cuenta que hay una combinación de datos de entrada
00:05:44
que hacen que esto siempre se acierre.
00:05:49
¿Vale? Eso nunca puede ocurrir.
00:05:52
Un bucle tiene que tener siempre una combinación de datos que lo hagan salir.
00:05:54
Porque si no tu programa puede ocurrir que en determinadas situaciones
00:06:00
esté en un bucle infinito.
00:06:03
Y eso jamás tiene que ocurrir.
00:06:04
Vale, pues por ejemplo.
00:06:08
El ejemplo más sencillo que hemos puesto antes.
00:06:12
Vamos a suponer que cualquiera de los programas que hemos hecho antes
00:06:14
de decirle al usuario que introduzca un número
00:06:16
y luego vamos a asumir que el número es positivo
00:06:19
y si el número es positivo ahora ya hacemos lo que sea.
00:06:23
Bueno, pues ahora ya no vamos a asumir que el número es positivo.
00:06:26
Vamos a hacer el programa un poco más robusto
00:06:29
y vamos a asegurarnos de que el usuario mete un número positivo,
00:06:32
lo que es lo mismo.
00:06:36
Vamos a hacer un bucle que esté todo el rato leyendo un número
00:06:37
mientras ese número no sea válido.
00:06:42
¿Vale?
00:06:45
Entonces el primer paso ya lo hemos dado.
00:06:46
El primer paso es.
00:06:48
Le he denunciado.
00:06:50
Programa que lea un número que debe ser positivo
00:06:51
y a continuación con ese número, bla, bla.
00:06:54
Bueno, esa parte le he denunciado y he entendido y ya la hemos hecho.
00:06:57
Ahora, la siguiente parte.
00:07:00
Vamos a ver, ¿cómo voy construyendo yo esto?
00:07:02
Pues programa que lea un número hasta que sea positivo
00:07:05
y cuando sea positivo hagamos lo que haya que hacer.
00:07:13
Bueno, pues entonces ahí automáticamente ya decimos,
00:07:16
vale, entonces el programa va a tener que leer el número
00:07:18
a lo mejor más de una vez, a lo mejor tiene que leer una
00:07:21
o dos o tres o cuatro.
00:07:24
Entonces ahí ya, vale.
00:07:26
Ahí ya vemos que nos va a hacer falta un bucle
00:07:27
porque va a hacer falta que un conjunto de sentencias
00:07:30
se haga una vez o dos o tres, no lo sé,
00:07:33
que se repitan, que se repitan.
00:07:36
No tenemos por qué saber a priori cuántas.
00:07:38
Lo normal es que no sepamos a priori cuántas.
00:07:39
Da igual, eso lo resolvemos con un bucle igualmente.
00:07:42
¿Vale?
00:07:45
Pero lo que tenemos que identificar es que hay un conjunto de sentencias
00:07:46
que puede que haga falta repetirlas.
00:07:48
¿Cuántas veces?
00:07:51
Ni idea.
00:07:52
O sea, habrá situaciones en las cuales a lo mejor el programa ya
00:07:54
sí me dice las veces que se va a repetir.
00:07:57
Por ejemplo, programa que lea cinco números
00:07:59
y con cada número haga no sé qué.
00:08:03
Pues yo ahí puedo decir,
00:08:05
ah, vale, lo voy a hacer con un bucle
00:08:06
pero como voy a hacer cinco lecturas,
00:08:08
pues un bucle que se haga cinco veces.
00:08:10
Bueno, pues en ese caso en particular
00:08:12
yo sé que mi bucle se va a hacer cinco veces.
00:08:14
Vale.
00:08:16
Pero no tiene por qué ser siempre así.
00:08:17
Normalmente cuando uno identifica
00:08:19
que hay un conjunto de sentencias
00:08:21
que se va a ejecutar un número de veces,
00:08:23
que se va a repetir,
00:08:25
a priori no tiene por qué saber cuántas.
00:08:26
Normalmente dependerá de los datos de entrada.
00:08:28
Entonces, cada ejecución puede conducir
00:08:31
a que una vez se repita siete,
00:08:33
otra ocho, otra veinticinco
00:08:34
y otra ninguna.
00:08:36
Vale.
00:08:38
Pues entonces,
00:08:39
en ese enunciado programa que lea un número
00:08:41
y cuando ya sea positivo,
00:08:43
pues se hace no sé qué.
00:08:45
Hemos hecho ya esa parte de darnos cuenta de que
00:08:47
vamos a necesitar un bucle
00:08:49
porque vamos a necesitar hacer varias veces leer un número.
00:08:50
Varias veces.
00:08:52
Vale.
00:08:54
Pues ya hemos identificado
00:08:55
que vamos a necesitar un bucle
00:08:56
porque vamos a hacer varias veces algo.
00:08:58
Vale.
00:09:05
Pues ¿cuál es la sintaxis de un bucle?
00:09:06
La sintaxis de esto.
00:09:07
La sintaxis de un bucle es muy sencilla.
00:09:08
Es la palabra Java reservada while
00:09:10
entre paréntesis esta condición de aquí,
00:09:14
entre paréntesis esta condición
00:09:18
y luego entre llaves estas sentencias.
00:09:21
Esta es la sintaxis del bucle.
00:09:35
La condición que mientras se acierta
00:09:38
se repiten las sentencias
00:09:41
y las sentencias de repetir.
00:09:43
Entonces esto así se lee más fácil
00:09:46
porque es mientras esta condición se cumple
00:09:48
hace esto.
00:09:50
Una vez que lo hemos hecho
00:09:51
la máquina virtual vuelve ya solita arriba
00:09:52
y vuelve a evaluar la condición.
00:09:54
¿Sigue siendo cierta?
00:09:56
Pues vuelvo a entrar
00:09:57
y la máquina virtual vuelve automáticamente arriba
00:09:58
y vuelve a evaluar.
00:10:01
¿Sigue siendo cierta?
00:10:02
Pues vuelvo a entrar
00:10:03
y la máquina virtual vuelve automáticamente arriba.
00:10:04
¿Es falsa ya?
00:10:07
Pues entonces ya no entro.
00:10:09
Y se acabó.
00:10:11
Se acabó y el programa continúa por abajo.
00:10:12
Se acabó.
00:10:14
Se habrá ido por ahí
00:10:15
y el programa continúa por abajo.
00:10:17
¿Vale?
00:10:18
Esta es la sintaxis básica del bucle
00:10:19
y cualquier cosa se puede hacer con esto.
00:10:23
Como con el if
00:10:25
hay variantes
00:10:26
que a lo mejor se adaptan
00:10:27
y lo dejan más claro
00:10:29
a situaciones concretas
00:10:30
pero no hacen ninguna falta.
00:10:32
Todo se puede programar con esto.
00:10:33
Igual que todo se puede programar con el if-else.
00:10:35
No hace falta el if-else-if ni el switch
00:10:38
pero hombre si en algunas situaciones
00:10:40
mi código va a quedar más claro
00:10:42
si selecciono el if-else-if o el switch
00:10:43
depende de lo que me pida.
00:10:45
Pues aquí igual.
00:10:47
Hay más variantes de bucle
00:10:48
pero con esta se podría hacer todo.
00:10:50
Bueno, lo importante es entender esa sintaxis.
00:10:52
Entonces no confundáis esto
00:10:54
con el if
00:10:56
que a veces lo confundís mucho
00:10:58
if-condición y sentencias.
00:11:00
¿Vale?
00:11:05
Ambas arrancan igual.
00:11:06
Aquí miramos condición
00:11:08
que se cumple agosto.
00:11:09
Aquí miramos condición
00:11:10
que se cumple agosto
00:11:12
pero aquí ya se acabó.
00:11:13
Aquí ya hemos terminado
00:11:14
y el programa continúa por aquí.
00:11:15
O como mucho
00:11:17
si ha sido que no
00:11:18
por el else.
00:11:20
Si es que ha sido que no por el else.
00:11:21
Pero si ha sido que sí
00:11:23
entra aquí y se acabó.
00:11:24
Y continúa.
00:11:26
Ya está.
00:11:27
Aquí nadie vuelve arriba.
00:11:28
Luego las sentencias que están aquí dentro
00:11:29
se ejecutan.
00:11:31
O cero o una.
00:11:32
Depende si la condición es cierta o no lo es.
00:11:33
Aquí entramos igual.
00:11:35
Evaluamos condición.
00:11:38
Se cumple, hacemos esto.
00:11:39
Pero no nos salimos.
00:11:40
Otra vez se vuelve a evaluar.
00:11:42
¿Que sigue siendo cierta?
00:11:45
Entramos.
00:11:46
Otra vez se vuelve a evaluar.
00:11:47
¿Que sigue siendo cierta?
00:11:49
Entramos.
00:11:50
Otra vez se vuelve.
00:11:51
¿Que es falsa?
00:11:52
Se acabó.
00:11:53
¿Vale?
00:11:54
Entonces ambas programas
00:11:55
situaciones distintas.
00:11:56
Bueno, pues entonces.
00:12:00
¿Vale?
00:12:12
Vale, pues entonces.
00:12:31
Hemos identificado que es un bucle
00:12:32
pero vamos a hacer varias veces algo.
00:12:33
Vale, pues si hemos identificado
00:12:35
que es un bucle
00:12:36
nuestra sintaxis era esta.
00:12:37
Ahora nos faltan dos lagunas
00:12:39
por rellenar.
00:12:41
Dos agujeros negros.
00:12:42
Nos falta ver esta condición
00:12:43
y las sentencias a repetir.
00:12:45
Hemos identificado que son
00:12:47
a repetir sentencias.
00:12:48
¿No?
00:12:49
Porque leer varias veces un número
00:12:50
mientras sea negativo.
00:12:51
Porque solamente va a ser válido
00:12:53
cuando nos introduzan el positivo.
00:12:55
Bueno, hemos identificado
00:12:57
que entonces varias veces algo.
00:12:58
Pues es esto lo que tengo que hacer.
00:12:59
Pero claro, aquí ya tengo dos lagunas
00:13:01
que tengo que ver.
00:13:03
¿Vale?
00:13:04
¿Y que meto ahí?
00:13:05
Para que el efecto sea
00:13:06
el que me han dicho.
00:13:07
Estar todo el rato
00:13:08
leyendo un número.
00:13:09
Si es negativo,
00:13:10
vuélvelo a leer.
00:13:11
Si es negativo,
00:13:12
vuélvelo a leer.
00:13:13
¿Que es positivo?
00:13:14
Se acabó.
00:13:15
Eso es lo que hay que reproducir aquí.
00:13:16
Eso es lo que hay que reproducir.
00:13:17
Vale.
00:13:19
Lo más fácil es que uno
00:13:20
se plantee de buenas a primeras
00:13:21
voy a poner primero
00:13:23
la sentencia que quiero repetir.
00:13:24
La que quiero repetir.
00:13:26
Y luego ya me planteo
00:13:27
la condición
00:13:29
en función de la cual
00:13:30
eso se repite otra vez más o no.
00:13:32
Y ya le queda
00:13:35
un primer boceto de su bucle.
00:13:36
Luego eso ya
00:13:38
una vez que tiene
00:13:39
el primer boceto
00:13:40
ya lo puede arreglar
00:13:41
para que el código
00:13:42
a lo mejor quede más bonito.
00:13:43
Sacar una variable dentro,
00:13:44
fuera.
00:13:45
Así ya son detalles
00:13:46
que más o menos
00:13:47
van puliendo
00:13:48
el aspecto del código
00:13:49
según uno va cogiendo práctica.
00:13:50
Pero el primer boceto del bucle
00:13:51
uno lo tiene que llegar a él.
00:13:53
¿Vale?
00:13:55
Y recordad que siempre
00:13:56
llegamos por aproximaciones.
00:13:57
Me planteo el problema.
00:13:59
Además todo en la vida.
00:14:00
No solo en programación.
00:14:02
Yo tengo una situación.
00:14:03
La tengo que dividir.
00:14:04
La tengo que dividir en objetivos.
00:14:06
En partes.
00:14:07
Vale.
00:14:08
Esto.
00:14:09
Esto tendré que resolverlo
00:14:10
de una manera.
00:14:11
Esto tendré que resolverlo
00:14:12
de otra.
00:14:13
No vamos resolviendo
00:14:14
en secuencia.
00:14:15
Primero hacemos una división.
00:14:16
En programación igual.
00:14:17
Yo divido
00:14:18
y por eso se usa
00:14:19
la programación
00:14:20
dentro de objetos.
00:14:21
Precisamente para reflejar
00:14:22
de forma más patente
00:14:23
que se programa así.
00:14:24
Se programa resolviendo
00:14:26
problemas independientes.
00:14:27
Asumiendo que unos
00:14:30
se apoyan en otros.
00:14:31
Y luego la combinación
00:14:32
de todos ellos
00:14:33
ya resolverá mi problema.
00:14:35
Pues aquí igual.
00:14:37
Yo voy aislando.
00:14:38
Primero tengo el problema general.
00:14:40
Un bucle.
00:14:41
Vale.
00:14:42
Un bucle.
00:14:43
Ahora voy aislando.
00:14:44
Voy acotando esto.
00:14:45
Vale.
00:14:46
Ya parece que lo tengo todo.
00:14:47
Ya tengo más o menos
00:14:48
el puzzle más o menos hecho.
00:14:49
Bueno.
00:14:50
Voy a poner las piezas
00:14:51
un poco más bonitas
00:14:52
pero ya tengo el puzzle hecho.
00:14:53
¿Vale?
00:14:54
No.
00:14:55
Repito por enésima vez.
00:14:56
Esto no es me siento
00:14:57
y me pongo a tirar líneas
00:14:58
de código tal cual
00:14:59
desde el principio
00:15:00
en secuencia papá.
00:15:01
No pensamos así.
00:15:02
Bueno.
00:15:03
Pues en este caso.
00:15:04
Lo más fácil es que uno diga
00:15:05
Lo que yo quiero hacer
00:15:07
varias veces es
00:15:08
pedirle un número
00:15:09
al tío
00:15:10
y leerlo.
00:15:11
Es lo que quiero hacer
00:15:12
varias veces.
00:15:13
Vale.
00:15:14
Pues podríamos poner
00:15:15
venga pues ya está.
00:15:16
Vamos a hacer varias veces
00:15:17
lo de
00:15:18
introduzca número.
00:15:19
Introduzca número.
00:15:29
Y leerlo.
00:15:31
Ese número tendrá que ir
00:15:32
si estamos hablando
00:15:33
de números enteros.
00:15:34
Por ejemplo.
00:15:35
Pues una variable entera.
00:15:36
Pues ya está.
00:15:39
Entonces esta variable entera.
00:15:45
Pues tendrá que estar
00:15:46
declarada en algún sitio.
00:15:47
De ámbito.
00:15:49
Aquí me falta todavía
00:15:50
por resolver esto.
00:15:51
¿Vale?
00:15:55
Entonces bueno.
00:15:57
Vamos a declararlo hacia arriba
00:15:58
para que esté declarada.
00:16:00
Tenemos un tema
00:16:02
en el que meternos.
00:16:03
Cuando esto ya esté
00:16:04
más o menos
00:16:05
más o menos dominado
00:16:06
tenemos un tema
00:16:07
en el que meternos
00:16:08
que es el ámbito
00:16:09
de las variables.
00:16:10
Que yo ahora mismo
00:16:11
estoy soslayando
00:16:12
porque es muy distinto
00:16:13
esta declaración
00:16:14
hacerla aquí directamente
00:16:15
o aquí dentro
00:16:16
que hacerla fuera.
00:16:19
Es muy distinto.
00:16:21
Tiene implicaciones distintas.
00:16:22
¿Vale?
00:16:24
Pero ahora mismo
00:16:26
lo estoy soslayando
00:16:27
para no complicar la
00:16:28
la idea.
00:16:29
Lo que sí que tenemos claro
00:16:31
es que una variable
00:16:32
si usarla
00:16:33
tiene que estar declarada.
00:16:34
Eso lo tenemos claro.
00:16:35
Pues venga.
00:16:36
La declaramos
00:16:37
fuera del while
00:16:38
o si fuera un if
00:16:39
la declaramos ahí fuera del if.
00:16:40
Ya la tenemos declaradita.
00:16:41
La puedo usar
00:16:42
siempre que quiera.
00:16:43
Entonces estupendo.
00:16:44
Este bucle
00:16:45
ya sabemos que está
00:16:46
todo el rato.
00:16:47
Pide número le.
00:16:48
Pide número le.
00:16:49
Pide número le.
00:16:50
Pero hombre.
00:16:51
Tendrá que haber
00:16:52
algún momento
00:16:53
en el que deje
00:16:54
de pedirle el número.
00:16:55
En este caso
00:16:56
¿cuál va a ser
00:16:57
la condición?
00:16:58
Que va a hacer
00:17:00
que yo vuelva
00:17:01
a pedirle otro número.
00:17:02
Era leer números
00:17:06
mientras me introduzca
00:17:07
números negativos.
00:17:08
¿Cuál va a ser
00:17:09
la condición?
00:17:10
El problema es
00:17:18
el usuario
00:17:19
le vamos a pedir un número.
00:17:20
Él nos puede meter
00:17:22
menos 3
00:17:23
8
00:17:24
10
00:17:25
pero nosotros
00:17:26
solo nos interesa positivo.
00:17:27
Entonces queremos
00:17:28
llegar a este punto
00:17:29
cuando salgamos del while
00:17:30
queremos llegar
00:17:33
a este punto
00:17:34
con la seguridad
00:17:35
de que n es positivo
00:17:36
porque es nuestra condición
00:17:38
para trabajar
00:17:39
a partir de aquí.
00:17:40
Por eso hemos puesto
00:17:41
el bucle ¿no?
00:17:42
Entonces
00:17:45
¿la condición cuál es?
00:17:46
La condición
00:17:48
que hace
00:17:49
que tú se lo vuelvas
00:17:50
a pedir
00:17:51
es que n sea negativo
00:17:52
porque si n es negativo
00:17:53
quieres volvérselo a pedir.
00:17:54
¿Vale?
00:17:56
Entonces la condición ya
00:17:57
la tenemos en este caso.
00:17:58
Mientras n sea
00:18:00
menor o igual que 0
00:18:01
asumiendo que eso
00:18:02
nos vale el mayor que 0.
00:18:03
Entonces ya tenemos
00:18:05
la condición.
00:18:06
La condición que hace
00:18:07
que yo vuelva a ejecutarlo
00:18:08
que vuelva a ejecutarlo
00:18:09
que vuelva a ejecutarlo
00:18:10
es que n sea
00:18:11
menor o igual que 0
00:18:12
en este ejemplo concreto
00:18:13
que estamos viendo.
00:18:14
¿Vale?
00:18:16
Pero siempre tiene que haber
00:18:17
aquí una condición
00:18:18
siempre tiene que haber
00:18:19
aquí una condición
00:18:20
que haga
00:18:21
que yo entre
00:18:22
y luego otra vez
00:18:24
volvemos a evaluar.
00:18:25
Que sigue siendo verdadera
00:18:26
vuelvo a entrar
00:18:27
y luego otra vez
00:18:28
se vuelve a evaluar.
00:18:29
Que sigue siendo verdadera
00:18:30
vuelvo a entrar.
00:18:31
¿Vale?
00:18:32
Entonces yo primero
00:18:33
acoto
00:18:34
que sentencias
00:18:35
quiero que se hagan
00:18:36
varias veces.
00:18:37
Y luego digo
00:18:38
¿Vale?
00:18:39
Pero esto
00:18:40
¿Qué condición
00:18:41
va a ser la que
00:18:42
hace que yo
00:18:43
quiera seguir repitiendo
00:18:44
quiera seguir repitiendo?
00:18:45
Pues eso depende
00:18:46
de mi enunciado.
00:18:47
De ahí la importancia
00:18:48
de que yo haya hecho antes
00:18:49
primero
00:18:50
una lectura
00:18:51
en la que he entendido
00:18:52
bien lo que se pide
00:18:53
y si no pido aclaraciones
00:18:54
y luego un primer
00:18:55
un primer análisis
00:18:56
de que puedo utilizar
00:18:57
esto ¿Vale?
00:18:58
Bueno pues en este caso
00:18:59
si al usuario
00:19:00
le vamos a estar
00:19:01
pidiendo números
00:19:02
mientras sea
00:19:03
menor o igual que cero
00:19:04
pues ya la condición
00:19:05
es casi de
00:19:06
traslación inmediata.
00:19:07
Pues mientras el número
00:19:08
sea menor o igual que cero
00:19:09
entras.
00:19:10
Entonces este programa
00:19:11
si ahora mismo
00:19:12
bueno si funcionara
00:19:13
con los arreglos
00:19:14
que le faltan
00:19:15
cuando termine
00:19:16
y continúe por aquí
00:19:17
ya sabemos
00:19:18
sí o sí
00:19:19
que N es positivo.
00:19:20
Es que no hay otra
00:19:21
porque si fuera negativo
00:19:22
habría vuelto a pedirlo
00:19:23
y si sigue insistiendo
00:19:24
en un negativo
00:19:25
pues no hay otra
00:19:26
porque si fuera negativo
00:19:27
y si sigue insistiendo
00:19:28
en un negativo
00:19:29
habría vuelto a pedirlo
00:19:30
y si sigue insistiendo
00:19:31
en un negativo
00:19:32
habría vuelto a pedirlo.
00:19:33
Entonces si esto
00:19:34
ha sido falso
00:19:35
o lo que es lo mismo
00:19:36
si ya no ha vuelto
00:19:37
a pedirlo
00:19:38
y N se ha quedado
00:19:39
entonces con el último
00:19:40
valor leído
00:19:41
si no ha vuelto a pedirlo
00:19:42
es porque es mayor que cero
00:19:43
es porque esto es falso.
00:19:44
¿No?
00:19:45
Cuando esto sea falso
00:19:46
es cuando ya pasamos
00:19:47
de entrar
00:19:48
y nos vamos aquí.
00:19:49
Cuando eso sea falso
00:19:50
pasamos de entrar.
00:19:51
Entonces cuando es falso
00:19:52
N menor o igual que cero
00:19:53
pues cuando N es mayor
00:19:54
que cero
00:19:55
es complementario.
00:19:56
Claro.
00:19:58
Bueno, pues cuando salimos
00:19:59
por aquí
00:20:00
ya sabemos
00:20:01
que N es positivo
00:20:02
seguro
00:20:03
que era lo que queríamos
00:20:04
nosotros en este ejemplo
00:20:05
concreto
00:20:06
asegurarnos
00:20:07
de que cuando
00:20:08
llegáramos aquí
00:20:09
llegábamos a un
00:20:10
número
00:20:11
mayor
00:20:12
que cero.
00:20:13
¿Vale?
00:20:14
¿Vale?
00:20:17
Entonces nosotros ahora
00:20:19
ya decimos
00:20:20
¡Ah, qué bien!
00:20:21
Más o menos ya tengo
00:20:22
mi bucle acotado
00:20:23
lo escribimos
00:20:24
y aquí
00:20:25
pues se nos pondría
00:20:27
algo en rojo
00:20:28
y nos daría un error
00:20:29
de compilación.
00:20:30
¿Vale?
00:20:32
Para esta situación concreta
00:20:33
de bucle que hemos hecho
00:20:34
en otro que hubiéramos
00:20:35
programado
00:20:36
pues a lo mejor
00:20:37
¡Vale!
00:20:38
Aquí a alguien
00:20:39
es una pregunta
00:20:40
un poco
00:20:41
sutil
00:20:42
pero bueno
00:20:43
¿a alguien se le ocurriría
00:20:44
por dónde podían ir
00:20:45
los tiros
00:20:46
de esa cosa roja
00:20:47
que me diría aquí
00:20:48
el compilador?
00:20:49
Me diría
00:20:50
¡Uy!
00:20:51
¿Esto que me estás
00:20:52
probando aquí?
00:20:53
Esto
00:20:54
no puedo tirar con ello
00:20:55
es un error
00:20:56
de compilación
00:20:57
no puedo tirar con ello
00:20:58
¿Por dónde pueden ir
00:20:59
los tiros?
00:21:00
¿A alguien se le ocurre?
00:21:01
El error se va a poner
00:21:05
aquí
00:21:06
esta línea se va a poner
00:21:07
rojita
00:21:08
Eso
00:21:10
¡Muy bien!
00:21:11
Claro
00:21:12
cuando una
00:21:13
cuando la máquina virtual
00:21:14
usa una variable
00:21:15
para
00:21:16
porque forma parte
00:21:17
de una expresión
00:21:18
me da igual
00:21:19
que sea una expresión
00:21:20
booleana
00:21:21
una expresión
00:21:22
tiene que tener valor
00:21:23
tiene que tener valor
00:21:24
la máquina virtual llega aquí
00:21:25
y te dice
00:21:26
¡Oye!
00:21:27
para mí es imposible
00:21:28
evaluar n menor
00:21:29
igual que 0
00:21:30
la primera vez que llego
00:21:31
es imposible
00:21:32
porque n está sin definir
00:21:33
entonces efectivamente
00:21:34
te dirá
00:21:35
la variable n
00:21:36
está sin inicializar
00:21:37
Vale
00:21:38
entonces nosotros ahora
00:21:39
pensamos
00:21:40
cómo podemos arreglar esto
00:21:41
Bueno
00:21:42
nuestro programa
00:21:43
tiene que funcionar
00:21:44
al menos entrando una vez
00:21:45
¿no?
00:21:46
porque el primer número
00:21:47
tiene que pedir
00:21:48
al menos entrando una vez
00:21:49
entonces la primera vez
00:21:50
queremos que sea true
00:21:51
sí o sí
00:21:52
¿verdad?
00:21:53
queremos que esto sea true
00:21:54
para que entre
00:21:55
y ya nos pida n
00:21:56
una vez que ya ha leído n
00:21:57
esa primera vez
00:21:58
que ha entrado
00:21:59
vuelve arriba
00:22:00
y ya evalúa
00:22:01
a condición
00:22:02
que ese n
00:22:03
que nos han dado
00:22:04
sigue siendo igual que 0
00:22:05
pues lo pide una segunda vez
00:22:06
que no
00:22:07
ya está
00:22:08
pero la primera vez
00:22:09
queremos que entre
00:22:10
porque la primera vez
00:22:11
tenemos que leer
00:22:12
el primer número
00:22:13
Bueno
00:22:14
pues entonces
00:22:15
¿qué arreglo
00:22:16
podríamos hacer aquí sencillo?
00:22:17
¿eh?
00:22:18
Claro
00:22:19
le doy un valor a n
00:22:20
que es lo que necesito
00:22:21
inicializarlo
00:22:22
y por ejemplo
00:22:24
¿qué valor le podría dar?
00:22:25
positivo no
00:22:30
no hombre
00:22:34
si le doy positivo
00:22:35
ya me sale directamente
00:22:36
y no me lo he leído en el primero
00:22:37
no, no, no
00:22:40
te sale si es
00:22:41
las condiciones no
00:22:42
le tengo que dar
00:22:43
uno negativo cualquiera
00:22:44
¿no?
00:22:45
uno negativo
00:22:46
un valor negativo cualquiera
00:22:47
me da igual
00:22:48
lo único que quiero
00:22:49
es que esta condición
00:22:50
sea fiel
00:22:51
a la primera vez que llevo
00:22:53
porque quiero entrar
00:22:55
una vez al bucle
00:22:56
o sea en otro ejemplo
00:22:57
otras situaciones
00:22:58
otros programas
00:22:59
a lo mejor
00:23:00
que reprograman cosas
00:23:01
completamente distintas
00:23:02
pues yo no quiero entrar
00:23:03
de partida una primera vez
00:23:04
si no depende
00:23:05
de n
00:23:06
es que hay millones
00:23:07
de situaciones distintas
00:23:08
que podemos querer programar
00:23:09
¿vale?
00:23:11
pero lo que tenemos
00:23:12
es que entender
00:23:13
lo que hacen estas cosas
00:23:14
entonces en esta situación
00:23:15
en concreto
00:23:16
yo una primera vez
00:23:17
quiero entrar
00:23:18
para leer el primer número
00:23:19
una primera vez
00:23:20
¿vale?
00:23:21
pues si quiero entrar
00:23:22
una primera vez
00:23:23
con inicializar n
00:23:24
a una variable
00:23:25
a un valor
00:23:26
que haga esto
00:23:27
verdadero
00:23:28
que haga esto verdadero
00:23:29
y el menos uno lo hace
00:23:30
y el menos siete
00:23:31
y el menos doce
00:23:32
y el cero
00:23:33
también lo haría
00:23:34
porque es menor
00:23:35
o igual que cero
00:23:36
pues entonces ya
00:23:38
entro
00:23:39
leo la variable n
00:23:40
y volvemos a evaluar
00:23:43
¿que sigue siendo
00:23:45
menor o igual que cero?
00:23:46
la pido otra vez
00:23:47
y volvemos a evaluar
00:23:48
¿que ahora ya es
00:23:50
mayor que cero?
00:23:51
se acabó
00:23:52
no entro más
00:23:53
y me voy por aquí
00:23:54
¿vale?
00:23:55
luego esos en abstracto
00:23:58
serían los pasos
00:23:59
primero
00:24:00
después de analizar
00:24:01
y muy bien
00:24:02
la situación en la que estoy
00:24:03
he enunciado
00:24:04
entenderlo
00:24:05
pedir aclaraciones
00:24:06
no he entendido
00:24:07
lo que sea
00:24:08
identificar
00:24:09
primero
00:24:10
claro
00:24:11
bueno en esa parte
00:24:12
de análisis
00:24:13
como que ya lo va
00:24:14
dividiendo mentalmente
00:24:15
en partes
00:24:16
vale mi programa
00:24:17
luego va a trabajar
00:24:18
con estos datos
00:24:19
para hacer no sé que
00:24:20
ya mentalmente va
00:24:21
dividiéndolo en partes
00:24:22
mentalmente y en el papel
00:24:23
con un lápiz
00:24:24
bueno
00:24:25
pues en esta primera parte
00:24:26
que en este problema
00:24:27
habríamos distinguido
00:24:28
la de leer los datos
00:24:29
en esa primera parte
00:24:30
decimos
00:24:31
vale
00:24:32
leer los datos
00:24:33
varias veces
00:24:34
mientras no cumplan
00:24:35
la condición
00:24:36
de ser válidos
00:24:37
ahí ya
00:24:38
a un bucle
00:24:39
bueno
00:24:40
pues eso es lo primero
00:24:41
ya hemos identificado
00:24:42
en esa parte
00:24:43
que estamos resolviendo
00:24:44
que puede ser una parte
00:24:45
de las muchas
00:24:46
en esa parte
00:24:47
hemos identificado
00:24:48
un bucle
00:24:49
vale pues ya está
00:24:50
pues ahora ya
00:24:51
plantamos ese bucle
00:24:52
y lo vamos
00:24:53
lo vamos terminando
00:24:54
de perfilar
00:24:55
y aquí en este caso
00:24:56
son dos cosas
00:24:57
que quiero que se haga
00:24:58
varias veces
00:24:59
y cuál es la condición
00:25:00
que mientras se cumpla
00:25:01
yo querré que eso
00:25:02
se repita
00:25:03
entonces yo analizo esto
00:25:04
y digo
00:25:05
ah vale
00:25:06
esta es mi situación
00:25:07
y a partir de ahí
00:25:08
ya
00:25:09
refino
00:25:10
si es que
00:25:11
me faltan cosas
00:25:12
aquí
00:25:13
aquí
00:25:14
aquí
00:25:15
aquí
00:25:16
me faltan cosas
00:25:17
aquí por ejemplo
00:25:18
que nos faltaba
00:25:19
ah claro
00:25:20
es que en esta es inicializar
00:25:21
que valor le doy
00:25:22
bueno en este caso
00:25:23
en particular
00:25:24
yo quiero que entre una vez
00:25:25
pues le doy cero
00:25:26
en otro caso
00:25:27
es que dependerá
00:25:28
dependerá
00:25:29
de lo que esté resolviendo
00:25:30
entonces ya obtengo
00:25:31
mi primera versión
00:25:32
de código
00:25:33
he hecho un vistazo
00:25:34
si esto tiene pinta
00:25:35
de que bueno
00:25:36
está bien
00:25:37
y me pongo a tirar
00:25:38
pruebas
00:25:39
en este caso
00:25:40
y tuviera el resto
00:25:41
me pongo a tirar
00:25:42
todas las pruebas
00:25:43
que hagan falta
00:25:44
hago pruebas
00:25:45
poniéndole datos
00:25:46
de entrada
00:25:47
que cubran
00:25:48
muchas combinaciones
00:25:49
en este caso
00:25:50
pues con darlo
00:25:51
negativo
00:25:52
cero
00:25:53
y positivo
00:25:54
que en caso
00:25:55
de números
00:25:56
son las situaciones
00:25:57
más
00:25:58
que más o menos
00:25:59
agrupan
00:26:00
todas las posibilidades
00:26:01
pues bueno
00:26:02
podría irme por satisfecha
00:26:03
porque he hecho
00:26:04
todas las pruebas
00:26:05
posibles
00:26:06
habrá casos
00:26:07
en los cuales
00:26:08
las entradas
00:26:09
tengan
00:26:10
se puedan agrupar
00:26:11
un mayor número
00:26:12
de tipos
00:26:13
una entrada
00:26:14
de cada uno
00:26:15
de esos tipos
00:26:16
posibles
00:26:17
vale
00:26:18
no escatimeis
00:26:19
y seáis
00:26:20
tacaños
00:26:21
haciendo pruebas
00:26:22
porque llegáis
00:26:23
a conclusiones
00:26:24
de que algo funciona
00:26:25
y son errores
00:26:26
esas condiciones
00:26:27
vale
00:26:28
pues esto
00:26:29
esta es la sentencia
00:26:30
del bucle guay
00:26:31
otras versiones
00:26:32
del bucle
00:26:33
según vaya surgiendo
00:26:34
el ejercicio
00:26:35
las incorporamos
00:26:36
a lo que nos interesa
00:26:37
es entender
00:26:38
esto
00:26:39
y saberlo
00:26:40
y saberlo aplicar
00:26:41
vale
00:26:42
muchas gracias
00:26:43
muchas gracias
00:26:44
- Subido por:
- Raquel G.
- Licencia:
- Todos los derechos reservados
- Visualizaciones:
- 5
- Fecha:
- 20 de octubre de 2023 - 14:24
- Visibilidad:
- Público
- Centro:
- IES ROSA CHACEL
- Duración:
- 27′ 06″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1280x720 píxeles
- Tamaño:
- 517.08 MBytes