20241003 ProgrEstruct-Decision_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:
Vale, a ver, pues esto de la sentencia de decisión en realidad ya nos permite aproximarnos un poquito más a este término, ¿vale? Ya nos permite aproximarnos un poco más a este término, ¿vale?
00:00:00
un algoritmo es
00:00:20
un concepto que
00:00:21
está más allá de la programación
00:00:23
¿vale? más allá de la programación, un algoritmo
00:00:26
exclusivamente es
00:00:27
la secuencia de acciones
00:00:28
que conducen a la resolución
00:00:32
de un problema, ¿verdad? eso es un algoritmo
00:00:34
¿tenemos clase de algoritmo?
00:00:36
no, eso es
00:00:37
eso es pensar
00:00:39
¿vale?
00:00:41
no, hombre, no, es que
00:00:43
claro
00:00:46
sí, vale
00:00:46
entonces una secuencia de pasos para resolver un problema
00:00:50
entonces pues bueno
00:00:52
quiero viajar a París
00:00:53
busco
00:00:56
un billete, lo pago
00:00:58
me voy al aeropuerto
00:01:00
monto en el avión, aterrizo
00:01:01
si Dios quiere, bajo del avión
00:01:04
y llego a París
00:01:06
pues eso es un algoritmo
00:01:06
una secuencia de pasos para resolver
00:01:09
mi problema de que quiero llegar a París
00:01:12
vale, en programación
00:01:14
también lo que buscamos es resolver
00:01:17
problemas
00:01:19
tengo 15 usuarios
00:01:20
y quiero ver de esos 15
00:01:24
cuál es el que más ha pagado
00:01:25
15 clientes
00:01:28
vale, pues mi problema
00:01:30
aplicación que he dado
00:01:31
los clientes de una base de datos
00:01:32
mire cuál es el que más ha pagado
00:01:35
problema, a resolver
00:01:37
¿cómo? con un algoritmo que programamos
00:01:39
¿vale? un algoritmo en términos generales
00:01:42
es eso, una secuencia
00:01:44
de acciones para resolver un problema
00:01:46
que queremos resolver, que necesitamos
00:01:47
resolver. Y eso es lo que hacemos cuando
00:01:49
programamos. Programamos exclusivamente
00:01:52
para eso. ¿Para qué un problema
00:01:54
que queremos resolver, en lugar
00:01:56
de hacerlo nosotros, que no lo podemos
00:01:57
hacer porque somos demasiado lentos
00:02:00
calculando,
00:02:01
o no tenemos una capacidad de almacenamiento
00:02:03
de datos demasiado grande, no podemos memorizar
00:02:05
mil millones de clientes a la vez,
00:02:08
pues algo que nosotros podríamos
00:02:10
hacer, pero nos falta
00:02:11
memoria y nos falta
00:02:13
velocidad, pues se lo damos
00:02:15
a alguien que no sabe hacer absolutamente
00:02:17
nada, pero a cambio
00:02:19
tiene memoria y
00:02:21
tiene velocidad. Es lo único que nos
00:02:23
aporta un ordenador. Memoria y
00:02:25
velocidad nos aportan nada más.
00:02:27
Entonces, bueno, pues entonces
00:02:29
yo le digo lo que tiene que hacer,
00:02:31
se lo digo paso por paso,
00:02:34
pa, pa, pa, pa, y él lo
00:02:35
hace. ¿Vale? Y no va a hacer nada
00:02:37
que no le hayamos dicho nosotros.
00:02:39
Bueno, pues ese paso por
00:02:41
paso que tenemos que hacer
00:02:43
es el algoritmo.
00:02:45
Bueno, pues entonces
00:02:48
Ya ese término, cuando ya hablamos de programación, pues ya se ha refinado un poquito más y algoritmo implica ser una secuencia de pasos para que el algoritmo sea válido y yo me planté programarlo, cuidado no os olvidéis que tiene que ser finito, ¿vale?
00:02:49
Y secuenciado, tiene que ser una sentencia tras otra, es decir, una sentencia tras otra o una orden tras otra, como lo queráis llamar, y tiene que acabar, ¿vale?
00:03:08
Entonces, si yo consigo
00:03:37
Especificar
00:03:40
Cómo hacer algo
00:03:42
Con una sentencia, una instrucción
00:03:43
Tras otra, gira a la derecha
00:03:46
No sé qué, no sé cuánto, patatín, patatín, patatín
00:03:47
Y además, tiene un fin
00:03:49
Tiene un fin
00:03:51
Entonces habré hecho un algoritmo válido
00:03:52
Pues cuando yo he llegado a un algoritmo válido
00:03:55
Que lo puedo expresar en mis propias palabras
00:03:57
Con diagramas de flujo
00:03:59
Como sea, cuando yo he llegado a un algoritmo válido
00:04:01
Ahora ya, lo programo
00:04:03
¿Vale?
00:04:06
en el lenguaje de programación que elija
00:04:07
y ese ya lo hace, ese va a seguir
00:04:08
pum pum como un tonto lo que le vamos diciendo
00:04:11
pues es tonto, o sea lo único que sabe hacer
00:04:13
es operaciones aritméticas y lógicas
00:04:15
no sabe hacer nada más que eso
00:04:17
operaciones aritméticas y lógicas, lo que pasa es que las hace
00:04:19
muy deprisa y además
00:04:21
puede almacenar a la vez
00:04:23
millones de números que nosotros no podemos
00:04:25
numerizar, bueno pero tenemos que
00:04:27
decir que hacer
00:04:29
y se lo decimos con un algoritmo
00:04:30
bueno pues entonces
00:04:32
Entonces, para construir ese algoritmo, nosotros primero recogemos datos, datos de entrada. Eso es evidente, eso estaría como al margen del algoritmo. El algoritmo trabaja con datos de entrada que hemos recogido. Y ahora, a partir de ahí, empezamos a combinar estas sentencias o estas acciones, como lo queráis llamar, empezamos a combinarlas.
00:04:35
vale, pues cuál es una de estas sentencias
00:04:56
o acciones que podemos empezar ya
00:04:59
a combinar para conseguir un algoritmo
00:05:01
pues una de esas sentencias
00:05:03
o acciones es la sentencia
00:05:05
de decisión, vale
00:05:07
o selectiva según el manual que
00:05:08
estudiéis o como sea
00:05:17
vale, es
00:05:19
obvio que para
00:05:24
poder hacer algo, para poder
00:05:27
solucionar un problema, yo
00:05:29
tengo que tener una manera
00:05:31
de expresar, si ocurre
00:05:32
esto, haz esta cosa
00:05:35
y si no, haz esta otra
00:05:37
porque eso ocurre en cualquier situación
00:05:39
entonces
00:05:41
problema que yo quiero resolver
00:05:43
quiero
00:05:45
cruzar la calle
00:05:46
ahora me planteo hacer el algoritmo
00:05:48
mires el semáforo
00:05:50
si está en rojo
00:05:53
esperas, si está en verde
00:05:54
sigues
00:05:57
entonces siempre, cualquier algoritmo
00:05:58
que uno quiera plantear, siempre va a haber
00:06:01
puntos en los cuales tenga que pensar
00:06:03
evaluar una condición
00:06:05
y en función de esa condición hacer una cosa
00:06:06
u otra, siempre, yo me quiero ir a París
00:06:09
vale
00:06:11
pero tengo este dinero
00:06:12
eh, miro
00:06:14
eh, billete de avión
00:06:17
¿el precio es menor
00:06:19
que mi dinero? sí, cojo
00:06:21
el avión, ¿el precio es mayor
00:06:23
que mi dinero? no, voy a mirar
00:06:25
la web de autobuses, vale, siempre
00:06:27
cualquier algoritmo que uno se vaya a plantear
00:06:29
para resolver un problema, va a necesitar tener la posibilidad de expresar esta sentencia.
00:06:31
¿Qué esta sentencia es? ¿Esto se cumple? Si hago esto, no se cumple, hago esto otro.
00:06:37
Y esto no es un tema de lenguaje de programación, es una idea, una idea que tenemos que poder expresar.
00:06:43
¿Vale? ¿Cómo expresamos esa idea al margen de cualquier lenguaje de programación?
00:06:50
Bueno, para eso están los diagramas de flujo, son una herramienta.
00:06:56
Los diagramas de flujo son una herramienta gráfica muy chorra y muy sencillita
00:07:16
para visualizar un algoritmo que yo ya tengo hecho, ¿vale?
00:07:19
Los diagramas de flujo son una herramienta para visualizar algoritmos de forma gráfica.
00:07:25
Entonces, cuando estamos en la fase de pensar yo mi algoritmo,
00:07:50
que todavía no estoy programando porque no me hace falta,
00:07:55
cuando estamos en la fase de pensar yo mi algoritmo,
00:07:57
a veces podemos hacer un pequeño diagrama de flujo para verlo.
00:08:00
y de hecho, pues cuando uno está haciendo un software
00:08:02
y está todavía en la fase de diseño
00:08:05
de ver cómo lo hace, para qué, para qué, para qué
00:08:07
pues cuando le quiere pasar
00:08:08
lo que ha hecho a otro para que el otro
00:08:11
continúa, pues le pasa un diagrama de flujo
00:08:13
con lo que ha pensado, no le pasa un código
00:08:15
escrito, le pasa un diagrama de flujo
00:08:17
el otro con el diagrama de flujo dice
00:08:19
ah, vale, este algoritmo lo has hecho así, voy a incorporarle
00:08:21
esto a otro, entonces es una herramienta
00:08:23
para la fase de elaboración
00:08:26
del algoritmo, vale, lo que pasa es como
00:08:27
la usamos tanto, se usa
00:08:29
tanto y está tan extendida
00:08:31
pues tiene ciertas
00:08:32
ciertas reglas, para que todos
00:08:35
usamos las mismas reglas, pero vamos
00:08:37
las reglas
00:08:39
básicas para esta herramienta gráfica
00:08:40
pues son que el diagrama
00:08:44
de flujo tiene un inicio, ¿vale?
00:08:45
eso está claro, tiene un inicio
00:08:47
se puede marcar así o con
00:08:49
un puntito así sin más, tiene el inicio
00:08:51
y ahora a partir de ahí ya empieza
00:08:53
el caminito del algoritmo, y el caminito
00:08:55
es una línea, que va por aquí y por aquí
00:08:57
es una línea, cualquier programa es una línea
00:08:59
que se va ejecutando
00:09:01
sentencia, sentencia, sentencia
00:09:02
vale, y esta línea
00:09:05
se va cruzando ya con acciones
00:09:07
se va cruzando con acciones
00:09:09
las acciones de asignar valor a variables
00:09:11
o de mostrar valor que son las
00:09:14
de entrada y salida
00:09:15
pues se suelen representar con los romboides
00:09:16
estos
00:09:19
¿vale? por ejemplo
00:09:20
pues yo quiero decir leer
00:09:23
mi variable n
00:09:25
por ejemplo
00:09:26
un algoritmo que
00:09:28
recibe dos números
00:09:30
y muestra la suma
00:09:32
pues lo primero que tenemos que hacer
00:09:34
leer del teclado
00:09:36
una variable, pues como eso es una sentencia
00:09:38
de entrada y salida, pues romboide
00:09:40
vale, que es lo siguiente que hago
00:09:42
leer la variable m, pues otra sentencia
00:09:44
de entrada y salida
00:09:46
leer m, vale, aquí
00:09:47
esto es una expresión de lo que
00:09:52
se va a hacer, esto no es lenguaje de planación
00:09:55
aquí no, eso de declarar
00:09:56
no sé qué, no
00:09:58
es una visualización de lo que hay que hacer
00:09:59
vale, mi algoritmo sigue
00:10:03
por aquí, ahora que tengo que hacer
00:10:05
ahora ya una sentencia
00:10:07
una expresión, una operación
00:10:08
para asignar, pues esas
00:10:10
sentencias generales que son operaciones
00:10:12
pues con un cuadradito normal y corriente
00:10:14
pues aquí diríamos
00:10:17
pues por ejemplo, el resultado
00:10:19
que lo llamo r
00:10:21
igual a n más m
00:10:22
vale, sentencias generales
00:10:24
que evalúan expresiones y lo asignan a valores
00:10:26
vale, una vez que he hecho esto
00:10:29
¿qué tengo que hacer? una sentencia de salida
00:10:31
porque ahora lo muestro por pantalla
00:10:33
pues un romboide porque es sentencia de salida
00:10:34
y pongo mostrar
00:10:37
R
00:10:39
vale, he acabado el algoritmo
00:10:41
para resolver el problema
00:10:44
de recibir dos valores y mostrar
00:10:45
la suma, pues sí, ya lo he acabado
00:10:47
pues nada, fin
00:10:49
ala
00:10:50
vale, pues este es un algoritmo válido
00:10:52
Porque es una secuencia de cosas una tras otra
00:10:56
Y eso tiene que ser así siempre
00:10:59
Una secuencia de cosas
00:11:01
Pa, pa, pa, pa
00:11:02
Una tras otra
00:11:04
Aquí no pasan cosas en paralelo, nunca
00:11:04
Una tras otra, pa, pa, pa, pa
00:11:07
¿Vale?
00:11:10
Y además acaba, en un fin
00:11:11
Si no acaba no es un algoritmo válido
00:11:12
Bueno, pues yo ya visualizo esto
00:11:14
Y viendo esto digo
00:11:16
Ah, vale, pues sí, esto hace lo que yo quiero hacer
00:11:18
Y entonces ahora ya
00:11:21
Pues lo puedo pasar a un lenguaje para vaciar
00:11:22
una vez que tengo un diagrama de flujo
00:11:25
pasar al lenguaje de pronunciación
00:11:29
ya es inmediato
00:11:30
bueno, ¿significa esto que vosotros cada vez
00:11:31
que hagáis un programa tenéis que hacer un diagrama de flujo antes?
00:11:36
pues no, lo cuento como que es una herramienta
00:11:39
para visualizar de forma gráfica
00:11:41
algoritmos
00:11:44
y lo he puesto ahora porque para visualizar
00:11:44
gráficamente lo que es una sentencia de decisión
00:11:48
pues nos es muy útil
00:11:50
¿vale? pero nosotros
00:11:51
hacemos programas cortos
00:11:53
entonces pues sí, uno tiene que hacerse un diseño
00:11:56
con su lápiz y papel
00:11:58
cuando ya el programa tiene cierta complejidad
00:11:59
y cuando ya tiene claro lo que quiere hacer
00:12:01
ya se ha hecho sus
00:12:04
tachones y sus cosas en el papel
00:12:05
pues entonces ya
00:12:08
se pone a programa
00:12:09
que cuando estáis haciendo ese primer diseño
00:12:10
de esto como lo hago y ahora le sumo
00:12:13
pues entonces tengo que hacer esto, no sé qué
00:12:15
¿os viene bien usar un diagrama de flujo en vuestro papel y lápiz?
00:12:17
genial, pues lo usáis
00:12:20
¿vale?
00:12:22
Pero lo importante es que antes de hacer un programa, antes hay una, de codificar un código, antes hay una fase que es, ¿qué tengo que hacer? ¿Cómo lo voy a hacer?
00:12:23
Y ahí se hace uno sus graficitos y sus rollos hasta que tiene ya claro cómo lo va a hacer.
00:12:33
Y eso ya ni es Java, ni es Python, ni es nada.
00:12:39
Cuando tiene claro cómo lo va a hacer, pues ahora, hombre, se pone a codificar.
00:12:42
bueno
00:12:45
vale, pues entonces
00:12:47
vamos a incorporar
00:12:50
la sentencia de decisión en nuestros algoritmos
00:12:51
en los algoritmos
00:12:54
bueno, pues por ejemplo, en este algoritmo podría ser
00:12:55
leer n y m
00:12:57
y mostrar
00:13:00
la suma solo en el
00:13:02
caso de que sea positiva
00:13:04
si es negativa, pues mostrar
00:13:05
es negativo
00:13:08
entonces no es válido, por ejemplo
00:13:09
es un programa que necesita sumar
00:13:11
dos variables, pero la suma solo tiene sentido
00:13:14
para esa aplicación si fuera
00:13:16
positiva, por ejemplo, si es negativa
00:13:18
no, bueno, pues ya lo hemos cambiado
00:13:20
leer dos variables, mostrar suma si es positiva
00:13:22
y si no, pues decir
00:13:24
pues no, pues lo siento
00:13:25
el resultado no es válido
00:13:28
bueno, pues este algoritmo
00:13:29
se nos modificaría de esta manera
00:13:31
tendría su inicio
00:13:34
eso, obligatorio como siempre
00:13:37
tenemos que leer dos variables
00:13:40
pues nada, dos sentencias de entrada y salida
00:13:41
leer n
00:13:44
y leer m
00:13:46
vale
00:13:52
ahora obtenemos la suma
00:13:52
vamos pasito por pasito para
00:13:56
r igual a n
00:13:58
más m
00:14:00
y ahora
00:14:01
no saltamos aquí directamente
00:14:04
porque esto
00:14:06
no lo hacemos si o si
00:14:07
claro, aquí tenemos dos opciones
00:14:09
o mostrar r
00:14:12
o mostrar
00:14:13
el resultado inválido, entonces aquí a donde me voy
00:14:15
tengo dos opciones, tengo la opción de
00:14:19
mostrar R o tengo la opción de
00:14:22
no válido, mostrar no válido
00:14:28
tengo que expresar en el algoritmo que tengo esas dos opciones
00:14:30
claro, un algoritmo tiene que saber si nosotros lo hemos definido perfectamente
00:14:35
hay que definir de qué depende
00:14:40
que depende, él no lo va a decidir aleatoriamente
00:14:42
nunca un programa
00:14:45
un programa nunca puede decidir
00:14:47
aleatoriamente que hace, siempre hay que decírselo
00:14:51
todo perfectamente pautado, vale, pues depende
00:14:53
de una condición, ¿cómo expresamos eso aquí?
00:14:56
pues las condiciones se ponen en un rombito
00:15:00
así, y aquí pondríamos R mayor que 0
00:15:02
que esa es mi condición
00:15:06
y las condiciones tienen dos opciones
00:15:08
true o false
00:15:11
dos ramas, la rama del sí
00:15:12
y la rama del no
00:15:15
tienen dos opciones
00:15:18
la rama del sí y la rama del no
00:15:20
¿vale? que la condición
00:15:21
se cumple
00:15:24
el algoritmo tira por la rama del sí
00:15:25
que la condición no se
00:15:28
cumple, el algoritmo tira por la rama del no
00:15:30
y ya se ha acabado
00:15:32
esta sentencia
00:15:34
esto en el diagrama se expresa
00:15:35
que cerramos por aquí
00:15:38
y el programa sigue
00:15:39
el algoritmo sigue si es que tuviera que hacer
00:15:41
más cosas
00:15:43
vamos a suponer que lo que tiene que hacer es ahora decir
00:15:44
adiós, por ejemplo
00:15:47
pues nada, esto vendría aquí, mostrar
00:15:48
adiós, sentencia de salida
00:15:51
y fin, ¿vale?
00:15:53
bueno, pues esto
00:16:02
que en el diagrama de flujo es así
00:16:03
esto
00:16:05
esta es la sentencia de decisión
00:16:06
que se programa con una
00:16:10
única sentencia en el lenguaje Java
00:16:12
sentencia de decisión
00:16:14
o sentencia selectiva
00:16:17
¿Vale?
00:16:20
Toda esta
00:16:22
O sea, la sentencia de decisión
00:16:23
es una sentencia ya compleja
00:16:25
No es como la de asignación
00:16:27
que es una sola línea
00:16:28
A igual a 3 más B
00:16:30
No, la sentencia de decisión es una única sentencia
00:16:32
pero es gorda, tiene cosas dentro
00:16:35
pero es una única sentencia
00:16:37
No asociéis sentencia a línea
00:16:38
No, una sentencia
00:16:40
no es una línea
00:16:43
Eso será una línea de código
00:16:44
una línea de código es una línea de código
00:16:46
está claro, es una línea de mi fichero de texto
00:16:48
pero una sentencia
00:16:50
es otra cosa, una sentencia es un
00:16:52
cuerpo que hace algo
00:16:54
de forma autónoma
00:16:56
una sentencia de asignación lo es
00:16:58
esta es una sentencia
00:17:00
n igual a 3 más b
00:17:03
eso es una sentencia
00:17:04
pero esta, que ahora la escribiremos como es otra
00:17:05
es otra única sentencia
00:17:09
es otra, es una sentencia compleja
00:17:11
porque incorpora una decisión
00:17:12
Lo que hago en la rama del sí y lo que hago en la rama del no, pero es una única sentencia. ¿Que tiene varias líneas de código? Pues sí, tiene varias líneas de código. ¿Vale? Entonces, línea de código es una cosa, es la línea de texto y sentencia es otra. Es un conjunto de líneas de código que hacen algo en concreto. ¿Vale?
00:17:15
hasta ahora que sentencias hemos visto
00:17:36
repito, pues las de
00:17:39
declaración de variables
00:17:40
y las de asignación
00:17:42
asignación leyendo por teclado
00:17:43
o directamente, me da igual
00:17:48
pero son las únicas que hemos visto
00:17:49
y la de mostrar por pantalla
00:17:51
es de las sentencias que hemos visto
00:17:53
que coincidía que se escribían en una línea de código
00:17:55
pues sí, coincidía que se escribían en una línea de código
00:17:58
pero en el resto
00:18:00
de sentencias no, no se van a escribir
00:18:02
en una única línea de código
00:18:03
bueno pues esta es la primera
00:18:05
de ellas
00:18:08
entonces
00:18:08
la visualización gráfica está clara
00:18:10
el algoritmo se parte en dos ramas
00:18:13
pero eso no significa
00:18:16
que el algoritmo haga dos cosas en paralelo
00:18:18
nunca jamás hace dos cosas
00:18:20
en paralelo
00:18:22
el algoritmo o bien va por aquí
00:18:22
o bien va por aquí
00:18:25
depende de los datos de entrada
00:18:27
en una ejecución a lo mejor va por aquí
00:18:29
una única línea
00:18:32
pero dentro de tres días lo vuelvo a ejecutar
00:18:34
meto otros datos distintos
00:18:37
y va por aquí
00:18:39
luego solamente hay un camino
00:18:40
ese camino, ¿qué toma?
00:18:43
¿cuál es? pues depende
00:18:45
a veces tomará uno, a veces tomará otro
00:18:46
pero en cada ejecución
00:18:49
solo toma uno, ¿vale?
00:18:50
esto no es que haga varias cosas a la vez
00:18:53
porque a veces el diagrama de flujos y vemos dos líneas
00:18:54
y decimos, anda, está haciendo dos cosas a la vez
00:18:57
no, está haciendo dos cosas
00:18:59
o hace esto, o hace esto
00:19:00
luego el algoritmo es una
00:19:02
secuencia de cosas, pues esta lo es, esta, esta, esta, esta, esta y esta
00:19:04
para un caso de datos de entrada, o esta, esta, esta, esta, esta y esta
00:19:10
siempre es una secuencia de cosas, nunca se hacen en paralelo nada
00:19:15
y aprovechando ya la visualización del gráfico
00:19:18
la sentencia de decisión, las dos ramas, siempre se tienen que unir
00:19:25
en algún punto, es decir, esta sentencia tiene que terminar
00:19:29
esta sentencia arranca aquí
00:19:32
cuando se evalúa
00:19:35
la decisión, ahí arranca
00:19:37
y termina cuando ya ha completado
00:19:38
la rama que haya ejecutado
00:19:41
¿vale?
00:19:43
entonces, esta rama
00:19:45
se une con esta otra
00:19:47
y esta sentencia a veces
00:19:49
irá por aquí o a veces irá
00:19:51
por aquí, pero vaya por donde vaya
00:19:53
siempre tiene que llegar al mismo punto
00:19:55
siempre, y a partir
00:19:57
de ese punto ya el programa sigue
00:19:59
si es que tiene que hacer más cosas, ya sigue
00:20:01
¿vale? siempre tiene que llegar al mismo punto
00:20:02
no puede ser que esto se abra y a partir
00:20:05
de aquí ya hagamos
00:20:07
vida libre y esta otra hagamos
00:20:08
vida libre, pues entonces habría dos fines
00:20:11
no, solo hay un único
00:20:12
fin, un punto de terminación
00:20:15
solo hay uno, entonces estas dos ramas
00:20:17
se han abierto en función de esta condición
00:20:19
pero se unen cuando termina esta
00:20:21
sentencia, se unen y a partir de aquí
00:20:23
el programa sigue hasta llegar a su fin
00:20:25
¿vale? puede ser
00:20:27
que en una rama no nos interese hacer nada
00:20:31
si es mayor que 0 mostrar R
00:20:32
y si no, nos quedamos
00:20:35
enmudecidos
00:20:37
nada, esto se expresa así, ya está
00:20:38
¿vale?
00:20:41
claro
00:20:44
no, no, no, esto se expresa así
00:20:45
que se cumple, hago esto
00:20:47
y me vengo a este punto, para ya seguir
00:20:49
con el resto del programa
00:20:51
que no se cumple, hago esto
00:20:52
que es nada
00:20:55
y me vengo a este punto, que implica seguir
00:20:56
con el resto del programa
00:20:59
¿vale? y podría también
00:21:00
no tener nada esta
00:21:02
y ser esta la que lo tiene
00:21:03
podría también
00:21:06
entonces esta pues estaría así
00:21:08
y ya está
00:21:10
lo que no tiene sentido es que no tuvieran nada las dos
00:21:11
entonces esto directamente
00:21:14
no sirve para nada
00:21:16
pero una de las dos tiene que tener algo
00:21:17
¿vale? bueno pues entonces
00:21:20
ahora ya teniendo claro
00:21:28
que es esto ahora ya si podemos
00:21:30
codificar esto en lenguaje Java
00:21:32
ya tenemos clarísimo que significa
00:21:34
y como codificamos esto en lenguaje java
00:21:36
lo voy a escribir aquí
00:21:40
primero
00:21:42
vale, pues nuestro programita
00:21:44
ahora ya hacemos esto en lenguaje java
00:21:48
me ahorro el main y todo eso
00:21:50
esto primero de aquí
00:21:53
ya lo sabemos hacer
00:21:55
mi variable n la voy a leer del teclado
00:21:58
supongo que tengo el escáner por ahí arriba
00:22:00
a la leída
00:22:02
mi variable m también
00:22:08
Vale, ya he programado las dos primeras
00:22:11
Tengo una duda
00:22:23
Pero es más de estética
00:22:24
Estética
00:22:26
Cuando pones lo del lector
00:22:27
¿Compensa ponerlo en mayúsculas porque es un objeto?
00:22:30
No, no, no, no, no
00:22:32
Porque lector es el nombre de la variable
00:22:33
Los nombres de variable
00:22:36
Es recomendable que empiecen siempre por minúsculo
00:22:37
Da igual que sean variables tipo objeto
00:22:41
Lo que sí que empieza por mayúsculas
00:22:43
Es el nombre del tipo
00:22:45
El nombre del tipo sí
00:22:46
Escarne los mayúsculas, los nombres de las variables
00:22:47
para que se vea, son variables
00:22:50
para ver si son de tipo objeto o no
00:22:51
uno se va al tipo de la declaración
00:22:54
y dice, ah, entonces esto es tipo objeto
00:22:55
vale, entonces
00:22:57
ahora que nos falta, guardar una variable de resultado
00:23:00
pues venga
00:23:03
int r igual a n más m
00:23:03
y ahora seguimos
00:23:09
programando nuestro código
00:23:11
y decimos, ah, ahora me viene una
00:23:12
sentencia de decisión
00:23:14
que es, evalúo una condición
00:23:15
rama del sí
00:23:18
rama del no
00:23:20
vale, pues ahora ya nos vamos
00:23:21
a la sentencia de decisión, toda esta
00:23:25
pues toda esta sentencia de decisión
00:23:26
¿cómo es?
00:23:29
if entre paréntesis
00:23:30
la condición
00:23:33
una condición válida como las que ya sabemos
00:23:34
hacer, condición
00:23:37
todo lo larga o corta que
00:23:38
nos interese, r
00:23:40
es mayor que cero
00:23:42
¿vale? y ahora en general
00:23:44
la forma más general
00:23:47
entre llaves
00:23:48
que por cuestiones de estilo
00:23:49
pues la llave de apertura
00:23:53
la pongo detrás del if
00:23:55
y la de cierre
00:23:56
la pongo aquí a la misma altura
00:23:58
que el if, para que el estilo quede bonito
00:24:01
no es que sea obligatorio
00:24:04
podría ponerlo todo seguido, todo abajo
00:24:05
pero que haría un programa muy feo y con un estilo
00:24:07
cero, con lo cual nadie os contrataría
00:24:09
vale, pues aquí
00:24:11
entre estas llaves
00:24:13
lo que yo hago en la rama del sí
00:24:14
que puede ser una o muchas sentencias
00:24:17
no tiene por qué ser una, puede ser una
00:24:19
muchas, yo en este caso solo tenía una
00:24:21
que era mostrar el resultado
00:24:22
pues en este caso
00:24:24
solo tenía mostrar lo abrevio
00:24:26
R
00:24:29
y no tengo más, pero puede ser que aquí
00:24:30
tuviera muchas cosas
00:24:33
puede ser que tuviera muchas
00:24:34
vale, pues la rama del sí ha terminado
00:24:35
esta llave se cierra
00:24:38
¿cómo expreso lo que se hace
00:24:40
en la rama del no?
00:24:43
pues poniendo un else
00:24:45
abriendo otra llave
00:24:46
que se cierra
00:24:49
aquí por cuestiones de estilo
00:24:51
también, y aquí pongo
00:24:53
lo que se hace en esta
00:24:55
rama, que de nuevo puede ser
00:24:57
una o muchas, en este caso
00:24:59
era mostrar no válido
00:25:01
pues venga, no
00:25:03
válido
00:25:07
si, si, si
00:25:08
estas llaves
00:25:16
incluyen lo que se hace
00:25:18
en la rama del sí, luego
00:25:20
viene el se, y estas llaves incluyen lo que se
00:25:22
hace en la rama del no
00:25:24
Bueno, es que el ELSI ya significa
00:25:25
Si esta no, va asociado a esta
00:25:30
Va asociado al IF aunque vaya fuera
00:25:31
Claro, claro, el ELSI siempre va con un IF
00:25:33
Porque no ha puesto punto y coma para terminarla
00:25:36
Claro, claro, el ELSI siempre va con un IF
00:25:38
Siempre va con un IF
00:25:39
El ELSI se refiere si la condición del IF
00:25:41
Falsa
00:25:44
El ELSI suelto nunca puede ir
00:25:44
No va englobado como en el mismo
00:25:47
Claro, pero
00:25:49
Sí, claro
00:25:52
True esto, false esto
00:25:56
El else, si tú lo escribes solo en Java
00:25:58
El else no te dice
00:26:00
Y este else no ha salido
00:26:02
Tiene que haber un if siempre antes
00:26:03
Con unas sentencias metidas
00:26:05
Vale, que alguna de las dos ramas no tiene nada
00:26:06
Dejo esto en blanco
00:26:10
Ya está
00:26:12
No pasa nada, lo puedo dejar en blanco
00:26:12
¿Vale?
00:26:15
Una pregunta
00:26:17
En Java, en este caso
00:26:17
se va a identificar hasta else
00:26:20
que acaba ahí en la sentencia if
00:26:22
claro, entonces, cuando el else ya ha terminado
00:26:24
este cuadrito
00:26:27
es la sentencia if
00:26:29
que yo digo
00:26:32
que es esta, esto de aquí
00:26:32
o sea, esto es esto
00:26:34
la programación de esto es esto
00:26:36
y eso es una única sentencia
00:26:40
no
00:26:41
no, porque es no
00:26:43
o sea, sí o no
00:26:46
no hay más opciones
00:26:48
sí o no
00:26:49
una condición no es sí o es no
00:26:51
claro, puedes poner
00:26:53
efectivamente más sí, pero eso
00:26:55
es otra sentencia
00:26:57
claro, es otra
00:26:59
bueno, más que otra sentencia es otro formato
00:27:01
de lo mismo
00:27:03
pero sentencia de decisión como tal
00:27:04
solo existe esto
00:27:07
porque esto es lo único que vamos a hacer
00:27:09
en función de la condición y me he formulado otro
00:27:11
luego otra cosa es que hay situaciones
00:27:13
concretas que con otra
00:27:15
manera de describir esto a lo mejor nos es más fácil
00:27:17
de escribir, eso ya lo hemos hablado, ¿vale?
00:27:19
Pero esta es la única necesaria, no hace falta
00:27:21
nada más, no hace falta nada más
00:27:23
¿vale? Entonces
00:27:25
importante, que veáis
00:27:27
esto como una única sentencia
00:27:29
entonces
00:27:31
cuando Java ve el comienzo de un if
00:27:33
ya sabe que tendrá una condición
00:27:35
después, un bloque
00:27:37
esto que está entre llaves lo llamamos bloque
00:27:39
en general, lo que va
00:27:41
un código entre llaves lo llamamos bloque
00:27:43
¿vale? Entonces ya hemos
00:27:45
visto en realidad antes un bloque
00:27:47
porque cuando hacíamos el método main
00:27:49
ya abríamos una llave
00:27:51
y la cerrábamos, entonces ya
00:27:53
hemos trabajado con bloques, lo que pasa es que hasta
00:27:55
ahora nuestro bloque era
00:27:57
todo el programa enterito, todo el programa
00:27:59
que es lo que estaba en el main, todo era nuestro bloque
00:28:01
ahora fijaos que dentro
00:28:03
de todo nuestro programa
00:28:05
hemos abierto un subbloque
00:28:07
más pequeñito, eso tiene
00:28:09
implicaciones que ahora tampoco nos vamos a meter
00:28:11
en ellas, simplemente deciros
00:28:13
que un código entre llaves
00:28:15
se le llama bloque, en términos de
00:28:17
programación se le llama bloque
00:28:19
vale, pues entonces, la máquina virtual
00:28:20
en cuanto ve un if, ya sabe
00:28:23
que necesita una condición
00:28:25
después, si no la ve te va a avisar
00:28:27
te va a decidir la condición
00:28:29
y luego ya sabe que vendrá un bloque de sentencias
00:28:30
y luego ya sabe que vendrá
00:28:34
opcionalmente
00:28:37
o no un else, porque
00:28:39
este no es obligatorio
00:28:41
es decir, si nos ha
00:28:43
quedado una sentencia if así
00:28:45
podemos
00:28:47
quitar esto, es decir
00:28:49
podría yo poner esto
00:28:51
y a Java le parece estupendo
00:28:52
no pasa nada, pongo esto
00:28:55
pero poner else sin nada
00:28:57
adentro, se puede
00:28:59
poner como quitar el else
00:29:02
y ya está
00:29:04
entonces si Java
00:29:04
ve un if
00:29:07
y ve que después del bloque de la rama
00:29:08
del si no tiene nada aquí, no tiene
00:29:11
el else, asume que se
00:29:13
acabó, que terminó la sentencia ahí
00:29:15
porque la rama del no, no existe
00:29:17
con lo cual en ese caso la sentencia
00:29:19
ha terminado aquí
00:29:22
ahí terminó, y ya sigue
00:29:23
con lo que venga a continuación
00:29:26
que ya es otra sentencia distinta con lo que sea
00:29:27
¿vale?
00:29:29
¿que ve un else?
00:29:32
vale, pues si ve
00:29:34
un else, entonces
00:29:36
ahora ya
00:29:37
es porque hay sentencias
00:29:38
Y hacer las sentencias que sean.
00:29:43
¿Vale?
00:29:46
Pero el else puede no existir.
00:29:46
Pero siempre hay que poner i.
00:29:49
Eso sí.
00:29:51
Eso sí.
00:29:52
Claro.
00:29:53
Podría, imaginaos en el programa de antes,
00:29:54
que lo que no se hace nada es aquí
00:29:57
y aquí se hace una cosa.
00:29:58
Llamémosle a por abreviar.
00:30:01
Vamos a suponer que este es mi algoritmo,
00:30:02
que ahí me ha salido así.
00:30:04
Entonces yo pondría si r mayor que cero,
00:30:05
i vacío.
00:30:08
Y luego pondría else a.
00:30:09
la codificación de esto
00:30:12
es esto, claro, otra cosa
00:30:14
es que queda horrible
00:30:16
claro, para eso
00:30:18
cambias la condición y pones la negada
00:30:20
¿no? si ponemos
00:30:22
la negada, lo que va
00:30:24
en la rama del no pasa a la rama del sí
00:30:26
y lo que va en la rama del sí pasa a la rama del no
00:30:28
¿no? si esta condición
00:30:30
se cumple hago esto, y si no se cumple
00:30:32
hago esto, si la condición la pones al revés
00:30:34
si esta condición no se cumple
00:30:36
la rama del no pasa a la rama del sí
00:30:38
y al revés, entonces para
00:30:40
dejar este código así tan feo
00:30:42
ponemos la condición al revés
00:30:44
la negamos, no R
00:30:46
mayor que 0, con lo cual este
00:30:48
pasa aquí arriba y el
00:30:50
else se ha quedado vacío
00:30:52
y como ahora el else es el que se ha quedado vacío
00:30:53
el else ya sí que lo puedo quitar
00:30:56
entonces más bonito ese
00:30:58
código que el anterior, más bonito
00:31:00
¿vale? y luego ya
00:31:02
si lo terminamos de arreglar, no R
00:31:04
mayor que 0, hombre es más fácil poner
00:31:06
R menor o igual que 0, ¿verdad?
00:31:08
Pero es lo mismo
00:31:10
Pero ya si lo queremos dejar más bonito
00:31:11
Pues pondríamos R menor o igual que 0
00:31:13
Que es la negada
00:31:15
Pero eso ya, bueno, es solamente para retocar
00:31:15
Nada más
00:31:19
¿Vale?
00:31:20
Entonces la sentencia aquí se
00:31:22
Y esta es la única sentencia necesaria
00:31:23
Lo que pasa es que, repito
00:31:27
Luego hay muchas situaciones que se pueden repetir
00:31:29
Muchas veces casos prácticos
00:31:31
Pueden repetir
00:31:33
Entonces observamos, uy, pues
00:31:34
Ese caso práctico
00:31:37
para programarlo con el if-else
00:31:39
tengo que anidar un montón de if-else
00:31:41
luego lo vemos, bueno pues te permite
00:31:43
un atajo para escribirlo más rápidamente
00:31:45
ya está, es un atajo para escribirlo
00:31:48
más rápidamente, lo único que existe en realidad
00:31:49
es esto, el if y el else
00:31:51
es lo único que computacionalmente
00:31:54
se ejecuta, lo único que se ejecuta
00:31:56
vale, otra cosa es que lo podamos
00:31:58
escribir de otra manera más abreviada
00:32:00
en casos concretos
00:32:01
bueno, pues entendidísimo
00:32:03
esto
00:32:08
vale, solo un
00:32:09
pequeño matiz más ahora mismo, antes de hacer algún ejemplo
00:32:11
con mi fielse. Cuando solo tenemos
00:32:15
una sentencia dentro y solo una,
00:32:17
las llaves son opcionales. No hace falta que estén.
00:32:21
Si solo tenemos una,
00:32:24
¿vale? En mi ejemplo de antes, cuando yo solo tenía el este,
00:32:26
bla, bla, bla, bla, puedo quitar la llave.
00:32:30
No, no pondría punto y coma.
00:32:36
No pongo punto y coma en ningún lado. Bueno, perdón, aquí.
00:32:38
Sí, sí, sí, aquí sí
00:32:40
Claro, las sentencias que te referías
00:32:41
Después de... vale, vale, sí, sí
00:32:44
Ahí sí, claro
00:32:46
Si solo tengo una
00:32:46
Estas llaves son opcionales
00:32:50
Si tengo más de una
00:32:52
Esta, otra, otra, otra
00:32:54
Tengo que englobarlas
00:32:56
En un bloque, ¿vale?
00:32:57
Porque si no, Java se hace un lío
00:32:59
Porque fijaos la situación
00:33:01
Imaginaos que yo quiero meter dos sentencias
00:33:02
Esta y esta otra
00:33:06
Y me he olvidado de poner las llaves
00:33:07
me he olvidado de poner las llaves
00:33:10
entonces, aquí se genera
00:33:12
una ambigüedad gordísima
00:33:15
la máquina virtual empieza a interpretar
00:33:17
esto
00:33:19
si la condición se cumple
00:33:20
¿vale?
00:33:22
la siguiente sentencia
00:33:26
es esta, y él interpreta
00:33:27
ah, vale, no hay un else, es un if sin else
00:33:29
interpreta que este
00:33:32
ya es fuera de la sentencia
00:33:33
interpreta que ya es fuera
00:33:35
¿vale? como no has puesto llaves
00:33:37
pues entonces solo es una sentencia
00:33:39
entonces interpreta
00:33:42
que esta ya no hay un else
00:33:43
y esta ya está fuera
00:33:45
entonces si yo quiero que las dos se hagan
00:33:46
en la rama del sí
00:33:49
tengo que meterla entre llaves
00:33:50
¿vale?
00:33:53
es decir, en este caso
00:33:58
las dos se hacen
00:33:59
si la condición se cumple
00:34:01
las dos
00:34:02
pero si quito las llaves
00:34:03
él asume que es solo la primera
00:34:05
porque no hay llaves, solo la primera
00:34:08
vale, pues la rama del sí es la primera
00:34:10
y como luego no veo un else, dice
00:34:12
será que no hay else porque no hay rama del no, no hay else
00:34:14
y ya interpreta que esta ya
00:34:16
es la que hay que hacer después de que la sentencia
00:34:18
hizo acabado, después, la que vendría aquí abajo
00:34:20
la hace
00:34:23
y luego ya viene el se suelto, el se suelto no existe
00:34:24
no tiene sentido, entonces te marca
00:34:27
error de compilación, te dice y es el se suelto
00:34:28
a que viene, vale
00:34:31
entonces, para obtener esos errores
00:34:32
lógicamente cuando son varias
00:34:35
las sentencias es obligatorio
00:34:37
obligatorio, es obligatorio que estén entre llaves, ¿vale? Si solo es una, pues no hace
00:34:38
falta, ¿vale? Bueno, pues antes de complicarlo más, vamos a buscar algún ejemplo o algo
00:34:44
para practicar. Vale, y ahora, pregunta sin ninguna trascendencia práctica. ¿Cuántos
00:34:54
habéis acabado desconectando
00:35:23
en todo el proyecto que he contado ahí?
00:35:25
¿Lanzar la mano?
00:35:29
No es para quedarme con vuestra casa,
00:35:31
si con vuestra casa ya me he quedado.
00:35:32
Es por tener esa alimentación.
00:35:34
¿Cuándo se habéis acabado desconectando?
00:35:36
¿De verdad, con absoluta sinceridad?
00:35:37
No sé si entero.
00:35:40
No sé si entero.
00:35:42
La vez más y más.
00:35:43
Vale.
00:35:45
¿Los demás que han levantado la mano
00:35:46
no han acabado desconectando y lo han seguido?
00:35:47
Bueno, pues habéis desconectado unos cuantos.
00:35:50
¿Y por qué habéis acabado desconectando?
00:35:53
¿Por qué se ha terminado?
00:35:54
¿Por qué mucho rato hablando seguido?
00:36:00
Sí, pero bueno, a ver, si entiendes
00:36:12
que si esta condición
00:36:14
pones la negada,
00:36:16
lo que toca hacer cuando esta condición se cumple
00:36:18
tocaría hacerlo cuando no se cumple
00:36:20
porque has puesto la negada.
00:36:22
Y si tú esta condición,
00:36:24
llámale A.
00:36:26
Cuando A se cumple, haces esto.
00:36:27
Y cuando A no se cumple, haces esto.
00:36:29
Si en lugar de A pones
00:36:31
si en lugar de A
00:36:33
pones la negada de A,
00:36:37
cuando A se cumple,
00:36:40
entonces toca hacer lo que hay aquí.
00:36:42
Y cuando no se cumple, toca hacer esto.
00:36:43
Entonces, siempre que cambias con un negado delante
00:36:45
la condición que hay aquí,
00:36:48
lo que hay aquí pasa aquí, lo que hay aquí pasa aquí.
00:36:49
Claro, y estás haciendo lo mismo, en realidad.
00:36:52
¿Vale?
00:36:54
Entonces, ¿eso para qué lo hemos hecho?
00:36:54
Pues si te queda un if vacío
00:36:57
Que queda muy feo, porque el if es obligatorio
00:36:59
Y no lo puedes quitar, si te queda un if vacío
00:37:00
Cámbiala, y lo del else pasa al if
00:37:02
Y el if al else
00:37:05
Y al else, como se queda vacío, lo puedes quitar
00:37:06
Claro, para cambiar
00:37:08
Esto pasa aquí y esto pasa aquí
00:37:11
Si le pones el negado delante
00:37:14
Bueno, pues a ver
00:37:15
Tenemos aquí
00:37:18
Unos cuantos ejercicios
00:37:25
Bueno, algunos mejores que peores
00:37:28
Unos más ilustrativos, otros menos
00:37:30
Tampoco es que vaya en orden de dificultad
00:37:33
Van un poco bueno
00:37:35
Como hemos podido sobrevivir
00:37:37
A ver
00:37:39
Vale, pues venga
00:37:40
Si volvemos al aula
00:37:58
Ah, que ya los he descargado
00:38:00
Ah, no, no los he descargado
00:38:01
Ah, perdón
00:38:02
Vale, pues sí
00:38:13
¿Qué?
00:38:24
¿Que lo adelantemos?
00:38:28
Vale, lo adelantamos
00:38:29
Venga, vale, paramos aquí
00:38:33
- Subido por:
- Raquel G.
- Licencia:
- Todos los derechos reservados
- Visualizaciones:
- 10
- Fecha:
- 7 de octubre de 2024 - 18:33
- Visibilidad:
- Clave
- Centro:
- IES ROSA CHACEL
- Duración:
- 38′ 43″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1920x1080 píxeles
- Tamaño:
- 1.23