1 00:00:02,029 --> 00:00:21,170 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, 2 00:00:21,170 --> 00:00:23,710 sobre todo es un ejercicio más largo 3 00:00:23,710 --> 00:00:25,629 es un ejercicio corto, a lo mejor uno esto lo hace 4 00:00:25,629 --> 00:00:28,050 de tirón y ya está, vale, lo hace de tirón 5 00:00:28,050 --> 00:00:29,750 pero en cuanto sea un poquito 6 00:00:29,750 --> 00:00:31,809 más complejo, pues tiene 7 00:00:31,809 --> 00:00:33,289 mucho peligro hacerlo de un tirón 8 00:00:33,289 --> 00:00:37,450 examen 4 de diciembre 9 00:00:37,450 --> 00:00:59,030 vale, pues venga, vamos a empezar 10 00:00:59,030 --> 00:01:01,109 a hacerlo siguiendo ese 11 00:01:01,109 --> 00:01:03,049 esquema que he puesto hoy ahí, luego ya 12 00:01:03,049 --> 00:01:04,969 otra cosa es que uno cuando vea ya una 13 00:01:04,969 --> 00:01:07,189 versión ahí, diga, hombre, pues esto a lo mejor 14 00:01:07,189 --> 00:01:08,890 la puedo dejar más bonito si hago una función 15 00:01:08,890 --> 00:01:11,069 aparte, o si cambio la 16 00:01:11,069 --> 00:01:17,370 sentencia y en lugar de esta pongo esta otra, ¿vale? Pero eso ya son refinamientos, digamos, 17 00:01:17,510 --> 00:01:21,829 posteriores. Bueno, aquí ya tenemos ya bastante hecho. Por supuesto, ya sabemos que tenemos 18 00:01:21,829 --> 00:01:29,920 que leer del teclado, con lo cual esto no nos queda más remedio que ponerlo, porque 19 00:01:29,920 --> 00:01:38,840 vamos a leer del teclado el numerito. ¿Qué más cosas hemos dicho? Que vamos a leer un 20 00:01:38,840 --> 00:01:43,540 único número, no un montón de ellos, ni de cadenas, ni de nada, un único número. 21 00:01:43,540 --> 00:01:45,959 pues ya está, una variable para él 22 00:01:45,959 --> 00:01:47,920 bueno, llamémosle n 23 00:01:47,920 --> 00:01:50,180 ya que en el enunciado lo llama n mayúscula 24 00:01:50,180 --> 00:01:51,599 pues llamémosle así 25 00:01:51,599 --> 00:01:53,040 ahí va a ir ese numerito 26 00:01:53,040 --> 00:01:55,599 vale, entonces ahora 27 00:01:55,599 --> 00:01:58,060 haríamos esa primera parte 28 00:01:58,060 --> 00:01:59,299 leer número 29 00:01:59,299 --> 00:02:02,040 esa primera parte que hemos dicho que es 30 00:02:02,040 --> 00:02:03,299 no me basta 31 00:02:03,299 --> 00:02:04,920 hacer esto sin más 32 00:02:04,920 --> 00:02:22,629 no me basta hacer esto sin más 33 00:02:22,629 --> 00:02:25,250 insisto, no basta porque el ejercicio 34 00:02:25,250 --> 00:02:26,909 dice que para empezar 35 00:02:26,909 --> 00:02:27,870 a operar aquí 36 00:02:27,870 --> 00:02:30,150 hay que asegurarse de que es positivo 37 00:02:30,150 --> 00:02:32,009 entonces yo no puedo leerlo sin más 38 00:02:32,009 --> 00:02:33,150 el ejercicio dice no 39 00:02:33,150 --> 00:02:35,490 verifica que el número es positivo 40 00:02:35,490 --> 00:02:38,270 solo hay una posibilidad que es obligarle 41 00:02:38,270 --> 00:02:40,469 obligarle al que se sienta ahí 42 00:02:40,469 --> 00:02:42,669 obligarle a que lo introduzca una y otra vez 43 00:02:42,669 --> 00:02:43,629 una y otra vez, una y otra vez 44 00:02:43,629 --> 00:02:44,469 hasta que sea positivo 45 00:02:44,469 --> 00:02:46,310 y eso es un bucle, claro 46 00:02:46,310 --> 00:02:49,810 vale, pues entonces no me queda más remedio 47 00:02:49,810 --> 00:02:51,250 que meter esto en un bucle 48 00:02:51,250 --> 00:02:59,240 y así todo el rato 49 00:02:59,240 --> 00:03:01,240 se tiene que meter en el bucle 50 00:03:01,240 --> 00:03:04,080 siempre y cuando el número 51 00:03:04,080 --> 00:03:05,639 siga siendo negativo 52 00:03:05,639 --> 00:03:06,979 ¿verdad? 53 00:03:08,400 --> 00:03:09,520 mientras el número 54 00:03:09,520 --> 00:03:11,020 siga siendo negativo 55 00:03:11,020 --> 00:03:13,099 una y otra vez pide número, léelo 56 00:03:13,099 --> 00:03:15,000 que sigue siendo negativo 57 00:03:15,000 --> 00:03:16,840 pide número y léelo 58 00:03:16,840 --> 00:03:19,400 que sigue siendo negativo, pide número y léelo 59 00:03:19,400 --> 00:03:20,060 vale 60 00:03:20,060 --> 00:03:22,240 eso está claro 61 00:03:22,240 --> 00:03:24,300 y ahora ya estas cosas ya las sabemos 62 00:03:24,300 --> 00:03:26,580 como yo he puesto un while 63 00:03:26,580 --> 00:03:28,280 no he puesto un do while 64 00:03:28,280 --> 00:03:30,520 que podría haber puesto un do while, pero he puesto un while 65 00:03:30,520 --> 00:03:33,199 pues la primera vez 66 00:03:33,199 --> 00:03:35,139 que entra por aquí el programa 67 00:03:35,139 --> 00:03:37,300 me dice, oye, ¿qué hago la primera vez? 68 00:03:37,419 --> 00:03:38,199 ¿Entro o no entro? 69 00:03:38,879 --> 00:03:40,879 La primera vez queremos que entre sí o sí 70 00:03:40,879 --> 00:03:42,680 porque la primera lectura tiene que hacerla 71 00:03:42,680 --> 00:03:43,960 al menos una tiene que hacerla 72 00:03:43,960 --> 00:03:45,379 la primera vez queremos que entre sí o sí 73 00:03:45,379 --> 00:03:47,740 Bueno, pues vamos a inicializar n 74 00:03:47,740 --> 00:03:49,139 a un valor 75 00:03:49,139 --> 00:03:51,139 que nos aseguremos 76 00:03:51,139 --> 00:03:53,780 de que va a entrar una primera vez 77 00:03:53,780 --> 00:03:55,180 ¿Vale? 78 00:03:57,180 --> 00:03:58,259 ¿Vale? Pues nada 79 00:03:58,259 --> 00:04:00,159 Entra la primera vez 80 00:04:00,159 --> 00:04:08,500 introduce número, lo leo, que es menor que cero, introduce número, lo leo, que es menor que cero, 81 00:04:09,319 --> 00:04:14,639 cuando salgo de este bucle es porque esta lectura n ha sido mayor o igual, 82 00:04:14,639 --> 00:04:20,600 entonces al ser mayor o igual, cuando vamos aquí, este dice no, ya no más, y llegamos a este punto, 83 00:04:20,600 --> 00:04:37,180 ¿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. 84 00:04:37,180 --> 00:04:40,079 ¿vale? lo que importa es el diseño del ejercicio 85 00:04:40,079 --> 00:04:40,980 el diseño es este 86 00:04:40,980 --> 00:04:44,060 un único dato de entrada, pues una variable 87 00:04:44,060 --> 00:04:45,459 ya está, un único dato de entrada 88 00:04:45,459 --> 00:04:48,740 lo leo, lo leo y me vale cualquiera 89 00:04:48,740 --> 00:04:49,720 no me vale cualquiera 90 00:04:49,720 --> 00:04:52,360 necesito que sea positivo antes de continuar 91 00:04:52,360 --> 00:04:54,240 pues entonces tengo que 92 00:04:54,240 --> 00:04:56,240 forzar ahí una y otra vez 93 00:04:56,240 --> 00:04:58,220 forzar ahí una y otra vez hasta que se cumpla 94 00:04:58,220 --> 00:04:59,899 esa condición, bueno 95 00:04:59,899 --> 00:05:03,889 vale, pues ahora 96 00:05:03,889 --> 00:05:05,350 ya tenemos la seguridad 97 00:05:05,350 --> 00:05:07,910 en este punto, ya tenemos aquí 98 00:05:07,910 --> 00:05:11,810 la seguridad de que n va a ser mayor o igual que 0 99 00:05:11,810 --> 00:05:14,730 si el enunciado me dice estrictamente positivo 100 00:05:14,730 --> 00:05:16,750 que en principio positivo 101 00:05:16,750 --> 00:05:20,389 a ver, matemáticamente el 0 no se considera positivo 102 00:05:20,389 --> 00:05:23,329 entonces bueno, podríamos hacer esto 103 00:05:23,329 --> 00:05:28,529 y así no tendríamos en cuenta el 0 104 00:05:28,529 --> 00:05:31,889 obligaríamos a que fuera estrictamente positivo 105 00:05:31,889 --> 00:05:38,519 esto ya es, ante la duda 106 00:05:38,519 --> 00:05:44,959 pues uno pregunta al que ha puesto denuncia y dice, a ver, ¿el cero te vale o el cero tampoco? 107 00:05:45,519 --> 00:05:50,860 Ante la duda, en esos casos extremos, se pregunta, ¿te vale el cero o el cero no te vale? 108 00:05:50,980 --> 00:05:52,660 Tiene que ser mayor que cero. 109 00:05:53,399 --> 00:05:57,519 Y ya te dirán, no, no, no, cuando yo digo positivo digo mayor que cero, no mayor o igual. 110 00:05:57,939 --> 00:06:01,459 Y ya entonces se aclara ese detalle, ¿vale? 111 00:06:02,819 --> 00:06:05,220 Vale, pues entonces en ese punto ya sabemos que no es mayor que cero. 112 00:06:05,220 --> 00:06:12,180 Y ahora lo siguiente que hay que hacer, pues ya lo hemos visto, ahora ya estamos ahí, ya estamos en este punto. 113 00:06:12,319 --> 00:06:20,740 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. 114 00:06:21,519 --> 00:06:24,699 Bueno, pues entonces ahí ya decimos, vale, pues ahí abro ya las dos ramas. 115 00:06:24,699 --> 00:06:32,500 vale, aquí ya me dice 116 00:06:32,500 --> 00:06:34,199 si es menor que 100 117 00:06:34,199 --> 00:06:37,060 tienes que hacer la media de todos los impares 118 00:06:37,060 --> 00:06:38,660 entre n 119 00:06:38,660 --> 00:06:40,120 que es menor que 100 y 100 120 00:06:40,120 --> 00:06:41,879 y si es mayor que 100, otra cosa 121 00:06:41,879 --> 00:06:44,560 bueno, pues nada, entonces no nos queda más remedio 122 00:06:44,560 --> 00:06:45,339 que hacer un if ahí 123 00:06:45,339 --> 00:06:47,759 vale, pues venga 124 00:06:47,759 --> 00:06:52,379 100 es mayor que 100 125 00:06:52,379 --> 00:06:54,759 ahora ya tenemos que hacer 126 00:06:54,759 --> 00:06:56,459 la media 127 00:06:56,459 --> 00:06:58,720 de todos los números comprendidos 128 00:06:58,720 --> 00:07:04,680 entre 100 y n, luego esto ahora ya es la suma acumulativa de toda la vida, una variable 129 00:07:04,680 --> 00:07:12,740 que empiece valiendo n, se va incrementando de 1 en 1, y voy a una variable suma que empieza 130 00:07:12,740 --> 00:07:19,420 valiendo 0, le voy acumulando todos esos valores, todos esos valores que voy generando, primero 131 00:07:19,420 --> 00:07:24,019 es el n, luego el n más 1, luego el n más 2, vale, la suma acumulativa como he hecho 132 00:07:24,019 --> 00:07:26,300 siempre, entonces esta suma acumulativa 133 00:07:26,300 --> 00:07:28,180 pues uno 134 00:07:28,180 --> 00:07:30,579 si la cascamos 135 00:07:30,579 --> 00:07:32,120 tal cual, pues sería una variable 136 00:07:32,120 --> 00:07:33,379 que empieza valiendo 0 137 00:07:33,379 --> 00:07:36,019 vale, una variable que empieza valiendo 0 138 00:07:36,019 --> 00:07:37,959 y ahora, un bucle 139 00:07:37,959 --> 00:07:39,160 un bucle 140 00:07:39,160 --> 00:07:42,160 que va generando todos los 141 00:07:42,160 --> 00:07:44,079 valores entre n y 100 142 00:07:44,079 --> 00:07:46,300 entre n y 100, todos los valores 143 00:07:46,300 --> 00:07:48,439 100 es mejor que n, entre 100 y n 144 00:07:48,439 --> 00:07:49,920 entre 100 y n 145 00:07:49,920 --> 00:07:52,279 una variable que va generando todos los valores 146 00:07:52,279 --> 00:07:53,199 entre 100 y n 147 00:07:53,199 --> 00:07:56,639 y los voy sumando a esa variable suma 148 00:07:56,639 --> 00:07:59,399 hombre aquí lo más sencillo es usar un for 149 00:07:59,399 --> 00:08:01,199 porque el for ya me da esa variable 150 00:08:01,199 --> 00:08:02,579 a través del índice 151 00:08:02,579 --> 00:08:03,480 ya me la da 152 00:08:03,480 --> 00:08:06,000 pues desde i igual a 100 153 00:08:06,000 --> 00:08:06,879 que es el primero 154 00:08:06,879 --> 00:08:11,920 mientras i sea menor o igual que n 155 00:08:11,920 --> 00:08:15,899 perdón, menor o igual que n 156 00:08:15,899 --> 00:08:17,879 incrementando i 157 00:08:17,879 --> 00:08:20,759 pues el for me viene aquí estupendo 158 00:08:20,759 --> 00:08:22,139 porque el for recordad 159 00:08:22,139 --> 00:08:25,100 que cuando lo usamos con esta sintaxis 160 00:08:25,100 --> 00:08:27,240 me da ya directamente una variable 161 00:08:27,240 --> 00:08:30,300 que empieza valiendo el valor que yo le diga 162 00:08:30,300 --> 00:08:33,960 se va incrementando aquí en cada iteración 163 00:08:33,960 --> 00:08:37,419 y acaba cuando llega al valor que yo le diga 164 00:08:37,419 --> 00:08:39,279 entonces pues perfecto, tengo ahí mi variable i 165 00:08:39,279 --> 00:08:41,320 que son precisamente todos los sumandos 166 00:08:41,320 --> 00:08:43,360 todos esos sumandos que yo quiero meter a la suma 167 00:08:43,360 --> 00:08:46,220 son esos, la variable i, ya está 168 00:08:46,220 --> 00:08:49,379 pues entonces la suma acumulativa en este caso 169 00:08:49,379 --> 00:08:55,259 sería suma más igual i, ¿vale? 170 00:08:57,220 --> 00:09:02,259 Pero ojo, el enunciado no dice sumar todos los números entre i y n mayúscula, 171 00:09:03,000 --> 00:09:07,659 no dice sumarlos todos, dice suma sólo los que sean, 172 00:09:07,960 --> 00:09:16,759 si es menor que 100, suma los que sean impares, suma sólo los que sean impares, 173 00:09:16,759 --> 00:09:19,759 entonces tengo que sumar solo los i's 174 00:09:19,759 --> 00:09:21,500 que sean impares, solo 175 00:09:21,500 --> 00:09:27,320 ah, perdón, estoy entre 100 y n 176 00:09:27,320 --> 00:09:29,720 si n es mayor que 100, estoy en el caso de abajo 177 00:09:29,720 --> 00:09:33,120 si el número es mayor que 100, vale, los pares 178 00:09:33,120 --> 00:09:35,360 vale, pues no tengo que hacer 179 00:09:35,360 --> 00:09:39,519 no tengo que sumarlos todos, no tienen que ir a suma todos 180 00:09:39,519 --> 00:09:42,379 solo tienen que ir los que sean pares, hemos dicho 181 00:09:42,379 --> 00:09:45,519 vale, pues ya está, eso lo arreglamos así 182 00:09:45,519 --> 00:10:03,299 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? 183 00:10:03,299 --> 00:10:07,980 vale, pues entonces, 100 es mayor que 100 184 00:10:07,980 --> 00:10:10,179 con esto me echo la suma acumulativa 185 00:10:10,179 --> 00:10:11,139 de todos los pares 186 00:10:11,139 --> 00:10:13,639 vale, pero me está diciendo 187 00:10:13,639 --> 00:10:16,220 que no quiere la suma, sino quiere la media 188 00:10:16,220 --> 00:10:18,240 la media es 189 00:10:18,240 --> 00:10:20,200 esa suma dividida entre el total 190 00:10:20,200 --> 00:10:21,759 de números que yo he sumado 191 00:10:21,759 --> 00:10:24,659 entre el total de números que yo he sumado 192 00:10:24,659 --> 00:10:28,100 vale, entonces, ¿qué nos falta incorporar aquí? 193 00:10:30,389 --> 00:10:31,269 por ejemplo 194 00:10:31,269 --> 00:10:33,309 tenemos que contar 195 00:10:33,309 --> 00:10:35,350 todos los pares 196 00:10:35,350 --> 00:10:37,809 comprendidos entre 197 00:10:37,809 --> 00:10:39,570 n y 100 o entre 100 y n 198 00:10:39,570 --> 00:10:41,610 todos los pares y ahora ya 199 00:10:41,610 --> 00:10:43,730 que son los que hemos sumado, hemos sumado los pares 200 00:10:43,730 --> 00:10:45,129 y ahora ya 201 00:10:45,129 --> 00:10:48,289 pues la media será esa suma entre todos los pares 202 00:10:48,289 --> 00:10:50,309 entonces lo más seguro 203 00:10:50,309 --> 00:10:52,029 es que incorporemos un contador 204 00:10:52,029 --> 00:10:53,870 que cuente, pero también 205 00:10:53,870 --> 00:10:55,929 hombre, los pares comprendidos entre 206 00:10:55,929 --> 00:10:58,409 100 y n, bueno entre n y 100 207 00:10:58,409 --> 00:11:00,049 será la mitad de los números 208 00:11:00,049 --> 00:11:00,730 entre n y 100 209 00:11:00,730 --> 00:11:03,570 n-100 son los números que hay entre n y 100 210 00:11:03,570 --> 00:11:04,870 pues la mitad de ellos eran los pares 211 00:11:04,870 --> 00:11:07,490 pero vamos 212 00:11:07,490 --> 00:11:09,370 que para hacerlo seguro 213 00:11:09,370 --> 00:11:11,029 pues podríamos decir 214 00:11:11,029 --> 00:11:12,370 ah vale, me falta un contador 215 00:11:12,370 --> 00:11:14,149 pues ya está, contamos aquí 216 00:11:14,149 --> 00:11:16,970 todos los numeritos pares que empiezan a 0 217 00:11:16,970 --> 00:11:18,470 y ahora 218 00:11:18,470 --> 00:11:22,850 si el número es par 219 00:11:22,850 --> 00:11:26,230 incremento el contador 220 00:11:26,230 --> 00:11:31,080 ya tengo un par más 221 00:11:31,080 --> 00:11:36,350 y además lo sumo 222 00:11:36,350 --> 00:11:43,850 Bueno, pues cuando ese fuera terminado tenemos aquí todos los números pares sumados que van entre 100 y n. 223 00:11:44,429 --> 00:11:47,009 Y además nos dice cuántos hay, cuántos he sumado. 224 00:11:47,149 --> 00:11:50,029 Ha sumado 7 números, ¿vale? 225 00:11:50,029 --> 00:11:58,409 Si n es 105, pues habrá sumado el 100, el 102 y el 104. 226 00:11:59,070 --> 00:12:03,710 Esos son los que habrá sumado el 100, el 102 y el 104. 227 00:12:03,710 --> 00:12:06,669 y contador será 3 228 00:12:06,669 --> 00:12:09,210 habrá habido 3 números 229 00:12:09,210 --> 00:12:11,669 el 100, el 102 y el 104 230 00:12:11,669 --> 00:12:12,750 contador será 3 231 00:12:12,750 --> 00:12:16,450 y la suma será 100 más 102 más 104 232 00:12:16,450 --> 00:12:17,029 lo que sea 233 00:12:17,029 --> 00:12:19,529 bueno pues cuando haya acabado el for 234 00:12:19,529 --> 00:12:21,570 ya podemos mostrar la media 235 00:12:21,570 --> 00:12:30,799 que aquí la media será pues esto 236 00:12:30,799 --> 00:12:37,759 la suma entre esto de aquí 237 00:12:37,759 --> 00:12:46,320 bueno pues 100 es mayor que 100 238 00:12:46,320 --> 00:12:46,980 ya lo tenemos 239 00:12:46,980 --> 00:12:47,860 100 es mayor que 100 240 00:12:47,860 --> 00:12:51,620 hay que hacer esta suma acumulativa de todos los números comprendidos entre 100 y n 241 00:12:51,620 --> 00:12:55,720 pero como es media, pues además vamos a contarlos 242 00:12:55,720 --> 00:13:01,710 y solo de los pares, 100 es menor que 100 243 00:13:01,710 --> 00:13:05,950 entonces aquí vamos a ser estrictos porque 100 es igual a 100 244 00:13:05,950 --> 00:13:10,850 pues se quedaba medio abierto, entonces si n es menor que 100 245 00:13:10,850 --> 00:13:17,009 pues en realidad es lo mismo que de arriba 246 00:13:17,009 --> 00:13:21,149 prácticamente, puedo copiar y pegar, lo único que tengo que cambiar son los extremos 247 00:13:21,149 --> 00:13:22,850 de aquí, los extremos 248 00:13:22,850 --> 00:13:25,129 y esto poner distinto 249 00:13:25,129 --> 00:13:25,710 en vez de igual 250 00:13:25,710 --> 00:13:28,470 pero puedo copiar y pegar este código 251 00:13:28,470 --> 00:13:38,320 puedo copiar y pegarlo 252 00:13:38,320 --> 00:13:39,460 y adaptarlo 253 00:13:39,460 --> 00:13:41,480 contador de impares 254 00:13:41,480 --> 00:13:48,399 ahora, el número es menor que 100 255 00:13:48,399 --> 00:13:49,539 luego 256 00:13:49,539 --> 00:13:51,600 el extremo inferior 257 00:13:51,600 --> 00:13:53,320 del que yo parto es n 258 00:13:53,320 --> 00:13:56,039 y el extremo superior es 100 259 00:13:56,039 --> 00:14:03,000 y esto es distinto 260 00:14:03,000 --> 00:14:05,179 y lo demás se queda todo intacto 261 00:14:05,179 --> 00:14:06,399 vale 262 00:14:06,399 --> 00:14:42,090 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á. 263 00:14:42,090 --> 00:14:46,740 Ahora la pregunta natural es 264 00:14:46,740 --> 00:14:48,120 Uy, 100 es igual a 100 265 00:14:48,120 --> 00:14:49,679 ¿Qué hago con él? 266 00:14:49,740 --> 00:14:51,720 Porque los casos extremos siempre se quedan 267 00:14:51,720 --> 00:14:53,480 Como abiertos en un enunciado 268 00:14:53,480 --> 00:14:56,080 A veces se quedan abiertos 269 00:14:56,080 --> 00:14:58,279 Es difícil especificar exactamente 270 00:14:58,279 --> 00:14:59,899 En cada caso extremo que hacer 271 00:14:59,899 --> 00:15:02,159 Entonces a la pregunta, ¿y con 100 qué hago? 272 00:15:02,539 --> 00:15:04,080 Bueno, pues yo lo que os digo cuando preguntáis 273 00:15:04,080 --> 00:15:06,279 Es, me da igual, que lo metáis en los extremos 274 00:15:06,919 --> 00:15:08,039 Que lo hagáis aparte 275 00:15:08,039 --> 00:15:09,120 Da lo mismo 276 00:15:09,120 --> 00:15:11,720 Por ejemplo, en este caso 277 00:15:11,720 --> 00:15:13,240 Si el número es 100 278 00:15:13,240 --> 00:15:16,299 pues, si lo consideramos 279 00:15:16,299 --> 00:15:16,679 como 280 00:15:16,679 --> 00:15:20,139 en la parte de que fuera 281 00:15:20,139 --> 00:15:21,799 menor, 100 menor que 100 282 00:15:21,799 --> 00:15:23,879 sumo los pares, como es par 283 00:15:23,879 --> 00:15:25,899 me quedaría 100, si lo consideramos 284 00:15:25,899 --> 00:15:27,820 en la otra me quedaría 0, os dije, da igual 285 00:15:27,820 --> 00:15:28,840 lo que os dé la gana 286 00:15:28,840 --> 00:15:31,500 pues mira, vamos a poner aquí, ya está 287 00:15:31,500 --> 00:15:39,490 el número es 100, el que me has dado 288 00:15:39,490 --> 00:15:41,029 da igual, lo que sea, me da lo mismo 289 00:15:41,029 --> 00:15:48,879 bueno, pues esta es 290 00:15:48,879 --> 00:15:52,820 la resolución del ejercicio 291 00:15:52,820 --> 00:15:55,240 teniendo en cuenta 292 00:15:55,240 --> 00:15:57,639 esta escenita de aquí 293 00:15:57,639 --> 00:15:59,779 nosotros nos hemos hecho este mapa 294 00:15:59,779 --> 00:16:01,720 y hemos dicho, vale, ahora hay otra cosa 295 00:16:01,720 --> 00:16:03,759 es que uno pueda retocar esto 296 00:16:03,759 --> 00:16:05,639 para que le quede más corto, más bonito 297 00:16:05,639 --> 00:16:08,200 para hacerlo con una función aparte 298 00:16:08,200 --> 00:16:09,759 al que tú le pasas 299 00:16:09,759 --> 00:16:11,600 pues el numerito n 300 00:16:11,600 --> 00:16:14,000 y él ya esa función 301 00:16:14,000 --> 00:16:15,879 ya detecta si es mayor o menor 302 00:16:15,879 --> 00:16:17,720 que 100 y te hace la suma que sea 303 00:16:17,720 --> 00:16:19,620 esto ya se puede retocar de muchas maneras 304 00:16:19,620 --> 00:16:21,899 o por ejemplo, pues pensar 305 00:16:21,899 --> 00:16:34,440 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, 306 00:16:35,240 --> 00:16:42,539 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 307 00:16:42,539 --> 00:16:50,179 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, 308 00:16:50,179 --> 00:16:52,620 La máquina virtual va a hacer el mismo número de ejecuciones 309 00:16:52,620 --> 00:16:54,700 Es solamente que el código 310 00:16:54,700 --> 00:16:56,500 Pueda ser más claro, a lo mejor, o más bonito 311 00:16:56,500 --> 00:16:57,659 Para quien lo vea 312 00:16:57,659 --> 00:17:03,090 Pero a ver, lo importante es entender qué se hace de fondo 313 00:17:03,090 --> 00:17:05,390 Y lo que se hace de fondo son estos bloques 314 00:17:05,390 --> 00:17:06,710 Leo la entrada 315 00:17:06,710 --> 00:17:09,150 Decido qué estructura de datos quiero para ella 316 00:17:09,150 --> 00:17:10,369 La decido, fundamental 317 00:17:10,369 --> 00:17:13,430 En este caso la decisión era muy clara 318 00:17:13,430 --> 00:17:15,329 Un único número, una única variable 319 00:17:15,329 --> 00:17:17,990 Vale, ¿cómo voy a tener que leer esa entrada? 320 00:17:18,130 --> 00:17:19,430 Pues la tienes que leer verificándola 321 00:17:19,430 --> 00:17:20,029 Pues ya sé 322 00:17:20,029 --> 00:17:21,930 Y ahora ya, pues opero 323 00:17:21,930 --> 00:17:24,009 opero y a partir de ahí decido 324 00:17:24,009 --> 00:17:26,309 que tengo que hacer, pues es una suma, tengo que contar 325 00:17:26,309 --> 00:17:28,089 tengo que hacer un máximo, tengo que 326 00:17:28,089 --> 00:17:29,609 hacer lo que sea con esos datos 327 00:17:29,609 --> 00:17:34,019 a ver, alguna pregunta o duda 328 00:17:34,019 --> 00:17:42,500 o cosa rara, bueno 329 00:17:42,500 --> 00:17:43,700 pues vamos con el siguiente 330 00:17:43,700 --> 00:18:14,859 vale, pues este de aquí 331 00:18:14,859 --> 00:18:16,880 ya tiene alguna cosa un poquito 332 00:18:16,880 --> 00:18:18,839 es más sencillo y más corto de hacer 333 00:18:18,839 --> 00:18:20,819 pero tiene una cosa un poquito más rara 334 00:18:20,819 --> 00:18:23,079 porque ya implica tomar ciertas 335 00:18:23,079 --> 00:18:24,900 decisiones de diseño, o sea 336 00:18:24,900 --> 00:18:26,859 este no te dice, tienes que usar estas variables 337 00:18:26,859 --> 00:18:30,619 No, tienes que decidir qué variables necesitas para que esto funcione. 338 00:18:32,200 --> 00:18:40,359 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. 339 00:18:40,799 --> 00:18:47,940 Bueno, pues al menos la primera estructura la tenemos, porque sabemos hacer un menú, pues que es siempre lo mismo. 340 00:18:48,460 --> 00:18:55,039 Un do while, do, muestra menú, lee opción y switch case en función de la opción y así todo el rato. 341 00:18:55,039 --> 00:18:57,460 muestra menú, lee opción y switch case 342 00:18:57,460 --> 00:18:59,200 en función de la opción, así todo el rato 343 00:18:59,200 --> 00:19:00,700 o sea, la primera estructura la tenemos 344 00:19:00,700 --> 00:19:02,640 ahora ya hay que ver 345 00:19:02,640 --> 00:19:05,140 en cada opción que hay que hacer 346 00:19:05,140 --> 00:19:07,640 entonces 347 00:19:07,640 --> 00:19:09,640 uno se tiene que hacer 348 00:19:09,640 --> 00:19:11,799 más o menos una visión así un poquito global 349 00:19:11,799 --> 00:19:13,599 este menú lo que tiene 350 00:19:13,599 --> 00:19:15,000 de raro es 351 00:19:15,000 --> 00:19:17,779 que esta opción 352 00:19:17,779 --> 00:19:19,960 solo se muestra 353 00:19:19,960 --> 00:19:21,799 si se ha hecho 354 00:19:21,799 --> 00:19:22,720 login antes 355 00:19:22,720 --> 00:19:26,200 entonces 356 00:19:26,200 --> 00:19:28,940 aquí ya pensamos 357 00:19:28,940 --> 00:19:30,779 vamos a ver, yo tengo que detectar 358 00:19:30,779 --> 00:19:31,640 de alguna manera 359 00:19:31,640 --> 00:19:35,039 si el usuario 360 00:19:35,039 --> 00:19:36,160 ha hecho login 361 00:19:36,160 --> 00:19:38,220 previamente o no lo ha hecho 362 00:19:38,220 --> 00:19:40,960 tengo que detectar si algo ha pasado 363 00:19:40,960 --> 00:19:41,619 o no ha pasado 364 00:19:41,619 --> 00:19:44,680 pues ahí automáticamente ya 365 00:19:44,680 --> 00:19:45,779 se nos viene a la cabeza 366 00:19:45,779 --> 00:19:48,799 uy en mi aplicación va a tener que haber un boolean 367 00:19:48,799 --> 00:19:50,759 que me permita a mi 368 00:19:50,759 --> 00:19:52,779 distinguir si hay 369 00:19:52,779 --> 00:19:54,900 login hecho o si no lo hay 370 00:19:54,900 --> 00:20:01,920 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. 371 00:20:03,059 --> 00:20:06,579 Entonces, primer elemento de diseño que era el más importante de esta aplicación, 372 00:20:07,440 --> 00:20:13,940 el darnos cuenta de que para mostrar el menú necesitamos saber si algo pasa o no pasa. 373 00:20:15,500 --> 00:20:17,579 Es decir, si se ha hecho login o no se ha hecho. 374 00:20:17,859 --> 00:20:22,720 Porque este system out de aquí, ahora lo escribiremos, este system out, va a tener que ir en un if. 375 00:20:22,720 --> 00:20:36,960 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. 376 00:20:36,960 --> 00:20:38,640 pues un boolean tiene que haber 377 00:20:38,640 --> 00:20:40,259 un boolean que sea usuario logado 378 00:20:40,259 --> 00:20:42,900 por ejemplo, usuario logado 379 00:20:42,900 --> 00:20:45,000 y ese boolean tendrá que estar 380 00:20:45,000 --> 00:20:47,240 a true o a false, inicialmente 381 00:20:47,240 --> 00:20:49,039 cuando la aplicación arranca 382 00:20:49,039 --> 00:20:50,799 ese boolean estará a false 383 00:20:50,799 --> 00:20:52,779 porque nadie se ha hecho login 384 00:20:52,779 --> 00:20:55,240 claro, y cuando se va a poner a true 385 00:20:55,240 --> 00:20:57,259 pues se va a poner a true 386 00:20:57,259 --> 00:20:59,180 en el case de aquí 387 00:20:59,180 --> 00:21:02,819 entonces ese boolean 388 00:21:02,819 --> 00:21:05,259 ese boolean será un boolean que está ahí 389 00:21:05,259 --> 00:21:06,660 que empieza siendo false 390 00:21:06,660 --> 00:21:08,819 y que cuando se pone a true 391 00:21:08,819 --> 00:21:10,240 cuando se dé esta opción 392 00:21:10,240 --> 00:21:12,079 luego esta opción de aquí de hacer login 393 00:21:12,079 --> 00:21:15,099 está sencilla como, bueno, primero pedir la contraseña 394 00:21:15,099 --> 00:21:16,640 claro, y luego poner el boolean a true 395 00:21:16,640 --> 00:21:18,980 y ahora ya 396 00:21:18,980 --> 00:21:20,980 la siguiente vez que se muestre el menú 397 00:21:20,980 --> 00:21:22,220 ya sí que saldrá esto 398 00:21:22,220 --> 00:21:24,079 porque esta depende de ese boolean 399 00:21:24,079 --> 00:21:26,440 entonces era una de las dos cosas 400 00:21:26,440 --> 00:21:28,960 críticas del ejercicio 401 00:21:28,960 --> 00:21:30,700 el identificar 402 00:21:30,700 --> 00:21:32,660 que necesitamos un boolean para distinguir 403 00:21:32,660 --> 00:21:35,140 dos situaciones, usuario logado 404 00:21:35,140 --> 00:21:38,779 el identificar que tendríamos un Boolean 405 00:21:38,779 --> 00:21:40,359 para distinguir dos situaciones 406 00:21:40,359 --> 00:21:43,319 y luego ya la otra cosa crítica 407 00:21:43,319 --> 00:21:45,000 pues hacer el tema de trabajar aquí 408 00:21:45,000 --> 00:21:47,839 con los caracteres para validar la contraseña 409 00:21:47,839 --> 00:21:50,059 eso ya era trabajar con la tabla ASCII 410 00:21:50,059 --> 00:21:52,920 lo que se harán las dos partes del ejercicio 411 00:21:52,920 --> 00:21:55,400 las dos en las que había dificultad 412 00:21:55,400 --> 00:21:59,859 bueno, pues vamos a plantear entonces este 413 00:21:59,859 --> 00:22:02,059 este menú 414 00:22:02,059 --> 00:22:07,119 Si nosotros primero planteamos la primera arquitectura del ejercicio 415 00:22:07,119 --> 00:22:08,759 Que es el do while de toda la vida 416 00:22:08,759 --> 00:22:10,920 Con menú, leer opción y switch case 417 00:22:10,920 --> 00:22:12,660 Primero planteamos eso 418 00:22:12,660 --> 00:22:13,779 Ya nos vamos a ver 419 00:22:13,779 --> 00:22:15,799 Que tenemos que hacer en cada case 420 00:22:15,799 --> 00:22:17,759 Que variables vamos a necesitar, etc 421 00:22:17,759 --> 00:22:25,549 Vale, pues venga 422 00:22:25,549 --> 00:22:27,890 Hemos dicho que aquí va a haber un menú 423 00:22:27,890 --> 00:22:33,549 A ver, las opciones serán 424 00:22:33,549 --> 00:22:37,430 Establecer 425 00:22:37,430 --> 00:22:40,750 O modificar, depende 426 00:22:40,750 --> 00:22:44,470 Contraseña, voy a poner password por la ñ 427 00:22:44,470 --> 00:22:50,660 Vale, está la opción 1, por ejemplo 428 00:22:50,660 --> 00:22:57,660 La opción 2 429 00:22:57,660 --> 00:23:04,380 Login, vale 430 00:23:04,380 --> 00:23:08,900 La opción 3, logout, es la que vamos a tener que meter en un if 431 00:23:08,900 --> 00:23:16,759 Y la opción 4 ya era salir, ¿verdad? 432 00:23:18,380 --> 00:23:20,380 Login, logout y salir 433 00:23:20,380 --> 00:23:22,039 Vale 434 00:23:22,039 --> 00:23:34,049 Vale, leemos opción 435 00:23:34,049 --> 00:23:36,349 Entonces, para leer opción, el escáner de siempre 436 00:23:36,349 --> 00:23:38,130 Pues venga, el escáner 437 00:23:38,130 --> 00:23:50,430 ¿Vale? La opción, pues por ejemplo, va a ir a esta variable 438 00:23:50,430 --> 00:23:54,250 Pues aquí leemos la opción 439 00:23:54,250 --> 00:24:09,710 Ahora, esto ya me permite completar el while 440 00:24:09,710 --> 00:24:13,730 Y digo, a ver, muestra menú, lee opción 441 00:24:13,730 --> 00:24:16,990 Mientras que, mientras la opción sea diferente 442 00:24:16,990 --> 00:24:20,490 ¿De cuál? De 4, que es la de salir 443 00:24:20,490 --> 00:24:24,049 vale, esta es la estructura de siempre 444 00:24:24,049 --> 00:24:26,470 muestra menú, lee opción 445 00:24:26,470 --> 00:24:28,269 el switch case que nos falta 446 00:24:28,269 --> 00:24:30,109 por poner ahora y todo esto 447 00:24:30,109 --> 00:24:31,950 mientras la opción leída sea 448 00:24:31,950 --> 00:24:33,690 diferente a la de salir, así todo el rato 449 00:24:33,690 --> 00:24:36,049 vale, pues aquí nuestro 450 00:24:36,049 --> 00:24:37,130 switch case 451 00:24:37,130 --> 00:24:40,130 va a depender de esa 452 00:24:40,130 --> 00:24:40,990 variable opción 453 00:24:40,990 --> 00:24:44,210 y ahora ya sabemos que esto 454 00:24:44,210 --> 00:24:45,390 será en el caso 455 00:24:45,390 --> 00:24:49,549 de que sea 1 456 00:24:49,549 --> 00:24:51,690 pues habrá que ver que 457 00:24:51,690 --> 00:25:13,789 hacemos, y break, y así con el resto de opciones, caso 2, caso 3, caso 4, el caso 4 es el más 458 00:25:13,789 --> 00:25:18,890 fácil, el caso 4, cuando se dé la opción de salir, no hay nada que hacer, bueno, podemos 459 00:25:18,890 --> 00:25:28,369 incluirle, para que quede un poco más bonito, esto y ya está, en el caso 4, hay poco que 460 00:25:28,369 --> 00:25:42,930 hacer, vale, pues a ver, en el caso de que se dé la opción login, bueno, vamos a hacer 461 00:25:42,930 --> 00:25:48,250 el primero de contraseña, vale, pues a ver, vamos a lo primero que hemos dicho, hemos 462 00:25:48,250 --> 00:25:53,549 dicho, cuidado, vamos a empezar a retocar esto, esto de aquí ya hay que retocarlo, 463 00:25:53,990 --> 00:26:00,869 eso no se tiene que mostrar siempre, el programa dice que eso se va a mostrar solo si estamos 464 00:26:00,869 --> 00:26:06,170 en la situación de haber hecho login, solo en esa situación, entonces ese es el primer 465 00:26:06,170 --> 00:26:10,049 sitio donde hay que atacar, de esta estructura general que hemos hecho, el primer sitio donde 466 00:26:10,049 --> 00:26:17,170 hay que atacar para modificarlo es aquí, porque esto no se va a mostrar siempre, esto 467 00:26:17,170 --> 00:26:25,569 se va a mostrar solo si ha habido un usuario que ha hecho login antes, solo, pues entonces 468 00:26:25,569 --> 00:26:29,670 yo ahí tengo que poner un if para que eso se muestre solo si una situación se ha dado, 469 00:26:29,670 --> 00:26:31,730 Vale, pues aquí es donde nos viene 470 00:26:31,730 --> 00:26:33,269 La solución de antes 471 00:26:33,269 --> 00:26:35,490 Ah, vale, como yo tengo que distinguir 472 00:26:35,490 --> 00:26:37,890 Entre si hay usuario logado o no hay usuario logado 473 00:26:37,890 --> 00:26:38,990 Como tengo que distinguir 474 00:26:38,990 --> 00:26:40,109 Necesito un boolean 475 00:26:40,109 --> 00:26:43,430 Para distinguir esas dos situaciones, la necesito 476 00:26:43,430 --> 00:26:46,109 Pues nada, necesito un boolean para eso 477 00:26:46,109 --> 00:26:47,890 Pues aquí viene mi boolean 478 00:26:47,890 --> 00:26:50,289 Que uno lo llama como quiera 479 00:26:50,289 --> 00:26:55,130 El nombre más explicativo posible 480 00:26:55,130 --> 00:26:57,170 Como ese boolean significa 481 00:26:57,170 --> 00:26:59,450 Que hay un usuario que ha hecho login antes 482 00:26:59,450 --> 00:27:28,589 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, 483 00:27:28,589 --> 00:27:30,910 no puedo evaluar si eso es true o false 484 00:27:30,910 --> 00:27:32,069 es imposible 485 00:27:32,069 --> 00:27:34,089 bueno, pues entonces pensamos 486 00:27:34,089 --> 00:27:35,349 ah, ¿cómo lo inicializo? 487 00:27:36,029 --> 00:27:38,029 vale, ¿qué quiero yo que pase la primera vez? 488 00:27:38,390 --> 00:27:40,190 la primera vez el usuario no está logado 489 00:27:40,190 --> 00:27:42,089 es imposible, es la primera vez que muestro el menú 490 00:27:42,089 --> 00:27:43,569 es la primera vez que lo muestro 491 00:27:43,569 --> 00:27:45,529 la primera vez que lo muestro 492 00:27:45,529 --> 00:27:46,789 es que no hay login 493 00:27:46,789 --> 00:27:49,549 vale, pues entonces 494 00:27:49,549 --> 00:27:51,930 esto inicialmente 495 00:27:51,930 --> 00:27:52,390 false 496 00:27:52,390 --> 00:27:56,490 bueno, pues entonces ahora ya 497 00:27:56,490 --> 00:27:59,009 la primera vez que se arranca el programa 498 00:27:59,009 --> 00:28:01,450 la primera vez la opción de logout 499 00:28:01,450 --> 00:28:03,589 no se mostrará, claro, no se mostrará 500 00:28:03,589 --> 00:28:05,369 es lo que queremos, que no se muestre 501 00:28:05,369 --> 00:28:10,720 bueno 502 00:28:10,720 --> 00:28:11,799 pues entonces 503 00:28:11,799 --> 00:28:14,279 vamos con el resto de opciones 504 00:28:14,279 --> 00:28:15,880 vamos una por una 505 00:28:15,880 --> 00:28:20,069 caso 1 506 00:28:20,069 --> 00:28:22,990 nos dice establecer 507 00:28:22,990 --> 00:28:24,410 modificar contraseña 508 00:28:24,410 --> 00:28:26,390 y aquí ya empieza diciéndome 509 00:28:26,390 --> 00:28:28,970 de nuevo tienes dos situaciones posibles 510 00:28:28,970 --> 00:28:31,170 a la hora de hacer esta opción 511 00:28:31,170 --> 00:28:33,130 que ya tengas una contraseña 512 00:28:33,130 --> 00:28:34,150 establecida de antes 513 00:28:34,150 --> 00:28:35,890 o no 514 00:28:35,890 --> 00:28:38,130 porque es la primera vez que se da la opción 515 00:28:38,130 --> 00:28:39,869 porque es la primera vez que el usuario 516 00:28:39,869 --> 00:28:42,069 da al 1, si es la primera vez que el usuario 517 00:28:42,069 --> 00:28:42,630 da al 1 518 00:28:42,630 --> 00:28:44,950 no hay una contraseña establecida 519 00:28:44,950 --> 00:28:46,869 entonces aquí de nuevo 520 00:28:46,869 --> 00:28:49,269 te dice, oye tienes dos ramas 521 00:28:49,269 --> 00:28:51,390 aquí dentro de este case tienes dos posibilidades 522 00:28:51,390 --> 00:28:53,509 que la contraseña 523 00:28:53,509 --> 00:28:55,589 no esté porque es la primera vez 524 00:28:55,589 --> 00:28:57,170 que le das a esa opción de establecer 525 00:28:57,170 --> 00:28:58,910 o que la contraseña esté 526 00:28:58,910 --> 00:29:01,569 si está, lo único que tienes que hacer 527 00:29:01,569 --> 00:29:03,569 es pedir una nueva, validarla 528 00:29:03,569 --> 00:29:05,390 y guardarla, si no está 529 00:29:05,390 --> 00:29:07,450 tendrás también que pedir una nueva y validarla 530 00:29:07,450 --> 00:29:08,869 pero antes 531 00:29:08,869 --> 00:29:10,710 tendrás que pedir la antigua 532 00:29:10,710 --> 00:29:13,289 y que te meta la antigua 533 00:29:13,289 --> 00:29:15,470 y tú compruebes que la que te mete es igual 534 00:29:15,470 --> 00:29:16,690 que la que tenías, entonces 535 00:29:16,690 --> 00:29:19,250 lo primero para un organizarse es, oye 536 00:29:19,250 --> 00:29:21,390 cuidado, que en ese case 1 tengo dos 537 00:29:21,390 --> 00:29:23,190 posibilidades, que haya 538 00:29:23,190 --> 00:29:25,089 contraseña establecida o que no lo haya, cuidado 539 00:29:25,089 --> 00:29:26,910 tengo que trabajar de forma distinta 540 00:29:26,910 --> 00:29:28,670 eso es lo primero, vale 541 00:29:28,670 --> 00:29:30,609 bueno, pues esa condición 542 00:29:30,609 --> 00:29:32,710 en que se basa 543 00:29:32,710 --> 00:29:37,910 Lo que acabo de decir, que la contraseña de esa aplicación esté ya establecida o no. 544 00:29:38,869 --> 00:29:42,150 Bueno, pues entonces es que, claro, necesito una variable que guarde la contraseña. 545 00:29:42,509 --> 00:29:44,009 Necesito una variable para guardar la contraseña. 546 00:29:44,710 --> 00:29:47,670 Y si esa variable tiene un valor o si no lo tiene, 547 00:29:47,930 --> 00:29:51,130 no va a permitir a mí decidir si es la primera vez que he entrado o que no. 548 00:29:52,029 --> 00:29:54,710 Pero una variable para guardar la contraseña la necesito. 549 00:29:55,329 --> 00:29:58,750 Bueno, pues entonces, ¿la contraseña de qué tipo va a ser? 550 00:29:59,369 --> 00:30:00,609 Pues de tipo string, ¿verdad? 551 00:30:00,609 --> 00:30:08,990 vale, pues por ejemplo 552 00:30:08,990 --> 00:30:09,990 esa puede ser 553 00:30:09,990 --> 00:30:13,069 mi variable 554 00:30:13,069 --> 00:30:15,190 para la contraseña, mi variable string 555 00:30:15,190 --> 00:30:18,079 y ahora 556 00:30:18,079 --> 00:30:19,539 en el caso 1 557 00:30:19,539 --> 00:30:21,660 yo ahora aquí tengo que decidir 558 00:30:21,660 --> 00:30:23,940 si esta variable contraseña 559 00:30:23,940 --> 00:30:26,440 tiene ya algún valor 560 00:30:26,440 --> 00:30:27,720 o no tiene ninguno 561 00:30:27,720 --> 00:30:30,339 porque en función de si tiene algún valor o no tiene ninguno 562 00:30:30,339 --> 00:30:32,079 estoy en el caso de establecer 563 00:30:32,079 --> 00:30:33,039 o modificar 564 00:30:33,039 --> 00:30:36,359 vale, tenemos que distinguir entonces si tiene algún valor o no tiene ninguno 565 00:30:36,359 --> 00:30:39,819 Entonces, aquí uno puede operar de muchas maneras 566 00:30:39,819 --> 00:30:43,980 Una, acordarse de lo que hemos dicho otras veces 567 00:30:43,980 --> 00:30:48,200 Que las variables string son objetos en realidad 568 00:30:48,200 --> 00:30:50,119 Y cuando no les doy ningún valor 569 00:30:50,119 --> 00:30:51,720 Lo que tienen es null 570 00:30:51,720 --> 00:30:54,980 Entonces, en el caso 1 571 00:30:54,980 --> 00:30:57,039 Yo podría distinguir que la contraseña 572 00:30:57,039 --> 00:30:58,539 Todavía no tiene ningún valor 573 00:30:58,539 --> 00:31:00,619 Haciendo esto 574 00:31:00,619 --> 00:31:04,019 Si password es igual a null 575 00:31:04,019 --> 00:31:05,619 ¿Vale? 576 00:31:06,359 --> 00:31:11,470 y entonces, si password es igual a nulo 577 00:31:11,470 --> 00:31:12,589 haz alguna cosa 578 00:31:12,589 --> 00:31:14,569 y si no 579 00:31:14,569 --> 00:31:17,349 hago otra 580 00:31:17,349 --> 00:31:18,650 ¿vale? 581 00:31:21,660 --> 00:31:23,859 sí, sí, sí, podrías, lo que pasa es que el boolean 582 00:31:23,859 --> 00:31:26,039 ese sería igual que poner password igual a nulo 583 00:31:26,039 --> 00:31:27,640 entonces te ahorras ese boolean 584 00:31:27,640 --> 00:31:29,579 si pones directamente la condición, pero podrías 585 00:31:29,579 --> 00:31:31,160 hacer un boolean que fuera 586 00:31:31,160 --> 00:31:33,160 ¿existe contraseña o no existe? 587 00:31:33,400 --> 00:31:35,839 el primero es por la función y el segundo es la contraseña 588 00:31:35,839 --> 00:31:37,559 efectivamente 589 00:31:37,559 --> 00:31:39,759 y entonces tiras de ese boolean 590 00:31:39,759 --> 00:31:41,859 En lugar de tirar de la condición directamente 591 00:31:41,859 --> 00:31:44,160 Lo que pasa es que aquí no te hace falta el boolean 592 00:31:44,160 --> 00:31:46,240 Porque tienes esto para compararlo 593 00:31:46,240 --> 00:31:46,940 En el otro caso 594 00:31:46,940 --> 00:31:48,359 Tienes que tener el boolean 595 00:31:48,359 --> 00:31:49,299 Porque es que no hay otra forma 596 00:31:49,299 --> 00:31:51,019 De saber si el usuario está logado o no 597 00:31:51,019 --> 00:31:52,579 Aquí tienes una forma de saberlo 598 00:31:52,579 --> 00:31:53,500 Aparte del boolean 599 00:31:53,500 --> 00:31:53,940 ¿Vale? 600 00:31:54,579 --> 00:31:55,099 Entonces 601 00:31:55,099 --> 00:31:59,220 Que lo del null todavía son a chino 602 00:31:59,220 --> 00:32:00,940 Porque no nos hemos metido en objetos ni nada 603 00:32:00,940 --> 00:32:03,740 Pues uno tranquilamente podría decir 604 00:32:03,740 --> 00:32:04,119 Oye 605 00:32:04,119 --> 00:32:06,000 Mi password 606 00:32:06,000 --> 00:32:09,859 la inicializo a esto 607 00:32:09,859 --> 00:32:11,440 cuando mi aplicación arranca 608 00:32:11,440 --> 00:32:13,259 cuando la aplicación arranca 609 00:32:13,259 --> 00:32:14,480 mi password no tiene nada 610 00:32:14,480 --> 00:32:16,819 está así, mi password no tiene nada 611 00:32:16,819 --> 00:32:19,279 y entonces ahora yo digo 612 00:32:19,279 --> 00:32:19,779 oye 613 00:32:19,779 --> 00:32:22,519 si password 614 00:32:22,519 --> 00:32:24,039 es igual 615 00:32:24,039 --> 00:32:26,960 a esto 616 00:32:26,960 --> 00:32:29,200 recordad que para comparar un string con otro 617 00:32:29,200 --> 00:32:30,940 siempre se hace aquí 618 00:32:30,940 --> 00:32:32,099 no con el doble igual 619 00:32:32,099 --> 00:32:34,539 que me habéis comparado muchísimo 620 00:32:34,539 --> 00:33:01,579 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, 621 00:33:01,579 --> 00:33:06,099 Con lo cual, esa condición significa que es la primera vez que entro 622 00:33:06,099 --> 00:33:09,079 No hay contraseña, es la primera vez que entro, no hay contraseña 623 00:33:09,079 --> 00:33:12,799 Vale, pues ya tengo los dos casos distinguidos 624 00:33:12,799 --> 00:33:15,799 Si es la primera vez que entro, tengo que hacer una cosa, que es esto 625 00:33:15,799 --> 00:33:18,160 Y si es la segunda, tengo que hacer otra cosa, que es esto 626 00:33:18,160 --> 00:33:20,779 ¿Vale? Inicialmente no la tengo 627 00:33:20,779 --> 00:33:23,900 Inicialmente, usuario logado, falso 628 00:33:23,900 --> 00:33:26,880 E inicialmente la contraseña es vacía 629 00:33:26,880 --> 00:33:31,140 Vale, pues ahora entro en la opción 1, establecer contraseña 630 00:33:31,140 --> 00:33:52,359 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é. 631 00:33:52,359 --> 00:34:19,409 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? 632 00:34:19,409 --> 00:34:21,949 y ahora de nuevo viene lo mismo 633 00:34:21,949 --> 00:34:23,710 pasa lo de siempre, ya está 634 00:34:23,710 --> 00:34:25,909 la leo y se acabó y ya paso 635 00:34:25,909 --> 00:34:27,190 al siguiente case 636 00:34:27,190 --> 00:34:28,949 no 637 00:34:28,949 --> 00:34:32,190 no vale cualquier contraseña 638 00:34:32,190 --> 00:34:34,070 no vale, vamos a tener 639 00:34:34,070 --> 00:34:35,949 que meter esto en un bucle de verificación 640 00:34:35,949 --> 00:34:37,949 otra vez lo mismo, esto en un while 641 00:34:37,949 --> 00:34:39,969 para estarle pidiendo la 642 00:34:39,969 --> 00:34:41,469 password una y otra vez, una y otra vez 643 00:34:41,469 --> 00:34:43,869 mientras no cumpla que sea 644 00:34:43,869 --> 00:34:45,409 válida, vale 645 00:34:45,409 --> 00:34:47,469 pero al menos ya tenemos hecho bastante 646 00:34:47,469 --> 00:35:07,210 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. 647 00:35:07,210 --> 00:35:10,030 aquí el tema es que el bucle de verificación 648 00:35:10,030 --> 00:35:11,570 no es tan sencillo como el anterior 649 00:35:11,570 --> 00:35:13,510 mientras n sea menor que 0 650 00:35:13,510 --> 00:35:15,369 no, aquí sería 651 00:35:15,369 --> 00:35:17,949 mientras la password no cumpla 652 00:35:17,949 --> 00:35:20,630 tener un icono mayúsculo, una minúscula y un no 653 00:35:20,630 --> 00:35:21,530 o sea, eso no es tan fácil 654 00:35:21,530 --> 00:35:23,869 expresar esa condición no es tan sencilla 655 00:35:23,869 --> 00:35:26,409 pero en cualquier caso 656 00:35:26,409 --> 00:35:28,449 habrá que meter esto en ese bucle 657 00:35:28,449 --> 00:35:30,889 habrá que meter esto en un bucle 658 00:35:30,889 --> 00:35:39,929 de tal manera 659 00:35:39,929 --> 00:35:41,630 que nos aseguremos 660 00:35:41,630 --> 00:35:43,269 de que se está en ese bucle 661 00:35:43,269 --> 00:35:49,469 una y otra vez, una y otra vez, una y otra vez, mientras la password no cumpla la condición que uno quiere. 662 00:35:51,570 --> 00:35:55,690 Cuando ya salga de ese bucle, la password cumple la condición que uno quiere. 663 00:35:56,630 --> 00:36:04,570 Y aquí venía la mayor dificultad de este ejercicio, que es, ostras, ¿cómo expreso yo ahí la condición 664 00:36:04,570 --> 00:36:09,710 de que la password tenga al menos una mayúscula, al menos una minúscula y al menos un número? 665 00:36:09,710 --> 00:36:12,730 pues hombre, es una condición compleja 666 00:36:12,730 --> 00:36:14,289 de evaluar, no es tan fácil 667 00:36:14,289 --> 00:36:15,769 imaginaos que la condición fuera 668 00:36:15,769 --> 00:36:18,110 nos hubieran dicho, oye 669 00:36:18,110 --> 00:36:20,250 la password válida tiene que tener 670 00:36:20,250 --> 00:36:22,530 exactamente 8 caracteres 671 00:36:22,530 --> 00:36:24,929 por ejemplo, pues lo habrían puesto facilísimo 672 00:36:24,929 --> 00:36:26,150 ponemos ahí 673 00:36:26,150 --> 00:36:28,489 la condición password.length 674 00:36:28,489 --> 00:36:30,530 igual a 8, ya está, ya tendríamos 675 00:36:30,530 --> 00:36:31,710 la condición de validación 676 00:36:31,710 --> 00:36:34,849 se quedaría un bucle de validación facilísimo 677 00:36:34,849 --> 00:36:36,349 se está ahí todo el rato 678 00:36:36,349 --> 00:36:38,010 mientras no llegue una password 679 00:36:38,010 --> 00:36:40,369 cuya length, cuyo punto length 680 00:36:40,369 --> 00:36:41,449 sea diferente de 8 681 00:36:41,449 --> 00:36:43,030 ahí se está todo el rato 682 00:36:43,030 --> 00:36:45,130 tendría una condición muy sencilla, ¿no? 683 00:36:45,769 --> 00:36:48,389 pero claro, no me han dicho una condición tan sencilla como esa 684 00:36:48,389 --> 00:36:49,829 me han dicho una cosa muy complicada 685 00:36:49,829 --> 00:36:52,750 entonces, esa cosa tan complicada 686 00:36:52,750 --> 00:36:53,690 no la puedo plantar aquí 687 00:36:53,690 --> 00:36:55,690 no puedo plantar ahí en una única expresión 688 00:36:55,690 --> 00:36:58,110 lo de tener al menos un mayúscula 689 00:36:58,110 --> 00:37:00,170 tener al menos una minúscula y tener al menos un número 690 00:37:00,170 --> 00:37:02,369 eso no lo puedo expresar en una condición 691 00:37:02,369 --> 00:37:03,929 única, no puedo 692 00:37:03,929 --> 00:37:05,449 tengo que averiguarlo mediante un for 693 00:37:05,449 --> 00:37:07,150 ir contando caracteres, no puedo 694 00:37:07,150 --> 00:37:09,030 ¿vale? pues entonces 695 00:37:09,030 --> 00:37:11,550 ¿cómo lo hacemos? pues efectivamente 696 00:37:11,550 --> 00:37:12,690 vamos a necesitar un boolean 697 00:37:12,690 --> 00:37:15,809 para ver si la contraseña 698 00:37:15,809 --> 00:37:16,610 es válida o no 699 00:37:16,610 --> 00:37:19,389 que inicialmente sea falso 700 00:37:19,389 --> 00:37:23,849 ¿vale? 701 00:37:26,130 --> 00:37:28,630 y ahora, entra la primera vez 702 00:37:28,630 --> 00:37:31,010 ¿no? inicialmente la contraseña 703 00:37:31,010 --> 00:37:33,030 no es válida, es falso 704 00:37:33,030 --> 00:37:34,730 con lo cual entra aquí, mientras 705 00:37:34,730 --> 00:37:35,869 no sea válida, o sea 706 00:37:35,869 --> 00:37:38,849 entra, y ahora yo aquí 707 00:37:38,849 --> 00:37:40,889 ya evalúo, le doy 708 00:37:40,889 --> 00:37:42,789 valor al válida en función del 709 00:37:42,789 --> 00:37:44,869 password, me pongo a 710 00:37:44,869 --> 00:37:46,949 contar mayúsculas, minúsculas 711 00:37:46,949 --> 00:37:48,849 en función de eso, decido si válida 712 00:37:48,849 --> 00:37:50,969 es true o false y la siguiente 713 00:37:50,969 --> 00:37:52,929 vez que entre, si sigue 714 00:37:52,929 --> 00:37:54,969 siendo válida igual a false 715 00:37:54,969 --> 00:37:56,750 pues volverá a pedirla 716 00:37:56,750 --> 00:37:58,949 si válida es igual a true, ya no la 717 00:37:58,949 --> 00:38:00,849 pedirá, entonces ¿qué nos falta 718 00:38:00,849 --> 00:38:02,789 aquí? pues hacer todas las 719 00:38:02,789 --> 00:38:03,989 operaciones que haya que hacer 720 00:38:03,989 --> 00:38:06,909 para ver si válida la puedo pasar a true 721 00:38:06,909 --> 00:38:08,829 o no, o la tengo que dejar a false, a ver si la 722 00:38:08,829 --> 00:38:09,670 puedo pasar a true o no 723 00:38:09,670 --> 00:38:12,409 y aquí entonces que tenemos que hacer 724 00:38:12,409 --> 00:38:14,769 pues recorrer password uno tras otro 725 00:38:14,769 --> 00:38:16,769 los caracteres y se puede hacer 726 00:38:16,769 --> 00:38:18,809 de muchas maneras, pues vamos a contar 727 00:38:18,809 --> 00:38:20,570 las mayúsculas, las minúsculas 728 00:38:20,570 --> 00:38:22,750 y los números y si todos 729 00:38:22,750 --> 00:38:24,630 son mayores o iguales que uno 730 00:38:24,630 --> 00:38:25,889 pues valida igual a true 731 00:38:25,889 --> 00:38:28,289 podría ser la forma de hacerlo 732 00:38:28,289 --> 00:38:30,909 por ejemplo vamos a hacer eso 733 00:38:30,909 --> 00:38:32,929 vamos a contar 734 00:38:32,929 --> 00:38:35,769 mayúsculas 735 00:38:35,769 --> 00:38:39,090 minúsculas 736 00:38:39,090 --> 00:38:46,219 y números 737 00:38:46,219 --> 00:38:48,360 cifras 738 00:38:48,360 --> 00:38:50,360 vamos a contarlos 739 00:38:50,360 --> 00:38:51,860 y ahora 740 00:38:51,860 --> 00:38:53,639 si una vez contados 741 00:38:53,639 --> 00:38:54,760 ahora aquí habrá que contar 742 00:38:54,760 --> 00:38:56,300 si una vez contados resulta 743 00:38:56,300 --> 00:38:57,639 vamos a suponer que 744 00:38:57,639 --> 00:38:59,920 los vamos a llamar así 745 00:38:59,920 --> 00:39:02,039 habrá que ver cómo contamos 746 00:39:02,039 --> 00:39:05,179 con mayús 747 00:39:05,179 --> 00:39:08,039 inicialmente igual a cero 748 00:39:08,039 --> 00:39:09,239 porque es un contador 749 00:39:09,239 --> 00:39:13,239 con de minus inicialmente igual a cero 750 00:39:13,239 --> 00:39:14,340 porque es un contador 751 00:39:14,340 --> 00:39:16,659 y con de cifras 752 00:39:16,659 --> 00:39:20,900 tendremos que contarnos 753 00:39:20,900 --> 00:39:23,099 y una vez contado la condición de válida 754 00:39:23,099 --> 00:39:25,079 pues será 755 00:39:25,079 --> 00:39:28,039 era tener al menos 756 00:39:28,039 --> 00:39:29,719 uno de cada 757 00:39:29,719 --> 00:39:29,920 ¿no? 758 00:39:30,599 --> 00:39:32,940 pues la condición de válida será 759 00:39:32,940 --> 00:39:38,219 con mayús mayor o igual que uno 760 00:39:38,219 --> 00:39:38,719 y 761 00:39:38,719 --> 00:40:15,699 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. 762 00:40:15,699 --> 00:40:18,420 vale, pues una vez 763 00:40:18,420 --> 00:40:21,420 una vez que tengamos esto contado 764 00:40:21,420 --> 00:40:23,980 que nos falta contarlo, claro, nos falta aquí contarlo 765 00:40:23,980 --> 00:40:25,559 una vez que tengamos contado 766 00:40:25,559 --> 00:40:27,300 la condición de ser válida es esta 767 00:40:27,300 --> 00:40:29,139 que se cumpla simultáneamente 768 00:40:29,139 --> 00:40:31,039 que esto es mayor o igual que 1 769 00:40:31,039 --> 00:40:33,500 y que esto es mayor o igual que 1 770 00:40:33,500 --> 00:40:35,179 y que esto es mayor o igual que 1 771 00:40:35,179 --> 00:40:37,960 si se cumplen las tres simultáneamente 772 00:40:37,960 --> 00:40:38,559 las tres 773 00:40:38,559 --> 00:40:41,300 entonces válida será true 774 00:40:41,300 --> 00:40:43,559 cuando el bucle vuelva arriba 775 00:40:43,559 --> 00:40:46,559 como resulta que ya es válida 776 00:40:46,559 --> 00:40:48,099 esto es true, no true es false 777 00:40:48,099 --> 00:40:49,000 pues ya no entra más 778 00:40:49,000 --> 00:40:51,559 bueno pues esa es 779 00:40:51,559 --> 00:40:54,059 mi bucle de validación de la contraseña 780 00:40:54,059 --> 00:40:56,739 ¿no? 781 00:40:57,059 --> 00:40:59,079 recordar desde el principio como lo hemos montado 782 00:40:59,079 --> 00:41:00,960 esta es la lectura de la contraseña 783 00:41:00,960 --> 00:41:03,260 no me vale cualquier lectura 784 00:41:03,260 --> 00:41:05,260 con lo cual tengo que meterla en un bucle 785 00:41:05,260 --> 00:41:07,460 que se asegure de que 786 00:41:07,460 --> 00:41:08,920 cumple una condición 787 00:41:08,920 --> 00:41:11,260 esa condición es muy compleja 788 00:41:11,260 --> 00:41:13,059 no puedo plantarla ahí, no es la condición 789 00:41:13,059 --> 00:41:17,059 n mayor que 0, no, es una condición muy compleja 790 00:41:17,059 --> 00:41:20,440 pues a través de un boolean, inicialmente no la cumple 791 00:41:20,440 --> 00:41:23,780 y así entramos, y ahora aquí hacemos lo que haya que hacer 792 00:41:23,780 --> 00:41:26,940 para ver si esa nueva contraseña 793 00:41:26,940 --> 00:41:28,800 hace que este boolean pase a true 794 00:41:28,800 --> 00:41:32,239 si hace que este boolean pase a true, ya está, ya lo tenemos 795 00:41:32,239 --> 00:41:35,820 si no hace que pase a true, pues otra vez habrá que leerla 796 00:41:35,820 --> 00:41:37,500 otra vez habrá que contar, etc. 797 00:41:40,539 --> 00:41:43,500 ¿Vale? Entonces, ¿qué nos faltará después? Pues hacer esta cuenta 798 00:41:43,500 --> 00:41:45,739 es una cuenta rápida de hacer 799 00:41:45,739 --> 00:41:46,539 hacerla y ya está 800 00:41:46,539 --> 00:41:49,440 y luego en el ELSE será eso mismo 801 00:41:49,440 --> 00:41:51,840 pero previamente haber pedido la antigua 802 00:41:51,840 --> 00:41:52,780 etcétera 803 00:41:52,780 --> 00:41:54,780 bueno vamos a parar aquí entonces