1 00:00:00,000 --> 00:00:01,820 Enunciado, lo de siempre 2 00:00:01,820 --> 00:00:05,339 Programa que solicita cadenas de texto 3 00:00:05,339 --> 00:00:07,379 Con lo cual, un bucle ya sabemos que hay que hacer 4 00:00:07,379 --> 00:00:10,080 Estar viendo, meta cadena, meta cadena, meta cadena, meta cadena 5 00:00:10,080 --> 00:00:10,880 Un bucle habrá que hacer 6 00:00:10,880 --> 00:00:13,320 Cuando acabe ese bucle, me lo han dicho 7 00:00:13,320 --> 00:00:14,679 Cuando la cadena que has metido es fin 8 00:00:14,679 --> 00:00:16,879 Luego ya en la cabeza empezamos a perfilar 9 00:00:16,879 --> 00:00:18,579 Un bucle que está todo el rato 10 00:00:18,579 --> 00:00:20,160 Introduzca cadena, introduzca cadena 11 00:00:20,160 --> 00:00:21,660 Condición nos la están diciendo 12 00:00:21,660 --> 00:00:24,579 Daniel y Andoni, cuando la cadena sea fin 13 00:00:24,579 --> 00:00:27,579 Vale, y que hay que hacer con esas cadenas que estamos metiendo 14 00:00:27,579 --> 00:00:29,579 Dice, pues no sé, apañatelas 15 00:00:29,579 --> 00:00:33,179 para que al final de todo, cuando ya se acababa de introducir todas, 16 00:00:33,820 --> 00:00:36,320 el programa te diga, la más larga es patatín. 17 00:00:36,799 --> 00:00:37,280 Apáñatelas. 18 00:00:37,579 --> 00:00:41,579 Pues traducido esto a nuestro idioma, 19 00:00:42,240 --> 00:00:47,140 esto significa que voy a tener que encontrar la cadena que es mayor en algo. 20 00:00:48,439 --> 00:00:51,280 Luego de nuevo es un ejercicio idéntico al máximo. 21 00:00:51,840 --> 00:00:56,359 Tengo un montón de valores y tengo que ver cuál de ellos cumple ser mayor en algo. 22 00:00:56,359 --> 00:01:01,380 ¿En qué? El ejercicio anterior era en valor numérico, porque eran números. 23 00:01:01,920 --> 00:01:04,400 Entonces, ¿cuál de esos números será mayor en valor numérico? 24 00:01:04,920 --> 00:01:08,599 En este caso, ¿cuál de estas cadenas es mayor en tamaño? 25 00:01:09,859 --> 00:01:10,379 ¿Vale? 26 00:01:11,780 --> 00:01:15,379 Bueno, pues entonces la estructura será igual, tengo que hacer el máximo, 27 00:01:15,579 --> 00:01:21,859 pero a la hora de comparar si una es mayor que la otra, no haré n mayor que el máximo, 28 00:01:21,859 --> 00:01:25,239 sino tamaño de esta cadena mayor que tamaño de esta 29 00:01:25,239 --> 00:01:28,200 porque ahora el criterio de ser mayor no es el valor 30 00:01:28,200 --> 00:01:31,140 ahora el criterio de ser mayor es el punto led 31 00:01:31,140 --> 00:01:32,879 la longitud, pues ya está, nada más 32 00:01:32,879 --> 00:01:36,420 pues venga, entonces, nos han dicho que un bucle 33 00:01:36,420 --> 00:01:40,319 como vamos a, bueno, como tenemos que leer por teclado 34 00:01:40,319 --> 00:01:50,200 bueno, pues lo vamos haciendo 35 00:01:50,200 --> 00:01:59,000 vale, pues vamos plasmando entonces 36 00:01:59,000 --> 00:02:01,519 la idea que tenemos en la cabeza, lo que más o menos hemos dicho 37 00:02:01,519 --> 00:02:03,480 por donde van los tiros, y luego ya lo vamos 38 00:02:03,480 --> 00:02:06,159 concretando. Bueno, pues 39 00:02:06,159 --> 00:02:08,139 hay que leer cadenas. Pues nada, 40 00:02:08,300 --> 00:02:09,919 una variable string para leer las cadenas 41 00:02:09,919 --> 00:02:12,060 tengo que tener. No hay tu tío, una variable string 42 00:02:12,060 --> 00:02:12,659 tengo que tener. 43 00:02:14,120 --> 00:02:15,439 Vale, entonces, 44 00:02:15,680 --> 00:02:18,340 un bucle 45 00:02:18,340 --> 00:02:19,900 tiene que haber, porque vamos a estar 46 00:02:19,900 --> 00:02:22,120 muchas veces leyendo la cadena, 47 00:02:22,199 --> 00:02:24,159 leyendo la cadena. Pues venga. 48 00:02:25,580 --> 00:02:26,379 Que te manda 49 00:02:26,379 --> 00:02:27,139 tu primo, ¿eh? 50 00:02:27,139 --> 00:02:34,439 Ese es demasiado peligroso, ¿no? 51 00:02:35,360 --> 00:02:36,020 Nada, pues nada 52 00:02:36,020 --> 00:02:38,740 Venga, a ver, cadena 53 00:02:38,740 --> 00:02:41,000 Punto next line 54 00:02:41,000 --> 00:02:43,219 Uy, ¿qué digo yo, cadena? 55 00:02:43,419 --> 00:02:44,539 Scan, ya decía yo 56 00:02:50,699 --> 00:02:51,539 Vale, a ver 57 00:02:51,539 --> 00:02:52,620 Que estoy aquí 58 00:02:52,620 --> 00:02:55,379 Haciendo las cosas muy raras 59 00:02:55,379 --> 00:02:57,460 Vale, pues entonces en este bucle 60 00:02:57,460 --> 00:02:59,979 Lo que sabemos que vamos a hacer un montón del rato 61 00:02:59,979 --> 00:03:01,139 Tienes sueño Silvia 62 00:03:01,139 --> 00:03:02,120 ¿No? 63 00:03:04,120 --> 00:03:07,319 Vale, pues 64 00:03:07,319 --> 00:03:09,639 Ir leyendo la cadena 65 00:03:09,639 --> 00:03:11,379 Vale, ir leyendo la cadena 66 00:03:11,379 --> 00:03:13,740 Entonces esto ya nos permite 67 00:03:13,740 --> 00:03:15,819 Poner incluso la condición 68 00:03:15,819 --> 00:03:18,419 Mientras esta cadena que he leído 69 00:03:18,419 --> 00:03:22,129 No sea 70 00:03:22,129 --> 00:03:23,629 La cadena fin 71 00:03:23,629 --> 00:03:26,169 Entonces para hacer igualdad entre cadenas 72 00:03:26,169 --> 00:03:27,930 Una cadena igual a la otra 73 00:03:27,930 --> 00:03:29,449 No podemos usar el doble igual 74 00:03:29,449 --> 00:03:30,909 Eso como ya lo sabemos 75 00:03:30,909 --> 00:03:32,669 Porque lo hemos memorizado y nos lo hemos aprendido 76 00:03:32,669 --> 00:03:34,770 Jamás nos vamos a equivocar 77 00:03:34,770 --> 00:03:36,229 Y jamás vamos a hacer esto 78 00:03:36,229 --> 00:03:38,949 ¿Vale? Entonces, mientras sea igual a fin 79 00:03:38,949 --> 00:03:41,030 O como en este caso, mientras sea distinto 80 00:03:41,030 --> 00:03:43,090 Pues mientras la cadena sea diferente 81 00:03:43,090 --> 00:03:43,590 De fin 82 00:03:43,590 --> 00:03:47,250 Entonces, nunca jamás 83 00:03:47,250 --> 00:03:48,030 Haríamos esto 84 00:03:48,030 --> 00:03:48,889 ¿Vale? 85 00:03:48,889 --> 00:03:49,330 Esto no 86 00:03:49,330 --> 00:03:53,129 ¿Por qué? Porque esto es un string 87 00:03:53,129 --> 00:03:55,310 El compilador no te va a decir 88 00:03:55,310 --> 00:03:56,990 Que sea un problema, porque aquí me lo está diciendo 89 00:03:56,990 --> 00:03:58,370 Pero porque esta no está inicializada 90 00:03:58,370 --> 00:03:59,689 Vamos a suponer que la inicializa 91 00:03:59,689 --> 00:04:00,530 Para que se calle 92 00:04:00,530 --> 00:04:03,969 El compilador nunca te va a decir que esto está mal 93 00:04:03,969 --> 00:04:06,110 Porque esto sintácticamente es perfecto 94 00:04:06,110 --> 00:04:08,169 Estás comparando el contenido 95 00:04:08,169 --> 00:04:10,490 De la variable cadena con el contenido 96 00:04:10,490 --> 00:04:11,969 De esta 97 00:04:11,969 --> 00:04:13,469 Variable de aquí 98 00:04:13,469 --> 00:04:14,710 En la que está guardada fin 99 00:04:14,710 --> 00:04:17,750 Pero claro, como string 100 00:04:17,750 --> 00:04:20,269 Es un objeto en realidad 101 00:04:20,269 --> 00:04:22,350 Lo que tiene la variable 102 00:04:22,350 --> 00:04:24,209 Es la dirección de memoria 103 00:04:24,209 --> 00:04:26,170 ¿Vale? Entonces 104 00:04:26,170 --> 00:04:28,410 aunque ya no lo entendamos muy bien 105 00:04:28,410 --> 00:04:30,709 lo que estamos comparando cuando comparamos 106 00:04:30,709 --> 00:04:32,930 dos objetos y string es un objeto 107 00:04:32,930 --> 00:04:34,949 estamos comparando las direcciones 108 00:04:34,949 --> 00:04:36,110 de memoria donde están 109 00:04:36,110 --> 00:04:38,470 cuando estamos comparando con esto 110 00:04:38,470 --> 00:04:39,689 con igual o con doble igual 111 00:04:39,689 --> 00:04:42,410 nos dan igual las direcciones de memoria donde está 112 00:04:42,410 --> 00:04:44,189 cadena y donde está fin, nos dan igual 113 00:04:44,189 --> 00:04:46,170 lo que queremos comparar es el contenido 114 00:04:46,170 --> 00:04:48,610 queremos comparar si este contenido 115 00:04:48,610 --> 00:04:50,509 de la variable cadena es igual a este 116 00:04:50,509 --> 00:04:52,829 contenido fin, queremos comparar los contenidos 117 00:04:52,829 --> 00:04:54,730 no que estén alojados en la misma dirección 118 00:04:54,730 --> 00:04:57,949 Entonces, esto no me compara los contenidos 119 00:04:57,949 --> 00:04:59,970 Esto me compara los contenidos 120 00:04:59,970 --> 00:05:01,910 Solo de las variables de tipo primitivo 121 00:05:01,910 --> 00:05:03,750 Los 8 que conocemos 122 00:05:03,750 --> 00:05:06,290 Byte, short, int, long 123 00:05:06,290 --> 00:05:07,290 Flow, add, double 124 00:05:07,290 --> 00:05:09,129 Char y boolean 125 00:05:09,129 --> 00:05:10,610 Solo de esos 126 00:05:10,610 --> 00:05:12,589 Claro, entonces 127 00:05:12,589 --> 00:05:13,889 False 128 00:05:13,889 --> 00:05:17,410 Ah, perdón, perdón 129 00:05:17,410 --> 00:05:19,850 Si es distinto, claro 130 00:05:19,850 --> 00:05:22,189 Entonces, con cualquier otro tipo 131 00:05:22,189 --> 00:05:23,889 De dato que no sea uno de esos 8 132 00:05:23,889 --> 00:05:27,329 si queremos ver la igualdad entre uno y otro 133 00:05:27,329 --> 00:05:30,230 nunca va a ser con igual o con distinto 134 00:05:30,230 --> 00:05:31,550 nunca jamás 135 00:05:31,550 --> 00:05:33,610 porque no queremos comparar 136 00:05:33,610 --> 00:05:35,430 dónde están alojados físicamente 137 00:05:35,430 --> 00:05:36,910 queremos comparar contenidos 138 00:05:36,910 --> 00:05:39,850 bueno, pues nuestro primer ejemplo entonces 139 00:05:39,850 --> 00:05:42,769 de variable objeto como es el tipo string 140 00:05:42,769 --> 00:05:45,170 ya vimos en su momento que si quiero comparar 141 00:05:45,170 --> 00:05:46,649 si una es igual a otro 142 00:05:46,649 --> 00:05:48,370 lo tenemos que hacer con esto 143 00:05:48,370 --> 00:05:52,290 y esto como ya lo hemos dicho un montón de veces 144 00:05:52,290 --> 00:05:54,389 esto ya lo tenéis aprendido 145 00:05:54,389 --> 00:05:56,290 en la cabeza, entonces cuando uno quiere compararse 146 00:05:56,290 --> 00:05:57,689 una cadena es igual que otra 147 00:05:57,689 --> 00:06:00,329 lo hace de corrido, nunca se le ocurre 148 00:06:00,329 --> 00:06:02,009 poner doble igual, porque si pone doble igual 149 00:06:02,009 --> 00:06:04,170 pues suspende, vale 150 00:06:04,170 --> 00:06:06,310 entonces esto sería para ver si cadena 151 00:06:06,310 --> 00:06:08,050 contiene esto 152 00:06:08,050 --> 00:06:10,250 pero nuestra condición no es esa 153 00:06:10,250 --> 00:06:12,110 nuestra condición es mientras cadena 154 00:06:12,110 --> 00:06:14,230 sea diferente, entonces no 155 00:06:14,230 --> 00:06:16,250 existe un not equals, este método no 156 00:06:16,250 --> 00:06:18,209 existe, si existiera un método 157 00:06:18,209 --> 00:06:20,230 not equals, pues fenomenal 158 00:06:20,230 --> 00:06:22,250 Pero no existe, solo existe el equals 159 00:06:22,250 --> 00:06:24,910 Claro, pero tenemos este operador booleano 160 00:06:24,910 --> 00:06:27,329 Este operador que te niega 161 00:06:27,329 --> 00:06:29,170 La condición que tú tengas ahí 162 00:06:29,170 --> 00:06:30,009 Te la niega 163 00:06:30,009 --> 00:06:32,009 Entonces esto es lo mismo que decir 164 00:06:32,009 --> 00:06:34,209 Mientras no sea igual 165 00:06:34,209 --> 00:06:36,490 ¿Vale? Mientras no sea igual 166 00:06:36,490 --> 00:06:39,170 Cuando queremos poner la contraria 167 00:06:39,170 --> 00:06:41,230 La contraria de una condición 168 00:06:41,230 --> 00:06:41,930 Cualquiera 169 00:06:41,930 --> 00:06:43,709 Pues el no delante 170 00:06:43,709 --> 00:06:46,009 Y esto es una condición 171 00:06:46,009 --> 00:06:47,629 Esto es una condición 172 00:06:47,629 --> 00:06:48,649 ¿Vale? 173 00:06:48,649 --> 00:06:51,029 Lo que pasa es que claro 174 00:06:51,029 --> 00:06:52,970 Cuando comparamos 175 00:06:52,970 --> 00:06:54,069 Que en este caso no podríamos 176 00:06:54,069 --> 00:06:56,290 Pero bueno, si tuviéramos variables enteras 177 00:06:56,290 --> 00:06:57,790 Cuando comparamos con el doble igual 178 00:06:57,790 --> 00:06:59,290 No lo 179 00:06:59,290 --> 00:07:02,910 Claro que te lo reconoce 180 00:07:02,910 --> 00:07:03,930 Pero no lo hacemos así 181 00:07:03,930 --> 00:07:05,149 Lo podríamos hacer así 182 00:07:05,149 --> 00:07:07,009 Es decir, no igual 183 00:07:07,009 --> 00:07:09,990 Pero tenemos ya un operador que nos lo hace que es este 184 00:07:09,990 --> 00:07:12,170 Entonces ponemos esto y lo vemos más claro 185 00:07:12,170 --> 00:07:14,250 Pero sería exactamente igual 186 00:07:14,250 --> 00:07:16,250 Ponerlo así 187 00:07:16,250 --> 00:07:17,709 Que ponerlo así 188 00:07:17,709 --> 00:07:19,829 sería idéntico, sería lo mismo 189 00:07:19,829 --> 00:07:22,029 mientras no, esto igual a esto 190 00:07:22,029 --> 00:07:23,790 pero como tenemos el distinto 191 00:07:23,790 --> 00:07:25,730 no lo hacemos, pero claro, en el caso 192 00:07:25,730 --> 00:07:27,990 de comparar objetos entre sí 193 00:07:27,990 --> 00:07:29,509 como los string 194 00:07:29,509 --> 00:07:31,529 es que no tenemos otra alternativa 195 00:07:31,529 --> 00:07:33,889 porque el método que tenemos es solo 196 00:07:33,889 --> 00:07:35,269 para si uno es igual a otro 197 00:07:35,269 --> 00:07:36,870 no tenemos el not equals 198 00:07:36,870 --> 00:07:40,009 entonces como solo tenemos el método para ver si uno es igual a otro 199 00:07:40,009 --> 00:07:41,750 pues es que no nos queda 200 00:07:41,750 --> 00:07:42,889 más remedio que 201 00:07:42,889 --> 00:07:45,870 para ver si uno es distinto 202 00:07:45,870 --> 00:07:47,769 hacerlo con el negado delante 203 00:07:47,769 --> 00:07:49,769 vale 204 00:07:49,769 --> 00:07:52,629 pues entonces, aquí tenemos un bucle 205 00:07:52,629 --> 00:07:54,649 que va a estar todo el rato 206 00:07:54,649 --> 00:07:56,589 lee cadena mientras sea diferente de fin 207 00:07:56,589 --> 00:07:58,089 lee cadena mientras sea diferente de fin 208 00:07:58,089 --> 00:07:59,449 cuando hayamos leído una cadena 209 00:07:59,449 --> 00:08:02,589 y esa cadena sea fin, ya la siguiente vez 210 00:08:02,589 --> 00:08:04,649 ya no entra, vale, esa parte está 211 00:08:04,649 --> 00:08:06,329 entonces 212 00:08:06,329 --> 00:08:08,790 he tenido que inicializar cadena a algo 213 00:08:08,790 --> 00:08:10,610 por el mismo rollo 214 00:08:10,610 --> 00:08:11,629 que nos pasa a menudo 215 00:08:11,629 --> 00:08:13,170 el bucle while 216 00:08:13,170 --> 00:08:15,129 vale, el bucle while 217 00:08:15,129 --> 00:08:17,149 lo primero que hace es evaluar la condición 218 00:08:17,149 --> 00:08:19,129 es lo primero, si es true 219 00:08:19,129 --> 00:08:21,209 entra, y si es false no entra 220 00:08:21,209 --> 00:08:23,350 entonces, de hecho el bucle while 221 00:08:23,350 --> 00:08:25,610 si está, podría ocurrir 222 00:08:25,610 --> 00:08:27,430 que esto de dentro no se hiciera 223 00:08:27,430 --> 00:08:29,430 nunca jamás, si ya de partida 224 00:08:29,430 --> 00:08:31,350 la primera vez la condición fuera 225 00:08:31,350 --> 00:08:33,210 falsa, ¿verdad? por ejemplo 226 00:08:33,210 --> 00:08:35,129 este bucle no se ejecutaría nunca 227 00:08:35,129 --> 00:08:37,490 imaginaos que yo inicializo por cualquier tontería 228 00:08:37,490 --> 00:08:39,269 inicializo cadena 229 00:08:39,269 --> 00:08:41,629 afín, entonces este bucle no se ejecutaría 230 00:08:41,629 --> 00:08:43,110 nunca, porque ya de partida 231 00:08:43,110 --> 00:08:44,590 Esto sería falso 232 00:08:44,590 --> 00:08:46,029 Y no entraría nunca 233 00:08:46,029 --> 00:08:48,649 Entonces 234 00:08:48,649 --> 00:08:51,909 Por eso me sale 235 00:08:51,909 --> 00:08:52,970 Aquí el error de compilación 236 00:08:52,970 --> 00:08:53,990 Porque me dice, oye 237 00:08:53,990 --> 00:08:57,509 Yo lo primero que hago es evaluar la condición 238 00:08:57,509 --> 00:08:59,669 Entonces para evaluarla por primera vez 239 00:08:59,669 --> 00:09:00,889 Cadena tiene que tener un valor 240 00:09:00,889 --> 00:09:01,570 Pues yo no puedo 241 00:09:01,570 --> 00:09:04,750 Bueno, pues entonces nosotros ya hemos hecho este truco 242 00:09:04,750 --> 00:09:05,509 Otras veces 243 00:09:05,509 --> 00:09:08,169 Como yo quiero que la primera vez se haga sí o sí 244 00:09:08,169 --> 00:09:10,190 Tiene que entrar una primera vez sí o sí 245 00:09:10,190 --> 00:09:10,950 Para leer la primera 246 00:09:10,950 --> 00:09:12,389 Y luego ya las siguientes depende 247 00:09:12,389 --> 00:09:15,129 Pues inicializo esto a cualquier cadena 248 00:09:15,129 --> 00:09:16,070 Diferente de fin 249 00:09:16,070 --> 00:09:18,529 ¿Vale? A cualquier cadena diferente de fin 250 00:09:18,529 --> 00:09:21,110 Y ya está, ya entra la primera vez 251 00:09:21,110 --> 00:09:23,710 En la primera vez ya 252 00:09:23,710 --> 00:09:25,649 La primera cadena 253 00:09:25,649 --> 00:09:26,769 Haz lo que tenga que hacer 254 00:09:26,769 --> 00:09:28,690 Para hacer el máximo que todavía no lo hemos hecho, etc 255 00:09:28,690 --> 00:09:34,700 Vale 256 00:09:34,700 --> 00:09:36,539 Entonces 257 00:09:36,539 --> 00:09:39,500 Vamos a aprovechar esto 258 00:09:39,500 --> 00:09:41,240 Esto de aquí 259 00:09:41,240 --> 00:09:44,000 Para introducir 260 00:09:44,000 --> 00:09:46,320 La tercera y penúltima 261 00:09:46,320 --> 00:09:48,259 tercera y penúltima 262 00:09:48,259 --> 00:09:50,320 sintaxis del bucle 263 00:09:50,320 --> 00:09:51,840 conocemos el while 264 00:09:51,840 --> 00:09:54,440 el bucle genérico, el único en realidad 265 00:09:54,440 --> 00:09:56,240 que hace falta, mientras una condición 266 00:09:56,240 --> 00:09:58,399 hace esto, conocemos 267 00:09:58,399 --> 00:09:59,399 la sintaxis del for 268 00:09:59,399 --> 00:10:02,399 que es como un while pero que 269 00:10:02,399 --> 00:10:04,259 te permite además de la condición 270 00:10:04,259 --> 00:10:06,259 poner una sentencia que se ejecuta 271 00:10:06,259 --> 00:10:08,179 la primera vez y luego otra 272 00:10:08,179 --> 00:10:10,559 que se ejecuta en cada iteración al terminar 273 00:10:10,559 --> 00:10:11,779 nos permite además eso 274 00:10:11,779 --> 00:10:14,340 luego nos es muy práctico cuando queremos hacer 275 00:10:14,340 --> 00:10:16,620 bucles que se ejecutan un número concreto de veces 276 00:10:16,620 --> 00:10:18,320 porque ponemos ahí un contador, etc. 277 00:10:19,220 --> 00:10:20,419 ¿Vale? Bueno, pues 278 00:10:20,419 --> 00:10:21,759 hay dos sintaxis más. 279 00:10:22,519 --> 00:10:24,059 Por ejemplo, situación como esta, 280 00:10:24,279 --> 00:10:25,559 que ya nos ha salido varias veces. 281 00:10:26,480 --> 00:10:28,440 Tenemos un bucle en el 282 00:10:28,440 --> 00:10:30,139 cual, por sus circunstancias, 283 00:10:30,299 --> 00:10:32,340 la primera vez queremos que se ejecute 284 00:10:32,340 --> 00:10:32,779 sí o sí. 285 00:10:34,240 --> 00:10:36,340 Querríamos que ni evaluara esta condición 286 00:10:36,340 --> 00:10:37,419 de hecho si puede ser. 287 00:10:37,919 --> 00:10:40,419 Porque la primera vez queremos que se ejecute sí o sí. 288 00:10:41,879 --> 00:10:42,639 Es la situación 289 00:10:42,639 --> 00:10:43,799 en la que estamos ahora mismo, ¿no? 290 00:10:43,799 --> 00:10:44,419 En este ejemplo. 291 00:10:44,820 --> 00:10:46,740 Entonces, nosotros para conseguir eso 292 00:10:46,740 --> 00:10:49,879 hemos tenido que inicializar cadena a un valor. 293 00:10:50,360 --> 00:10:52,179 Entonces, inicializando cadena a un valor 294 00:10:52,179 --> 00:10:53,600 ya hemos conseguido lo que queríamos. 295 00:10:53,799 --> 00:10:55,120 Entonces, no es tan grave, no pasa nada, 296 00:10:55,139 --> 00:10:57,000 ya hemos conseguido que la primera vez lo haga sí o sí. 297 00:10:58,100 --> 00:11:00,720 Vale, pero hay otra sintaxis del bucle for 298 00:11:00,720 --> 00:11:05,799 que es esta. 299 00:11:07,059 --> 00:11:08,320 Del bucle for no, perdón. 300 00:11:12,779 --> 00:11:14,379 Que es el do while, que es esta. 301 00:11:15,299 --> 00:11:15,539 ¿Vale? 302 00:11:16,419 --> 00:11:19,299 Do, paréntesis, 303 00:11:19,879 --> 00:11:22,980 Y aquí while y la condición que sea. 304 00:11:23,899 --> 00:11:24,860 Y la condición que sea. 305 00:11:25,960 --> 00:11:29,379 En nuestro caso, como estamos con este ejemplo, vamos a poder que fuera esto. 306 00:11:32,279 --> 00:11:34,480 Claro, esta es otra sintaxis de bucle. 307 00:11:35,139 --> 00:11:36,179 Entonces, ¿esto cómo funciona? 308 00:11:38,059 --> 00:11:42,039 Hace una primera iteración y esa incondicionalmente. 309 00:11:42,500 --> 00:11:43,940 La primera es incondicional. 310 00:11:44,960 --> 00:11:46,720 La hace, pase lo que pase. 311 00:11:46,720 --> 00:11:48,299 Una primera vez entra. 312 00:11:48,620 --> 00:11:49,659 Luego no es igual que el while. 313 00:11:49,879 --> 00:11:52,519 Porque el while la primera vez 314 00:11:52,519 --> 00:11:54,580 Puede que la haga o puede que no la haga 315 00:11:54,580 --> 00:11:57,360 Depende de lo que empiece valiendo cadena 316 00:11:57,360 --> 00:11:59,940 Pero aquí yo en este bucle 317 00:11:59,940 --> 00:12:02,340 Aunque cadena lo inicializara a fin 318 00:12:02,340 --> 00:12:08,039 La primera vez la haría sí o sí 319 00:12:08,039 --> 00:12:11,279 Porque la primera iteración se hace incondicional 320 00:12:11,279 --> 00:12:14,720 Y ya las siguientes dependen de 321 00:12:14,720 --> 00:12:17,720 Si la condición se cumple o no 322 00:12:17,720 --> 00:12:20,980 Luego el while y el do while 323 00:12:20,980 --> 00:12:23,159 no puedo intercambiar uno por otro tal cual 324 00:12:23,159 --> 00:12:24,539 porque funcionan de forma distinta 325 00:12:24,539 --> 00:12:27,259 es decir, este trozo de código 326 00:12:27,259 --> 00:12:45,149 entonces, este código 327 00:12:45,149 --> 00:12:46,750 va a conducir 328 00:12:46,750 --> 00:12:48,490 a que nunca, nunca 329 00:12:48,490 --> 00:12:50,769 se ejecute esa sentencia 330 00:12:50,769 --> 00:12:52,350 nunca, nunca, ¿verdad? 331 00:12:52,409 --> 00:12:54,490 porque ya la condición de partidas es 332 00:12:54,490 --> 00:12:56,470 falsa, con lo cual nunca se va 333 00:12:56,470 --> 00:12:58,690 a ejecutar, pero si yo 334 00:12:58,690 --> 00:13:00,509 este mismo código, este mismo 335 00:13:00,509 --> 00:13:02,649 cambio la estructura while por 336 00:13:02,649 --> 00:13:04,629 undo while, el mismo, y entonces me 337 00:13:04,629 --> 00:13:06,809 quedo con este, he conseguido 338 00:13:06,809 --> 00:13:08,470 un código que funciona de forma distinta 339 00:13:08,470 --> 00:13:10,570 porque este código, la primera vez 340 00:13:10,570 --> 00:13:12,629 se va a ejecutar, da igual el valor 341 00:13:12,629 --> 00:13:14,690 que tenga cadena, la primera se va a ejecutar 342 00:13:14,690 --> 00:13:16,250 y ya las siguientes depende 343 00:13:16,250 --> 00:13:18,570 entonces yo cuando uso uno 344 00:13:18,570 --> 00:13:20,669 uso otro, tengo que entender bien como funciona 345 00:13:20,669 --> 00:13:22,370 para hacer el código correcto 346 00:13:22,370 --> 00:13:24,669 bueno, pues que ventajas saco 347 00:13:24,669 --> 00:13:26,750 si utilizo 348 00:13:26,750 --> 00:13:28,690 esta estructura, pues que 349 00:13:28,690 --> 00:13:30,769 no necesito inicializar cadena a ningún 350 00:13:30,769 --> 00:13:31,110 valor 351 00:13:31,110 --> 00:13:41,120 claro, entonces 352 00:13:41,120 --> 00:13:43,480 si yo voy a dejar esto comentado 353 00:13:43,480 --> 00:13:46,070 vale 354 00:13:46,070 --> 00:13:50,960 entonces si yo elijo 355 00:13:50,960 --> 00:13:52,779 usar el do while en lugar 356 00:13:52,779 --> 00:13:53,320 del while 357 00:13:53,320 --> 00:13:56,639 haría declaro mi variable cadena 358 00:13:56,639 --> 00:13:58,879 y ahora hago do le cadena 359 00:13:58,879 --> 00:14:00,299 es diferente de fin 360 00:14:00,299 --> 00:14:02,419 si vete a por la siguiente 361 00:14:02,419 --> 00:14:04,700 le cadena es diferente de fin si vete a por 362 00:14:04,700 --> 00:14:06,200 la siguiente y aquí el compilador 363 00:14:06,200 --> 00:14:08,299 dice no inicialices cadena da igual 364 00:14:08,299 --> 00:14:10,600 porque para la 365 00:14:10,600 --> 00:14:12,399 primera iteración yo no necesito 366 00:14:12,399 --> 00:14:13,960 saber lo que vale cadena no necesito 367 00:14:13,960 --> 00:14:17,480 y la primera vez que voy a necesitarlo 368 00:14:17,480 --> 00:14:19,360 es después de la primera iteración 369 00:14:19,360 --> 00:14:21,320 y para entonces ya le habrás 370 00:14:21,320 --> 00:14:23,179 dado un valor, para entonces ya se lo habrás dado 371 00:14:23,179 --> 00:14:25,399 entonces 372 00:14:25,399 --> 00:14:27,480 esta sintaxis no nos obliga 373 00:14:27,480 --> 00:14:29,200 a inicializar la variable cadena, a hacer 374 00:14:29,200 --> 00:14:31,399 ningún truco ni nada, porque se va 375 00:14:31,399 --> 00:14:33,179 a inicializar en la primera de las 376 00:14:33,179 --> 00:14:35,340 iteraciones, en la primera, y como la primera 377 00:14:35,340 --> 00:14:37,419 se hace sí o sí, como se hace sí o sí 378 00:14:37,419 --> 00:14:39,379 pues el compilador no te 379 00:14:39,379 --> 00:14:39,840 dice nada 380 00:14:39,840 --> 00:14:43,519 y bueno, esto casi que pega más 381 00:14:43,519 --> 00:14:45,679 en una situación en la que sabemos 382 00:14:45,679 --> 00:14:47,580 que la primera vez la queremos hacer 383 00:14:47,580 --> 00:14:49,980 sí o sí, entonces si identificamos 384 00:14:49,980 --> 00:14:51,840 una situación en la que la primera la queremos hacer 385 00:14:51,840 --> 00:14:53,740 sí o sí, pues pongo 386 00:14:53,740 --> 00:14:55,720 un do while y ya está, porque le pega más 387 00:14:55,720 --> 00:14:57,960 pero vamos 388 00:14:57,960 --> 00:14:59,899 que cualquier cosa se puede hacer con cualquier 389 00:14:59,899 --> 00:15:01,980 sintaxis de bucle, siempre y cuando yo lo use 390 00:15:01,980 --> 00:15:03,879 correctamente, claro, sabiendo 391 00:15:03,879 --> 00:15:05,240 cómo funciona y todo eso 392 00:15:05,240 --> 00:15:07,740 bueno, pues vamos a dejarlo 393 00:15:07,740 --> 00:15:09,740 esta, como ya la dejo comentada, vamos a dejarlo así 394 00:15:09,740 --> 00:15:11,039 con este do while 395 00:15:11,039 --> 00:15:14,360 vale, pues entonces ya tenemos 396 00:15:14,360 --> 00:15:15,860 un bucle que está todo el rato 397 00:15:15,860 --> 00:15:18,399 le he cadena, es diferente de fin 398 00:15:18,399 --> 00:15:20,460 vete a por la siguiente, es diferente de fin 399 00:15:20,460 --> 00:15:21,659 vete a por la siguiente, etc 400 00:15:21,659 --> 00:15:23,799 vale, de hecho 401 00:15:23,799 --> 00:15:25,299 si probáramos esto 402 00:15:25,299 --> 00:15:28,039 pues efectivamente este bucle 403 00:15:28,039 --> 00:15:35,220 este bucle de aquí 404 00:15:35,220 --> 00:15:37,299 pues si yo le meto cosas, pues me está pidiendo 405 00:15:37,299 --> 00:15:39,580 cosas, y cuando le ponga 406 00:15:39,580 --> 00:15:41,440 fin, ala, se acabó, ya no me pide 407 00:15:41,440 --> 00:15:43,299 más, si le pongo 408 00:15:43,299 --> 00:15:44,519 fin la primera vez 409 00:15:44,519 --> 00:15:47,039 Pues se acabó, ya no me pide más 410 00:15:47,039 --> 00:15:48,220 ¿Vale? Bueno, pues 411 00:15:48,220 --> 00:15:50,779 Esta parte que es la parte de 412 00:15:50,779 --> 00:15:52,679 Leer, leer, leer hasta que llegue fin 413 00:15:52,679 --> 00:15:54,200 Ya está, pero claro, la parte 414 00:15:54,200 --> 00:15:56,360 Falta hacer el algoritmo 415 00:15:56,360 --> 00:15:59,240 Que vale muy bien, pero es que tú aquí tienes que mostrar 416 00:15:59,240 --> 00:16:01,059 Algo, cuando el bucle 417 00:16:01,059 --> 00:16:02,799 Acabe, tienes que mostrar algo 418 00:16:02,799 --> 00:16:04,559 Cuando el bucle acabe 419 00:16:04,559 --> 00:16:05,700 Tú aquí tienes que mostrar 420 00:16:05,700 --> 00:16:08,279 La cadena más larga 421 00:16:08,279 --> 00:16:09,000 Ha sido 422 00:16:09,000 --> 00:16:20,820 Y aquí nuestro resultado 423 00:16:20,820 --> 00:16:22,879 Nuestro resultado 424 00:16:22,879 --> 00:16:25,879 Bueno, vamos a habilitar una variable para guardar ese resultado 425 00:16:25,879 --> 00:16:28,179 Que todavía no hemos averiguado 426 00:16:28,179 --> 00:16:32,000 Pues cadena max, por ejemplo 427 00:16:32,000 --> 00:16:38,139 Vale, pues entonces vamos a hacer aquí cadena max 428 00:16:38,139 --> 00:16:43,730 Vale 429 00:16:43,730 --> 00:16:49,909 Entonces en cadena max va a estar la cadena más larga 430 00:16:49,909 --> 00:16:53,070 Tenemos que ver cómo la vamos construyendo 431 00:16:53,070 --> 00:16:55,149 Para luego ya mostrarla al final 432 00:16:55,149 --> 00:16:57,669 Porque este es el resultado de mi programa, mostrarla 433 00:16:57,669 --> 00:17:02,690 Bueno, pues será similar que en el ejercicio 15 434 00:17:02,690 --> 00:17:03,669 En el ejercicio 15 435 00:17:03,669 --> 00:17:08,609 Teníamos una variable para guardar el máximo 436 00:17:08,609 --> 00:17:10,569 Una variable para guardar el máximo 437 00:17:10,569 --> 00:17:12,269 Y ahora hacíamos un bucle 438 00:17:12,269 --> 00:17:15,289 Introduce número, en nuestro caso se introduce cadena 439 00:17:15,289 --> 00:17:19,670 Si el número es mayor que el máximo hasta ese momento 440 00:17:19,670 --> 00:17:23,250 ¿Vale? Bueno, aquí distinguíamos la iteración 441 00:17:23,250 --> 00:17:26,670 Bueno, si era positivo, perdón 442 00:17:26,670 --> 00:17:28,789 Si el número es mayor que el máximo 443 00:17:28,789 --> 00:17:31,109 pues me actualizas la variable, tienes uno nuevo 444 00:17:31,109 --> 00:17:32,750 ya está, y así todo el rato 445 00:17:32,750 --> 00:17:35,470 lee número, el número que acabas 446 00:17:35,470 --> 00:17:37,349 de leer es mayor que el que hasta 447 00:17:37,349 --> 00:17:38,690 ese momento es máximo 448 00:17:38,690 --> 00:17:40,990 pues tienes un nuevo máximo 449 00:17:40,990 --> 00:17:43,309 vale, y así todo el rato, lee número 450 00:17:43,309 --> 00:17:45,289 ¿el número es mayor que el que 451 00:17:45,289 --> 00:17:46,809 es máximo hasta ese momento? no 452 00:17:46,809 --> 00:17:49,069 pues el máximo se sigue quedando el que era 453 00:17:49,069 --> 00:17:50,910 ese era el algoritmo que usábamos 454 00:17:50,910 --> 00:17:52,589 íbamos uno por uno 455 00:17:52,589 --> 00:17:55,269 con cada uno de ellos comparábamos con el que 456 00:17:55,269 --> 00:17:56,470 era máximo hasta ese momento 457 00:17:56,470 --> 00:17:58,269 pues lo mismo que hemos hecho aquí 458 00:17:58,269 --> 00:17:59,349 lo mismo será aquí 459 00:17:59,349 --> 00:18:01,430 leemos cadena 460 00:18:01,430 --> 00:18:03,190 y ahora 461 00:18:03,190 --> 00:18:06,069 mi cadena es mayor 462 00:18:06,069 --> 00:18:07,849 que la 463 00:18:07,849 --> 00:18:10,109 que es máxima hasta ese momento 464 00:18:10,109 --> 00:18:11,809 que estará aquí 465 00:18:11,809 --> 00:18:13,990 tenemos por resolver como la inicializamos 466 00:18:13,990 --> 00:18:14,269 claro 467 00:18:14,269 --> 00:18:18,329 y como significa, que significa en este caso ser mayor 468 00:18:18,329 --> 00:18:20,490 pues ahora no es esto 469 00:18:20,490 --> 00:18:24,109 era esto en el ejercicio anterior 470 00:18:24,109 --> 00:18:26,329 porque cadena y cadena max eran números 471 00:18:26,329 --> 00:18:28,289 Entonces ver si uno era mayor que otro 472 00:18:28,289 --> 00:18:30,109 Lo hacíamos con el mayor que 473 00:18:30,109 --> 00:18:32,130 Ver si uno era mayor que otro 474 00:18:32,130 --> 00:18:32,849 Con el mayor que 475 00:18:32,849 --> 00:18:35,029 Pero aquí para cadena 476 00:18:35,029 --> 00:18:37,190 Ser mayor que cadena máxima 477 00:18:37,190 --> 00:18:38,890 Es ser mayor en longitud 478 00:18:38,890 --> 00:18:41,529 Pues entonces tendremos que hacer 479 00:18:41,529 --> 00:18:43,809 Si la longitud de cadena 480 00:18:43,809 --> 00:18:46,349 Es mayor 481 00:18:46,349 --> 00:18:48,130 Que la longitud 482 00:18:48,130 --> 00:18:51,329 De cadena máxima 483 00:18:51,329 --> 00:18:56,710 Vale 484 00:18:56,710 --> 00:18:57,509 En este caso 485 00:18:57,509 --> 00:18:59,569 La propiedad de ser mayor que 486 00:18:59,569 --> 00:19:01,730 es que su tamaño 487 00:19:01,730 --> 00:19:04,009 su tamaño sea mayor que este 488 00:19:04,009 --> 00:19:05,849 pues si está 489 00:19:05,849 --> 00:19:07,309 superado en tamaño 490 00:19:07,309 --> 00:19:09,849 al tamaño que tiene 491 00:19:09,849 --> 00:19:11,630 la que es máxima en un momento dado 492 00:19:11,630 --> 00:19:13,970 pues ya tenemos nueva cadena 493 00:19:13,970 --> 00:19:17,759 máxima 494 00:19:17,759 --> 00:19:18,519 que es cadena 495 00:19:18,519 --> 00:19:22,059 luego el algoritmo es siempre el mismo 496 00:19:22,059 --> 00:19:23,000 siempre igual 497 00:19:23,000 --> 00:19:26,519 vamos leyendo los valores 498 00:19:26,519 --> 00:19:28,299 de los cuales 499 00:19:28,299 --> 00:19:29,900 queremos ver cuál es el mayor de todos 500 00:19:29,900 --> 00:19:31,660 vamos leyendo uno tras otro en un bucle 501 00:19:31,660 --> 00:19:33,900 leemos, leemos, leemos, un número, una cadena 502 00:19:33,900 --> 00:19:35,059 lo que sea, leemos, leemos 503 00:19:35,059 --> 00:19:37,960 con cada uno, superas al que es 504 00:19:37,960 --> 00:19:40,380 máximo en un momento dado, pues lo sustituyes 505 00:19:40,380 --> 00:19:42,359 y ya está, que no lo superas 506 00:19:42,359 --> 00:19:43,640 dejas al máximo como estaba 507 00:19:43,640 --> 00:19:46,019 y así con todos y cada uno de los 508 00:19:46,019 --> 00:19:47,220 que van llegando, con todos 509 00:19:47,220 --> 00:19:48,119 ¿vale? 510 00:19:52,720 --> 00:19:53,559 ¿cómo de arriba? 511 00:19:54,200 --> 00:19:54,799 bueno, arriba es que 512 00:19:54,799 --> 00:19:55,500 a ver 513 00:19:55,500 --> 00:19:58,539 es que 514 00:19:58,539 --> 00:20:00,960 al final 515 00:20:00,960 --> 00:20:05,200 Ah, bueno, porque la sintaxis del do while es así 516 00:20:05,200 --> 00:20:07,180 Así, acaba con punto y coma 517 00:20:07,180 --> 00:20:09,500 O sea, la sintaxis es esa 518 00:20:09,500 --> 00:20:11,440 Do entre llaves 519 00:20:11,440 --> 00:20:13,160 Las sentencias que quieres hacer 520 00:20:13,160 --> 00:20:15,259 Y luego while 521 00:20:15,259 --> 00:20:17,259 La condición y un punto y coma al final 522 00:20:17,259 --> 00:20:19,579 Claro, claro, claro 523 00:20:19,579 --> 00:20:20,299 Es que eso no lo he dicho 524 00:20:20,299 --> 00:20:22,420 Si la sintaxis completa es do while 525 00:20:22,420 --> 00:20:24,039 La condición y un punto y coma al final 526 00:20:24,039 --> 00:20:25,920 ¿Vale? 527 00:20:27,779 --> 00:20:29,480 ¿Vale? Pues el algoritmo está 528 00:20:29,480 --> 00:20:30,940 Solo nos falta un detalle 529 00:20:30,940 --> 00:20:33,019 del que ya nos avisa el compilador que nos dice 530 00:20:33,019 --> 00:20:35,160 oye, pero perdona, la primera 531 00:20:35,160 --> 00:20:37,119 cadena que metes la estás comparando 532 00:20:37,119 --> 00:20:38,799 con la máxima hasta ese momento 533 00:20:38,799 --> 00:20:39,599 pero 534 00:20:39,599 --> 00:20:42,380 no tenemos máximo todavía 535 00:20:42,380 --> 00:20:45,359 bueno, ese problema, ¿cómo lo resolvimos 536 00:20:45,359 --> 00:20:46,359 en el ejercicio 15? 537 00:20:47,660 --> 00:20:49,319 al máximo le pusimos 538 00:20:49,319 --> 00:20:50,920 como valor el menos infinito 539 00:20:50,920 --> 00:20:53,279 así la primera cadena que llegaba 540 00:20:53,279 --> 00:20:55,259 iba a ser seguro mayor que 541 00:20:55,259 --> 00:20:57,259 la máxima, con lo cual se convertía en la nueva 542 00:20:57,259 --> 00:20:58,900 máxima, que es la idea, que la primera 543 00:20:58,900 --> 00:21:00,819 siempre sea el máximo 544 00:21:00,819 --> 00:21:05,180 Sí, o detectando la primera iteración 545 00:21:05,180 --> 00:21:06,859 hicimos las dos versiones, claro 546 00:21:06,859 --> 00:21:09,119 hicimos las dos versiones 547 00:21:09,119 --> 00:21:09,339 ¿vale? 548 00:21:11,319 --> 00:21:13,099 o detectas si estás en la primera o no 549 00:21:13,099 --> 00:21:14,680 bueno, en este caso 550 00:21:14,680 --> 00:21:17,099 es mucho más cómodo 551 00:21:17,099 --> 00:21:19,140 no hace falta detectar si estás en la primera 552 00:21:19,140 --> 00:21:20,400 porque tienes que meter un contador adicional 553 00:21:20,400 --> 00:21:23,220 claro, no pones la cadena 554 00:21:23,220 --> 00:21:25,279 máxima como la más pequeña del mundo 555 00:21:25,279 --> 00:21:27,119 mundial posible, que es esta 556 00:21:27,119 --> 00:21:29,039 esta es la cadena más pequeña 557 00:21:29,039 --> 00:21:29,680 que existe 558 00:21:29,680 --> 00:21:32,660 entonces, que es la cadena vacía 559 00:21:32,660 --> 00:21:34,380 su longitud es cero 560 00:21:34,380 --> 00:21:36,980 si hacemos el punto length de esto, es cero 561 00:21:36,980 --> 00:21:38,519 no hay ninguna cadena más pequeña que esta 562 00:21:38,519 --> 00:21:40,460 porque no hay cadenas con longitudes negativas 563 00:21:40,460 --> 00:21:44,299 sería el equivalente 564 00:21:44,299 --> 00:21:45,720 a cuando inicializamos máximo 565 00:21:45,720 --> 00:21:48,380 al menor valor posible, a menos infinito 566 00:21:48,380 --> 00:21:50,400 es que aquí la cadena más corta 567 00:21:50,400 --> 00:21:52,059 posible es esta, la vacía 568 00:21:52,059 --> 00:21:55,880 y bueno, a ver 569 00:21:55,880 --> 00:21:58,059 la más larga posible, pues sería la que tiene 570 00:21:58,059 --> 00:21:59,400 un tamaño como máximo 571 00:21:59,400 --> 00:22:01,259 lo que te cabe en el length 572 00:22:01,259 --> 00:22:01,920 pero 573 00:22:01,920 --> 00:22:04,819 no, no, no, no 574 00:22:04,819 --> 00:22:07,839 no, porque 575 00:22:07,839 --> 00:22:09,380 la más larga sería el mayor 576 00:22:09,380 --> 00:22:12,160 el máximo valor 577 00:22:12,160 --> 00:22:14,160 de length, y como length tú ya sabes 578 00:22:14,160 --> 00:22:15,420 que es un entero, es que ya lo tienes ahí 579 00:22:15,420 --> 00:22:17,299 el máximo de los enteros 580 00:22:17,299 --> 00:22:19,960 ¿no? claro, o sea 581 00:22:19,960 --> 00:22:21,980 sí, vamos a ver, tú tienes una cadena 582 00:22:21,980 --> 00:22:23,500 cualquiera, entonces 583 00:22:23,500 --> 00:22:26,160 la forma de obtener la longitud de una cadena 584 00:22:26,160 --> 00:22:28,099 siempre es el punto length, ¿verdad? 585 00:22:28,099 --> 00:22:30,160 y el punto length 586 00:22:30,160 --> 00:22:31,400 te devuelve un int 587 00:22:31,400 --> 00:22:36,259 claro, entonces el mayor 588 00:22:36,259 --> 00:22:37,680 de los int te dará 589 00:22:37,680 --> 00:22:39,740 la cadena más grande que puedes tener 590 00:22:39,740 --> 00:22:41,200 de la que puedes obtener 591 00:22:41,200 --> 00:22:43,220 no la más grande que puedes tener 592 00:22:43,220 --> 00:22:45,440 porque la puedes tener mucho más grande 593 00:22:45,440 --> 00:22:48,299 pero la máxima cadena 594 00:22:48,299 --> 00:22:49,980 de la cual el método length 595 00:22:49,980 --> 00:22:51,559 te va a dar un valor con sentido 596 00:22:51,559 --> 00:22:54,180 imagínate que 597 00:22:54,180 --> 00:22:56,299 el máximo valor de los enteros 598 00:22:56,299 --> 00:22:57,920 que no es, fuera 100.000 599 00:22:57,920 --> 00:22:59,819 que no es, que es más 600 00:22:59,819 --> 00:23:02,519 pues tú puedes tener cadenas mayores de 100.000 601 00:23:02,519 --> 00:23:04,680 si tu memoria RAM te lo permite 602 00:23:04,680 --> 00:23:05,140 ¿por qué no? 603 00:23:06,359 --> 00:23:08,519 pero si tú haces el length de esas cadenas 604 00:23:08,519 --> 00:23:10,039 te va a dar un valor erróneo 605 00:23:10,039 --> 00:23:12,579 porque va a haber desbordado el 100.000 606 00:23:12,579 --> 00:23:14,539 entonces como tiene que guardarlo en 32 bits 607 00:23:14,539 --> 00:23:17,000 pues ya al desbordar te guarda un valor que no tiene sentido 608 00:23:17,000 --> 00:23:18,440 entonces más que la cadena máxima 609 00:23:18,440 --> 00:23:20,779 que no hay, las limitaciones son de la memoria RAM 610 00:23:20,779 --> 00:23:24,880 la máxima longitud que vas a poder 611 00:23:24,880 --> 00:23:26,839 calcular con sentido 612 00:23:26,839 --> 00:23:29,839 es el máximo de los enteros 613 00:23:29,839 --> 00:23:31,019 el máximo de los enteros 614 00:23:31,019 --> 00:23:36,410 vale, pues entonces 615 00:23:36,410 --> 00:23:38,930 inicializándolo a esta, ya sabemos 616 00:23:38,930 --> 00:23:41,289 que la primera vez que entremos en el bucle 617 00:23:41,289 --> 00:23:42,930 la primera cadena 618 00:23:42,930 --> 00:23:45,109 a menos que metamos la cadena vacía 619 00:23:45,109 --> 00:23:47,589 la primera cadena ya va a ser 620 00:23:47,589 --> 00:23:49,150 en longitud 621 00:23:49,150 --> 00:23:50,509 mayor que esta 622 00:23:50,509 --> 00:23:52,569 luego la primera vez 623 00:23:52,569 --> 00:23:55,250 la primera cadena se va a convertir 624 00:23:55,250 --> 00:23:57,329 en el nuevo máximo, porque es que va a ser 625 00:23:57,329 --> 00:23:58,190 mayor que la vacía 626 00:23:58,190 --> 00:24:00,910 vale, a menos que metamos la vacía 627 00:24:00,910 --> 00:24:03,170 pero es que si metemos la vacía, el máximo sigue siendo 628 00:24:03,170 --> 00:24:05,130 esta y estaría bien, porque es que no he metido 629 00:24:05,130 --> 00:24:05,730 ninguna mayor 630 00:24:05,730 --> 00:24:08,710 y ya las siguientes dependerá 631 00:24:08,710 --> 00:24:10,109 ya las siguientes dependerá 632 00:24:10,109 --> 00:24:12,890 que son mayores que 633 00:24:12,890 --> 00:24:14,990 la primera esa que metí, que se convirtió 634 00:24:14,990 --> 00:24:16,750 en máximo, la actualizan, que no, pues no 635 00:24:16,750 --> 00:24:19,190 pero el algoritmo es siempre el mismo 636 00:24:19,190 --> 00:24:20,670 para calcular el mayor de algo 637 00:24:20,670 --> 00:24:22,710 o el menor de algo 638 00:24:22,710 --> 00:24:25,009 o el menor de algo 639 00:24:25,009 --> 00:24:25,630 ¿vale? 640 00:24:25,789 --> 00:24:27,150 ¿cómo inicializas ahí cadena 1? 641 00:24:28,190 --> 00:24:30,769 aquí 642 00:24:30,769 --> 00:24:33,029 vamos a hacerlo, aquí tendrías 643 00:24:33,029 --> 00:24:34,990 que llevar en paralelo los tamaños 644 00:24:34,990 --> 00:24:37,009 ¿vale? y un tamaño que 645 00:24:37,009 --> 00:24:39,190 fuera el min value o simplemente 646 00:24:39,190 --> 00:24:40,430 dando el 647 00:24:40,430 --> 00:24:42,529 detectando la primera iteración 648 00:24:42,529 --> 00:24:45,170 es lo más sencillo, detectas la primera iteración 649 00:24:45,170 --> 00:24:47,069 y le obligas a que en la primera 650 00:24:47,069 --> 00:24:48,769 iteración no hay comparación posible 651 00:24:48,769 --> 00:24:50,910 la primera iteración que es la primera versión 652 00:24:50,910 --> 00:24:52,009 que hicimos del otro 653 00:24:52,009 --> 00:24:54,990 y primero fuera del 654 00:24:54,990 --> 00:24:56,869 wine detectaba 655 00:24:56,869 --> 00:24:58,670 la primera iteración, luego ya la metía en el while 656 00:24:58,670 --> 00:25:00,589 claro, te haces la primera 657 00:25:00,589 --> 00:25:02,690 el primer scan, lo haces en 658 00:25:02,690 --> 00:25:04,910 lo haces en, y luego ya haces 659 00:25:04,910 --> 00:25:06,650 el while, no un do while 660 00:25:06,650 --> 00:25:08,630 sino while, porque ya podría no ocurrir la 661 00:25:08,630 --> 00:25:10,809 sí, pero a ver, vamos a 662 00:25:10,809 --> 00:25:12,930 probar esto, bueno, entonces esto que hemos hecho está claro 663 00:25:12,930 --> 00:25:14,930 ¿no? el algoritmo es siempre el mismo 664 00:25:14,930 --> 00:25:16,609 vamos recorriendo los valores 665 00:25:16,609 --> 00:25:18,650 sean los que sean, números 666 00:25:18,650 --> 00:25:21,009 cadenas, alumnos, ordenadores 667 00:25:21,009 --> 00:25:22,269 lo que sean, los vamos recorriendo 668 00:25:22,269 --> 00:25:24,769 para cada uno de ellos, ¿es mayor que 669 00:25:24,769 --> 00:25:26,250 el que es máximo hasta ese momento? 670 00:25:26,250 --> 00:25:28,109 lo actualiza y ya está 671 00:25:28,109 --> 00:25:29,890 y así hasta que terminamos 672 00:25:29,890 --> 00:25:32,029 y luego ya el matiz que queda es 673 00:25:32,029 --> 00:25:33,750 que hay que apañárselas 674 00:25:33,750 --> 00:25:35,829 para que el primero de todos 675 00:25:35,829 --> 00:25:38,809 siempre se convierta 676 00:25:38,809 --> 00:25:40,589 en el máximo, o sea que la variable máximo 677 00:25:40,589 --> 00:25:42,190 se inicialice siempre con el primero 678 00:25:42,190 --> 00:25:43,670 es lo único que hay que apañarse 679 00:25:43,670 --> 00:25:46,750 que esta que guarda el máximo 680 00:25:46,750 --> 00:25:48,569 se inicialice siempre con el primero 681 00:25:48,569 --> 00:25:50,450 de todos, eso se tiene que inicializar 682 00:25:50,450 --> 00:25:51,470 con el primero sí o sí 683 00:25:51,470 --> 00:25:53,869 y de nuevo tenemos varias posibilidades 684 00:25:53,869 --> 00:25:56,690 En este caso pues esta ha sido la más cómoda 685 00:25:56,690 --> 00:25:58,450 O detectar la primera iteración 686 00:25:58,450 --> 00:26:00,089 Como hicimos aquí en esta versión 687 00:26:00,089 --> 00:26:02,089 ¿Vale? ¿Qué hicimos? 688 00:26:02,529 --> 00:26:04,069 Si estamos en la primera 689 00:26:04,069 --> 00:26:06,650 Inicializo 690 00:26:06,650 --> 00:26:07,549 Máximo a número 691 00:26:07,549 --> 00:26:10,910 E incremento cont para ya las siguientes 692 00:26:10,910 --> 00:26:13,089 Detectar que no estoy en la primera 693 00:26:13,089 --> 00:26:14,890 Y si no estoy 694 00:26:14,890 --> 00:26:16,950 En la primera, ahora ya sí que hago la operación 695 00:26:16,950 --> 00:26:18,250 ¿Vale? 696 00:26:18,829 --> 00:26:20,130 Entonces siempre es igual 697 00:26:20,130 --> 00:26:21,130 Recorrido 698 00:26:21,130 --> 00:26:24,809 Que cada uno de ellos supera el que es máximo 699 00:26:24,809 --> 00:26:26,049 Lo sustituye 700 00:26:26,049 --> 00:26:26,809 Y ya está 701 00:26:26,809 --> 00:26:30,069 Y me las apaño para que el máximo 702 00:26:30,069 --> 00:26:32,230 El resultado máximo se inicialice 703 00:26:32,230 --> 00:26:33,809 Con el primero de los valores 704 00:26:33,809 --> 00:26:35,170 Con el primero de los valores 705 00:26:35,170 --> 00:26:36,089 ¿Vale? 706 00:26:36,490 --> 00:26:37,450 ¿Ibas a preguntar algo? 707 00:26:42,619 --> 00:26:43,059 ¿Aquí? 708 00:26:43,400 --> 00:26:45,000 No, no está afuera, es este el bucle 709 00:26:45,000 --> 00:26:45,559 Ahí y ahí 710 00:26:45,559 --> 00:26:49,160 Bueno, claro, es que este es el bucle 711 00:26:49,160 --> 00:26:51,380 El bucle es este, esto es lo que se repite varias veces 712 00:26:51,380 --> 00:26:52,819 Es que esta es otra sintaxis 713 00:26:52,819 --> 00:26:53,960 Esa es la sintaxis del do while 714 00:26:53,960 --> 00:26:57,140 Esa es otra sintaxis de un bucle 715 00:26:57,140 --> 00:26:58,079 Que lo que hace es 716 00:26:58,079 --> 00:27:00,380 Lo que está dentro es lo que se repite varias veces 717 00:27:00,380 --> 00:27:01,099 Igual que el while 718 00:27:01,099 --> 00:27:02,599 Eso es lo que se repite 719 00:27:02,599 --> 00:27:06,500 La única diferencia entre esta otra versión 720 00:27:06,500 --> 00:27:08,700 Poner el while, la condición 721 00:27:08,700 --> 00:27:10,140 Y aquí lo que se repita 722 00:27:10,140 --> 00:27:12,319 Es que la primera vez 723 00:27:12,319 --> 00:27:13,799 Entras sí o sí 724 00:27:13,799 --> 00:27:15,559 Sin evaluar condición ni sin nada 725 00:27:15,559 --> 00:27:18,160 Y luego ya, evalúas condición 726 00:27:18,160 --> 00:27:20,000 Y las siguientes dependen 727 00:27:20,000 --> 00:27:21,220 ¿Vale? 728 00:27:21,220 --> 00:27:23,579 Claro, es 729 00:27:23,579 --> 00:27:26,279 Exacto 730 00:27:26,279 --> 00:27:27,779 Es decir 731 00:27:27,779 --> 00:27:28,660 El 732 00:27:28,660 --> 00:27:30,619 El while es esto 733 00:27:30,619 --> 00:27:37,430 No, en serio 734 00:27:37,430 --> 00:28:01,200 Y vuelves para arriba 735 00:28:01,200 --> 00:28:20,680 Vale, el while es este 736 00:28:20,680 --> 00:28:22,019 Está claro, ¿no? 737 00:28:23,440 --> 00:28:24,039 Condición 738 00:28:24,039 --> 00:28:26,099 Que la condición se cumple 739 00:28:26,099 --> 00:28:27,880 Haces lo que haya que hacer 740 00:28:27,880 --> 00:28:29,039 Y vuelves arriba 741 00:28:29,039 --> 00:28:31,380 preguntarte si la condición 742 00:28:31,380 --> 00:28:33,359 se sigue cumpliendo, se cumple 743 00:28:33,359 --> 00:28:35,299 haces lo que 744 00:28:35,299 --> 00:28:36,859 haya que hacer y vuelves arriba 745 00:28:36,859 --> 00:28:39,180 se cumple, haces lo que haya que hacer y vuelves 746 00:28:39,180 --> 00:28:41,200 arriba, que no se cumple, se acabó 747 00:28:41,200 --> 00:28:43,019 el programa ya termina 748 00:28:43,019 --> 00:28:45,019 y ya sigue por aquí, ¿vale? 749 00:28:45,019 --> 00:28:47,059 ese es el while, y el do while es 750 00:28:47,059 --> 00:28:49,160 distinto, el do while lo que hace 751 00:28:49,160 --> 00:28:50,619 es, tú vienes por aquí 752 00:28:50,619 --> 00:28:52,240 primero de todo 753 00:28:52,240 --> 00:28:54,799 primero de todo 754 00:28:54,799 --> 00:28:56,799 ejecutes las sentencias 755 00:28:56,799 --> 00:28:58,259 estas mismas 756 00:28:58,259 --> 00:28:59,960 Las ejecutas 757 00:28:59,960 --> 00:29:02,900 Ahora, evalúas 758 00:29:02,900 --> 00:29:07,289 La condición 759 00:29:07,289 --> 00:29:09,069 Pero después de haberlas ejecutado una vez 760 00:29:09,069 --> 00:29:13,250 Evalúas la condición 761 00:29:13,250 --> 00:29:15,829 ¿Vale? 762 00:29:15,990 --> 00:29:17,529 Que la condición se cumple 763 00:29:17,529 --> 00:29:20,349 Pues nada, te vienes por aquí 764 00:29:20,349 --> 00:29:23,349 Ejecutas estas mismas sentencias 765 00:29:23,349 --> 00:29:24,349 Las mismas 766 00:29:24,349 --> 00:29:25,789 Otra vez 767 00:29:25,789 --> 00:29:28,269 Y sigues por arriba 768 00:29:28,269 --> 00:29:33,220 Bueno, pues eso 769 00:29:33,220 --> 00:29:34,700 Sigues por aquí arriba 770 00:29:34,700 --> 00:29:37,420 que no 771 00:29:37,420 --> 00:29:39,220 ya te vas 772 00:29:39,220 --> 00:29:41,579 más o menos 773 00:29:41,579 --> 00:29:43,599 es decir, funcionan de forma distinta 774 00:29:43,599 --> 00:29:45,500 porque estas sentencias 775 00:29:45,500 --> 00:29:46,259 estas de aquí 776 00:29:46,259 --> 00:29:48,779 son las mismas que estas 777 00:29:48,779 --> 00:29:50,799 y las mismas que estas 778 00:29:50,799 --> 00:29:54,250 ¿vale? las mismitas 779 00:29:54,250 --> 00:29:57,349 entonces aquí podría ocurrir 780 00:29:57,349 --> 00:29:58,829 que no se ejecuten nunca 781 00:29:58,829 --> 00:30:00,670 porque tú evalúas la condición 782 00:30:00,670 --> 00:30:02,769 y si es falsa ya te vas 783 00:30:02,769 --> 00:30:04,690 pero aquí jamás 784 00:30:04,690 --> 00:30:06,710 porque aquí el do, lo primero que hace 785 00:30:06,710 --> 00:30:07,750 es las ejecuta una vez 786 00:30:07,750 --> 00:30:09,529 y ahora ya evalúa condición 787 00:30:09,529 --> 00:30:12,490 que se cumple, las ejecuta otra vez y vuelve 788 00:30:12,490 --> 00:30:14,730 que se sigue cumpliendo, las ejecuta otra vez 789 00:30:14,730 --> 00:30:16,109 y vuelve, que ya no, sigue 790 00:30:16,109 --> 00:30:18,250 entonces el do while y el while 791 00:30:18,250 --> 00:30:20,470 son distintos, en este siempre 792 00:30:20,470 --> 00:30:22,349 una ejecución se va a hacer 793 00:30:22,349 --> 00:30:24,630 sí o sí, esta primera se va a hacer sí o sí 794 00:30:24,630 --> 00:30:26,869 incondicional y ya las siguientes 795 00:30:26,869 --> 00:30:28,730 las siguientes dependen de la condición 796 00:30:28,730 --> 00:30:30,490 pero en el while 797 00:30:30,490 --> 00:30:32,710 puede que esto 798 00:30:32,710 --> 00:30:33,829 no se haga nunca 799 00:30:33,829 --> 00:30:35,309 ¿Vale? Entonces 800 00:30:35,309 --> 00:30:38,230 Aquí 801 00:30:38,230 --> 00:30:41,250 La primera cadena la leemos sí o sí 802 00:30:41,250 --> 00:30:42,309 ¿Vale? 803 00:30:43,910 --> 00:30:44,349 Y 804 00:30:44,349 --> 00:30:47,049 Si es mayor que la máxima hasta ese momento 805 00:30:47,049 --> 00:30:49,190 Actualizamos, con este truco que hemos puesto 806 00:30:49,190 --> 00:30:51,289 Ya sabemos que esto se va 807 00:30:51,289 --> 00:30:52,829 A cumplir la primera vez que entramos 808 00:30:52,829 --> 00:30:55,109 Que es lo que queremos, y luego ya las siguientes depende 809 00:30:55,109 --> 00:30:58,210 No, no va a ser complicado 810 00:30:58,210 --> 00:30:59,269 Ahora lo hacemos, ¿vale? 811 00:31:00,509 --> 00:31:02,509 Entonces, vamos a ejecutar esto por si algo 812 00:31:02,509 --> 00:31:03,470 Se nos ha escapado 813 00:31:03,470 --> 00:31:05,950 Pues 814 00:31:05,950 --> 00:31:34,799 Pa, pa, pa, fin, la cadena más larga ha sido esa, vale, aunque solo hemos hecho una prueba, bueno, suponemos que más o menos está bien, vale, vale, vamos a hacer ahora la más corta de todas, claro, a ver, la más corta de todas, en realidad, igual que cuando hacemos la más larga, 815 00:31:34,799 --> 00:31:36,880 se trata de que 816 00:31:36,880 --> 00:31:38,740 este cadena max 817 00:31:38,740 --> 00:31:40,740 se inicialice con la primera 818 00:31:40,740 --> 00:31:42,480 de todas, con la primera 819 00:31:42,480 --> 00:31:44,819 ese es el objetivo, que se inicie con la 820 00:31:44,819 --> 00:31:46,119 primera, entonces 821 00:31:46,119 --> 00:31:47,640 hay muchas 822 00:31:47,640 --> 00:31:50,279 espera, vamos a 823 00:31:50,279 --> 00:31:52,839 poner la variable para cadena min 824 00:31:52,839 --> 00:31:58,039 vale, entonces 825 00:31:58,039 --> 00:31:59,380 aquí lo que queremos es 826 00:31:59,380 --> 00:32:01,319 que la primera vez que 827 00:32:01,319 --> 00:32:04,019 leemos una cadena, la primera 828 00:32:04,019 --> 00:32:05,980 vez de todas, la primera vez que entramos 829 00:32:05,980 --> 00:32:08,259 Cadena min se inicializa cadena 830 00:32:08,259 --> 00:32:09,420 Es lo que queremos 831 00:32:09,420 --> 00:32:12,160 Entonces siempre tenemos una forma sencilla 832 00:32:12,160 --> 00:32:14,480 Que es lo mismo que hicimos el otro día 833 00:32:14,480 --> 00:32:16,440 Pues inicializar un contador a cero 834 00:32:16,440 --> 00:32:18,160 Y distinguir aquí 835 00:32:18,160 --> 00:32:19,960 Si estamos en la primera de todas 836 00:32:19,960 --> 00:32:22,180 Si estamos en la iteración cero 837 00:32:22,180 --> 00:32:24,819 Oye, ¿estamos en la iteración cero? 838 00:32:25,400 --> 00:32:26,440 Pues entonces 839 00:32:26,440 --> 00:32:27,900 Cadena min 840 00:32:27,900 --> 00:32:32,240 Igual a cadena 841 00:32:32,240 --> 00:32:34,019 Porque estamos en la primera de todas 842 00:32:34,019 --> 00:32:35,279 Estamos en la primera 843 00:32:35,279 --> 00:32:37,740 y ahora cámbiame el valor 844 00:32:37,740 --> 00:32:39,640 de contador para que ya las siguientes 845 00:32:39,640 --> 00:32:41,000 detecte que no está en la primera 846 00:32:41,000 --> 00:32:43,559 y ahora ya 847 00:32:43,559 --> 00:32:45,759 ya con esto tenemos el truco 848 00:32:45,759 --> 00:32:47,380 para que la primera vez 849 00:32:47,380 --> 00:32:49,140 la primera cadena que leemos 850 00:32:49,140 --> 00:32:51,500 la primera iteración del bucle 851 00:32:51,500 --> 00:32:53,079 la detectamos con esto, la primera 852 00:32:53,079 --> 00:32:55,460 sirva para inicializar 853 00:32:55,460 --> 00:32:56,460 la mínima con cadena 854 00:32:56,460 --> 00:32:59,039 que ya que lo hemos puesto podríamos decir 855 00:32:59,039 --> 00:33:01,319 bueno, pues podemos usarlo también 856 00:33:01,319 --> 00:33:03,619 para inicializar cadena máxima con cadena 857 00:33:03,619 --> 00:33:04,039 también 858 00:33:04,039 --> 00:33:14,710 Bueno, es que eso me falta para ahora 859 00:33:14,710 --> 00:33:16,349 Claro, es que no termina el programa 860 00:33:16,349 --> 00:33:17,109 O sea, con esto 861 00:33:17,109 --> 00:33:18,789 Claro, con esto he conseguido 862 00:33:18,789 --> 00:33:19,670 Que 863 00:33:19,670 --> 00:33:22,230 Mi cadena mínima 864 00:33:22,230 --> 00:33:23,509 Se inicialice con la primera de todas 865 00:33:23,509 --> 00:33:24,710 Vale 866 00:33:24,710 --> 00:33:26,329 Pero ahora ya 867 00:33:26,329 --> 00:33:28,009 El algoritmo tiene que funcionar 868 00:33:28,009 --> 00:33:29,549 Que es con las siguientes cadenas 869 00:33:29,549 --> 00:33:30,309 Que tengo que hacer 870 00:33:30,309 --> 00:33:31,410 Pues con cada cadena 871 00:33:31,410 --> 00:33:32,250 Que me va llegando 872 00:33:32,250 --> 00:33:34,890 Esto ya lo he hecho 873 00:33:34,890 --> 00:33:35,809 Para ver si el máximo 874 00:33:35,809 --> 00:33:36,730 Pero ahora de forma 875 00:33:36,730 --> 00:33:37,930 Completamente independiente 876 00:33:37,930 --> 00:33:38,609 Aparte de esto 877 00:33:38,609 --> 00:33:39,829 con lo cual nos uní el save 878 00:33:39,829 --> 00:33:42,329 pues tendré que hacer 879 00:33:42,329 --> 00:33:44,710 si cadena.length 880 00:33:44,710 --> 00:33:51,109 es menor 881 00:33:51,109 --> 00:33:53,269 que la longitud 882 00:33:53,269 --> 00:33:55,089 de la que es mínima hasta ese momento 883 00:33:55,089 --> 00:34:01,220 pues entonces tienes nueva 884 00:34:01,220 --> 00:34:02,140 cadena mínima 885 00:34:02,140 --> 00:34:15,559 ¿vale? entonces son dos tareas 886 00:34:15,559 --> 00:34:17,659 que hago en paralelo porque son independientes 887 00:34:17,659 --> 00:34:19,239 porque estoy 888 00:34:19,239 --> 00:34:21,119 haciendo dos cosas en paralelo 889 00:34:21,119 --> 00:34:23,320 primero a ver si esta cadena 890 00:34:23,320 --> 00:34:25,139 supera la máxima, si la supera 891 00:34:25,139 --> 00:34:26,960 actualizo, con eso ya he terminado 892 00:34:26,960 --> 00:34:28,739 Ahora me toca otra tarea 893 00:34:28,739 --> 00:34:29,840 Que es independiente de la anterior 894 00:34:29,840 --> 00:34:32,780 Ver si es más pequeña que la mínima 895 00:34:32,780 --> 00:34:35,519 Si es más pequeña que la mínima 896 00:34:35,519 --> 00:34:37,639 Actualizo la mínima 897 00:34:37,639 --> 00:34:40,280 Y ya está 898 00:34:40,280 --> 00:34:41,900 Son dos tareas que voy llevando en paralelo 899 00:34:41,900 --> 00:34:44,800 Para calcular tanto la máxima como la mínima 900 00:34:44,800 --> 00:34:46,460 Claro, el compilador 901 00:34:46,460 --> 00:34:47,840 Como el compilador 902 00:34:47,840 --> 00:34:49,960 Como decíamos el otro día 903 00:34:49,960 --> 00:34:51,119 Estoy repitiendo lo mismo todo el rato 904 00:34:51,119 --> 00:34:53,659 El compilador no mira contenidos de variables 905 00:34:53,659 --> 00:34:56,460 Nosotros sabemos que cadena mínima 906 00:34:56,460 --> 00:34:58,639 se va a inicializar con un valor sí o sí 907 00:34:58,639 --> 00:35:00,519 porque vemos este 0 908 00:35:00,519 --> 00:35:02,539 vemos que aquí hay un if count 909 00:35:02,539 --> 00:35:04,420 igual a 0, con lo cual nosotros vemos 910 00:35:04,420 --> 00:35:05,960 que es que va a entrar aquí sí o sí 911 00:35:05,960 --> 00:35:08,840 con lo cual nosotros vemos que cadena mínima 912 00:35:08,840 --> 00:35:10,579 se va a inicializar 913 00:35:10,579 --> 00:35:12,659 con un valor, pero aquí el compilador 914 00:35:12,659 --> 00:35:14,440 se queja y me dice, oye que cadena mínima 915 00:35:14,440 --> 00:35:16,440 podría no estar inicializado, porque 916 00:35:16,440 --> 00:35:18,500 el compilador no mira valores, mira 917 00:35:18,500 --> 00:35:20,500 estructuras, entonces ve 918 00:35:20,500 --> 00:35:22,260 que esto es un if, y dice 919 00:35:22,260 --> 00:35:24,739 no sé si va a entrar o no, porque un if es condicional 920 00:35:24,739 --> 00:35:26,300 y no mira la condición 921 00:35:26,300 --> 00:35:28,840 solamente mira, la estructura if es condicional 922 00:35:28,840 --> 00:35:31,019 ¿podrías entrar? podrías no entrar 923 00:35:31,019 --> 00:35:33,119 si no entras, cadena min no tiene valor 924 00:35:33,119 --> 00:35:34,980 con lo cual dice, no, no te dejo 925 00:35:34,980 --> 00:35:37,300 porque si no has entrado en el condicional 926 00:35:37,300 --> 00:35:38,300 cadena min no tiene valor 927 00:35:38,300 --> 00:35:41,059 tú sabes que vas a haber entrado porque lo has 928 00:35:41,059 --> 00:35:42,719 inicializado a cero y la condición es esta 929 00:35:42,719 --> 00:35:45,019 pero el compilador te mira estructuras, no te mira 930 00:35:45,019 --> 00:35:46,219 valores 931 00:35:46,219 --> 00:35:49,360 pero no pasa nada, pues le callamos 932 00:35:49,360 --> 00:35:50,760 poniéndole aquí cualquier cosa 933 00:35:50,760 --> 00:35:52,639 aquí sí que podríamos poner lo que nos diera la gana 934 00:35:52,639 --> 00:35:55,179 lo que nos diera la gana, porque es solo 935 00:35:55,179 --> 00:35:57,679 solo, como si pongo esto 936 00:35:57,679 --> 00:35:58,239 me da igual 937 00:35:58,239 --> 00:36:01,500 porque es solamente para que el compilador 938 00:36:01,500 --> 00:36:02,820 se calle y diga 939 00:36:02,820 --> 00:36:05,280 aunque no entres en el if 940 00:36:05,280 --> 00:36:07,659 tengo un valor con el que comparar 941 00:36:07,659 --> 00:36:09,559 pero es que sí que vamos a 942 00:36:09,559 --> 00:36:11,599 entrar en el if, luego este valor se va a 943 00:36:11,599 --> 00:36:13,579 quedar pisado por el de la 944 00:36:13,579 --> 00:36:15,059 primera cadena que meto 945 00:36:15,059 --> 00:36:17,519 luego me da igual que ponga ahí 946 00:36:17,519 --> 00:36:19,460 porque se va a quedar pisado por el de la primera 947 00:36:19,460 --> 00:36:20,659 cadena que meto 948 00:36:20,659 --> 00:36:23,139 y ahora ya este bucle 949 00:36:23,139 --> 00:36:25,960 Pues para la primera iteración 950 00:36:25,960 --> 00:36:27,900 Inicializa la mínima con la primera 951 00:36:27,900 --> 00:36:28,539 Que he metido 952 00:36:28,539 --> 00:36:31,940 Y para las siguientes 953 00:36:31,940 --> 00:36:33,579 Si 954 00:36:33,579 --> 00:36:36,119 Cadena es menor 955 00:36:36,119 --> 00:36:37,500 Que la mínima hasta ese momento 956 00:36:37,500 --> 00:36:38,440 Pues la actualizas 957 00:36:38,440 --> 00:36:40,880 Y ya está 958 00:36:40,880 --> 00:36:48,250 Vale 959 00:36:48,250 --> 00:36:53,099 Y ya podemos probar esto 960 00:36:53,099 --> 00:36:59,559 Ah si eso 961 00:36:59,559 --> 00:37:01,179 Estaba pensando que estaba segura 962 00:37:01,179 --> 00:37:01,980 De que algo me faltaba 963 00:37:01,980 --> 00:37:04,179 Y si, algo me falta 964 00:37:04,179 --> 00:37:18,510 Vale, pues 965 00:37:18,510 --> 00:37:20,789 No sé si lo había lanzado ya 966 00:37:20,789 --> 00:37:25,449 Pues venga, metemos las cadenas 967 00:37:25,449 --> 00:37:27,710 Esta, esta 968 00:37:27,710 --> 00:37:29,389 Esta 969 00:37:29,389 --> 00:37:30,989 Esta 970 00:37:30,989 --> 00:37:32,309 Y fin 971 00:37:32,309 --> 00:37:34,710 Uy, fin, vale 972 00:37:34,710 --> 00:37:37,570 Pues la más larga y la más corta 973 00:37:37,570 --> 00:37:39,389 La fin 974 00:37:39,389 --> 00:37:41,489 También la va a estar teniendo en cuenta 975 00:37:41,489 --> 00:37:43,110 Entonces yo por eso he metido a propósito 976 00:37:43,110 --> 00:37:43,829 Una que sea más 977 00:37:43,829 --> 00:37:45,730 Vale 978 00:37:45,730 --> 00:37:48,210 Porque la fin también la procesa 979 00:37:48,210 --> 00:37:49,210 Estamos leyendo cadena 980 00:37:49,210 --> 00:37:52,449 Entonces la cadena fin 981 00:37:52,449 --> 00:37:54,010 También la está procesando 982 00:37:54,010 --> 00:37:58,289 O sea, la cadena 983 00:37:58,289 --> 00:37:59,650 Cuando yo meto fin aquí 984 00:37:59,650 --> 00:38:02,190 La cadena fin también la está teniendo en cuenta 985 00:38:02,190 --> 00:38:04,110 Para comparar, pero vamos, eso es un detalle 986 00:38:04,110 --> 00:38:08,130 Bueno, entendidísimo 987 00:38:08,130 --> 00:38:14,599 ¿Qué? 988 00:38:18,579 --> 00:38:26,079 vale a ver tú a ver recuerda que cómo funcionaba este algoritmo del máximo este algoritmo del 989 00:38:26,079 --> 00:38:30,820 máximo funciona siempre así algoritmo para calcular el máximo de algo me da igual que 990 00:38:30,820 --> 00:38:36,739 en programación con tu cabeza con tres niños de cinco años a los cuales tienes que entrenarles 991 00:38:36,739 --> 00:38:43,960 me da igual el algoritmo para ver si cuál es el valor máximo de varios siempre es este vale tú 992 00:38:43,960 --> 00:38:44,699 Tienes aquí 993 00:38:44,699 --> 00:38:55,079 Vale, varios valores 994 00:38:55,079 --> 00:38:56,019 Este 995 00:38:56,019 --> 00:39:00,239 Este, este 996 00:39:00,239 --> 00:39:00,960 Este 997 00:39:00,960 --> 00:39:07,159 A ver, ¿sabéis cómo poner el lápiz más gordito? 998 00:39:07,940 --> 00:39:08,659 Porque yo cambio 999 00:39:08,659 --> 00:39:10,820 Yo cambio esto y no 1000 00:39:10,820 --> 00:39:12,840 Así, pero si ayer le hice 1001 00:39:12,840 --> 00:39:13,480 Esto mismo y no 1002 00:39:13,480 --> 00:39:15,500 Bueno, vale, pues 1003 00:39:15,500 --> 00:39:19,860 Vale, entonces, a ver 1004 00:39:19,860 --> 00:39:24,889 Tú tienes un montón de cosas 1005 00:39:24,889 --> 00:39:27,389 Sean números, sean cadenas, sea lo que sea 1006 00:39:27,389 --> 00:39:28,469 ¿Vale? 1007 00:39:29,429 --> 00:39:30,510 Números, cadenas, lo que sea 1008 00:39:30,510 --> 00:39:32,269 El algoritmo siempre es el mismo 1009 00:39:32,269 --> 00:39:33,650 Que eso es lo que se tiene que quedar en la cabeza 1010 00:39:33,650 --> 00:39:36,349 Porque ese algoritmo es el que vas a aplicar a cualquier situación 1011 00:39:36,349 --> 00:39:37,869 Números, cadenas, la que sea 1012 00:39:37,869 --> 00:39:39,670 Pues el algoritmo siempre será 1013 00:39:39,670 --> 00:39:43,500 Yo tengo todos esos valores 1014 00:39:43,500 --> 00:39:45,519 De los cuales tengo que ver cuál es el máximo 1015 00:39:45,519 --> 00:39:48,019 ¿Vale? ¿Qué es lo primero que hago? 1016 00:39:48,159 --> 00:39:49,699 Me preparo ahí una casillita 1017 00:39:49,699 --> 00:39:52,199 Para guardar el resultado 1018 00:39:52,199 --> 00:39:53,320 ¿Verdad? 1019 00:39:54,019 --> 00:39:59,159 para guardar el máximo, una casillita. 1020 00:39:59,280 --> 00:40:00,119 En principio está vacía. 1021 00:40:01,320 --> 00:40:02,800 Vale, pues entonces, ¿cómo funciona el algoritmo? 1022 00:40:03,239 --> 00:40:07,239 El algoritmo es, o si es el mínimo igual, me da lo mismo. 1023 00:40:07,340 --> 00:40:08,599 Vamos a suponer que hacemos los dos en paralelo. 1024 00:40:09,199 --> 00:40:14,119 El máximo y el mínimo. 1025 00:40:17,210 --> 00:40:19,590 Vale, pues el algoritmo siempre es, 1026 00:40:20,250 --> 00:40:22,829 el primero de los valores, te van llegando en secuencia, 1027 00:40:22,829 --> 00:40:25,090 uno tras otro, te van llegando en secuencia, en un bucle. 1028 00:40:25,090 --> 00:40:42,829 El primero de ellos, pues el primero de ellos tiene que servir para inicializar tanto el máximo como el mínimo, porque cuando tú solo tienes uno, ese es tanto el máximo como el mínimo, el primero de ellos. 1029 00:40:42,829 --> 00:40:46,909 Y ahora, con los siguientes, ahora ya toca hacer. 1030 00:40:47,070 --> 00:40:48,650 Siguiente que me ha llegado, este. 1031 00:40:49,150 --> 00:40:51,469 ¿Este valor es mayor que el que tengo aquí? 1032 00:40:52,409 --> 00:40:55,150 Pues lo actualizo y piso el que tenía. 1033 00:40:56,530 --> 00:40:57,510 Primera cosa hecha. 1034 00:40:57,670 --> 00:41:00,130 Segunda cosa hecha, independiente de la anterior. 1035 00:41:00,730 --> 00:41:03,329 ¿Este valor es más pequeño que el que tengo aquí? 1036 00:41:03,469 --> 00:41:04,010 ¿Más pequeño? 1037 00:41:04,610 --> 00:41:06,849 Pues lo actualizo pisando el que tenía. 1038 00:41:07,250 --> 00:41:07,690 Y ya está. 1039 00:41:08,730 --> 00:41:11,849 Pasas al siguiente, es decir, siguiente iteración del bucle. 1040 00:41:11,849 --> 00:41:14,530 ¿Este valor es mayor que el que tengo aquí? 1041 00:41:14,670 --> 00:41:16,130 No, pues no toco nada 1042 00:41:16,130 --> 00:41:20,710 ¿Este valor es menor que el que tengo aquí? 1043 00:41:20,769 --> 00:41:22,570 Porque son dos cosas que hacemos en paralelo independientes 1044 00:41:22,570 --> 00:41:24,250 ¿Es menor que el que tengo aquí? Ah, pues sí 1045 00:41:24,250 --> 00:41:27,210 Pues entonces pisa el mínimo que tengo 1046 00:41:27,210 --> 00:41:28,690 Y se convierte en nuevo mínimo 1047 00:41:28,690 --> 00:41:29,889 Y así con todos 1048 00:41:29,889 --> 00:41:32,190 Pero claro, repito 1049 00:41:32,190 --> 00:41:34,170 Recuerda que el problema que tenemos es que 1050 00:41:34,170 --> 00:41:35,630 Para el primero de los valores 1051 00:41:35,630 --> 00:41:39,030 Ese no hay que compararle con nadie 1052 00:41:39,030 --> 00:41:40,550 Porque en Maximin no hay nada 1053 00:41:40,550 --> 00:41:42,510 para el primero de los valores 1054 00:41:42,510 --> 00:41:44,489 lo que tengo que hacer es llevarlo 1055 00:41:44,489 --> 00:41:46,510 incondicionalmente aquí 1056 00:41:46,510 --> 00:41:48,670 y aquí, con lo cual 1057 00:41:48,670 --> 00:41:50,130 tengo que distinguir 1058 00:41:50,130 --> 00:41:52,769 cuál es la primera vez que entro en el bucle 1059 00:41:52,769 --> 00:41:54,650 porque la primera vez 1060 00:41:54,650 --> 00:41:56,210 que entras en el bucle estás con este 1061 00:41:56,210 --> 00:41:58,590 ¿vale? la primera vez 1062 00:41:58,590 --> 00:41:59,989 que entras en el bucle estás con este 1063 00:41:59,989 --> 00:42:02,530 luego la primera vez que entras en el bucle 1064 00:42:02,530 --> 00:42:04,130 no hay que comparar, no hay que hacer nada 1065 00:42:04,130 --> 00:42:05,650 hay que coger este y llevarle aquí 1066 00:42:05,650 --> 00:42:08,409 pues entonces, ¿cómo hacemos aquí para ver 1067 00:42:08,409 --> 00:42:10,769 cuál es la primera vez que estamos en el bucle 1068 00:42:10,769 --> 00:42:12,650 pues nos inventamos una variable 1069 00:42:12,650 --> 00:42:13,769 que empieza valiendo cero 1070 00:42:13,769 --> 00:42:16,130 entonces yo la primera vez que entre va a ser cero 1071 00:42:16,130 --> 00:42:18,190 pues digo, oye, es cero 1072 00:42:18,190 --> 00:42:19,929 es la primera vez que he entrado 1073 00:42:19,929 --> 00:42:22,449 pues entonces directamente llevo 1074 00:42:22,449 --> 00:42:23,809 cadena a cadena mínimo 1075 00:42:23,809 --> 00:42:26,030 porque estoy haciendo esto 1076 00:42:26,030 --> 00:42:27,909 estoy llevando esto al mínimo 1077 00:42:27,909 --> 00:42:29,570 sin comparar y sin nada 1078 00:42:29,570 --> 00:42:31,650 porque es la primera vez que entro 1079 00:42:31,650 --> 00:42:34,730 y luego lo dejas ya incrementado 1080 00:42:34,730 --> 00:42:36,710 porque la siguiente vez que entras 1081 00:42:36,710 --> 00:42:39,389 Ya no es la primera 1082 00:42:39,389 --> 00:42:41,769 Tienes que tener una forma de distinguir que ya no es la primera 1083 00:42:41,769 --> 00:42:43,010 Conte ya va a ser uno 1084 00:42:43,010 --> 00:42:44,650 Conte es como un contador 1085 00:42:44,650 --> 00:42:46,929 De en qué iteración estás 1086 00:42:46,929 --> 00:42:48,469 La primera estás en la cero 1087 00:42:48,469 --> 00:42:49,309 Uy, que estoy en la primera 1088 00:42:49,309 --> 00:42:52,369 Pues me toca asignar al mínimo cadena 1089 00:42:52,369 --> 00:42:53,110 Y ya está 1090 00:42:53,110 --> 00:42:56,369 Y ahora la incremento para que la siguiente vez 1091 00:42:56,369 --> 00:42:57,170 Conte sea uno 1092 00:42:57,170 --> 00:42:59,170 Y ya sepas que no estás en la primera 1093 00:42:59,170 --> 00:42:59,650 Claro 1094 00:42:59,650 --> 00:43:04,690 Entonces ya no va a hacer esto 1095 00:43:04,690 --> 00:43:05,750 Esto ya no lo va a hacer 1096 00:43:05,750 --> 00:43:07,829 Esto solo lo va a hacer 1097 00:43:07,829 --> 00:43:09,769 La primera vez que entra, solo esa primera 1098 00:43:09,769 --> 00:43:12,230 Y la siguiente sesión no lo hace nunca 1099 00:43:12,230 --> 00:43:13,309 ¿Vale? 1100 00:43:14,909 --> 00:43:15,650 Vale, venga 1101 00:43:15,650 --> 00:43:16,690 Paramos un momentito