Activa JavaScript para disfrutar de los vídeos de la Mediateca.
Clase 10-10-23 - 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:
Vale, pues entonces, uno le está enunciado, como siempre, y primero se asegura que lo entiende.
00:00:01
Entonces, todo el mundo sabe lo que es un número primo, ¿verdad?
00:00:11
Un número primo es un número que solo es divisible por sí mismo y la unidad.
00:00:15
Eso está claro, ¿no?
00:00:20
Bueno, pues entonces, el programa, dado un número, tiene que saber si es primo o no.
00:00:23
entonces, si quitamos
00:00:28
la restricción de que tenga que ser menor de 10
00:00:30
la hemos liado
00:00:32
porque entonces uno ahora ya que ha entendido
00:00:34
lo que es un número primo
00:00:36
y se pone a pensar cómo hacerlo
00:00:37
pues entonces
00:00:39
empieza a pensar, vale
00:00:41
para ver si el número es primo tengo que
00:00:43
dividir, si el número es n
00:00:45
tengo que dividirlo entre n-1
00:00:47
y luego entre n-2
00:00:49
y entre n-3, entre n-4
00:00:51
hasta que llegue a 2
00:00:53
y si ninguna de las divisiones
00:00:54
Eso es lo que habría que plantearse como hacerlo, ¿verdad?
00:00:57
Pero claro, el problema es que si la cantidad de divisiones que hay que hacer cambia.
00:01:02
Si el número es 32, habrá que hacer 30 divisiones, desde 31 hasta 1.
00:01:06
Si el número es 100, habrá que hacer 98 divisiones, desde 99 hasta 2.
00:01:11
Entonces, hay que hacer un conjunto de sentencias un número variable de veces,
00:01:18
que a priori no sabemos, pues eso precisamente son bucles.
00:01:23
un conjunto de sentencias que se hacen varias veces
00:01:25
eso es un bucle
00:01:28
como no sabemos hacer un bucle, no podemos hacer este programa
00:01:29
si quitamos la restricción de que sea menor de 10
00:01:32
no podemos hacerlo todavía
00:01:34
por eso está añadida la restricción de que sea menor de 10
00:01:35
entonces con esa restricción ya podemos pensar
00:01:38
¿cómo puedo yo saber si un número
00:01:40
que sé que el usuario
00:01:42
lo va a hacer bien
00:01:45
y va a meterlo a menor de 10 partiendo de esa restricción
00:01:46
es primo?
00:01:48
bueno, pues es que lo tenemos muy fácil
00:01:50
¿cuáles son los números primos menores de 10?
00:01:52
Pues el 2, el 3, el 5 y el 7
00:01:54
¿No? Pues ya está
00:01:58
Si el número es uno de esos es primo
00:02:00
Y se acabó
00:02:02
Entonces
00:02:03
Ahora se trata de poner la condición
00:02:05
Y ya, bueno, leemos el numerito
00:02:08
Leemos el número
00:02:10
Vale, pues venga
00:02:27
A ver, Adrián
00:02:39
Digo Adrián, joder con Adrián
00:02:39
Andrés
00:02:41
¿Cómo pongo la condición?
00:02:42
¿Para qué pones esa condición?
00:02:45
Pero si n es menor que 10, entonces aquí ¿qué hago?
00:03:02
Esta condición que pongo
00:03:07
Yo he puesto
00:03:09
Tú has puesto
00:03:11
n es igual a 2
00:03:11
Para que sea el primo
00:03:14
Luego n es igual a 3
00:03:17
¿Cómo luego n?
00:03:18
¿Qué más? Dígame
00:03:21
Luego las dos estas de o
00:03:21
Eso sí
00:03:23
n es igual a 3
00:03:24
Bueno, para que no se alargue tanto, voy a quitar los...
00:03:26
Bueno, no lo voy a quitar, que es que así tan apiñado esto no se debe hacer nunca.
00:03:45
Vale, pues ya está.
00:03:53
Vale, y un else si uno quiere.
00:04:06
Vale.
00:04:24
Bueno, está claro lo que hemos hecho aquí, ¿no?
00:04:25
Entonces, primera cosa.
00:04:27
Como veis, esta es la primera vez que yo he hecho un if que no tiene else asociado.
00:04:29
O sea, este if tiene dentro una única sentencia.
00:04:35
Que es esta, porque esto es una única sentencia.
00:04:39
Es una sentencia compleja porque es una sentencia if, pero es una sola
00:04:41
Entonces, como es una sola
00:04:44
Yo puedo aquí no poner llaves
00:04:46
Si las pongo no pasa nada
00:04:48
No sobran
00:04:50
Las puedo poner y no pasa nada
00:04:51
Pero puedo no ponerlas
00:04:53
¿Vale? Podría no ponerlas porque
00:04:56
Lo que hay dentro es una única sentencia
00:04:58
Sentencia compleja
00:05:00
Sentencia if, pero es una única sentencia
00:05:02
¿Vale?
00:05:04
Igual que aquí, dentro de a su vez el if anidado
00:05:06
Tampoco he puesto llaves
00:05:08
Porque lo que tiene dentro es una única sentencia
00:05:09
¿Vale? Solo una
00:05:11
Primera cosa
00:05:13
Segunda cosa
00:05:14
Ayer todos los if que poníamos tenían un else
00:05:15
¿Vale? Pues el else no es obligatorio
00:05:20
Yo no hace falta que especifique
00:05:23
¿Qué hago en el caso de que la condición no se cumpla?
00:05:27
A lo mejor en el caso de que la condición no se cumpla
00:05:31
Yo no quiero hacer nada
00:05:33
En ese caso
00:05:34
No hace falta que lo deje así en blanco
00:05:36
Simplemente no pongo el ELSI y se acabó
00:05:39
¿Vale?
00:05:42
Podría dejarlo así
00:05:45
Y esto sería idéntico a haber puesto esto
00:05:46
Uy, perdona, esto no
00:05:48
Idéntico a haber puesto esto
00:05:49
Idéntico
00:05:54
¿Vale?
00:05:55
Eso es como si
00:05:56
¿Vale? En mi diagrama de flujo
00:05:58
En mi diagrama de flujo famoso
00:06:04
Esta es mi condición
00:06:06
Pues la rama del SI
00:06:09
La rama del SI hace lo que tenga que hacer
00:06:10
Y la rama del no, no hace nada
00:06:20
Pero la rama del no existe
00:06:23
Y luego esto se junta por aquí abajo
00:06:24
Y el programa continúa, así
00:06:27
¿Vale? Viene por aquí
00:06:28
Esto es un if sin else
00:06:30
Un if sin else
00:06:33
Que la condición que hay aquí se cumple
00:06:35
Pues hago esto
00:06:37
Que no se cumple, no hago nada
00:06:39
Y esta estructura se puede poner
00:06:40
¿Vale?
00:06:43
Y entonces, si estamos en esa situación
00:06:44
Un if que en la rama del no
00:06:46
No se hace nada
00:06:49
Eso se programa
00:06:49
No poniéndole ese directamente
00:06:52
No poniéndolo
00:06:55
¿Vale? En lugar de ponerlo con llaves vacías
00:06:55
No ponerlo
00:06:59
Pero si lo pongo y no quiero hacer nada
00:07:00
Con llaves vacías, por supuesto
00:07:03
Porque si no pongo las llaves
00:07:04
Y luego mi programa sigue por aquí
00:07:05
Haciendo cualquier cosa
00:07:07
Por ejemplo, adiós o lo que sea
00:07:08
Cuidado, obviamente
00:07:10
Si yo no la pongo, las llaves vacías
00:07:22
Ya sabéis lo que significa eso
00:07:24
Significa que como este él se no tiene llave
00:07:25
La única sentencia que va dentro
00:07:27
Es la que va inmediatamente después
00:07:30
Y ya a partir de ahí
00:07:31
Iría el resto del programa
00:07:33
Entonces esto es
00:07:35
En la rama del no
00:07:37
Hace esto
00:07:39
No, no quiero eso
00:07:40
Quiero una rama del no vacía
00:07:42
Pues si quiero una rama del no vacía
00:07:44
Así sí, así sí es una rama del no vacía
00:07:45
Y luego ya el programa continúa por ahí abajo
00:07:49
¿Vale?
00:07:51
Pero repito
00:07:52
si en la rama del no coincide
00:07:53
que no quiero yo hacer nada
00:07:56
que no quiero hacer nada, mi if es este
00:07:57
pues entonces
00:07:59
puedo no ponerle el se
00:08:01
y me queda más compacto
00:08:03
¿vale?
00:08:06
el if hay que ponerlo siempre
00:08:08
la rama del si hay que ponerla
00:08:10
siempre, o sea si yo tengo
00:08:12
un if
00:08:14
yo tengo mi diagrama de flujo
00:08:14
y resulta que mi
00:08:19
lo que yo estoy programando ahora es esto
00:08:20
que la condición se cumple
00:08:26
pues entonces en ese caso
00:08:28
en el caso de que se cumpla no hagas nada
00:08:30
y terminas
00:08:32
que la condición no se cumple
00:08:33
pues en ese caso sí
00:08:35
haz algo, lo que sea
00:08:37
y luego ya terminas
00:08:38
que yo he hecho un diagrama de flujo
00:08:41
y he llegado a este punto
00:08:44
una condición, la que sea
00:08:45
si se cumple no hago nada
00:08:47
y si no se cumple lo hago
00:08:49
Pues programar esto
00:08:51
Si que me obliga a hacer el if
00:08:53
Si yo quisiera programar esto
00:08:54
Como el if no lo puedo eliminar
00:08:56
Tendría que programarlo así
00:08:57
En el caso de que la condición se cumpla
00:08:59
Poniendo aquí la condición
00:09:02
Que fuera
00:09:04
Pues vacío
00:09:05
Esto si que lo tengo que poner si o si
00:09:07
Y en el caso de que no se cumpla
00:09:09
Pues ahora ya si que pondría lo que hay aquí debajo
00:09:11
Lo que hay aquí
00:09:14
Ya si que lo pondría
00:09:14
Si lo que yo quiero programar es esto
00:09:16
Es este if
00:09:21
Que la rama del sí es la vacía
00:09:22
Y la del no es la que tiene algo
00:09:24
Pues tengo que hacerlo así
00:09:26
El if se queda vacío
00:09:27
Y en el else lleva algo
00:09:29
¿Vale?
00:09:30
Lo que pasa es que esto es feo
00:09:33
Programar esto así, uno te diría
00:09:35
Oye, cámbialo, pon la condición al revés
00:09:37
Pon la condición al revés
00:09:40
Pon la negada, justo la negada
00:09:42
Y así la rama del sí es la que tiene algo dentro
00:09:44
Y te quitas el else
00:09:47
¿No?
00:09:48
O sea, encontrarse esto es muy feo
00:09:48
Hace lo que tiene que hacer
00:09:51
Si la condición se cumple, no hace nada
00:09:53
Y si no se cumple, hace esto, ¿verdad?
00:09:55
Hace lo que tiene que hacer, que es esto de aquí
00:09:58
Es esta idea, si se cumple, hace esto
00:09:59
Y si no, hace esto
00:10:01
Pero hombre, el programa queda muy feo
00:10:02
Pues entonces, aquí tendría mucho más sentido
00:10:04
Obviamente, transformar el código
00:10:06
Transformarlo
00:10:09
Poner la negada de la condición
00:10:10
Poner la negada
00:10:13
Y meter entonces ahora ya
00:10:14
esta sentencia aquí dentro
00:10:16
y ya pasar del else
00:10:18
ahora ya sí
00:10:20
si no se cumple esta condición
00:10:21
si no se cumple, haz esto
00:10:24
y esto es una forma más compacta
00:10:26
obviamente, de expresar esta idea
00:10:28
de aquí abajo
00:10:30
si no se cumple esto, haz esto de aquí
00:10:31
si no se cumple
00:10:34
mucho mejor que hacer si se cumple
00:10:35
vacío y si no se cumple esto
00:10:38
mucho mejor negarla
00:10:40
si no se cumple, ¿vale?
00:10:41
o sea, recordad este operador
00:10:44
booleano, que ya hemos estudiado
00:10:46
booleano
00:10:48
que significa
00:10:49
el negado de la condición que hay después
00:10:51
el negado, entonces si yo la niego
00:10:54
pues en la rama del sí haré
00:10:56
lo que haría en la rama del no
00:11:00
si tuviera la condición sin negar
00:11:02
¿vale?
00:11:04
entonces de nuevo, un mismo código se puede programar de muchas maneras
00:11:06
pero bueno, la idea es que quede lo más bonito posible
00:11:09
¿vale?
00:11:11
luego eso por un lado
00:11:14
Voy a ponerlo aquí
00:11:16
El else es opcional
00:11:17
Si no se hace nada
00:11:20
En esa rama
00:11:24
Vale, eso primera cosa
00:11:28
Segunda cosa
00:11:29
If anidados
00:11:31
Él ha querido además
00:11:33
Hacer solo esta operación
00:11:36
Si n es menor que 10
00:11:38
Porque si n es mayor que 10
00:11:39
Pues no tiene sentido hacerla
00:11:40
Vale, bueno, vale, pues no pasa nada
00:11:42
Eso ha implicado hacer un if anidado
00:11:43
¿verdad? primero verificamos
00:11:46
que el número que hemos introducido es menor que 10
00:11:48
primero lo verificamos
00:11:50
y cuando ya hemos verificado que sí, que cumple la condición
00:11:51
que nosotros necesitamos para que el programa tenga sentido
00:11:54
para que tenga sentido
00:11:57
entonces ya comprobamos a ver si es uno de esos
00:11:58
¿vale? pues para programar
00:12:00
esa idea he usado if anidados
00:12:02
¿vale?
00:12:04
los if anidados
00:12:07
en la mayoría de los casos
00:12:09
también son feos, esto hace lo que
00:12:10
tiene que hacer, está claro, pero son feos
00:12:12
¿Cómo desanidaríais este if?
00:12:14
¿Cómo podríais cambiar el código?
00:12:17
Cambiarlo para que hiciera lo mismo
00:12:20
Pero solo tuviera un if
00:12:21
¿Cómo lo podríais cambiar?
00:12:23
Para que no tuviera dos if anidados
00:12:29
Venga, que alguien me diga algo
00:12:31
Es decir, cambiar este código
00:12:41
Para que haga lo mismo
00:12:44
Pero no tenga
00:12:45
Un if
00:12:47
sí, lo que quieres decir es
00:13:03
vamos a meter
00:13:07
esta condición y esta
00:13:08
en la misma condición
00:13:10
este código lo que hace es
00:13:12
si n es menor que 10
00:13:14
y además de ser menor que 10
00:13:16
una vez que se ha metido en el if
00:13:18
cumple esto, entonces es primo
00:13:19
pues eso lo puede expresar como una única condición
00:13:22
¿verdad?
00:13:25
si n es menor que 10 y
00:13:26
n es igual a 2 o n es igual a 3
00:13:28
Pues entonces es primo
00:13:30
Lo podría meter en una condición, ¿verdad?
00:13:31
Por ejemplo, vamos a ponerlo aquí
00:13:35
100 es menor que 10
00:13:36
Y además de ser menor que 10
00:13:50
Uy, perdón
00:13:53
Y además de ser menor que 10
00:13:58
Resulta que cumple todo esto
00:14:00
¿Vale?
00:14:02
Aquí para evitar ambigüedad
00:14:14
Sí que tiene sentido ya poner el paréntesis
00:14:16
Porque aquí estamos haciendo el AND de dos cosas
00:14:18
De esta condición
00:14:20
Y de esta otra
00:14:22
De las dos en conjunto
00:14:23
Si no ponemos el paréntesis
00:14:26
Si no lo ponemos
00:14:28
Esto haría primero este AND
00:14:30
Y luego haría este OR
00:14:32
Este OR, este OR
00:14:34
¿Vale? Entonces para evitar ambigüedad
00:14:35
Es el AND lógico de
00:14:37
Esta condición y esta condición
00:14:40
Si se cumplen
00:14:43
Simultáneamente ambas
00:14:45
Entonces ahora ya podemos poner
00:14:46
Primo
00:14:48
Es que no quiero que evalúe el resto
00:14:50
A ver, siempre, a ver
00:15:18
Es que lo de dos barras y una
00:15:20
Yo no sé si os da un poco de confusión
00:15:21
Vamos a ver, no quiero
00:15:24
Dos barras
00:15:25
Dos barras o una barra
00:15:28
Tú en cualquier caso vas a hacer el or
00:15:29
De las dos cláusulas que haya
00:15:32
Siempre
00:15:34
Y el resultado final va a ser siempre el mismo
00:15:35
Da igual que haya una barra o dos, va a ser siempre el mismo
00:15:37
Pero ¿cuál es la diferencia?
00:15:39
Si tú pones dos barras
00:15:42
O sea, a ver
00:15:43
Tú imagínate que tienes el or de dos condiciones
00:15:45
¿Vale?
00:15:48
Tienes el or de dos condiciones
00:15:50
Por ejemplo, aquí
00:15:51
Vamos a ver
00:15:53
Si lo terminamos de entender claro
00:15:54
Imagínate que tenemos aquí una condición
00:15:58
Sí, pero vamos a dejarlo más claro para que sea parte
00:15:59
No, boolean b igual
00:16:04
n igual a 7
00:16:07
O
00:16:09
n igual a 5, por ejemplo
00:16:11
Y aquí vamos a leer el numerito
00:16:16
n igual a
00:16:18
scan.next.in
00:16:20
vale
00:16:25
vamos a hacer
00:16:26
los dos booleanos
00:16:31
con una barra y con dos barras
00:16:34
b1 y b2
00:16:36
vale, estas son
00:16:37
mis dos alternativas, ¿no?
00:16:39
poner una barra o poner las dos
00:16:42
vale, pues tanto el booleano
00:16:43
1 como el booleano 2
00:16:46
tanto el booleano, van a hacer el or
00:16:48
de las dos, entonces el booleano
00:16:50
b1 va a ser true
00:16:52
Si es igual a 7 o si es igual a 5
00:16:54
Y el booleano 2 igual
00:16:57
Ahí no hay ningún cambio
00:16:59
Va a ser true si n es igual a 7
00:17:01
O si n es igual a 5
00:17:03
Sobre eso no hay ningún cambio
00:17:05
Ahora entramos ya en cuanto a la definición del or
00:17:06
Ahora entramos ya en modo ejecución
00:17:09
Ahora ya vamos a un caso real
00:17:11
Vamos a un caso real
00:17:13
Y ahora ya tenemos un número real
00:17:15
n, 7 por ejemplo
00:17:17
Vale, pues entonces la máquina virtual
00:17:19
Coge el 7 y se pone a evaluar
00:17:21
n igual a 7, sí
00:17:23
ah, pues entonces me da igual
00:17:25
lo que ocurra después
00:17:27
porque el or con que uno solo
00:17:29
se atruya es true
00:17:31
entonces le da igual lo que ocurra después
00:17:32
no lo evalúa
00:17:36
no lo evalúa porque ya sabe que el resultado final es true
00:17:37
cuando pones las dos barras
00:17:39
¿vale? ¿qué haría el boolean b2?
00:17:41
coge el numerito
00:17:44
n igual a 7, sí
00:17:45
ya sé que el resultado es true, pero como me han puesto una barra
00:17:46
me obligan a evaluar la segunda
00:17:49
me obligan a evaluarla, venga pues la evalúo
00:17:51
¿no igual a 5? no
00:17:53
entonces la diferencia entre una barra y dos
00:17:54
es en tiempo de ejecución
00:17:58
habrá ejecuciones
00:18:00
en las cuales
00:18:01
aplique la diferencia de ejecuciones en las que no
00:18:02
entonces siempre es mucho más interesante
00:18:06
la doble barra que la primera
00:18:08
porque en las ejecuciones
00:18:09
en las cuales cuando tú has evaluado la primera
00:18:12
ya tienes el resultado final
00:18:14
¿para qué vas a seguir evaluando y perdiendo tiempo?
00:18:16
entonces siempre por defecto
00:18:18
se usan dos
00:18:20
Siempre, ¿no?
00:18:20
Partimos de la base de que estos dos booleanos
00:18:23
Da igual el valor de n
00:18:25
Da igual, b1 y b2
00:18:27
Siempre va a tener el mismo valor
00:18:29
Siempre, porque es un or
00:18:30
Y el or funciona siempre igual
00:18:32
El tema es la máquina virtual
00:18:33
Cómo lo ejecuta
00:18:35
Qué hace, qué pasos da para obtener el resultado
00:18:37
Qué pasos da, es la única diferencia
00:18:40
Cuando hay el doble or, los pasos que da es
00:18:41
Coge la primera
00:18:44
True o false
00:18:45
True, anda, lo que tengo después es un or
00:18:47
pues entonces es que me da igual lo que vaya después
00:18:50
sé que va a ser un true el final
00:18:52
sé que va a ser un true, porque true or con
00:18:54
false es true y true or con true es true
00:18:56
entonces dice, ¿qué más me da?
00:18:58
si sé que el resultado final es true, paso de la
00:19:00
segunda, vale
00:19:02
cuando se encuentra solo una barra
00:19:04
evalúa la primera, es true
00:19:06
está claro, entonces
00:19:08
siempre interesa la doble barra
00:19:10
porque así te
00:19:12
evitas que la máquina virtual haga un
00:19:14
trabajo que no lo necesita
00:19:16
¿Eso está claro?
00:19:17
Vale, pues entonces
00:19:21
¿Por qué existen dos?
00:19:23
Porque si siempre el resultado del booleano
00:19:25
Siempre es el mismo
00:19:27
Eso está claro, siempre es el mismo
00:19:28
Porque es el or de este y este
00:19:30
Cuando n sea 5, tanto este como este dan true
00:19:32
Cuando n sea 4, tanto este como este dan false
00:19:35
Cuando n sea menos 5
00:19:38
Tanto este como este dan false
00:19:39
Cuando n sea 7
00:19:41
Tanto este como este dan true
00:19:43
O sea, los dos booleanos siempre van a tener un valor, siempre, sea cual sea el valor de n, siempre.
00:19:44
Pues entonces, ¿qué sentido, qué interés tiene que haya dos formas de expresarla?
00:19:50
Pues lo que hemos explicado, el funcionamiento de la máquina virtual, entonces es,
00:19:57
cuando hay dos barras, evalúa esta, que eso ya ha sido suficiente para el resultado final,
00:20:01
pasa de lo que hay a continuación.
00:20:08
Estupendo.
00:20:11
Cuando hay una única barra
00:20:11
Evalúa este
00:20:13
Que el resultado ya ha sido suficiente
00:20:15
No pasa, lo evalúa
00:20:17
En este ejemplo no vale para nada
00:20:19
Pero imagínate que tenemos
00:20:21
Expresiones en las cuales
00:20:23
Además de hacer una condición
00:20:25
Hacemos cosas
00:20:28
Que son los ejemplos que poníamos
00:20:29
Como por ejemplo este
00:20:30
El más fácil de entender
00:20:31
Claro, aquí
00:20:32
Para evaluar esta condición
00:20:35
Luego además después le estás dando la orden de incrementar
00:20:37
Entonces, aquí sí que hay una diferencia enorme
00:20:40
Entre estas dos sentencias
00:20:43
Aquí sí
00:20:45
Porque aquí, cuando tú le metas 7
00:20:47
El boolean B1 va a ser true
00:20:50
Está claro, ya el boolean B2 también
00:20:52
Eso no cambia
00:20:53
El resultado final va a ser true
00:20:54
Pero la diferencia es que pasa con las variables que hay aquí dentro
00:20:56
Cuando tú le des 7
00:20:59
Como esto es true
00:21:01
Esto ya no lo hace
00:21:02
Porque B1 ya es true
00:21:04
Y al no hacerlo, N no se queda incrementado
00:21:05
pero cuando le damos esta
00:21:08
y en el 7, esto lo hace
00:21:11
B2 ya es true
00:21:13
igual que era B1
00:21:14
pero le obligamos a que entre aquí también
00:21:16
le obligamos
00:21:19
y al entrar, entonces ya sí que deja en incrementado
00:21:20
entonces la diferencia entre por 2 barras y 1
00:21:23
es cuando en las secuencias
00:21:25
que tenemos después
00:21:27
además de tener la expresión de la condición
00:21:28
el igual, el distinto, además hacemos algo
00:21:31
con las variables
00:21:33
como asignarlas, incrementarlas
00:21:34
Porque eso se va a hacer o no se va a hacer
00:21:36
En algunos casos
00:21:38
Por ejemplo, cuando le damos n igual a 3
00:21:39
Cuando le damos n igual a 3
00:21:42
En esa ejecución concreta de n igual a 3
00:21:43
Estas sí que hacen lo mismo
00:21:46
Porque como esta es falsa
00:21:47
n igual a 3, la doble barra se ve obligada a entrar
00:21:50
Porque esta es falsa
00:21:53
Entonces se ve obligada a entrar y entonces ya lo incrementa
00:21:54
Y cuando n es igual a 3
00:21:56
Evalúa las dos obligatoriamente
00:21:58
Y esta ya lo incrementa
00:22:00
Entonces en las ejecuciones en las que le pasemos n igual a 3
00:22:01
Esto y esto hacen lo mismo
00:22:05
Pero en las ejecuciones en las que le pasemos
00:22:06
N igual a 7
00:22:09
Esta y esta actúan de forma distinta
00:22:10
Porque esta entra aquí y esta no
00:22:12
¿Vale?
00:22:14
Entonces siempre por defecto doble barra
00:22:16
Porque le ahorramos trabajo a la máquina virtual
00:22:18
Salvo que tengamos una condición
00:22:20
Que está después en la que además
00:22:22
De tener la condición hacemos algo
00:22:25
En ese caso sí ponemos una barra
00:22:26
Pero son casos muy puntuales
00:22:29
Entonces por eso siempre vais a ver en los códigos
00:22:31
Que siempre se pone la doble barra o el doble and
00:22:36
Porque es lo más rápido
00:22:38
Para la máquina virtual
00:22:39
Pasa de lo que viene a continuación
00:22:41
¿Entendido?
00:22:43
¿Todo el mundo?
00:22:47
Bueno, vale, pues entonces
00:22:49
Este código que
00:22:50
Lo hemos cambiado este código para que no anide
00:22:52
If
00:22:54
Y hemos puesto si n es menor que 10
00:22:55
Y además de ser menor que 10
00:22:58
Es igual a 2 o igual a 3
00:23:00
O igual a 5 o igual a 7
00:23:02
Cuidadito con el paréntesis
00:23:04
Aquí sí que tenemos que ponerlo
00:23:06
Porque es esta condición
00:23:08
Por un lado n menor que 10
00:23:10
Y además n igual a 2 o n igual a 3
00:23:11
O n igual a 4 o n igual a 5
00:23:14
O n igual a 7
00:23:16
O sea, son dos condiciones
00:23:16
Que evaluamos por separado
00:23:18
Y luego el and de las dos
00:23:20
Vale, es primo
00:23:22
Y si no, no primo
00:23:24
Vale, pues ahora hago yo la pregunta
00:23:25
Voy a quitar esto para que
00:23:27
Se vea todo el código junto
00:23:31
Este código de arriba
00:23:34
y este código de abajo
00:23:37
este código
00:23:42
y este código
00:23:43
son idénticos
00:23:45
a efectos de ejecución
00:23:48
podríamos decir que son dos códigos idénticos
00:23:49
que hacen siempre lo mismo
00:23:52
el de arriba y el de abajo
00:23:53
¿tú dirías que sí?
00:23:55
venga
00:24:04
¿cuántos dicen que sí?
00:24:05
que el código de arriba y el código de abajo
00:24:06
son idénticos
00:24:08
cuando digo que son idénticos
00:24:09
es que sea cual sea el dato de entrada
00:24:10
que es n, el resultado va a ser siempre el mismo
00:24:13
hay dos votos así
00:24:16
sí pero, es sí o no
00:24:19
no hay pero sin programación, es sí o no
00:24:21
lógica binaria, ¿son idénticos?
00:24:23
sea cual sea el dato de n
00:24:25
de entrada, ¿hacen lo mismo?
00:24:27
tú dices que no
00:24:31
¿por qué no?
00:24:31
claro, a ver
00:24:40
no hacen lo mismo
00:24:42
para todos los casos de n
00:24:44
vamos a imaginar un caso de que n sea
00:24:45
12 mayor que 10
00:24:48
el de arriba, si n es mayor que 10, directamente no entra aquí, no hace nada.
00:24:49
Es decir, el programa no muestra nada, se queda callado.
00:24:56
Si n es 12, ¿verdad?
00:24:59
Pero aquí, si n es 12, esto ya le da false, con lo cual esto ya pasa,
00:25:02
porque false and lo que sea es false, y es un doble and, le da false,
00:25:07
y al hacer false entra en el el sí.
00:25:12
Entonces, para todos los valores de entrada mayores o iguales que 10,
00:25:15
El código de arriba dice
00:25:18
Se queda callado
00:25:19
Y el código de abajo dice
00:25:21
No primo
00:25:23
Entonces para ese conjunto de casos de entrada
00:25:24
Mayores o iguales que 10
00:25:27
El programa no hace lo mismo
00:25:29
Para los menores que 10 sí
00:25:31
Para todos los menores que 10 sí
00:25:33
Porque para los menores que 10
00:25:35
Entra aquí
00:25:37
Si además se cumple esto
00:25:37
Que es este and
00:25:39
Si además se cumple hace primo
00:25:40
Y si no se cumple hace esto
00:25:42
Que es esto
00:25:44
Entonces, no para todos los casos de entrada hace lo mismo
00:25:45
Solo para los mayores o para los menores de 10
00:25:49
¿Vale? Para los mayores o iguales de 10
00:25:53
Este se calla porque se iría a este else que no hace nada, que no existe
00:25:57
Y este para los mayores o iguales que 10, esto le da false
00:26:01
Porque esta es false y se mete aquí
00:26:05
¿Vale?
00:26:07
Otra cosa es que eso nos importe o no nos importe
00:26:10
Si nos importa y queremos que para los valores de n mayores o iguales que 10 no lo diga, nos lo diga, pues entonces tendríamos que cambiar este código y aquí sí que implicaría anidar otro if.
00:26:13
En el otro caso, si n es mayor o igual que 10, decir mayor o igual, no decir nada y si no lo es, decir no primo, pero tendríamos que anidar aquí entonces también otro if.
00:26:24
bueno, ¿a dónde quiero ir a parar?
00:26:35
no mencionamos ayer
00:26:40
un poco antes de irnos
00:26:42
que precisamente para evitar
00:26:44
anidarif en los códigos
00:26:46
Java nos daba una forma
00:26:47
compacta de explicarlo
00:26:50
cuando yo quería contemplar varias posibilidades
00:26:52
que es justo este caso
00:26:54
en este caso lo que me estoy dando cuenta
00:26:55
es que en realidad yo quiero contemplar tres
00:26:57
número mayor o igual que diez
00:26:59
ser primo o ser no primo
00:27:01
son tres
00:27:04
Pues si son tres
00:27:05
Tres no se puede hacer con un if-else
00:27:07
De ahí es que, de ahí me ha venido lo de tener que anidar
00:27:09
¿Vale? De ahí me ha venido
00:27:11
De ahí me ha venido lo de tener que anidar
00:27:13
Porque son tres
00:27:15
Bueno, pues cuando tengo más de dos posibilidades
00:27:16
En lugar de ir anidando
00:27:20
Y dentro de los if
00:27:21
Para ir abriendo ramas, ir abriendo ramas
00:27:23
Que sería la forma de ir contemplando
00:27:25
Uy, se estaba así detrás
00:27:27
¿Cuándo has llegado tú?
00:27:28
No, era Kevin, el que faltaba
00:27:31
Ah, vale, tengo un contigo
00:27:36
vale, vale, vale
00:27:37
no, no, no, no, no
00:27:38
le he puesto falta a Kevin
00:27:41
sí, creo
00:27:42
sí, vale
00:27:45
bueno, entonces, ¿entendéis lo que estoy diciendo?
00:27:47
que cuando
00:27:50
tenemos un programa
00:27:51
en el cual yo tengo varias posibilidades
00:27:53
más de dos, como este
00:27:56
que yo digo, ah no
00:27:57
voy a mostrar, oprimo o no oprimo
00:27:59
o mayor o igual que 10
00:28:02
cuando tengo más de dos, es que con un único if-else
00:28:03
es imposible, no puedo
00:28:05
Porque con un if else solo puedo mostrar dos cosas
00:28:07
O esta o la otra
00:28:10
Con un if else es imposible
00:28:11
Entonces tenemos que anidar
00:28:12
Como aquí hemos anidado
00:28:14
Si n es mayor que 10, primo y no primo
00:28:17
Y si no
00:28:19
Mayor o igual que 10
00:28:20
Y aquí igual, si quiero distinguir
00:28:23
Si es mayor o igual que 10, me toca anidar aquí dentro
00:28:24
O sea, si hay más de dos opciones
00:28:26
Tengo que ir anidando para ir abriendo ramas
00:28:28
¿Verdad?
00:28:30
Aquí, si yo tengo más opciones
00:28:38
No lo llamemos términos de condiciones
00:28:40
En términos de posibilidades de resultado
00:28:46
De posibilidades de resultado
00:28:50
Cuando tengo varios caminos
00:28:51
Entonces yo aquí tendría tres caminos
00:28:53
Si n es mayor o igual que 10
00:28:56
Si n es primo, si n es menor que 10
00:28:58
O si n es no primo
00:28:59
Entonces con un único if no puedo
00:29:00
Porque con un único if tengo dos caminos
00:29:02
Entonces tendría que abrirlo
00:29:03
¿Verdad?
00:29:06
N es menor que 10
00:29:06
Pues ahora abro aquí
00:29:10
Vale
00:29:12
Y además es primo
00:29:13
Pues entonces abriría
00:29:15
Tendría que abrir, es que no me queda otra
00:29:18
Abriría por aquí
00:29:20
Y abriría por aquí
00:29:21
Entonces voy abriendo ramas
00:29:23
Cada if anidado me va abriendo otro camino
00:29:24
Cada if que anide me abre más y más
00:29:27
¿Verdad?
00:29:28
Entonces, ayer cuando nos fuimos
00:29:31
Cuando dijimos
00:29:33
cuando yo identifico que un programa
00:29:35
tiene varios caminos
00:29:38
distintos, en lugar de anidar
00:29:40
id dentro del id, dentro del if
00:29:42
o dentro del else, en lugar de anidar
00:29:44
porque se me queda un programa muy feo
00:29:45
Java nos da una forma compacta de hacerlo
00:29:47
¿verdad? queda la sentencia como
00:29:49
venga, ¿quién era el que había estudiado?
00:29:51
tú, habías estudiado entre un cuarto de hora
00:29:56
y media hora, entonces contéstame
00:29:57
cuando, pues lo que acabo de decir
00:30:00
siempre lo acabo de decir
00:30:03
Claro, pues en general, hay que hacer un caso cuando hables.
00:30:05
Bueno, pues lo que he dicho es, cuando tenemos varios...
00:30:12
Pero mírame también.
00:30:14
Mira, vosotros vais a una empresa y cuando alguien os habla,
00:30:17
no le atendéis y luego le decís que no te ha escuchado
00:30:21
y es que duráis un día de práctica, duráis uno.
00:30:23
Y si todo ocurre a mí, a yo y a mí me estáis en la práctica
00:30:27
y de verdad que os echan, os digo en serio que os echan.
00:30:29
A ti me dicen que no contestéis tal cual.
00:30:32
La verdad es que si dejan a vosotros y no contestáis o no miréis, es que os echan a la calle.
00:30:33
Porque sobra gente.
00:30:39
Entonces, por favor, tenéis que aprender ya a desarrollar conductas que sean compatibles con que os echen a la calle.
00:30:40
¿Vale?
00:30:48
Entonces, como te estoy preguntando, no vas a escuchar.
00:30:49
Vale.
00:30:51
Primero, segundo, o para que te vuelva a preguntar, mírame y escúchame.
00:30:52
Bueno, pues entonces, cuando tenemos un problema con varios caminos posibles,
00:30:55
es primo, no es primo, no es igual que 10
00:30:59
no nos queda más remedio que anidar y dentro de él
00:31:02
¿verdad? que es todo lo mismo
00:31:04
¿verdad que sí?
00:31:05
como a mi ari ya dijimos ayer que era muy feo
00:31:07
ya dijimos ayer
00:31:10
que teníamos la posibilidad
00:31:11
de enjabar y desarrollar de manera
00:31:14
más compacta, dejamos la otra sentencia
00:31:16
pues la pregunta es
00:31:17
¿esa sentencia cuál es?
00:31:19
una forma que tiene
00:31:29
el java de
00:31:30
permitirnos anidar
00:31:31
y de forma
00:31:34
más compacta, no teniendo ahí
00:31:36
¿qué se entiende? ¿cómo la llamábamos?
00:31:38
la imaginamos ayer y pusimos un ejemplo
00:31:40
¿quién me lo dice?
00:31:42
el seguir
00:31:44
el seguir
00:31:45
hay allá y de verdad
00:31:47
el futuro hay que curárselo mucho
00:31:51
bueno, pues este es un caso
00:31:53
este es un ejemplo de eso
00:31:58
vale, aquí tenemos
00:32:00
tres posibilidades
00:32:02
identificamos que tenemos tres posibilidades
00:32:03
vamos a borrar ya esto
00:32:05
a ver
00:32:09
Lo vamos a escribir aquí
00:32:15
Tenemos tres caminos para este programa
00:32:17
¿Vale? Tenemos tres caminos
00:32:22
Hemos identificado camino uno
00:32:23
El camino uno es mostrar es primo
00:32:26
Camino dos
00:32:30
Mostrar es no primo
00:32:34
Y camino tres
00:32:37
Que aquí es donde ha venido el problema que me ha obligado a Anidarif
00:32:39
Camino tres
00:32:42
Es mayor o igual de diez
00:32:43
¿Vale? Tres caminos
00:32:45
Si yo tengo tres posibilidades, repito por la próxima vez
00:32:55
Es que voy a tener que anidarif
00:32:58
¿Qué es lo que he hecho arriba? Voy a tener que anidarlos
00:32:59
Primero puedo distinguir una cosa
00:33:01
Luego distinguir la otra
00:33:03
Vale, pues entonces en lugar de anidarlos
00:33:04
Teníamos la sentencia if, el seif
00:33:06
Que tiene esta estructura
00:33:08
Y la primera condición que me llevaría
00:33:09
Por el primer camino
00:33:13
El rollo que yo quiera
00:33:14
El seif, la siguiente condición
00:33:15
Que me lleva por el otro camino
00:33:19
condición para el camino 1
00:33:21
lo pongo así
00:33:23
esta condición que me lleva al camino 2
00:33:26
y aquí lo que sea para el camino 2
00:33:30
y así puedo seguir hasta el infinito
00:33:34
el save condición
00:33:36
que me lleva al
00:33:39
camino 3
00:33:41
como si tuviera tropecientos caminos
00:33:44
y luego a la sentencia del save
00:33:48
que tiene esa estructura
00:34:05
Le puedo añadir un else
00:34:06
Que es
00:34:07
Si no se cumple ninguna de las anteriores
00:34:09
¿Vale?
00:34:12
Entonces esta sentencia es como si hiciéramos
00:34:27
Si se cumple la condición camino 1
00:34:29
Y me tira dentro del if
00:34:31
Y se cumple camino 2
00:34:33
Y me tira dentro del if
00:34:35
Y se cumple camino 3
00:34:37
Entonces eso sería un anidamiento muy complicado
00:34:38
Bueno, pues entonces
00:34:40
Como ya entendemos lo que es un if
00:34:42
Que significa anidarlo y todo eso
00:34:43
Ya podemos usar esta sentencia
00:34:46
que de forma más clara
00:34:48
me recoge esa situación
00:34:50
situación en la que mi programa puede hacer
00:34:52
varias cosas, más de dos
00:34:54
más de dos
00:34:56
cada una de ellas se asocia a una condición, está clara
00:34:57
esta sí es esta condición
00:35:00
esta sí es esta otra, esta sí es esta otra
00:35:02
cada una se asocia a una condición
00:35:04
pues ya está, planta un if, el se if
00:35:05
y la máquina virtual lo interpreta
00:35:07
primero evalúa esta condición
00:35:09
si es cierta, hace lo que hay aquí
00:35:11
y se acabó, y continuamos por abajo
00:35:13
que no es cierta
00:35:15
se va a la siguiente
00:35:17
que esa es cierta, hace lo que hay aquí dentro
00:35:18
y se acabó, y continuamos abajo
00:35:21
que no lo es
00:35:23
se va a evaluar esta, que es cierta
00:35:24
hace lo que hay dentro
00:35:27
que no lo es
00:35:28
y ya termina, y se va por aquí, que no lo es, pasa a la siguiente
00:35:30
que lo es
00:35:33
hace lo que hay dentro y se acabó, se va abajo
00:35:35
que tampoco lo es, pues ya se va a leerse
00:35:37
vale, entonces esta es la estructura
00:35:40
que ya plantamos cuando tenemos un programa
00:35:42
que tiene varias posibilidades, cada una de ellas recogidas con una condición.
00:35:45
En lugar de hacerlo con la sentencia básica, if, else e ir anidando, que se hace más pesado,
00:35:50
pues identificamos los caminos, la condición que me lleva a cada camino y ya está, y planto el if, else e if.
00:35:56
Bueno, pues en este caso era la situación que teníamos. Tenemos tres caminos.
00:36:04
Voy a poner esto así.
00:36:09
Vale, pues este es el caso en el que estábamos
00:36:11
Tenemos un dato de entrada
00:36:17
Tres posibilidades
00:36:18
Esto, esto y esto
00:36:20
Pues ya está, vamos a plantar un if, el se, if
00:36:21
Con estas tres posibilidades y se acabó
00:36:23
Y nos va a quedar un programa más bonito, seguramente
00:36:26
Pues venga, plantamos la primera
00:36:28
N es
00:36:30
Venga
00:36:33
N es mayor o igual que 10
00:36:35
Bueno, hemos dicho que mayor o igual que 10 es el caso
00:36:38
Pues ya está, 100 es mayor o igual que 10
00:36:45
No pongo
00:36:47
Llaves
00:36:50
Porque solo hay una sentencia
00:36:52
Pues entonces
00:36:53
Mostrar es mayor o igual que 10
00:36:54
Pues venga
00:36:58
Un momento
00:36:59
O igual que 10
00:37:02
Vale
00:37:04
Ahora, ese camino ya está
00:37:06
Si es mayor o igual que 10, me voy por este camino
00:37:09
Que no es mayor o igual que 10
00:37:11
Pues me planto aquí mi else if
00:37:14
Que sería
00:37:17
N
00:37:24
Es ya la otra condición
00:37:25
Toda esta
00:37:27
N es igual a 2
00:37:29
O igual a 3 o igual a 5 o igual a 7
00:37:37
Pues entonces
00:37:39
Es primo
00:37:41
La siguiente
00:37:43
Como ya es
00:37:50
Si no se cumple con las anteriores
00:37:51
Pues entonces la puedo meter en un else
00:37:52
No hace falta que ponga un else if
00:37:54
Que sea n diferente de 2
00:37:57
Y diferente de 3
00:37:59
Y diferente de 5
00:38:00
Y diferente de 7
00:38:01
Vale, pues así queda mucho más claro
00:38:03
Para el que lo ve
00:38:12
Y no hay ningún if anidado a la vista
00:38:13
Para la máquina virtual lo hay
00:38:16
Lo que pasa es que nosotros no lo vemos
00:38:18
Si n es mayor o igual que 10
00:38:19
Hace esto, que no
00:38:22
Es como si anidara un if dentro del else
00:38:23
Que no
00:38:26
¿Cumple esto? Pues es primo
00:38:26
que no, no primo, ya está, tengo cada camino
00:38:30
contemplado en una condición
00:38:32
cada camino contemplado en una condición
00:38:34
¿vale?
00:38:35
a ver
00:38:42
podría haber cambiado el orden, uno pone el orden
00:38:43
que le parece más claro, podría haber puesto primero
00:38:45
esta condición, n si de alguno
00:38:47
de estos, entonces es primo
00:38:49
que no, ahora te pones
00:38:51
n mayor o igual que 10, da igual, en realidad
00:38:53
en el orden en el que lo ponga
00:38:55
¿vale? estas de aquí da igual
00:38:56
porque se van haciendo una por una y cuando
00:38:59
encuentra una que es cierta, ya
00:39:01
hace esa
00:39:02
vale
00:39:04
pues vamos a parar un momentito
00:39:05
- Subido por:
- Raquel G.
- Licencia:
- Todos los derechos reservados
- Visualizaciones:
- 6
- Fecha:
- 10 de octubre de 2023 - 12:49
- Visibilidad:
- Público
- Centro:
- IES ROSA CHACEL
- Duración:
- 39′ 15″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1280x720 píxeles
- Tamaño:
- 749.33 MBytes