Activa JavaScript para disfrutar de los vídeos de la Mediateca.
Clase 11-12-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 venga, vamos entonces a resolver ese primer ejercicio con ese esquema que hemos planteado ahí, vamos a empezar ahora ya a programar ese esquema, que ya son partes pequeñitas que sabemos hacer, pero insisto, importante que tengamos ya un primer diseño montado en la cabeza o en un papel o donde sea,
00:00:02
sobre todo es un ejercicio más largo
00:00:21
es un ejercicio corto, a lo mejor uno esto lo hace
00:00:23
de tirón y ya está, vale, lo hace de tirón
00:00:25
pero en cuanto sea un poquito
00:00:28
más complejo, pues tiene
00:00:29
mucho peligro hacerlo de un tirón
00:00:31
examen 4 de diciembre
00:00:33
vale, pues venga, vamos a empezar
00:00:37
a hacerlo siguiendo ese
00:00:59
esquema que he puesto hoy ahí, luego ya
00:01:01
otra cosa es que uno cuando vea ya una
00:01:03
versión ahí, diga, hombre, pues esto a lo mejor
00:01:04
la puedo dejar más bonito si hago una función
00:01:07
aparte, o si cambio la
00:01:08
sentencia y en lugar de esta pongo esta otra, ¿vale? Pero eso ya son refinamientos, digamos,
00:01:11
posteriores. Bueno, aquí ya tenemos ya bastante hecho. Por supuesto, ya sabemos que tenemos
00:01:17
que leer del teclado, con lo cual esto no nos queda más remedio que ponerlo, porque
00:01:21
vamos a leer del teclado el numerito. ¿Qué más cosas hemos dicho? Que vamos a leer un
00:01:29
único número, no un montón de ellos, ni de cadenas, ni de nada, un único número.
00:01:38
pues ya está, una variable para él
00:01:43
bueno, llamémosle n
00:01:45
ya que en el enunciado lo llama n mayúscula
00:01:47
pues llamémosle así
00:01:50
ahí va a ir ese numerito
00:01:51
vale, entonces ahora
00:01:53
haríamos esa primera parte
00:01:55
leer número
00:01:58
esa primera parte que hemos dicho que es
00:01:59
no me basta
00:02:02
hacer esto sin más
00:02:03
no me basta hacer esto sin más
00:02:04
insisto, no basta porque el ejercicio
00:02:22
dice que para empezar
00:02:25
a operar aquí
00:02:26
hay que asegurarse de que es positivo
00:02:27
entonces yo no puedo leerlo sin más
00:02:30
el ejercicio dice no
00:02:32
verifica que el número es positivo
00:02:33
solo hay una posibilidad que es obligarle
00:02:35
obligarle al que se sienta ahí
00:02:38
obligarle a que lo introduzca una y otra vez
00:02:40
una y otra vez, una y otra vez
00:02:42
hasta que sea positivo
00:02:43
y eso es un bucle, claro
00:02:44
vale, pues entonces no me queda más remedio
00:02:46
que meter esto en un bucle
00:02:49
y así todo el rato
00:02:51
se tiene que meter en el bucle
00:02:59
siempre y cuando el número
00:03:01
siga siendo negativo
00:03:04
¿verdad?
00:03:05
mientras el número
00:03:08
siga siendo negativo
00:03:09
una y otra vez pide número, léelo
00:03:11
que sigue siendo negativo
00:03:13
pide número y léelo
00:03:15
que sigue siendo negativo, pide número y léelo
00:03:16
vale
00:03:19
eso está claro
00:03:20
y ahora ya estas cosas ya las sabemos
00:03:22
como yo he puesto un while
00:03:24
no he puesto un do while
00:03:26
que podría haber puesto un do while, pero he puesto un while
00:03:28
pues la primera vez
00:03:30
que entra por aquí el programa
00:03:33
me dice, oye, ¿qué hago la primera vez?
00:03:35
¿Entro o no entro?
00:03:37
La primera vez queremos que entre sí o sí
00:03:38
porque la primera lectura tiene que hacerla
00:03:40
al menos una tiene que hacerla
00:03:42
la primera vez queremos que entre sí o sí
00:03:43
Bueno, pues vamos a inicializar n
00:03:45
a un valor
00:03:47
que nos aseguremos
00:03:49
de que va a entrar una primera vez
00:03:51
¿Vale?
00:03:53
¿Vale? Pues nada
00:03:57
Entra la primera vez
00:03:58
introduce número, lo leo, que es menor que cero, introduce número, lo leo, que es menor que cero,
00:04:00
cuando salgo de este bucle es porque esta lectura n ha sido mayor o igual,
00:04:09
entonces al ser mayor o igual, cuando vamos aquí, este dice no, ya no más, y llegamos a este punto,
00:04:14
¿Vale? La historia de siempre. La historia de siempre. Ahora, que esto uno lo hace con un do while o lee el primer numerito fuera y luego hace un while para la siguiente si es que es negativo, eso ya son cosas menores, entre comillas.
00:04:20
¿vale? lo que importa es el diseño del ejercicio
00:04:37
el diseño es este
00:04:40
un único dato de entrada, pues una variable
00:04:40
ya está, un único dato de entrada
00:04:44
lo leo, lo leo y me vale cualquiera
00:04:45
no me vale cualquiera
00:04:48
necesito que sea positivo antes de continuar
00:04:49
pues entonces tengo que
00:04:52
forzar ahí una y otra vez
00:04:54
forzar ahí una y otra vez hasta que se cumpla
00:04:56
esa condición, bueno
00:04:58
vale, pues ahora
00:04:59
ya tenemos la seguridad
00:05:03
en este punto, ya tenemos aquí
00:05:05
la seguridad de que n va a ser mayor o igual que 0
00:05:07
si el enunciado me dice estrictamente positivo
00:05:11
que en principio positivo
00:05:14
a ver, matemáticamente el 0 no se considera positivo
00:05:16
entonces bueno, podríamos hacer esto
00:05:20
y así no tendríamos en cuenta el 0
00:05:23
obligaríamos a que fuera estrictamente positivo
00:05:28
esto ya es, ante la duda
00:05:31
pues uno pregunta al que ha puesto denuncia y dice, a ver, ¿el cero te vale o el cero tampoco?
00:05:38
Ante la duda, en esos casos extremos, se pregunta, ¿te vale el cero o el cero no te vale?
00:05:45
Tiene que ser mayor que cero.
00:05:50
Y ya te dirán, no, no, no, cuando yo digo positivo digo mayor que cero, no mayor o igual.
00:05:53
Y ya entonces se aclara ese detalle, ¿vale?
00:05:57
Vale, pues entonces en ese punto ya sabemos que no es mayor que cero.
00:06:02
Y ahora lo siguiente que hay que hacer, pues ya lo hemos visto, ahora ya estamos ahí, ya estamos en este punto.
00:06:05
Ahora, ¿qué tenemos que hacer? Pues en un cialice depende, si es mayor que 100, me haces una media, y si es menor que 100, me haces otra.
00:06:12
Bueno, pues entonces ahí ya decimos, vale, pues ahí abro ya las dos ramas.
00:06:21
vale, aquí ya me dice
00:06:24
si es menor que 100
00:06:32
tienes que hacer la media de todos los impares
00:06:34
entre n
00:06:37
que es menor que 100 y 100
00:06:38
y si es mayor que 100, otra cosa
00:06:40
bueno, pues nada, entonces no nos queda más remedio
00:06:41
que hacer un if ahí
00:06:44
vale, pues venga
00:06:45
100 es mayor que 100
00:06:47
ahora ya tenemos que hacer
00:06:52
la media
00:06:54
de todos los números comprendidos
00:06:56
entre 100 y n, luego esto ahora ya es la suma acumulativa de toda la vida, una variable
00:06:58
que empiece valiendo n, se va incrementando de 1 en 1, y voy a una variable suma que empieza
00:07:04
valiendo 0, le voy acumulando todos esos valores, todos esos valores que voy generando, primero
00:07:12
es el n, luego el n más 1, luego el n más 2, vale, la suma acumulativa como he hecho
00:07:19
siempre, entonces esta suma acumulativa
00:07:24
pues uno
00:07:26
si la cascamos
00:07:28
tal cual, pues sería una variable
00:07:30
que empieza valiendo 0
00:07:32
vale, una variable que empieza valiendo 0
00:07:33
y ahora, un bucle
00:07:36
un bucle
00:07:37
que va generando todos los
00:07:39
valores entre n y 100
00:07:42
entre n y 100, todos los valores
00:07:44
100 es mejor que n, entre 100 y n
00:07:46
entre 100 y n
00:07:48
una variable que va generando todos los valores
00:07:49
entre 100 y n
00:07:52
y los voy sumando a esa variable suma
00:07:53
hombre aquí lo más sencillo es usar un for
00:07:56
porque el for ya me da esa variable
00:07:59
a través del índice
00:08:01
ya me la da
00:08:02
pues desde i igual a 100
00:08:03
que es el primero
00:08:06
mientras i sea menor o igual que n
00:08:06
perdón, menor o igual que n
00:08:11
incrementando i
00:08:15
pues el for me viene aquí estupendo
00:08:17
porque el for recordad
00:08:20
que cuando lo usamos con esta sintaxis
00:08:22
me da ya directamente una variable
00:08:25
que empieza valiendo el valor que yo le diga
00:08:27
se va incrementando aquí en cada iteración
00:08:30
y acaba cuando llega al valor que yo le diga
00:08:33
entonces pues perfecto, tengo ahí mi variable i
00:08:37
que son precisamente todos los sumandos
00:08:39
todos esos sumandos que yo quiero meter a la suma
00:08:41
son esos, la variable i, ya está
00:08:43
pues entonces la suma acumulativa en este caso
00:08:46
sería suma más igual i, ¿vale?
00:08:49
Pero ojo, el enunciado no dice sumar todos los números entre i y n mayúscula,
00:08:57
no dice sumarlos todos, dice suma sólo los que sean,
00:09:03
si es menor que 100, suma los que sean impares, suma sólo los que sean impares,
00:09:07
entonces tengo que sumar solo los i's
00:09:16
que sean impares, solo
00:09:19
ah, perdón, estoy entre 100 y n
00:09:21
si n es mayor que 100, estoy en el caso de abajo
00:09:27
si el número es mayor que 100, vale, los pares
00:09:29
vale, pues no tengo que hacer
00:09:33
no tengo que sumarlos todos, no tienen que ir a suma todos
00:09:35
solo tienen que ir los que sean pares, hemos dicho
00:09:39
vale, pues ya está, eso lo arreglamos así
00:09:42
Si el número i es par, es decir, el resto de dividirlo entre dos, resulta que este resto me da cero, pues entonces sí lo sumo, esta llave la puedo quitar si quiero, porque lo único que tiene el for dentro es esta sentencia i, ¿vale?
00:09:45
vale, pues entonces, 100 es mayor que 100
00:10:03
con esto me echo la suma acumulativa
00:10:07
de todos los pares
00:10:10
vale, pero me está diciendo
00:10:11
que no quiere la suma, sino quiere la media
00:10:13
la media es
00:10:16
esa suma dividida entre el total
00:10:18
de números que yo he sumado
00:10:20
entre el total de números que yo he sumado
00:10:21
vale, entonces, ¿qué nos falta incorporar aquí?
00:10:24
por ejemplo
00:10:30
tenemos que contar
00:10:31
todos los pares
00:10:33
comprendidos entre
00:10:35
n y 100 o entre 100 y n
00:10:37
todos los pares y ahora ya
00:10:39
que son los que hemos sumado, hemos sumado los pares
00:10:41
y ahora ya
00:10:43
pues la media será esa suma entre todos los pares
00:10:45
entonces lo más seguro
00:10:48
es que incorporemos un contador
00:10:50
que cuente, pero también
00:10:52
hombre, los pares comprendidos entre
00:10:53
100 y n, bueno entre n y 100
00:10:55
será la mitad de los números
00:10:58
entre n y 100
00:11:00
n-100 son los números que hay entre n y 100
00:11:00
pues la mitad de ellos eran los pares
00:11:03
pero vamos
00:11:04
que para hacerlo seguro
00:11:07
pues podríamos decir
00:11:09
ah vale, me falta un contador
00:11:11
pues ya está, contamos aquí
00:11:12
todos los numeritos pares que empiezan a 0
00:11:14
y ahora
00:11:16
si el número es par
00:11:18
incremento el contador
00:11:22
ya tengo un par más
00:11:26
y además lo sumo
00:11:31
Bueno, pues cuando ese fuera terminado tenemos aquí todos los números pares sumados que van entre 100 y n.
00:11:36
Y además nos dice cuántos hay, cuántos he sumado.
00:11:44
Ha sumado 7 números, ¿vale?
00:11:47
Si n es 105, pues habrá sumado el 100, el 102 y el 104.
00:11:50
Esos son los que habrá sumado el 100, el 102 y el 104.
00:11:59
y contador será 3
00:12:03
habrá habido 3 números
00:12:06
el 100, el 102 y el 104
00:12:09
contador será 3
00:12:11
y la suma será 100 más 102 más 104
00:12:12
lo que sea
00:12:16
bueno pues cuando haya acabado el for
00:12:17
ya podemos mostrar la media
00:12:19
que aquí la media será pues esto
00:12:21
la suma entre esto de aquí
00:12:30
bueno pues 100 es mayor que 100
00:12:37
ya lo tenemos
00:12:46
100 es mayor que 100
00:12:46
hay que hacer esta suma acumulativa de todos los números comprendidos entre 100 y n
00:12:47
pero como es media, pues además vamos a contarlos
00:12:51
y solo de los pares, 100 es menor que 100
00:12:55
entonces aquí vamos a ser estrictos porque 100 es igual a 100
00:13:01
pues se quedaba medio abierto, entonces si n es menor que 100
00:13:05
pues en realidad es lo mismo que de arriba
00:13:10
prácticamente, puedo copiar y pegar, lo único que tengo que cambiar son los extremos
00:13:17
de aquí, los extremos
00:13:21
y esto poner distinto
00:13:22
en vez de igual
00:13:25
pero puedo copiar y pegar este código
00:13:25
puedo copiar y pegarlo
00:13:28
y adaptarlo
00:13:38
contador de impares
00:13:39
ahora, el número es menor que 100
00:13:41
luego
00:13:48
el extremo inferior
00:13:49
del que yo parto es n
00:13:51
y el extremo superior es 100
00:13:53
y esto es distinto
00:13:56
y lo demás se queda todo intacto
00:14:03
vale
00:14:05
He hecho lo mismo, pero ahora ya, si el número es menor que 100, mediante este bucle for voy generando todos los números, empezando desde el n y acabando en el 100, los voy generando todos, con cada uno de ellos, si es impar, lo cuento, tengo uno más en la cuenta y lo sumo, en esa suma que empezó siendo 0, claro, cuando el for ha terminado, la media es, ahí tengo que cambiar la variable y ya está.
00:14:06
Ahora la pregunta natural es
00:14:42
Uy, 100 es igual a 100
00:14:46
¿Qué hago con él?
00:14:48
Porque los casos extremos siempre se quedan
00:14:49
Como abiertos en un enunciado
00:14:51
A veces se quedan abiertos
00:14:53
Es difícil especificar exactamente
00:14:56
En cada caso extremo que hacer
00:14:58
Entonces a la pregunta, ¿y con 100 qué hago?
00:14:59
Bueno, pues yo lo que os digo cuando preguntáis
00:15:02
Es, me da igual, que lo metáis en los extremos
00:15:04
Que lo hagáis aparte
00:15:06
Da lo mismo
00:15:08
Por ejemplo, en este caso
00:15:09
Si el número es 100
00:15:11
pues, si lo consideramos
00:15:13
como
00:15:16
en la parte de que fuera
00:15:16
menor, 100 menor que 100
00:15:20
sumo los pares, como es par
00:15:21
me quedaría 100, si lo consideramos
00:15:23
en la otra me quedaría 0, os dije, da igual
00:15:25
lo que os dé la gana
00:15:27
pues mira, vamos a poner aquí, ya está
00:15:28
el número es 100, el que me has dado
00:15:31
da igual, lo que sea, me da lo mismo
00:15:39
bueno, pues esta es
00:15:41
la resolución del ejercicio
00:15:48
teniendo en cuenta
00:15:52
esta escenita de aquí
00:15:55
nosotros nos hemos hecho este mapa
00:15:57
y hemos dicho, vale, ahora hay otra cosa
00:15:59
es que uno pueda retocar esto
00:16:01
para que le quede más corto, más bonito
00:16:03
para hacerlo con una función aparte
00:16:05
al que tú le pasas
00:16:08
pues el numerito n
00:16:09
y él ya esa función
00:16:11
ya detecta si es mayor o menor
00:16:14
que 100 y te hace la suma que sea
00:16:15
esto ya se puede retocar de muchas maneras
00:16:17
o por ejemplo, pues pensar
00:16:19
hombre, para qué arrastrar este if todo el rato, porque si yo aquí voy incrementando en lugar de uno en uno, incremento de dos en dos,
00:16:21
pues ya sé que todos los que se generen no son todos pares o son todos impares, a partir de aquí ya se pueden hacer un montón de modificaciones del código
00:16:35
para que haga lo mismo, pero que quede más cortito y más claro, ¿vale? Pero da igual, en realidad en el fondo da igual,
00:16:42
La máquina virtual va a hacer el mismo número de ejecuciones
00:16:50
Es solamente que el código
00:16:52
Pueda ser más claro, a lo mejor, o más bonito
00:16:54
Para quien lo vea
00:16:56
Pero a ver, lo importante es entender qué se hace de fondo
00:16:57
Y lo que se hace de fondo son estos bloques
00:17:03
Leo la entrada
00:17:05
Decido qué estructura de datos quiero para ella
00:17:06
La decido, fundamental
00:17:09
En este caso la decisión era muy clara
00:17:10
Un único número, una única variable
00:17:13
Vale, ¿cómo voy a tener que leer esa entrada?
00:17:15
Pues la tienes que leer verificándola
00:17:18
Pues ya sé
00:17:19
Y ahora ya, pues opero
00:17:20
opero y a partir de ahí decido
00:17:21
que tengo que hacer, pues es una suma, tengo que contar
00:17:24
tengo que hacer un máximo, tengo que
00:17:26
hacer lo que sea con esos datos
00:17:28
a ver, alguna pregunta o duda
00:17:29
o cosa rara, bueno
00:17:34
pues vamos con el siguiente
00:17:42
vale, pues este de aquí
00:17:43
ya tiene alguna cosa un poquito
00:18:14
es más sencillo y más corto de hacer
00:18:16
pero tiene una cosa un poquito más rara
00:18:18
porque ya implica tomar ciertas
00:18:20
decisiones de diseño, o sea
00:18:23
este no te dice, tienes que usar estas variables
00:18:24
No, tienes que decidir qué variables necesitas para que esto funcione.
00:18:26
Entonces, es un menú, después de leer uno esto varias veces, pues ya nos ronde que es un menú y cada opción hace cosas distintas.
00:18:32
Bueno, pues al menos la primera estructura la tenemos, porque sabemos hacer un menú, pues que es siempre lo mismo.
00:18:40
Un do while, do, muestra menú, lee opción y switch case en función de la opción y así todo el rato.
00:18:48
muestra menú, lee opción y switch case
00:18:55
en función de la opción, así todo el rato
00:18:57
o sea, la primera estructura la tenemos
00:18:59
ahora ya hay que ver
00:19:00
en cada opción que hay que hacer
00:19:02
entonces
00:19:05
uno se tiene que hacer
00:19:07
más o menos una visión así un poquito global
00:19:09
este menú lo que tiene
00:19:11
de raro es
00:19:13
que esta opción
00:19:15
solo se muestra
00:19:17
si se ha hecho
00:19:19
login antes
00:19:21
entonces
00:19:22
aquí ya pensamos
00:19:26
vamos a ver, yo tengo que detectar
00:19:28
de alguna manera
00:19:30
si el usuario
00:19:31
ha hecho login
00:19:35
previamente o no lo ha hecho
00:19:36
tengo que detectar si algo ha pasado
00:19:38
o no ha pasado
00:19:40
pues ahí automáticamente ya
00:19:41
se nos viene a la cabeza
00:19:44
uy en mi aplicación va a tener que haber un boolean
00:19:45
que me permita a mi
00:19:48
distinguir si hay
00:19:50
login hecho o si no lo hay
00:19:52
Porque en función de ese boolean, en función de si hay login hecho o no lo hay, esto se va a mostrar o no.
00:19:54
Entonces, primer elemento de diseño que era el más importante de esta aplicación,
00:20:03
el darnos cuenta de que para mostrar el menú necesitamos saber si algo pasa o no pasa.
00:20:07
Es decir, si se ha hecho login o no se ha hecho.
00:20:15
Porque este system out de aquí, ahora lo escribiremos, este system out, va a tener que ir en un if.
00:20:17
Es decir, oye, si se ha hecho login muestra esto y si no, no. Entonces, para saber si algo pasa o no pasa, para que eso quede registrado en mi programa y yo pueda trabajar con esa condición, tiene que haber un boolean.
00:20:22
pues un boolean tiene que haber
00:20:36
un boolean que sea usuario logado
00:20:38
por ejemplo, usuario logado
00:20:40
y ese boolean tendrá que estar
00:20:42
a true o a false, inicialmente
00:20:45
cuando la aplicación arranca
00:20:47
ese boolean estará a false
00:20:49
porque nadie se ha hecho login
00:20:50
claro, y cuando se va a poner a true
00:20:52
pues se va a poner a true
00:20:55
en el case de aquí
00:20:57
entonces ese boolean
00:20:59
ese boolean será un boolean que está ahí
00:21:02
que empieza siendo false
00:21:05
y que cuando se pone a true
00:21:06
cuando se dé esta opción
00:21:08
luego esta opción de aquí de hacer login
00:21:10
está sencilla como, bueno, primero pedir la contraseña
00:21:12
claro, y luego poner el boolean a true
00:21:15
y ahora ya
00:21:16
la siguiente vez que se muestre el menú
00:21:18
ya sí que saldrá esto
00:21:20
porque esta depende de ese boolean
00:21:22
entonces era una de las dos cosas
00:21:24
críticas del ejercicio
00:21:26
el identificar
00:21:28
que necesitamos un boolean para distinguir
00:21:30
dos situaciones, usuario logado
00:21:32
el identificar que tendríamos un Boolean
00:21:35
para distinguir dos situaciones
00:21:38
y luego ya la otra cosa crítica
00:21:40
pues hacer el tema de trabajar aquí
00:21:43
con los caracteres para validar la contraseña
00:21:45
eso ya era trabajar con la tabla ASCII
00:21:47
lo que se harán las dos partes del ejercicio
00:21:50
las dos en las que había dificultad
00:21:52
bueno, pues vamos a plantear entonces este
00:21:55
este menú
00:21:59
Si nosotros primero planteamos la primera arquitectura del ejercicio
00:22:02
Que es el do while de toda la vida
00:22:07
Con menú, leer opción y switch case
00:22:08
Primero planteamos eso
00:22:10
Ya nos vamos a ver
00:22:12
Que tenemos que hacer en cada case
00:22:13
Que variables vamos a necesitar, etc
00:22:15
Vale, pues venga
00:22:17
Hemos dicho que aquí va a haber un menú
00:22:25
A ver, las opciones serán
00:22:27
Establecer
00:22:33
O modificar, depende
00:22:37
Contraseña, voy a poner password por la ñ
00:22:40
Vale, está la opción 1, por ejemplo
00:22:44
La opción 2
00:22:50
Login, vale
00:22:57
La opción 3, logout, es la que vamos a tener que meter en un if
00:23:04
Y la opción 4 ya era salir, ¿verdad?
00:23:08
Login, logout y salir
00:23:18
Vale
00:23:20
Vale, leemos opción
00:23:22
Entonces, para leer opción, el escáner de siempre
00:23:34
Pues venga, el escáner
00:23:36
¿Vale? La opción, pues por ejemplo, va a ir a esta variable
00:23:38
Pues aquí leemos la opción
00:23:50
Ahora, esto ya me permite completar el while
00:23:54
Y digo, a ver, muestra menú, lee opción
00:24:09
Mientras que, mientras la opción sea diferente
00:24:13
¿De cuál? De 4, que es la de salir
00:24:16
vale, esta es la estructura de siempre
00:24:20
muestra menú, lee opción
00:24:24
el switch case que nos falta
00:24:26
por poner ahora y todo esto
00:24:28
mientras la opción leída sea
00:24:30
diferente a la de salir, así todo el rato
00:24:31
vale, pues aquí nuestro
00:24:33
switch case
00:24:36
va a depender de esa
00:24:37
variable opción
00:24:40
y ahora ya sabemos que esto
00:24:40
será en el caso
00:24:44
de que sea 1
00:24:45
pues habrá que ver que
00:24:49
hacemos, y break, y así con el resto de opciones, caso 2, caso 3, caso 4, el caso 4 es el más
00:24:51
fácil, el caso 4, cuando se dé la opción de salir, no hay nada que hacer, bueno, podemos
00:25:13
incluirle, para que quede un poco más bonito, esto y ya está, en el caso 4, hay poco que
00:25:18
hacer, vale, pues a ver, en el caso de que se dé la opción login, bueno, vamos a hacer
00:25:28
el primero de contraseña, vale, pues a ver, vamos a lo primero que hemos dicho, hemos
00:25:42
dicho, cuidado, vamos a empezar a retocar esto, esto de aquí ya hay que retocarlo,
00:25:48
eso no se tiene que mostrar siempre, el programa dice que eso se va a mostrar solo si estamos
00:25:53
en la situación de haber hecho login, solo en esa situación, entonces ese es el primer
00:26:00
sitio donde hay que atacar, de esta estructura general que hemos hecho, el primer sitio donde
00:26:06
hay que atacar para modificarlo es aquí, porque esto no se va a mostrar siempre, esto
00:26:10
se va a mostrar solo si ha habido un usuario que ha hecho login antes, solo, pues entonces
00:26:17
yo ahí tengo que poner un if para que eso se muestre solo si una situación se ha dado,
00:26:25
Vale, pues aquí es donde nos viene
00:26:29
La solución de antes
00:26:31
Ah, vale, como yo tengo que distinguir
00:26:33
Entre si hay usuario logado o no hay usuario logado
00:26:35
Como tengo que distinguir
00:26:37
Necesito un boolean
00:26:38
Para distinguir esas dos situaciones, la necesito
00:26:40
Pues nada, necesito un boolean para eso
00:26:43
Pues aquí viene mi boolean
00:26:46
Que uno lo llama como quiera
00:26:47
El nombre más explicativo posible
00:26:50
Como ese boolean significa
00:26:55
Que hay un usuario que ha hecho login antes
00:26:57
pues lo llamo usuario logado, vale, entonces ahora ya este if sería, si hay un usuario logado muestra la opción de logout, si no lo hay no, si no lo hay no, vale, como era previsible, claro eso me lo pone en rojo el compilador porque me dice, oye, yo llego aquí la primera vez de todas, llego aquí la primera vez y usuario logado está sin definir, está sin inicializar,
00:26:59
no puedo evaluar si eso es true o false
00:27:28
es imposible
00:27:30
bueno, pues entonces pensamos
00:27:32
ah, ¿cómo lo inicializo?
00:27:34
vale, ¿qué quiero yo que pase la primera vez?
00:27:36
la primera vez el usuario no está logado
00:27:38
es imposible, es la primera vez que muestro el menú
00:27:40
es la primera vez que lo muestro
00:27:42
la primera vez que lo muestro
00:27:43
es que no hay login
00:27:45
vale, pues entonces
00:27:46
esto inicialmente
00:27:49
false
00:27:51
bueno, pues entonces ahora ya
00:27:52
la primera vez que se arranca el programa
00:27:56
la primera vez la opción de logout
00:27:59
no se mostrará, claro, no se mostrará
00:28:01
es lo que queremos, que no se muestre
00:28:03
bueno
00:28:05
pues entonces
00:28:10
vamos con el resto de opciones
00:28:11
vamos una por una
00:28:14
caso 1
00:28:15
nos dice establecer
00:28:20
modificar contraseña
00:28:22
y aquí ya empieza diciéndome
00:28:24
de nuevo tienes dos situaciones posibles
00:28:26
a la hora de hacer esta opción
00:28:28
que ya tengas una contraseña
00:28:31
establecida de antes
00:28:33
o no
00:28:34
porque es la primera vez que se da la opción
00:28:35
porque es la primera vez que el usuario
00:28:38
da al 1, si es la primera vez que el usuario
00:28:39
da al 1
00:28:42
no hay una contraseña establecida
00:28:42
entonces aquí de nuevo
00:28:44
te dice, oye tienes dos ramas
00:28:46
aquí dentro de este case tienes dos posibilidades
00:28:49
que la contraseña
00:28:51
no esté porque es la primera vez
00:28:53
que le das a esa opción de establecer
00:28:55
o que la contraseña esté
00:28:57
si está, lo único que tienes que hacer
00:28:58
es pedir una nueva, validarla
00:29:01
y guardarla, si no está
00:29:03
tendrás también que pedir una nueva y validarla
00:29:05
pero antes
00:29:07
tendrás que pedir la antigua
00:29:08
y que te meta la antigua
00:29:10
y tú compruebes que la que te mete es igual
00:29:13
que la que tenías, entonces
00:29:15
lo primero para un organizarse es, oye
00:29:16
cuidado, que en ese case 1 tengo dos
00:29:19
posibilidades, que haya
00:29:21
contraseña establecida o que no lo haya, cuidado
00:29:23
tengo que trabajar de forma distinta
00:29:25
eso es lo primero, vale
00:29:26
bueno, pues esa condición
00:29:28
en que se basa
00:29:30
Lo que acabo de decir, que la contraseña de esa aplicación esté ya establecida o no.
00:29:32
Bueno, pues entonces es que, claro, necesito una variable que guarde la contraseña.
00:29:38
Necesito una variable para guardar la contraseña.
00:29:42
Y si esa variable tiene un valor o si no lo tiene,
00:29:44
no va a permitir a mí decidir si es la primera vez que he entrado o que no.
00:29:47
Pero una variable para guardar la contraseña la necesito.
00:29:52
Bueno, pues entonces, ¿la contraseña de qué tipo va a ser?
00:29:55
Pues de tipo string, ¿verdad?
00:29:59
vale, pues por ejemplo
00:30:00
esa puede ser
00:30:08
mi variable
00:30:09
para la contraseña, mi variable string
00:30:13
y ahora
00:30:15
en el caso 1
00:30:18
yo ahora aquí tengo que decidir
00:30:19
si esta variable contraseña
00:30:21
tiene ya algún valor
00:30:23
o no tiene ninguno
00:30:26
porque en función de si tiene algún valor o no tiene ninguno
00:30:27
estoy en el caso de establecer
00:30:30
o modificar
00:30:32
vale, tenemos que distinguir entonces si tiene algún valor o no tiene ninguno
00:30:33
Entonces, aquí uno puede operar de muchas maneras
00:30:36
Una, acordarse de lo que hemos dicho otras veces
00:30:39
Que las variables string son objetos en realidad
00:30:43
Y cuando no les doy ningún valor
00:30:48
Lo que tienen es null
00:30:50
Entonces, en el caso 1
00:30:51
Yo podría distinguir que la contraseña
00:30:54
Todavía no tiene ningún valor
00:30:57
Haciendo esto
00:30:58
Si password es igual a null
00:31:00
¿Vale?
00:31:04
y entonces, si password es igual a nulo
00:31:06
haz alguna cosa
00:31:11
y si no
00:31:12
hago otra
00:31:14
¿vale?
00:31:17
sí, sí, sí, podrías, lo que pasa es que el boolean
00:31:21
ese sería igual que poner password igual a nulo
00:31:23
entonces te ahorras ese boolean
00:31:26
si pones directamente la condición, pero podrías
00:31:27
hacer un boolean que fuera
00:31:29
¿existe contraseña o no existe?
00:31:31
el primero es por la función y el segundo es la contraseña
00:31:33
efectivamente
00:31:35
y entonces tiras de ese boolean
00:31:37
En lugar de tirar de la condición directamente
00:31:39
Lo que pasa es que aquí no te hace falta el boolean
00:31:41
Porque tienes esto para compararlo
00:31:44
En el otro caso
00:31:46
Tienes que tener el boolean
00:31:46
Porque es que no hay otra forma
00:31:48
De saber si el usuario está logado o no
00:31:49
Aquí tienes una forma de saberlo
00:31:51
Aparte del boolean
00:31:52
¿Vale?
00:31:53
Entonces
00:31:54
Que lo del null todavía son a chino
00:31:55
Porque no nos hemos metido en objetos ni nada
00:31:59
Pues uno tranquilamente podría decir
00:32:00
Oye
00:32:03
Mi password
00:32:04
la inicializo a esto
00:32:06
cuando mi aplicación arranca
00:32:09
cuando la aplicación arranca
00:32:11
mi password no tiene nada
00:32:13
está así, mi password no tiene nada
00:32:14
y entonces ahora yo digo
00:32:16
oye
00:32:19
si password
00:32:19
es igual
00:32:22
a esto
00:32:24
recordad que para comparar un string con otro
00:32:26
siempre se hace aquí
00:32:29
no con el doble igual
00:32:30
que me habéis comparado muchísimo
00:32:32
en los exámenes, un string con otro string con doble o igual, nunca se comparan con doble o igual, dos strings, se comparan así, entonces esta condición sería, si mi contraseña es igual al vacío, pues si mi contraseña es igual al vacío, entonces es la primera vez que entro en la aplicación, no la he establecido, porque si la hubiera establecido, la aplicación se habría encargado de constatar de que tiene al menos un carácter, al menos una minúscula,
00:32:34
Con lo cual, esa condición significa que es la primera vez que entro
00:33:01
No hay contraseña, es la primera vez que entro, no hay contraseña
00:33:06
Vale, pues ya tengo los dos casos distinguidos
00:33:09
Si es la primera vez que entro, tengo que hacer una cosa, que es esto
00:33:12
Y si es la segunda, tengo que hacer otra cosa, que es esto
00:33:15
¿Vale? Inicialmente no la tengo
00:33:18
Inicialmente, usuario logado, falso
00:33:20
E inicialmente la contraseña es vacía
00:33:23
Vale, pues ahora entro en la opción 1, establecer contraseña
00:33:26
Pues venga, ¿qué es la primera vez que entro? Porque no existe, ¿qué hay que hacer? Pues introduzca la nueva contraseña, la leemos y ahora ya meternos en ese bucle que la va validando mientras no cumple la condición de tener un carácter mayúsculo o no minúsculo y uno no sé qué.
00:33:31
Entonces, aquí le diríamos introduzca contraseña, entonces aquí la contraseña, uno pues la leería como leemos los string del teclado, que los leemos con next line, ¿vale?
00:33:52
y ahora de nuevo viene lo mismo
00:34:19
pasa lo de siempre, ya está
00:34:21
la leo y se acabó y ya paso
00:34:23
al siguiente case
00:34:25
no
00:34:27
no vale cualquier contraseña
00:34:28
no vale, vamos a tener
00:34:32
que meter esto en un bucle de verificación
00:34:34
otra vez lo mismo, esto en un while
00:34:35
para estarle pidiendo la
00:34:37
password una y otra vez, una y otra vez
00:34:39
mientras no cumpla que sea
00:34:41
válida, vale
00:34:43
pero al menos ya tenemos hecho bastante
00:34:45
O sea, ya el ejercicio está ya bastante orientado, ya he distinguido en este caso, ¿qué es la primera vez? Lo que tienes que hacer es pedir una nueva, ¿vale? Pides una nueva y la estableces, pero ojo, no vale cualquiera, si valiera cualquiera ya estaría esta parte, no vale cualquiera, pues de nuevo hay que meter esto en un bucle de verificación.
00:34:47
aquí el tema es que el bucle de verificación
00:35:07
no es tan sencillo como el anterior
00:35:10
mientras n sea menor que 0
00:35:11
no, aquí sería
00:35:13
mientras la password no cumpla
00:35:15
tener un icono mayúsculo, una minúscula y un no
00:35:17
o sea, eso no es tan fácil
00:35:20
expresar esa condición no es tan sencilla
00:35:21
pero en cualquier caso
00:35:23
habrá que meter esto en ese bucle
00:35:26
habrá que meter esto en un bucle
00:35:28
de tal manera
00:35:30
que nos aseguremos
00:35:39
de que se está en ese bucle
00:35:41
una y otra vez, una y otra vez, una y otra vez, mientras la password no cumpla la condición que uno quiere.
00:35:43
Cuando ya salga de ese bucle, la password cumple la condición que uno quiere.
00:35:51
Y aquí venía la mayor dificultad de este ejercicio, que es, ostras, ¿cómo expreso yo ahí la condición
00:35:56
de que la password tenga al menos una mayúscula, al menos una minúscula y al menos un número?
00:36:04
pues hombre, es una condición compleja
00:36:09
de evaluar, no es tan fácil
00:36:12
imaginaos que la condición fuera
00:36:14
nos hubieran dicho, oye
00:36:15
la password válida tiene que tener
00:36:18
exactamente 8 caracteres
00:36:20
por ejemplo, pues lo habrían puesto facilísimo
00:36:22
ponemos ahí
00:36:24
la condición password.length
00:36:26
igual a 8, ya está, ya tendríamos
00:36:28
la condición de validación
00:36:30
se quedaría un bucle de validación facilísimo
00:36:31
se está ahí todo el rato
00:36:34
mientras no llegue una password
00:36:36
cuya length, cuyo punto length
00:36:38
sea diferente de 8
00:36:40
ahí se está todo el rato
00:36:41
tendría una condición muy sencilla, ¿no?
00:36:43
pero claro, no me han dicho una condición tan sencilla como esa
00:36:45
me han dicho una cosa muy complicada
00:36:48
entonces, esa cosa tan complicada
00:36:49
no la puedo plantar aquí
00:36:52
no puedo plantar ahí en una única expresión
00:36:53
lo de tener al menos un mayúscula
00:36:55
tener al menos una minúscula y tener al menos un número
00:36:58
eso no lo puedo expresar en una condición
00:37:00
única, no puedo
00:37:02
tengo que averiguarlo mediante un for
00:37:03
ir contando caracteres, no puedo
00:37:05
¿vale? pues entonces
00:37:07
¿cómo lo hacemos? pues efectivamente
00:37:09
vamos a necesitar un boolean
00:37:11
para ver si la contraseña
00:37:12
es válida o no
00:37:15
que inicialmente sea falso
00:37:16
¿vale?
00:37:19
y ahora, entra la primera vez
00:37:26
¿no? inicialmente la contraseña
00:37:28
no es válida, es falso
00:37:31
con lo cual entra aquí, mientras
00:37:33
no sea válida, o sea
00:37:34
entra, y ahora yo aquí
00:37:35
ya evalúo, le doy
00:37:38
valor al válida en función del
00:37:40
password, me pongo a
00:37:42
contar mayúsculas, minúsculas
00:37:44
en función de eso, decido si válida
00:37:46
es true o false y la siguiente
00:37:48
vez que entre, si sigue
00:37:50
siendo válida igual a false
00:37:52
pues volverá a pedirla
00:37:54
si válida es igual a true, ya no la
00:37:56
pedirá, entonces ¿qué nos falta
00:37:58
aquí? pues hacer todas las
00:38:00
operaciones que haya que hacer
00:38:02
para ver si válida la puedo pasar a true
00:38:03
o no, o la tengo que dejar a false, a ver si la
00:38:06
puedo pasar a true o no
00:38:08
y aquí entonces que tenemos que hacer
00:38:09
pues recorrer password uno tras otro
00:38:12
los caracteres y se puede hacer
00:38:14
de muchas maneras, pues vamos a contar
00:38:16
las mayúsculas, las minúsculas
00:38:18
y los números y si todos
00:38:20
son mayores o iguales que uno
00:38:22
pues valida igual a true
00:38:24
podría ser la forma de hacerlo
00:38:25
por ejemplo vamos a hacer eso
00:38:28
vamos a contar
00:38:30
mayúsculas
00:38:32
minúsculas
00:38:35
y números
00:38:39
cifras
00:38:46
vamos a contarlos
00:38:48
y ahora
00:38:50
si una vez contados
00:38:51
ahora aquí habrá que contar
00:38:53
si una vez contados resulta
00:38:54
vamos a suponer que
00:38:56
los vamos a llamar así
00:38:57
habrá que ver cómo contamos
00:38:59
con mayús
00:39:02
inicialmente igual a cero
00:39:05
porque es un contador
00:39:08
con de minus inicialmente igual a cero
00:39:09
porque es un contador
00:39:13
y con de cifras
00:39:14
tendremos que contarnos
00:39:16
y una vez contado la condición de válida
00:39:20
pues será
00:39:23
era tener al menos
00:39:25
uno de cada
00:39:28
¿no?
00:39:29
pues la condición de válida será
00:39:30
con mayús mayor o igual que uno
00:39:32
y
00:39:38
Y con minus menor o igual que 1, mayor o igual que 1, con minus, y con cifras, con cifras mayor o igual que 1.
00:39:38
vale, pues una vez
00:40:15
una vez que tengamos esto contado
00:40:18
que nos falta contarlo, claro, nos falta aquí contarlo
00:40:21
una vez que tengamos contado
00:40:23
la condición de ser válida es esta
00:40:25
que se cumpla simultáneamente
00:40:27
que esto es mayor o igual que 1
00:40:29
y que esto es mayor o igual que 1
00:40:31
y que esto es mayor o igual que 1
00:40:33
si se cumplen las tres simultáneamente
00:40:35
las tres
00:40:37
entonces válida será true
00:40:38
cuando el bucle vuelva arriba
00:40:41
como resulta que ya es válida
00:40:43
esto es true, no true es false
00:40:46
pues ya no entra más
00:40:48
bueno pues esa es
00:40:49
mi bucle de validación de la contraseña
00:40:51
¿no?
00:40:54
recordar desde el principio como lo hemos montado
00:40:57
esta es la lectura de la contraseña
00:40:59
no me vale cualquier lectura
00:41:00
con lo cual tengo que meterla en un bucle
00:41:03
que se asegure de que
00:41:05
cumple una condición
00:41:07
esa condición es muy compleja
00:41:08
no puedo plantarla ahí, no es la condición
00:41:11
n mayor que 0, no, es una condición muy compleja
00:41:13
pues a través de un boolean, inicialmente no la cumple
00:41:17
y así entramos, y ahora aquí hacemos lo que haya que hacer
00:41:20
para ver si esa nueva contraseña
00:41:23
hace que este boolean pase a true
00:41:26
si hace que este boolean pase a true, ya está, ya lo tenemos
00:41:28
si no hace que pase a true, pues otra vez habrá que leerla
00:41:32
otra vez habrá que contar, etc.
00:41:35
¿Vale? Entonces, ¿qué nos faltará después? Pues hacer esta cuenta
00:41:40
es una cuenta rápida de hacer
00:41:43
hacerla y ya está
00:41:45
y luego en el ELSE será eso mismo
00:41:46
pero previamente haber pedido la antigua
00:41:49
etcétera
00:41:51
bueno vamos a parar aquí entonces
00:41:52
- Subido por:
- Raquel G.
- Licencia:
- Todos los derechos reservados
- Visualizaciones:
- 7
- Fecha:
- 18 de diciembre de 2023 - 13:42
- Visibilidad:
- Público
- Centro:
- IES ROSA CHACEL
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1280x720 píxeles
- Tamaño:
- 799.12 MBytes