1 00:00:00,000 --> 00:00:08,800 Vale, pues a ver, a ver, hay muchos que no habéis hecho esto, entonces, hay muchos que 2 00:00:08,800 --> 00:00:12,760 no lo habéis hecho, pues a ver, plantearos por qué no lo habéis completado, por qué 3 00:00:12,760 --> 00:00:17,680 no lo habéis terminado, qué es lo que ha fallado de todo el proceso silencio que hay 4 00:00:17,680 --> 00:00:35,680 que completar para hacerlo. Entonces, el enunciado es este, ¿no? Vale, entonces uno 5 00:00:35,680 --> 00:00:40,560 lo lee y entiende lo que hay que hacer, eso es lo primero de todo, entender exactamente 6 00:00:40,560 --> 00:00:46,400 lo que hay que hacer. Pues aquí, después de leer esto uno ve que tiene que sumar muchos 7 00:00:46,400 --> 00:00:52,680 números, no sabe cuáles ni cuántos, ¿por qué? Porque depende de los datos de entrada, 8 00:00:52,680 --> 00:00:56,880 me van a dar dos datos de entrada, A y B, que son datos variables, dependen de los datos 9 00:00:56,880 --> 00:01:00,880 de entrada, me van a dar dos datos y tengo que sumar un montón de números comprendidos 10 00:01:00,880 --> 00:01:05,120 entre ellos, ¿vale? Entonces estoy en una situación en la cual tengo que hacer una 11 00:01:05,120 --> 00:01:11,960 suma de muchos sumandos y esos sumandos no sé ni cuántos son ni cuáles van a ser, 12 00:01:11,960 --> 00:01:18,160 no tengo ni idea, entonces tengo una suma que tendré que ir haciendo mediante un bucle 13 00:01:18,160 --> 00:01:22,360 que en cada iteración va incorporándonos esos sumandos, lo de siempre, pues tendré 14 00:01:22,360 --> 00:01:27,200 que hacer una suma acumulativa, ¿vale? Pues ya está, entonces ya tenemos mucho ganado, 15 00:01:27,200 --> 00:01:33,000 ya tenemos mucho ganado cuando vemos que tenemos que hacer un programa que, mediante un bucle, 16 00:01:33,000 --> 00:01:40,400 va incorporando a una variable, suma todos esos sumandos. Entonces, esto lo he repetido 17 00:01:40,400 --> 00:01:46,000 como 200.000 millones de veces. Al que le suene a chido, no le suele trivial, es porque 18 00:01:46,000 --> 00:01:48,960 en su casa luego no lo ha vuelto a hacer, no lo ha vuelto a mirar, no lo ha estudiado 19 00:01:48,960 --> 00:01:52,920 y eso es un problema, porque aquí lo podéis volver a lo mejor a entender y da igual, no 20 00:01:52,920 --> 00:01:58,120 vale para nada, será un cero en el examen, en este, en el siguiente y en todos. Entonces, 21 00:01:58,120 --> 00:02:03,720 conclusión, hay que trabajarlo en casa, ¿vale? No hay que irse a casa y desconecto hasta 22 00:02:03,720 --> 00:02:08,640 el próximo día de clase, eso nunca, ¿vale? Porque yo ahora estoy yendo muy despacio, 23 00:02:08,640 --> 00:02:15,960 pero ya se va a acabar rápido. Bueno, estoy yendo despacio para dar oportunidad al que 24 00:02:15,960 --> 00:02:21,480 le suena muy raro, porque no ha programado nunca y aunque en casa se pone, pues tiene 25 00:02:21,480 --> 00:02:25,760 todavía que coger ese rodaje para dar oportunidad a eso, pero eso ya se acabará en un momento 26 00:02:25,760 --> 00:02:31,160 dado y a partir de ahí ya cogemos el turbo. Entonces, por favor, que nadie llegue a clase 27 00:02:31,160 --> 00:02:35,480 con la situación de, uy, no me suena de lo que está hablando, porque si uno llega a 28 00:02:35,480 --> 00:02:41,920 clase con esas sensaciones es porque en casa no ha hecho sus deberes. Y eso tiene un único 29 00:02:41,920 --> 00:02:49,600 final que es, ya sabemos cuál. Bueno, pues entonces, ya sabemos que aquí habrá que 30 00:02:49,600 --> 00:02:55,400 hacer un bucle que sume sumandos. Esos sumandos van a ser números comprendidos entre A y 31 00:02:55,400 --> 00:02:59,560 B, pero que además cumplan una condición. Bueno, vale, que además cumplan una condición 32 00:02:59,560 --> 00:03:03,560 ya es otro matiz a hacer, pero yo te voy a tener que sumar números comprendidos entre 33 00:03:03,560 --> 00:03:08,240 A y B. Entonces, ya tenemos bastante hecho en nuestro programa. Bastante hecho es, como 34 00:03:08,240 --> 00:03:11,960 tengo que leer datos de entrada, como tengo que leer datos, pues venga, tendré que hacer 35 00:03:11,960 --> 00:03:18,360 un escáner. Vale, ahora, ¿qué datos de entrada tengo que leer? Pues, miramos bien 36 00:03:18,360 --> 00:03:25,920 enunciado, tenemos que leer solamente los dos valores que son el número inicial y el 37 00:03:25,920 --> 00:03:33,400 número final que marcan el intervalo dentro del cual yo iré avanzando. Vale, pues bueno, 38 00:03:33,400 --> 00:03:47,440 pues venga, leamos esos dos primeros datos, porque eso los voy a necesitar seguro. Entonces, 39 00:03:47,440 --> 00:03:52,880 vamos a llamarlo, como el enunciado pone a mayúscula, mayúscula. Pero bueno, las mayúsculas 40 00:03:52,880 --> 00:03:56,040 son nombres feos para variables, se confunden con otros conceptos. 41 00:03:56,040 --> 00:04:12,080 Ahora, ya tenemos leído el primer extremo y tenemos leído el segundo extremo. Entonces, 42 00:04:12,080 --> 00:04:19,960 ahora, el programa en principio dice, si el usuario ha introducido dos números A y B, 43 00:04:19,960 --> 00:04:24,840 tales que A es menor que B, pues ahí no hay nada que hacer, ahí no hay nada que hacer, 44 00:04:24,840 --> 00:04:30,280 ahí lo que tenemos que hacer es esa suma acumulativa tal cual, esa suma acumulativa 45 00:04:30,280 --> 00:04:34,120 tal cual. Vale, pues podemos nosotros empezar a plantearnos nuestro programa para empezar 46 00:04:34,120 --> 00:04:41,640 ya a hacer algo de partida, distinguiendo esa primera situación, por ejemplo, y haríamos 47 00:04:41,640 --> 00:04:48,760 una primera versión, que luego podríamos ir cambiando. Entonces, uno lo de que A sea 48 00:04:48,760 --> 00:04:53,120 mayor que B todavía se hace un lío, dice, no, a ver, voy a asumir que estoy en el caso 49 00:04:53,120 --> 00:04:59,640 bueno, A es menor que B, A es menor que B, vale. Pues si A es menor que B, ahora ya sí 50 00:04:59,640 --> 00:05:06,200 que me planteo un problema que ya sé resolver, ya está acotado en unas circunstancias que 51 00:05:06,200 --> 00:05:13,640 sé resolver, que es, tengo que recorrer todos los números que van entre A y B y todos ellos 52 00:05:13,640 --> 00:05:20,720 van a ser los sumandos de una suma final. Bueno, solo los que sean múltiplos de 5, 53 00:05:20,720 --> 00:05:24,600 pero bueno, eso ya lo meteremos en un lío. Entonces, ya en esta situación ya sabemos 54 00:05:24,600 --> 00:05:29,560 que yo voy a tener una suma final, vale, pues una suma final será esto, una variable suma 55 00:05:29,560 --> 00:05:37,440 final que inicializo a cero. Y esta suma final, esta suma final, mediante esta sentencia, 56 00:05:37,440 --> 00:05:54,560 suma más, igual, el sumando que toque, irá en un bucle aquí, irá en un bucle. Esta 57 00:05:54,560 --> 00:06:00,840 suma irá en un bucle incorporando sumandos. En la primera iteración incorporo un sumando, 58 00:06:00,840 --> 00:06:03,840 en la siguiente incorporo otro sumando, en la siguiente incorporo otro sumando. Esto 59 00:06:03,840 --> 00:06:08,960 es lo que tendremos que hacer. Vale, la pregunta es, estos sumandos, ¿cómo los vamos generando? 60 00:06:08,960 --> 00:06:14,840 Pues estos sumandos van a ser todos los números comprendidos entre A y B que cumplan una 61 00:06:14,840 --> 00:06:20,240 condición. Bueno, pues lo primero que pensamos es, vale, pues estos sumandos los puedo generar 62 00:06:20,240 --> 00:06:30,440 inicialmente esta variable sumando, sumando que sea igual a A, inicialmente, y ahora este 63 00:06:30,440 --> 00:06:37,480 sumando lo dejo incrementado. Vale, entonces ya tengo esta parte en la cual los sumandos 64 00:06:37,480 --> 00:06:42,720 parten de que el primero de todos es el A, lo incorporo a la suma y lo dejo incrementado, 65 00:06:42,720 --> 00:06:50,640 lo incorporo a la suma y lo dejo incrementado. Vale, sigo refinando esto. ¿Cuántos sumandos 66 00:06:50,640 --> 00:06:58,800 incorporo a la suma? Incorporas hasta que sumando sea B. Cuando sumando ya haya pasado 67 00:06:58,800 --> 00:07:03,000 de ser B y ya no lo quieres. Ah, vale, pues eso ya nos permite poner la condición. Mientras 68 00:07:03,000 --> 00:07:09,200 sumando sea menor o igual que B. Mientras sea menor o igual que B entras. Entonces entras 69 00:07:09,200 --> 00:07:13,640 para el A, entras para el A más 1, entras para el A más 2, porque ahí se va a incrementar, 70 00:07:13,640 --> 00:07:19,280 entras para el A más 3. Y cuando ya es B, entras para el B, pero se queda valiendo B 71 00:07:19,280 --> 00:07:26,400 más 1, ya no entras más. Vale, pues entonces ya tenemos la suma acumulativa de siempre. 72 00:07:26,400 --> 00:07:31,680 Una expresión que indica que en cada iteración del bucle en el que está, va incorporando 73 00:07:31,680 --> 00:07:36,800 un sumando que tendré que generar y ese generar va a depender de mi programa. En este caso 74 00:07:36,800 --> 00:07:40,840 empieza valiendo A y se va incrementando. Vale, seguimos refinando, pero el programa 75 00:07:40,840 --> 00:07:46,000 me dice que a la suma no tienen que ir todos los números entre A y B, como van aquí, 76 00:07:46,000 --> 00:07:55,240 no todos. A la suma tienen que ir solo los que sean múltiplos de 5. Ah, vale, pues entonces 77 00:07:55,280 --> 00:07:59,360 como a la suma tienen que ir solo los que sean múltiplos de 5, pues vamos a meter esa 78 00:07:59,360 --> 00:08:04,400 suma en esa condición. Y la condición de ser múltiplo de 5, ¿cuál es? Pues si el 79 00:08:04,400 --> 00:08:13,160 resto de dividir entre 5 es igual a 0. Vale, pues es lo siguiente que hemos refinado, 80 00:08:13,160 --> 00:08:19,160 que los sumandos que caen en la suma son solo los múltiplos de 5, solo. Pues venga, entonces 81 00:08:19,160 --> 00:08:25,000 solo incorporo a la suma ese sumando, solo incorporo si cumple la condición de ser 82 00:08:25,000 --> 00:08:32,920 sumando válido. Vale, pues ya está, entonces cuando yo salgo por aquí, ya en mi variable 83 00:08:32,920 --> 00:08:40,680 suma, está la suma de todos los múltiplos de 5 comprendidos entre A y B. Vale, pero 84 00:08:40,680 --> 00:08:45,760 yo esto era mi caso fácil en el que he dicho, vale, esto si es menor que B. Si B es menor 85 00:08:45,760 --> 00:08:49,480 que A, ¿qué es lo que me dice el programa que tengo que hacer? Pues es una situación, 86 00:08:49,480 --> 00:08:55,720 si el primer número que te dan te dice, bueno, entonces intercámbialos, y ya está, intercámbialos. 87 00:08:55,720 --> 00:09:03,160 Vale, pues entonces si B es menor que A, uno podría decir, sería el caso completo, vale, 88 00:09:03,160 --> 00:09:07,880 pues aquí uno se puede plantear mil formas de hacer esto, que es hacer lo mismo, pero 89 00:09:07,880 --> 00:09:14,960 de B hasta A, es decir, este mismo código, este mismo código, hacerlo, pero que A cumpla 90 00:09:14,960 --> 00:09:20,360 el papel de B y B cumpla el papel de A, por ejemplo. Esto es lo primero que se podría 91 00:09:20,360 --> 00:09:21,960 plantear. Dime. 92 00:09:21,960 --> 00:09:27,960 ¿No debería empezar planteando que tenga que ser un número positivo? 93 00:09:27,960 --> 00:09:30,960 Ah, bueno, vale, sí, sí. 94 00:09:30,960 --> 00:09:31,960 ¿Cualquiera de los dos? 95 00:09:31,960 --> 00:09:36,960 Sí, podríamos poner además un bucle que mientras no sea positivo no los vale, pero 96 00:09:36,960 --> 00:09:41,520 vamos a asumir que ha metido positivos, ¿vale? Podríamos poner esa condición, y si es negativo 97 00:09:41,520 --> 00:09:48,520 o salir del programa, o en cualquier caso nos da igual que sean negativos o no, porque 98 00:09:48,520 --> 00:09:54,520 tú puedes sumar la suma de todos los números comprendidos entre menos siete y menos dos, 99 00:09:54,520 --> 00:09:59,520 que no hay por qué, al menos que el enunciado te diga, no tengas en cuenta los positivos. 100 00:09:59,520 --> 00:10:08,520 Ah, vale, vale, vale, perdona, que lo dice específicamente. Vale, vale, vale, pues entonces 101 00:10:08,520 --> 00:10:12,520 vamos a ir incorporando, ¿vale? Entonces estamos haciendo nuestra primera versión, 102 00:10:12,520 --> 00:10:18,520 que si A es menor que B, vale. Ahora seguimos refinando. Esta parte es la que hemos sabido 103 00:10:18,520 --> 00:10:23,520 hacer rápido, la que hemos sabido hacer rápido, que es el caso ideal. A es menor que B, me 104 00:10:23,520 --> 00:10:31,520 olvido de si son positivos o negativos, me olvido, no le prohíbo, vale. Ahora, caso de 105 00:10:31,520 --> 00:10:36,520 que B sea menor que A, ahora yo no voy incorporando la complejidad del problema. Vale, pues si 106 00:10:36,520 --> 00:10:41,520 B es menor que A, tengo varias opciones. Puedo decir, bueno, no pasa nada, lo tengo 107 00:10:41,520 --> 00:10:47,520 ya resuelto, cuando A es el primero y B es el segundo. Si B es menor que A, me han dicho 108 00:10:47,520 --> 00:10:53,520 que entonces lo haga al revés, me han dicho que entonces lo haga al revés. Vale, pues 109 00:10:53,520 --> 00:10:57,520 entonces una solución fácil por la que uno podría optar sería, ah, mira, este mismo 110 00:10:57,520 --> 00:11:02,520 código, este mismo código me vale para el ELSE, este mismo código me vale para el ELSE, 111 00:11:02,520 --> 00:11:09,520 pero haciendo que, haciendo que retoque aquí. Cambiando B por A, o sea, partiendo del B 112 00:11:09,520 --> 00:11:14,520 y mientras sea menor o igual que A, ¿no? Es lo que me está diciendo el enunciado, 113 00:11:14,520 --> 00:11:21,520 que si A es menor que B, yo entonces parta del B, si A es mayor que B, perdón, yo entonces 114 00:11:21,520 --> 00:11:27,520 parta del B e incremente hasta A. Entonces uno podría decir, vale, pues ya está. Si 115 00:11:27,520 --> 00:11:33,520 A es menor que B, está claro, hago esto. Y si no, hago lo mismo, pero partiendo del 116 00:11:33,520 --> 00:11:40,520 B, incrementando y llegando hasta A. Y estoy haciendo lo mismo. Entonces uno podría haber 117 00:11:40,520 --> 00:11:49,520 se planteado hacer esto. ¿Vale? Entonces, vamos a hacerlo de que además no deje introducir 118 00:11:49,520 --> 00:11:54,520 negativos. Esto, eh, para A y B, pues que no deje introducir negativos no está muy 119 00:11:54,520 --> 00:11:58,520 bien expresado, porque podría, tendríamos que ir al que no lo ha planteado y decir, 120 00:11:58,520 --> 00:12:03,520 pero que no deje, ¿qué significa? Que te dejan un bucle infinito mientras A y B sean 121 00:12:03,520 --> 00:12:07,520 negativos hasta que metas positivos, o que si son negativos el programa termina. 122 00:12:07,520 --> 00:12:13,520 ¿Qué es lo que significa? Vale, vamos a hacerlo que esté en un bucle permanentemente 123 00:12:13,520 --> 00:12:17,520 mientras no sean los dos positivos simultáneamente. Vamos a hacerlo. 124 00:12:17,520 --> 00:12:23,520 ¿Eso qué significa? Ahora ya empiezo a ir incorporando complejidades. A ver, esto de aquí, 125 00:12:24,520 --> 00:12:30,520 vamos a meterlo en un bucle en el cual esté permanentemente mientras alguno de los dos 126 00:12:30,520 --> 00:12:37,520 números sea negativo, por ejemplo. Venga, pues vamos a meter esto en un bucle para prohibirle 127 00:12:37,520 --> 00:12:43,520 o para obligarle a que los vuelva a introducir y los vuelva a introducir bajo una condición. 128 00:12:43,520 --> 00:12:49,520 ¿Vale? Vale, pues entonces uno aquí podría incorporar lo siguiente. 129 00:12:54,520 --> 00:13:03,520 ¿Vale? Entonces, lo vamos haciendo así, a partes, a propósito, a propósito, 130 00:13:03,520 --> 00:13:07,520 porque así es como programa uno. Luego uno cuando ve el enunciado resuelto, 131 00:13:07,520 --> 00:13:11,520 un programa resuelto, ve todo el código escrito uno tras otro, muy bien escrito, 132 00:13:11,520 --> 00:13:16,520 y vale, lo entiende. Pero cuando uno lo construye, lo construye así y así lo tiene que construir 133 00:13:16,520 --> 00:13:21,520 porque así lo piensa. Va resolviendo pequeñas partes, luego lo va montando, luego lo va... 134 00:13:21,520 --> 00:13:25,520 Vale, pues entonces, esta parte la tenemos resuelta de esta manera. 135 00:13:25,520 --> 00:13:28,520 Otra cosa es que este código luego nos quede feo y queramos arreglarlo, ya lo veremos. 136 00:13:28,520 --> 00:13:34,520 Pero esta parte está, ¿no? Si es menor que b hago esta suma y si no la hago 137 00:13:34,520 --> 00:13:38,520 pero empezando desde b y acabando en a. ¿Vale? Esto ya funcionaría. 138 00:13:38,520 --> 00:13:44,520 Vale, ahora vamos a incorporarle esa complejidad. Oye, vamos a asumir que el tío puede que no se 139 00:13:44,520 --> 00:13:49,520 porte bien y meta negativos, pues esto de aquí, que yo he asumido que lo va a hacer bien, 140 00:13:49,520 --> 00:13:51,520 voy a meterlo en un bucle para que se repita todo el rato. 141 00:13:51,520 --> 00:13:54,520 Venga, pues lo meto en un bucle y aquí la condición del bucle, ¿cuál sería? 142 00:13:54,520 --> 00:13:59,520 Mientras a sea negativo o b sea negativo. ¿Verdad? 143 00:13:59,520 --> 00:14:02,520 Si uno de los dos lo es, uno se podría plantear eso. 144 00:14:02,520 --> 00:14:09,520 Mientras a sea menor que cero o b sea menor que cero. 145 00:14:09,520 --> 00:14:16,520 Con que uno de los dos sea negativo, ya querríamos volver a entrar. 146 00:14:16,520 --> 00:14:20,520 Con que uno de los dos lo sea. Porque tienen que ser positivos simultáneamente. 147 00:14:20,520 --> 00:14:24,520 Entonces, esta es la idea. La idea que uno plasma. 148 00:14:24,520 --> 00:14:28,520 Ahora, claro, le salen muchas cosas rojas por cosas que ya podemos intuir. 149 00:14:28,520 --> 00:14:31,520 Le salen muchas cosas rojas. Pero la idea es esta, ¿verdad? 150 00:14:31,520 --> 00:14:34,520 Un bucle que está todo el rato. 151 00:14:34,520 --> 00:14:38,520 ¿Alguno de los dos es negativo? Vuelvelos a pedir. 152 00:14:38,520 --> 00:14:41,520 ¿Alguno de los dos es negativo? Vuelvelos a pedir. Esa es la idea. 153 00:14:41,520 --> 00:14:43,520 Entonces, uno ahora ya plasma esta idea. 154 00:14:43,520 --> 00:14:46,520 Y claro, le salen cosas rojas que podemos prever por qué son. 155 00:14:46,520 --> 00:14:49,520 Y las arreglamos fácilmente. 156 00:14:49,520 --> 00:14:52,520 La a se nos ha puesto roja y la b se nos ha puesto roja. 157 00:14:52,520 --> 00:14:54,520 ¿Por qué hay un error de compilación ahí? Que alguien me lo diga. 158 00:14:54,520 --> 00:14:57,520 ¿Por qué se ha quejado el compilador? 159 00:14:57,520 --> 00:15:00,520 Porque estoy usando una variable antes de declararla. 160 00:15:00,520 --> 00:15:02,520 Eso no se puede hacer. 161 00:15:02,520 --> 00:15:06,520 Claro, es que yo antes no la estaba usando antes de leerla. 162 00:15:06,520 --> 00:15:08,520 Entonces, la declaraba ahí. Ahora sí. 163 00:15:08,520 --> 00:15:11,520 ¿No puedo usar una variable antes de declararla? No puedo. 164 00:15:11,520 --> 00:15:13,520 Pues no pasa nada. 165 00:15:13,520 --> 00:15:16,520 Las declaro aquí. Ya están declaradas. 166 00:15:16,520 --> 00:15:20,520 Con lo cual, aquí solamente las leo. 167 00:15:20,520 --> 00:15:23,520 Entonces, ya uno diría, ya lo he arreglado un poquito más. 168 00:15:23,520 --> 00:15:26,520 Efectivamente, yo sé. Es que no tengo ni que mirar la ayuda 169 00:15:26,520 --> 00:15:29,520 que antes de usar una variable hay que declararla. 170 00:15:29,520 --> 00:15:31,520 Pero nos sigue saliendo rojo. 171 00:15:31,520 --> 00:15:34,520 Entonces, de nuevo, ¿por qué nos sale ahí error de compilación? 172 00:15:34,520 --> 00:15:37,520 ¿Por qué nos sigue saliendo? 173 00:15:38,520 --> 00:15:40,520 Porque no tiene valor. 174 00:15:40,520 --> 00:15:42,520 Entonces, el programa llega aquí 175 00:15:42,520 --> 00:15:44,520 y la primera evaluación que hace 176 00:15:44,520 --> 00:15:46,520 no tiene que comparar con el menor que cero. 177 00:15:46,520 --> 00:15:48,520 No lo tiene. Dice, está sin inicializar. 178 00:15:48,520 --> 00:15:51,520 Entonces, ahora pensamos qué valor le queremos dar. 179 00:15:51,520 --> 00:15:53,520 ¿Cómo queremos que funcione el programa? 180 00:15:53,520 --> 00:15:58,520 Queremos que entre al menos una primera vez. 181 00:15:58,520 --> 00:16:02,520 Y luego ya las siguientes dependiendo de si alguno es negativo o no. 182 00:16:02,520 --> 00:16:04,520 Para que entre una primera vez, 183 00:16:04,520 --> 00:16:06,520 con que uno de los dos sea negativo, 184 00:16:06,520 --> 00:16:08,520 ya va a entrar una primera vez. 185 00:16:08,520 --> 00:16:11,520 Pues yo qué sé. Por ejemplo, esto. 186 00:16:11,520 --> 00:16:14,520 Entonces, como esto va a ser true, 187 00:16:14,520 --> 00:16:17,520 ya el OR esto ni lo va a evaluar. 188 00:16:17,520 --> 00:16:19,520 Va a pasar de ello. Ni lo va a evaluar. 189 00:16:19,520 --> 00:16:22,520 Y ya va a entrar una primera vez. 190 00:16:22,520 --> 00:16:24,520 Que es el efecto que queremos. 191 00:16:24,520 --> 00:16:25,520 Entonces, esto es un bucle. 192 00:16:25,520 --> 00:16:27,520 Hemos conseguido aquí un bucle 193 00:16:27,520 --> 00:16:29,520 que está todo el rato. 194 00:16:29,520 --> 00:16:31,520 Pide número. Que alguno es negativo, 195 00:16:31,520 --> 00:16:33,520 vuelve a pedir números. 196 00:16:34,520 --> 00:16:36,520 Así todo el rato. 197 00:16:36,520 --> 00:16:39,520 Bueno, pues en principio tendríamos una versión completa 198 00:16:39,520 --> 00:16:41,520 de nuestro programa. 199 00:16:41,520 --> 00:16:43,520 Otra cosa es que ahora este código lo queramos tocar un poco 200 00:16:43,520 --> 00:16:45,520 porque está muy largo y muy feo, ¿no? 201 00:16:45,520 --> 00:16:47,520 Pero tenemos una versión completa 202 00:16:47,520 --> 00:16:49,520 de la que hemos partido. 203 00:16:49,520 --> 00:16:51,520 Entonces, uno aquí haría pruebas 204 00:16:51,520 --> 00:16:53,520 porque lo hemos construido y a lo mejor 205 00:16:53,520 --> 00:16:55,520 nos parece que está bien. 206 00:16:55,520 --> 00:16:57,520 Estamos viendo algo y no estamos viendo algo. 207 00:16:57,520 --> 00:16:59,520 Vamos a hacer unas primeras pruebas. 208 00:16:59,520 --> 00:17:01,520 Y si uno confirma que está bien, 209 00:17:01,520 --> 00:17:03,520 se plantea refactorizarlo. 210 00:17:03,520 --> 00:17:05,520 Refactorizarlo significa arreglar el código 211 00:17:05,520 --> 00:17:07,520 para a lo mejor dejarlo un poquito más eficiente. 212 00:17:07,520 --> 00:17:09,520 Más bonito, más que más eficiente. 213 00:17:09,520 --> 00:17:11,520 Vamos a hacer unas pruebas rápidas. 214 00:17:13,520 --> 00:17:15,520 Primera prueba. 215 00:17:23,520 --> 00:17:25,520 Vamos a hacer pruebas. 216 00:17:25,520 --> 00:17:27,520 Vale. 217 00:17:27,520 --> 00:17:29,520 Una primera prueba, ¿qué haría? 218 00:17:29,520 --> 00:17:31,520 Bueno, como he copiado y pegado, 219 00:17:31,520 --> 00:17:33,520 pone introduzca primero e introduzca segundo. 220 00:17:33,520 --> 00:17:35,520 Bueno, luego lo cambiamos. 221 00:17:35,520 --> 00:17:37,520 Introduzca primero e introduzca segundo. 222 00:17:37,520 --> 00:17:39,520 Venga, aquí debería volverme los a pedir. 223 00:17:39,520 --> 00:17:41,520 Otra prueba básica. 224 00:17:41,520 --> 00:17:43,520 Que sea el primero el positivo y el segundo el negativo. 225 00:17:43,520 --> 00:17:45,520 Efectivamente, me los vuelvo a pedir. 226 00:17:45,520 --> 00:17:47,520 Otro caso de prueba que tendría que hacer. 227 00:17:47,520 --> 00:17:49,520 Los dos negativos. 228 00:17:49,520 --> 00:17:51,520 Efectivamente, me los vuelvo a pedir. 229 00:17:51,520 --> 00:17:53,520 Otro caso de prueba. 230 00:17:53,520 --> 00:17:55,520 Que sea los dos positivos. 231 00:17:55,520 --> 00:17:57,520 Y el primero menor que el segundo. 232 00:17:57,520 --> 00:17:59,520 4 y 7. 233 00:18:05,520 --> 00:18:07,520 Ha terminado y no me ha mostrado la suma 234 00:18:07,520 --> 00:18:09,520 porque se me ha olvidado el System.out.println suma. 235 00:18:09,520 --> 00:18:11,520 Pues para esto va en las pruebas. 236 00:18:11,520 --> 00:18:13,520 Porque la suma no la he mostrado. 237 00:18:13,520 --> 00:18:15,520 La suma es... 238 00:18:17,520 --> 00:18:19,520 La suma es... 239 00:18:19,520 --> 00:18:21,520 Y tengo que mostrar suma. 240 00:18:21,520 --> 00:18:23,520 Vale, vamos a volver a hacer la prueba. 241 00:18:23,520 --> 00:18:25,520 Metiendo ya un caso válido. 242 00:18:25,520 --> 00:18:27,520 Porque los... 243 00:18:27,520 --> 00:18:29,520 Por ejemplo, el 4 244 00:18:29,520 --> 00:18:31,520 entre el 4 y el 9 245 00:18:31,520 --> 00:18:33,520 múltiplos de 5 hay solamente 246 00:18:33,520 --> 00:18:35,520 1, que es el 5. 247 00:18:35,520 --> 00:18:37,520 Entonces la suma es 5. 248 00:18:37,520 --> 00:18:39,520 Vale, parece que funciona. 249 00:18:39,520 --> 00:18:41,520 A ver, tendríamos que hacer más pruebas. 250 00:18:41,520 --> 00:18:43,520 Por ejemplo, si hacemos este mismo programa entre 4 251 00:18:43,520 --> 00:18:45,520 y 11. 252 00:18:45,520 --> 00:18:47,520 Aquí tiene dos múltiplos de 5. 253 00:18:47,520 --> 00:18:49,520 5 y 10. Deberíamos echar 15. 254 00:18:49,520 --> 00:18:51,520 Vale, parece que funciona. Otro caso de prueba. 255 00:18:51,520 --> 00:18:53,520 Que sea el primero 256 00:18:53,520 --> 00:18:55,520 mayor que el segundo. Por ejemplo, 257 00:18:55,520 --> 00:18:57,520 metemos 11 y 4. 258 00:18:57,520 --> 00:18:59,520 Me debería mostrar 15. Lo hace. 259 00:18:59,520 --> 00:19:01,520 Entonces tiene toda la pinta de que el programa está bien. 260 00:19:01,520 --> 00:19:03,520 Son pocas pruebas las que hemos hecho. 261 00:19:03,520 --> 00:19:05,520 Uno en un caso real tendría que hacer más. 262 00:19:05,520 --> 00:19:07,520 Pero bueno. 263 00:19:07,520 --> 00:19:09,520 Este programa lo hemos hecho nosotros. Tiene pinta de que lo hemos hecho bien. 264 00:19:09,520 --> 00:19:11,520 Vale, pues ya está. 265 00:19:11,520 --> 00:19:13,520 Este programa nos funciona. 266 00:19:13,520 --> 00:19:15,520 Y todos hemos entendido lo que hemos hecho. 267 00:19:15,520 --> 00:19:17,520 Y cómo lo hemos ido construyendo. 268 00:19:17,520 --> 00:19:19,520 Mira. Y dice, madre mía. 269 00:19:19,520 --> 00:19:21,520 Un if-else. 270 00:19:21,520 --> 00:19:23,520 Donde en el if y en el else 271 00:19:23,520 --> 00:19:25,520 hago prácticamente lo mismo. 272 00:19:25,520 --> 00:19:27,520 Qué manera de duplicar código. 273 00:19:27,520 --> 00:19:29,520 No podría hacer yo esto. Escribirlo 274 00:19:29,520 --> 00:19:31,520 más compacto. 275 00:19:31,520 --> 00:19:33,520 Que esto no es afectos 276 00:19:33,520 --> 00:19:35,520 de la máquina virtual de complejidad. 277 00:19:35,520 --> 00:19:37,520 A la máquina virtual le da igual. Porque o hace esto 278 00:19:37,520 --> 00:19:39,520 o hace lo otro. No hace las dos cosas. 279 00:19:39,520 --> 00:19:41,520 No es un tema de que en términos computacionales 280 00:19:41,520 --> 00:19:43,520 tarde más. Es un tema de que 281 00:19:43,520 --> 00:19:45,520 en términos de código fuente, el que lee este 282 00:19:45,520 --> 00:19:47,520 código, pues es muy largo. 283 00:19:47,520 --> 00:19:49,520 Entonces, 284 00:19:49,520 --> 00:19:51,520 ¿qué es lo primero que se nos podría ocurrir? 285 00:19:51,520 --> 00:19:53,520 ¡Hombre! 286 00:19:53,520 --> 00:19:55,520 Pues si A es menor que... 287 00:19:55,520 --> 00:19:57,520 Lo primero que voy a hacer es, si A es 288 00:19:57,520 --> 00:19:59,520 menor que B, los dejo tal cual. 289 00:19:59,520 --> 00:20:01,520 Y si no, intercambio uno por el otro. 290 00:20:01,520 --> 00:20:03,520 Y así puedo reutilizar el mismo código 291 00:20:03,520 --> 00:20:05,520 para todos. ¿Verdad? 292 00:20:05,520 --> 00:20:07,520 No sería más fácil. 293 00:20:07,520 --> 00:20:09,520 De hecho, es lo que me sugiere el enunciado. 294 00:20:09,520 --> 00:20:11,520 Lo que me sugiere 295 00:20:11,520 --> 00:20:13,520 el enunciado es, si A es mayor que B 296 00:20:13,520 --> 00:20:15,520 intercambia A por B. 297 00:20:15,520 --> 00:20:17,520 Y así puedes reutilizar 298 00:20:17,520 --> 00:20:19,520 este código para los dos. 299 00:20:19,520 --> 00:20:21,520 ¿Está claro? 300 00:20:21,520 --> 00:20:23,520 Eso es lo primero que nos tendríamos que 301 00:20:23,520 --> 00:20:25,520 plantear. Voy a reutilizar este código para 302 00:20:25,520 --> 00:20:27,520 los dos, pero intercambiando A por B. 303 00:20:27,520 --> 00:20:29,520 Entonces, eso implicaría 304 00:20:29,520 --> 00:20:31,520 que yo este es 305 00:20:31,520 --> 00:20:33,520 el único código que voy a hacer, que lo voy a 306 00:20:33,520 --> 00:20:35,520 reutilizar para los 307 00:20:35,520 --> 00:20:37,520 dos casos. 308 00:20:39,520 --> 00:20:41,520 No hay él se que valga. 309 00:20:41,520 --> 00:20:43,520 Esto fuera, me lo puedo pulir. 310 00:20:43,520 --> 00:20:45,520 Y ahora ya, 311 00:20:45,520 --> 00:20:47,520 antes de hacer 312 00:20:47,520 --> 00:20:49,520 esta suma, 313 00:20:49,520 --> 00:20:51,520 antes de hacer esto, 314 00:20:53,520 --> 00:20:55,520 vamos a intercambiar los valores 315 00:20:55,520 --> 00:20:57,520 de A por B, si es que A es menor que B. 316 00:21:01,520 --> 00:21:03,520 Intercambiamos 317 00:21:03,520 --> 00:21:05,520 los 318 00:21:05,520 --> 00:21:07,520 valores de las 319 00:21:07,520 --> 00:21:09,520 variables. 320 00:21:11,520 --> 00:21:13,520 ¿Vale? Entonces, 321 00:21:13,520 --> 00:21:15,520 intercambiando los valores de las variables 322 00:21:15,520 --> 00:21:17,520 en el caso de que A sea menor 323 00:21:17,520 --> 00:21:19,520 que B, es decir, 324 00:21:19,520 --> 00:21:21,520 intercambiándolos en este caso, y sólo en este, 325 00:21:23,520 --> 00:21:25,520 si A es menor que B, 326 00:21:25,520 --> 00:21:27,520 intercambiándolos 327 00:21:27,520 --> 00:21:29,520 aquí dentro, dentro de este 328 00:21:29,520 --> 00:21:31,520 if, intercambiándolos, yo puedo hacer ya 329 00:21:31,520 --> 00:21:33,520 este código 330 00:21:33,520 --> 00:21:35,520 y sin más. 331 00:21:35,520 --> 00:21:37,520 Porque como ya los he intercambiado, 332 00:21:37,520 --> 00:21:39,520 en A estará el valor más pequeño 333 00:21:39,520 --> 00:21:41,520 y en B el más grande. Entonces no tengo 334 00:21:41,520 --> 00:21:43,520 que duplicar este código en un if y en un else, 335 00:21:43,520 --> 00:21:45,520 no tengo que duplicar. Pero claro, tengo que 336 00:21:45,520 --> 00:21:47,520 intercambiar aquí A por B. 337 00:21:47,520 --> 00:21:49,520 ¿Está claro, no? 338 00:21:49,520 --> 00:21:51,520 Que queremos intercambiarlos para 339 00:21:51,520 --> 00:21:53,520 poder utilizar este código 340 00:21:53,520 --> 00:21:55,520 en ambos casos, tanto si A es 341 00:21:55,520 --> 00:21:57,520 menor que B como si no, en ambos casos. 342 00:21:57,520 --> 00:21:59,520 ¿Vale? Está claro que es lo que queremos hacer. 343 00:21:59,520 --> 00:22:01,520 ¿Vale? Pues uno diría, uy, voy a intercambiar 344 00:22:01,520 --> 00:22:03,520 A por B. Entonces, claro, si 345 00:22:03,520 --> 00:22:05,520 no se le ocurre hacer esto, obviamente 346 00:22:07,520 --> 00:22:09,520 uno podría así 347 00:22:09,520 --> 00:22:11,520 de buenas a primeras escribir todo rápido 348 00:22:11,520 --> 00:22:13,520 y decir, ala, ya está. A la variable 349 00:22:13,520 --> 00:22:15,520 A le doy lo que tenga B 350 00:22:15,520 --> 00:22:17,520 y a la variable B le doy lo que tenga A. 351 00:22:17,520 --> 00:22:19,520 Intercambiados. 352 00:22:19,520 --> 00:22:21,520 ¿Con esto hemos intercambiado los valores? 353 00:22:21,520 --> 00:22:23,520 No. 354 00:22:23,520 --> 00:22:25,520 No. 355 00:22:25,520 --> 00:22:27,520 Porque con esto, a A le hemos dado lo que 356 00:22:27,520 --> 00:22:29,520 tenía B. 357 00:22:29,520 --> 00:22:31,520 Con lo cual, lo que tiene A se pisó, desapareció. 358 00:22:31,520 --> 00:22:33,520 Y ahora tienen las dos lo mismo. 359 00:22:33,520 --> 00:22:35,520 Y ahora a B le doy 360 00:22:35,520 --> 00:22:37,520 lo que tiene A, pero es que A tiene 361 00:22:37,520 --> 00:22:39,520 lo mismo que tiene ella misma, B. 362 00:22:39,520 --> 00:22:41,520 Porque fue lo que tenía delante A, 363 00:22:41,520 --> 00:22:43,520 se pisó. ¿Verdad? 364 00:22:45,520 --> 00:22:47,520 ¿Vale? O sea, 365 00:22:47,520 --> 00:22:49,520 no es tan fácil intercambiar variables. 366 00:22:49,520 --> 00:22:51,520 Si aquí tenemos 367 00:22:55,520 --> 00:22:57,520 nuestra variable A, que la tenemos 368 00:22:57,520 --> 00:22:59,520 aquí. 369 00:22:59,520 --> 00:23:01,520 Y aquí tenemos 370 00:23:03,520 --> 00:23:05,520 nuestra variable B, que la tenemos 371 00:23:05,520 --> 00:23:07,520 ahí. Ahora hacemos, 372 00:23:07,520 --> 00:23:09,520 voy a hacer A 373 00:23:09,520 --> 00:23:11,520 igual a B. 374 00:23:11,520 --> 00:23:13,520 Pues en A tenemos 375 00:23:13,520 --> 00:23:15,520 un 7, por ejemplo. 376 00:23:17,520 --> 00:23:19,520 Y en B tenemos 377 00:23:19,520 --> 00:23:21,520 un 3. 378 00:23:21,520 --> 00:23:23,520 Esta es nuestra situación. 379 00:23:23,520 --> 00:23:25,520 Y quiero intercambiar A por B. 380 00:23:25,520 --> 00:23:27,520 Pues a A le asigno 381 00:23:27,520 --> 00:23:29,520 lo que tenía B. Estupendo. 382 00:23:29,520 --> 00:23:31,520 A desaparece. 383 00:23:31,520 --> 00:23:33,520 A ha desaparecido de él 384 00:23:33,520 --> 00:23:35,520 lo que tenía, el 7 fuera, 385 00:23:35,520 --> 00:23:37,520 desapareció, y ahora A tiene el 3. 386 00:23:37,520 --> 00:23:39,520 Muy bien, A tiene el 3. 387 00:23:39,520 --> 00:23:41,520 Vale. 388 00:23:41,520 --> 00:23:43,520 Pero ¿y ahora? ¿Cómo le volvemos a pasar 389 00:23:43,520 --> 00:23:45,520 el 7 a B? 390 00:23:45,520 --> 00:23:47,520 Es imposible, ya hemos perdido el 7 de antes. 391 00:23:47,520 --> 00:23:49,520 ¿Cómo podemos recuperar el 7 para pasárselo a B? 392 00:23:49,520 --> 00:23:51,520 Pues no podemos, lo hemos 393 00:23:51,520 --> 00:23:53,520 perdido, porque hemos pisado el 7 cuando 394 00:23:53,520 --> 00:23:55,520 hicimos esta asignación. 395 00:23:55,520 --> 00:23:57,520 Cuando hicimos la asignación de A, da él lo que tenga B. 396 00:23:57,520 --> 00:23:59,520 Claro, pues ¿qué nos falta? 397 00:23:59,520 --> 00:24:01,520 Bueno, pues antes de hacer esa asignación 398 00:24:01,520 --> 00:24:03,520 vamos a guardar en alguna 399 00:24:03,520 --> 00:24:05,520 variable, en algún sitio, alguna variable 400 00:24:05,520 --> 00:24:07,520 auxiliar lo que tuviera A. 401 00:24:07,520 --> 00:24:09,520 Vamos a guardarlo en algún sitio. 402 00:24:09,520 --> 00:24:11,520 Antes de asignárselo. 403 00:24:11,520 --> 00:24:13,520 Entonces, si en una variable auxiliar 404 00:24:17,520 --> 00:24:19,520 si en una variable auxiliar 405 00:24:19,520 --> 00:24:21,520 uno ha llevado el 7 406 00:24:21,520 --> 00:24:23,520 que había antes 407 00:24:25,520 --> 00:24:27,520 vale, este 7 408 00:24:27,520 --> 00:24:29,520 lo hemos llevado aquí. 409 00:24:29,520 --> 00:24:31,520 Pues si ese 7 lo hemos llevado ahí 410 00:24:31,520 --> 00:24:33,520 ya está. 411 00:24:33,520 --> 00:24:35,520 Ya no hay problema. 412 00:24:35,520 --> 00:24:37,520 ¿Y para llevarlo ahí qué hacemos? 413 00:24:37,520 --> 00:24:39,520 Pues esta sentencia que hemos dicho, 414 00:24:39,520 --> 00:24:41,520 A es igual a A, esa. 415 00:24:41,520 --> 00:24:43,520 Pues si el 7 lo he llevado aquí 416 00:24:43,520 --> 00:24:45,520 entonces ahora ya puedo hacer sin miedo 417 00:24:45,520 --> 00:24:47,520 A igual a B. 418 00:24:47,520 --> 00:24:49,520 ¿Y ahora qué sentencia me falta? 419 00:24:49,520 --> 00:24:51,520 ¿Qué sentencia me falta? 420 00:24:51,520 --> 00:24:53,520 Pues A es igual a A. 421 00:24:53,520 --> 00:24:55,520 ¿Y ahora qué sentencia me faltaría hacer 422 00:24:55,520 --> 00:24:57,520 para completar 423 00:24:57,520 --> 00:24:59,520 el intercambio de valores? 424 00:24:59,520 --> 00:25:01,520 Después de asignarle 425 00:25:01,520 --> 00:25:03,520 a aux lo que tenga A 426 00:25:03,520 --> 00:25:05,520 a A lo que tenga B 427 00:25:05,520 --> 00:25:07,520 ¿qué sentencia me falta hacer ahí para 428 00:25:07,520 --> 00:25:09,520 completar el intercambio? 429 00:25:09,520 --> 00:25:11,520 Dictadmela. 430 00:25:13,520 --> 00:25:15,520 No, dictadme qué sentencia 431 00:25:15,520 --> 00:25:17,520 tengo que hacer ahí después de esas dos 432 00:25:17,520 --> 00:25:19,520 que ya he hecho, aux igual a A igual a B 433 00:25:19,520 --> 00:25:21,520 para completar el intercambio. 434 00:25:21,520 --> 00:25:23,520 ¿Y el tal cual lo que tengo que escribir? 435 00:25:23,520 --> 00:25:25,520 Como si fuera código Java. 436 00:25:25,520 --> 00:25:27,520 B igual a A. 437 00:25:27,520 --> 00:25:29,520 Claro. 438 00:25:29,520 --> 00:25:31,520 Vale. 439 00:25:31,520 --> 00:25:33,520 Entonces estas tres sentencias 440 00:25:33,520 --> 00:25:35,520 estas tres ya sí 441 00:25:35,520 --> 00:25:37,520 completan el intercambio 442 00:25:37,520 --> 00:25:39,520 entre A y B. 443 00:25:39,520 --> 00:25:41,520 Previamente A lo dejamos guardadito en un sitio temporal. 444 00:25:41,520 --> 00:25:43,520 Ahora 445 00:25:43,520 --> 00:25:45,520 a A lo pisamos con lo que tuviera B. 446 00:25:45,520 --> 00:25:47,520 Vale. 447 00:25:47,520 --> 00:25:49,520 Y a B le damos lo que tenía A 448 00:25:49,520 --> 00:25:51,520 antes, que está guardado en la localización temporal 449 00:25:51,520 --> 00:25:53,520 aux. 450 00:25:53,520 --> 00:25:55,520 Esto ya sí. 451 00:25:55,520 --> 00:25:57,520 Esto no. 452 00:25:57,520 --> 00:25:59,520 Bueno, pues venga, vamos a declararnos 453 00:25:59,520 --> 00:26:01,520 aquí esa variable auxiliar. 454 00:26:01,520 --> 00:26:03,520 A la variable auxiliar 455 00:26:03,520 --> 00:26:05,520 le damos lo que tenía A. 456 00:26:05,520 --> 00:26:07,520 Ahora ya que eso está guardadito 457 00:26:07,520 --> 00:26:09,520 a A lo puedo pisar con B. 458 00:26:09,520 --> 00:26:11,520 Y ahora a B 459 00:26:11,520 --> 00:26:13,520 le doy esto. 460 00:26:15,520 --> 00:26:17,520 Bueno, pues esto ya sí 461 00:26:17,520 --> 00:26:19,520 que ha intercambiado los valores de A y de B. 462 00:26:19,520 --> 00:26:21,520 La variable aux 463 00:26:21,520 --> 00:26:23,520 se ha usado solo para eso. 464 00:26:23,520 --> 00:26:25,520 No me vale para nada más. 465 00:26:25,520 --> 00:26:27,520 Pero para eso es imprescindible. 466 00:26:27,520 --> 00:26:29,520 No puedo intercambiar los valores de dos variables 467 00:26:29,520 --> 00:26:31,520 sin un espacio auxiliar 468 00:26:31,520 --> 00:26:33,520 para guardar una de ellas temporalmente. 469 00:26:33,520 --> 00:26:35,520 Es imposible, ¿no? 470 00:26:37,520 --> 00:26:39,520 No puedo mover lo que tiene una caja 471 00:26:39,520 --> 00:26:41,520 intercambiar lo que tiene una caja 472 00:26:41,520 --> 00:26:43,520 con lo que tiene otra 473 00:26:43,520 --> 00:26:45,520 si lo que tiene una no lo dejo temporalmente 474 00:26:45,520 --> 00:26:47,520 en un sitio para llenarla con lo que tiene la otra. 475 00:26:47,520 --> 00:26:49,520 Es imposible. 476 00:26:51,520 --> 00:26:53,520 Bueno, pues ya hemos hecho 477 00:26:53,520 --> 00:26:55,520 un primer arreglo de código. 478 00:26:55,520 --> 00:26:57,520 Esto ya sí que está más bonito. 479 00:26:57,520 --> 00:26:59,520 Si A es menor que B los intercambiamos 480 00:26:59,520 --> 00:27:01,520 con lo cual hará ya este código 481 00:27:01,520 --> 00:27:03,520 en el cual A es el valor inicial 482 00:27:03,520 --> 00:27:05,520 y llego hasta B, este código ya me vale. 483 00:27:05,520 --> 00:27:07,520 Ya no tengo que duplicar o unifelse. 484 00:27:07,520 --> 00:27:09,520 Esto ya está mucho más bonito. 485 00:27:09,520 --> 00:27:11,520 ¿Vale? 486 00:27:15,520 --> 00:27:17,520 Vale, siguiente arreglo 487 00:27:17,520 --> 00:27:19,520 que podríamos hacer. 488 00:27:21,520 --> 00:27:23,520 Lo cual implica que 489 00:27:23,520 --> 00:27:25,520 empecemos ya a incorporar 490 00:27:25,520 --> 00:27:27,520 nuevas sintaxis 491 00:27:27,520 --> 00:27:29,520 para los bucles. 492 00:27:29,520 --> 00:27:31,520 Porque solamente hemos visto 493 00:27:31,520 --> 00:27:33,520 la sintaxis del while. 494 00:27:33,520 --> 00:27:35,520 Pero, María, 495 00:27:39,520 --> 00:27:41,520 hemos visto solo la sintaxis del while. 496 00:27:41,520 --> 00:27:43,520 ¿Vale? Pero hay más sintaxis. 497 00:27:43,520 --> 00:27:45,520 Igual que el if, 498 00:27:45,520 --> 00:27:47,520 tiene el ifelse normal, 499 00:27:47,520 --> 00:27:49,520 ifelseif, switchcase, 500 00:27:49,520 --> 00:27:51,520 son diferentes formas de hacer 501 00:27:51,520 --> 00:27:53,520 una decisión. Cada uno elige 502 00:27:53,520 --> 00:27:55,520 la que más se adapte a su código. 503 00:27:55,520 --> 00:27:57,520 Pero, ojo, 504 00:27:57,520 --> 00:27:59,520 todo se puede hacer 505 00:27:59,520 --> 00:28:01,520 con la sentencia if. 506 00:28:01,520 --> 00:28:03,520 Te puede quedar con más anidados o con menos anidados, 507 00:28:03,520 --> 00:28:05,520 pero todo se puede hacer con ella. Pues aquí igual. 508 00:28:05,520 --> 00:28:07,520 Todo lo que implique un bucle se puede hacer 509 00:28:07,520 --> 00:28:09,520 con el while, todo. Pero hay sintaxis 510 00:28:09,520 --> 00:28:11,520 que a lo mejor dejan el programa más bonito, 511 00:28:11,520 --> 00:28:13,520 que lo dejan más bonito. 512 00:28:13,520 --> 00:28:15,520 Por ejemplo, vamos a una sintaxis alternativa, 513 00:28:15,520 --> 00:28:17,520 que aplica muy bien para este ejemplo. 514 00:28:17,520 --> 00:28:19,520 Ahora, esta parte de aquí ya nos gusta. 515 00:28:19,520 --> 00:28:21,520 Si A es menor que B lo intercambio, 516 00:28:21,520 --> 00:28:23,520 esto no hay forma de hacerlo más compacto ni de hacerlo mejor. 517 00:28:23,520 --> 00:28:25,520 Y la suma acumulativa, 518 00:28:25,520 --> 00:28:27,520 pues aquí la tengo. 519 00:28:33,520 --> 00:28:35,520 Esto, 520 00:28:35,520 --> 00:28:37,520 podríais, 521 00:28:37,520 --> 00:28:39,520 se os ocurriría 522 00:28:39,520 --> 00:28:41,520 ¿Hay alguna forma a lo mejor de hacerlo? 523 00:28:43,520 --> 00:28:45,520 No, no, no nos gusta dejarlo. 524 00:28:45,520 --> 00:28:47,520 Esto nos gusta así, queda así y se acabó. 525 00:28:47,520 --> 00:28:49,520 Bueno, pues vámonos aquí a este bucle. 526 00:28:49,520 --> 00:28:51,520 Este bucle de aquí 527 00:28:51,520 --> 00:28:53,520 cumple una función, ya hemos visto cuál, 528 00:28:53,520 --> 00:28:55,520 que es tener al usuario ahí todo el rato 529 00:28:55,520 --> 00:28:57,520 mientras alguno de los dos sea negativo. 530 00:28:57,520 --> 00:28:59,520 Pero este bucle 531 00:28:59,520 --> 00:29:01,520 le ocurre, como a muchas 532 00:29:01,520 --> 00:29:03,520 otras situaciones, que la primera 533 00:29:03,520 --> 00:29:05,520 vez queremos que se haga sí 534 00:29:05,520 --> 00:29:07,520 o sí. 535 00:29:07,520 --> 00:29:09,520 Entonces, hay situaciones 536 00:29:09,520 --> 00:29:11,520 en las cuales hay algo, hay que repetirlo muchas veces, 537 00:29:11,520 --> 00:29:13,520 pero es situación en particular, 538 00:29:13,520 --> 00:29:15,520 la primera vez se tiene que hacer siempre. 539 00:29:15,520 --> 00:29:17,520 Puede ocurrir, muchas veces, 540 00:29:17,520 --> 00:29:19,520 en esta ocurre. Normalmente ocurre 541 00:29:19,520 --> 00:29:21,520 en situaciones en las cuales queremos pedir datos 542 00:29:21,520 --> 00:29:23,520 y luego validarlos. 543 00:29:23,520 --> 00:29:25,520 Entonces, cuando uno quiere pedir datos 544 00:29:25,520 --> 00:29:27,520 y estarse ahí luego ya 545 00:29:27,520 --> 00:29:29,520 haya 546 00:29:29,520 --> 00:29:31,520 enquistado pidiendo datos mientras no sean válidos, 547 00:29:31,520 --> 00:29:33,520 la primera vez lo tiene que ejecutar seguro, 548 00:29:33,520 --> 00:29:35,520 porque es la primera petición. 549 00:29:35,520 --> 00:29:37,520 Ese es un ejemplo, 550 00:29:37,520 --> 00:29:39,520 pero puede haber más problemas que se 551 00:29:39,520 --> 00:29:41,520 resuelven con un bucle en el cual 552 00:29:41,520 --> 00:29:43,520 la primera se tiene que ejecutar 553 00:29:43,520 --> 00:29:45,520 sí o sí, y ya las demás 554 00:29:45,520 --> 00:29:47,520 dependen de la condición. 555 00:29:47,520 --> 00:29:49,520 Este bucle, 556 00:29:49,520 --> 00:29:51,520 la primera se ejecuta sí o sí, 557 00:29:51,520 --> 00:29:53,520 pero la primera se ejecuta sí o sí 558 00:29:53,520 --> 00:29:55,520 porque hemos forzado aquí que ya sea menos uno. 559 00:29:57,520 --> 00:29:59,520 Si yo aquí pusiera cualquier cosa, 560 00:29:59,520 --> 00:30:01,520 lo inicializará con 561 00:30:01,520 --> 00:30:03,520 cero, por ejemplo, 562 00:30:03,520 --> 00:30:05,520 pues la primera vez ya ni siquiera se ejecutaría. 563 00:30:05,520 --> 00:30:07,520 La primera no se ejecutaría, 564 00:30:07,520 --> 00:30:09,520 porque esto sería 565 00:30:09,520 --> 00:30:11,520 falso. 566 00:30:11,520 --> 00:30:13,520 ¿Vale? 567 00:30:13,520 --> 00:30:15,520 Entonces, yo quiero 568 00:30:15,520 --> 00:30:17,520 que la primera vez se ejecute 569 00:30:17,520 --> 00:30:19,520 sí o sí. 570 00:30:19,520 --> 00:30:21,520 Entonces, repito, 571 00:30:21,520 --> 00:30:23,520 he tenido que hacer el truco de inicializar la variable 572 00:30:23,520 --> 00:30:25,520 menos uno, a ver, no es tan grave, 573 00:30:25,520 --> 00:30:27,520 no pasa nada, porque inicializa menos uno. 574 00:30:27,520 --> 00:30:29,520 Lo he hecho para asegurarme 575 00:30:29,520 --> 00:30:31,520 de que entre una primera vez. 576 00:30:31,520 --> 00:30:33,520 Y luego ya la siguiente 577 00:30:33,520 --> 00:30:35,520 entraré o no, ya depende 578 00:30:35,520 --> 00:30:37,520 de lo que tengan ahí, ve, que ahí ya vendrán de fuera. 579 00:30:37,520 --> 00:30:39,520 Bueno, esto está bien, 580 00:30:39,520 --> 00:30:41,520 pero podría ser a lo mejor un poco feo, 581 00:30:41,520 --> 00:30:43,520 porque esto y esto lo tenemos junto, 582 00:30:43,520 --> 00:30:45,520 pero podría estar separado. 583 00:30:45,520 --> 00:30:47,520 A lo mejor estas variables, como se 584 00:30:47,520 --> 00:30:49,520 usan para otra cosa, están declaradas por ahí 585 00:30:49,520 --> 00:30:51,520 arriba, y este bucle, 586 00:30:51,520 --> 00:30:53,520 por lo que sea, llega por ahí abajo, 587 00:30:53,520 --> 00:30:55,520 mil líneas más abajo, por lo que sea. 588 00:30:55,520 --> 00:30:57,520 Entonces, cuando uno está revisando 589 00:30:57,520 --> 00:30:59,520 este código, lo primero que lee es esto. 590 00:30:59,520 --> 00:31:01,520 Y no sabe por qué 591 00:31:01,520 --> 00:31:03,520 se ha declarado menos uno, no lo sabe. 592 00:31:03,520 --> 00:31:05,520 Pues se ha inicializado, 593 00:31:05,520 --> 00:31:07,520 se ha inicializado menos uno porque mil líneas más 594 00:31:07,520 --> 00:31:09,520 abajo lo necesito para asegurarme 595 00:31:09,520 --> 00:31:11,520 de que esto se ejecute al menos una vez. 596 00:31:11,520 --> 00:31:13,520 Hombre, pues eso es feo, 597 00:31:13,520 --> 00:31:15,520 porque a lo mejor el que está manteniendo esto 598 00:31:15,520 --> 00:31:17,520 dice que feo inicializar a menos uno, lo inicializa a cero 599 00:31:17,520 --> 00:31:19,520 y no pasa nada, y resulta que el programa 600 00:31:19,520 --> 00:31:21,520 ha dejado de funcionar porque mil líneas 601 00:31:21,520 --> 00:31:23,520 más abajo ese menos uno tenía un sentido, que era este. 602 00:31:23,520 --> 00:31:25,520 Entonces, 603 00:31:25,520 --> 00:31:27,520 aunque esto está bien, pues uno podría decir, 604 00:31:27,520 --> 00:31:29,520 hay otra forma de hacerlo, y es 605 00:31:29,520 --> 00:31:31,520 un bucle en el cual la primera 606 00:31:31,520 --> 00:31:33,520 se ejecute sí o sí 607 00:31:33,520 --> 00:31:35,520 y las siguientes, dependiendo 608 00:31:35,520 --> 00:31:37,520 ya de la condición, 609 00:31:37,520 --> 00:31:39,520 tengo un bucle, pues sí, que es el famoso 610 00:31:39,520 --> 00:31:41,520 bucle do while, 611 00:31:43,520 --> 00:31:45,520 que para este 612 00:31:45,520 --> 00:31:47,520 ejemplo y para muchos otros, pues viene 613 00:31:47,520 --> 00:31:49,520 muy apañado. 614 00:31:49,520 --> 00:31:51,520 ¿Vale? 615 00:31:57,520 --> 00:31:59,520 ¿Vale? 616 00:32:27,520 --> 00:32:29,520 Vale. 617 00:32:39,520 --> 00:32:41,520 Vamos a ver, pues ¿qué bucle hemos visto nosotros? 618 00:32:41,520 --> 00:32:43,520 ¿Qué sintaxis de bucle? 619 00:32:43,520 --> 00:32:45,520 Hemos visto esto, ¿verdad? 620 00:32:49,520 --> 00:32:51,520 Mientras 621 00:32:51,520 --> 00:32:53,520 se cumple una condición, 622 00:32:57,520 --> 00:32:59,520 hacer 623 00:32:59,520 --> 00:33:01,520 las sentencias que sean. 624 00:33:01,520 --> 00:33:03,520 Esa es la sentencia que hemos visto. 625 00:33:03,520 --> 00:33:05,520 Y sabemos exactamente lo que significa. 626 00:33:05,520 --> 00:33:07,520 Lo primero que hace la máquina virtual es 627 00:33:07,520 --> 00:33:09,520 evaluar condición. ¿Qué es cierta? 628 00:33:09,520 --> 00:33:11,520 Ejecuta una vez esto 629 00:33:11,520 --> 00:33:13,520 y vuelve arriba. Evalúa 630 00:33:13,520 --> 00:33:15,520 condición. ¿Qué sigue siendo cierta? 631 00:33:15,520 --> 00:33:17,520 Ejecuta otra vez esto y vuelve arriba. 632 00:33:17,520 --> 00:33:19,520 Así es como funciona. 633 00:33:19,520 --> 00:33:21,520 Esto en diagrama de flujo, 634 00:33:21,520 --> 00:33:23,520 pues ya hemos visto que era esto. 635 00:33:23,520 --> 00:33:25,520 Aquí una condición, 636 00:33:27,520 --> 00:33:29,520 ¿que se cumple la condición? 637 00:33:33,520 --> 00:33:35,520 Sentencias. 638 00:33:37,520 --> 00:33:39,520 ¿Que no se 639 00:33:39,520 --> 00:33:41,520 cumple? Termino. 640 00:33:41,520 --> 00:33:43,520 Y aquí vuelvo 641 00:33:43,520 --> 00:33:45,520 arriba. Esto es, 642 00:33:45,520 --> 00:33:47,520 ¿verdad? 643 00:33:49,520 --> 00:33:51,520 La documentación en forma de diagramas 644 00:33:51,520 --> 00:33:53,520 de flujo se tiene que hacer familiar 645 00:33:53,520 --> 00:33:55,520 porque se usa muchísimo 646 00:33:55,520 --> 00:33:57,520 cuando te están documentando un proyecto. 647 00:33:57,520 --> 00:33:59,520 Bueno, pues este es el bucle. 648 00:33:59,520 --> 00:34:01,520 Evalúa condición. ¿Que se cumple? 649 00:34:01,520 --> 00:34:03,520 Ejecuto sentencias para arriba. 650 00:34:03,520 --> 00:34:05,520 Evalúa condición. ¿Que se cumple? Ejecuto sentencias para arriba. 651 00:34:05,520 --> 00:34:07,520 ¿Que no se cumple? Para acá. Entonces este bucle, 652 00:34:07,520 --> 00:34:09,520 tal y como está escrito, podría ocurrir 653 00:34:09,520 --> 00:34:11,520 que estas sentencias 654 00:34:11,520 --> 00:34:13,520 no se ejecutarán nunca. 655 00:34:13,520 --> 00:34:15,520 Porque si cuando el programa 656 00:34:15,520 --> 00:34:17,520 viene por aquí, la primera vez 657 00:34:17,520 --> 00:34:19,520 esta ya es falsa, que podría ser, 658 00:34:19,520 --> 00:34:21,520 la primera vez es falsa, sale por aquí. 659 00:34:21,520 --> 00:34:23,520 Y no se ejecutaría nunca. 660 00:34:23,520 --> 00:34:25,520 Podría ocurrir perfectamente. 661 00:34:25,520 --> 00:34:27,520 Si yo quiero que se ejecute al menos una vez, 662 00:34:27,520 --> 00:34:29,520 tendré que hacer aquí algún truco 663 00:34:29,520 --> 00:34:31,520 para asegurarme de que la condición es 664 00:34:31,520 --> 00:34:33,520 cierta en el momento de llegar. 665 00:34:33,520 --> 00:34:35,520 Para asegurarme de que es cierta. 666 00:34:35,520 --> 00:34:37,520 Porque si no, podría ocurrir. 667 00:34:37,520 --> 00:34:39,520 Podría salir directamente. 668 00:34:39,520 --> 00:34:41,520 Entonces, en situaciones 669 00:34:41,520 --> 00:34:43,520 en las cuales yo quiero que el bucle se ejecute 670 00:34:43,520 --> 00:34:45,520 una primera vez, sí o sí, sin evaluar ninguna 671 00:34:45,520 --> 00:34:47,520 condición, que se ejecute una primera vez, 672 00:34:47,520 --> 00:34:49,520 como la de pedir datos, por ejemplo, 673 00:34:49,520 --> 00:34:51,520 y ya las siguientes, dependiendo, 674 00:34:51,520 --> 00:34:53,520 pues me interesaría más 675 00:34:53,520 --> 00:34:55,520 una estructura de bucle de este estilo, 676 00:34:55,520 --> 00:34:57,520 en la cual 677 00:34:57,520 --> 00:34:59,520 primero ejecuto las sentencias 678 00:34:59,520 --> 00:35:01,520 una primera vez. 679 00:35:01,520 --> 00:35:03,520 Y ahora 680 00:35:03,520 --> 00:35:05,520 evalúo la condición. 681 00:35:05,520 --> 00:35:07,520 Que la condición 682 00:35:07,520 --> 00:35:09,520 no se cumple, terminé. 683 00:35:09,520 --> 00:35:11,520 Que se cumple, vuelvo 684 00:35:11,520 --> 00:35:13,520 arriba. 685 00:35:13,520 --> 00:35:15,520 Esta es otra forma de colocar el bucle. 686 00:35:17,520 --> 00:35:19,520 Y sigue siendo un bucle igual. 687 00:35:19,520 --> 00:35:21,520 Esto. Lo primero que hace el programa. 688 00:35:21,520 --> 00:35:23,520 Ejecuta las sentencias 689 00:35:23,520 --> 00:35:25,520 una primera vez. Una primera. 690 00:35:25,520 --> 00:35:27,520 Ni condición 691 00:35:27,520 --> 00:35:29,520 ni nada. Una primera. 692 00:35:29,520 --> 00:35:31,520 Ahora ya sí que evalúa condición. 693 00:35:31,520 --> 00:35:33,520 Que se cumple 694 00:35:33,520 --> 00:35:35,520 una segunda vez. 695 00:35:35,520 --> 00:35:37,520 Luego la segunda, tercera, cuarta, quinta. 696 00:35:37,520 --> 00:35:39,520 Ya sí que dependen de la condición. 697 00:35:39,520 --> 00:35:41,520 Ya sí que es como esto. 698 00:35:41,520 --> 00:35:43,520 Pero la primera no depende. 699 00:35:43,520 --> 00:35:45,520 Esto sería igual 700 00:35:45,520 --> 00:35:47,520 que si yo cambio este código 701 00:35:47,520 --> 00:35:49,520 y le pongo aquí 702 00:35:51,520 --> 00:35:53,520 esto al principio. 703 00:35:53,520 --> 00:35:55,520 Este código y este son iguales. 704 00:35:55,520 --> 00:35:57,520 Porque este primero 705 00:35:57,520 --> 00:35:59,520 ejecuta sentencias 706 00:35:59,520 --> 00:36:01,520 y luego evalúa condición. 707 00:36:01,520 --> 00:36:03,520 Que no se cumple, termina. 708 00:36:03,520 --> 00:36:05,520 Que se cumple, ejecuta otra vez 709 00:36:05,520 --> 00:36:07,520 y vuelve arriba. Que se cumple, 710 00:36:07,520 --> 00:36:09,520 se ejecuta otra vez y vuelve arriba. 711 00:36:09,520 --> 00:36:11,520 Luego este código y este son idénticos. 712 00:36:13,520 --> 00:36:15,520 En ambos, sentencias se ejecutan 713 00:36:15,520 --> 00:36:17,520 una primera vez obligatoriamente. 714 00:36:17,520 --> 00:36:19,520 Aquí porque está fuera del bucle 715 00:36:19,520 --> 00:36:21,520 y aquí por la estructura 716 00:36:21,520 --> 00:36:23,520 que tengo. 717 00:36:23,520 --> 00:36:25,520 Lo que pasa es que eso es más feo que esto, ¿verdad? 718 00:36:25,520 --> 00:36:27,520 Esto está como 719 00:36:27,520 --> 00:36:29,520 más con paz y más bonito. Hacen lo mismo. 720 00:36:29,520 --> 00:36:31,520 Tenéis claro que esto y esto 721 00:36:31,520 --> 00:36:33,520 hacen lo mismo. Una primera ejecución 722 00:36:33,520 --> 00:36:35,520 incondicionalmente 723 00:36:35,520 --> 00:36:37,520 una primera incondicionalmente 724 00:36:37,520 --> 00:36:39,520 y las siguientes dependiendo de la condición. 725 00:36:39,520 --> 00:36:41,520 Ya en bucle. 726 00:36:41,520 --> 00:36:43,520 Bueno, pues como esto es más bonito 727 00:36:43,520 --> 00:36:45,520 que esto, cuando 728 00:36:45,520 --> 00:36:47,520 en el caso en el que nosotros identificamos 729 00:36:47,520 --> 00:36:49,520 y solo en ese caso, que no tienen 730 00:36:49,520 --> 00:36:51,520 por qué ser todos, obviamente. 731 00:36:51,520 --> 00:36:53,520 En el caso en el que identificamos que nuestras 732 00:36:53,520 --> 00:36:55,520 sentencias la primera vez se van a hacer 733 00:36:55,520 --> 00:36:57,520 incondicionalmente, la primera vez 734 00:36:57,520 --> 00:36:59,520 y ahora sí dependiendo de la condición, pues en ese caso 735 00:36:59,520 --> 00:37:01,520 querremos plantar esta estructura, 736 00:37:01,520 --> 00:37:03,520 no esta. 737 00:37:03,520 --> 00:37:05,520 Querremos plantar esta estructura. 738 00:37:05,520 --> 00:37:07,520 Vale, pues si queremos plantar esta estructura 739 00:37:07,520 --> 00:37:09,520 el código que se adapta 740 00:37:09,520 --> 00:37:11,520 no es este. Porque esta estructura 741 00:37:11,520 --> 00:37:13,520 de aquí arriba es esta de aquí, ¿verdad? 742 00:37:13,520 --> 00:37:15,520 O sea, esto que yo he programado aquí, 743 00:37:15,520 --> 00:37:17,520 todo esto que yo he programado aquí 744 00:37:17,520 --> 00:37:19,520 es esto, ¿no? 745 00:37:19,520 --> 00:37:21,520 Primero las sentencias 746 00:37:21,520 --> 00:37:23,520 y si son mil, pues ahí van mil. 747 00:37:23,520 --> 00:37:25,520 Ahora el guay 748 00:37:25,520 --> 00:37:27,520 y otra vez las sentencias dentro. 749 00:37:27,520 --> 00:37:29,520 O sea, esto es esto. 750 00:37:29,520 --> 00:37:31,520 Esto es esto. 751 00:37:31,520 --> 00:37:33,520 Pero, hombre, es más feo porque 752 00:37:33,520 --> 00:37:35,520 imagínate que sentencias son, como he dicho antes, 500. 753 00:37:35,520 --> 00:37:37,520 Pues las pongo aquí 500 754 00:37:37,520 --> 00:37:39,520 y aquí otra vez 500. Es un poquito 755 00:37:39,520 --> 00:37:41,520 feo. Si pudiera 756 00:37:41,520 --> 00:37:43,520 programar esto, mucho mejor. 757 00:37:43,520 --> 00:37:45,520 Vale, no comas, Andrés. 758 00:37:45,520 --> 00:37:47,520 No se come en clase. Venís del recreo, ¿vale? 759 00:37:47,520 --> 00:37:49,520 No se come. Ni en clase, 760 00:37:49,520 --> 00:37:51,520 ni en el trabajo, ni en nada. 761 00:37:51,520 --> 00:37:53,520 De hecho, hasta cuando teletrabaja uno en su casa 762 00:37:53,520 --> 00:37:55,520 le prohíben comer y está en su casa. 763 00:37:57,520 --> 00:37:59,520 De verdad, ¿eh? En serio. 764 00:37:59,520 --> 00:38:01,520 Es que si llegáis a las prácticas 765 00:38:01,520 --> 00:38:03,520 no vais a hablar. 766 00:38:03,520 --> 00:38:05,520 Pero no sabéis la cantidad 767 00:38:05,520 --> 00:38:07,520 de chavales que es que van para afuera en cuanto pueden. 768 00:38:07,520 --> 00:38:09,520 En cuanto pueden echarle. 769 00:38:09,520 --> 00:38:11,520 Porque legalmente pueden. De verdad. Tenéis que adaptaros 770 00:38:11,520 --> 00:38:13,520 al cambio. 771 00:38:13,520 --> 00:38:15,520 Al cambio de no ser un niño. 772 00:38:15,520 --> 00:38:17,520 Y el primer cambio es 773 00:38:17,520 --> 00:38:19,520 tengo hambre, no pasa nada porque coma y mastique. 774 00:38:19,520 --> 00:38:21,520 Pues sí que pasa, que estás en clase. 775 00:38:21,520 --> 00:38:23,520 Tienes que adaptarte a que no puedes hacer lo que quieres y 776 00:38:23,520 --> 00:38:25,520 te lo digo a ti como le diría a cualquiera. 777 00:38:25,520 --> 00:38:27,520 Como le diría al mundo entero. 778 00:38:27,520 --> 00:38:29,520 ¿Vale? Entonces no se come en clase. 779 00:38:33,520 --> 00:38:35,520 Bueno, entonces. 780 00:38:35,520 --> 00:38:37,520 ¿Veis todo esto? 781 00:38:37,520 --> 00:38:39,520 Que esto lo podríamos programar así 782 00:38:39,520 --> 00:38:41,520 con el while. Pero jolín, si puedo 783 00:38:41,520 --> 00:38:43,520 programar esto me queda más bonito. 784 00:38:43,520 --> 00:38:45,520 Pues este es el famoso bucle 785 00:38:45,520 --> 00:38:47,520 que se llama do while. 786 00:38:47,520 --> 00:38:49,520 Y ahora, ¿cómo programaríamos esto 787 00:38:49,520 --> 00:38:51,520 con el do while? 788 00:38:51,520 --> 00:38:53,520 Pues de esta manera. 789 00:38:53,520 --> 00:38:55,520 De esta manera. 790 00:39:03,520 --> 00:39:05,520 Esto de aquí. 791 00:39:07,520 --> 00:39:09,520 Esto. Esto de aquí. 792 00:39:09,520 --> 00:39:11,520 Que repito, hace lo mismo que esto. 793 00:39:11,520 --> 00:39:13,520 Hace lo mismo, ¿verdad? Hace lo mismo. 794 00:39:13,520 --> 00:39:15,520 Pero está más compacto. Esto de aquí 795 00:39:15,520 --> 00:39:17,520 se programaría de esta manera. 796 00:39:17,520 --> 00:39:19,520 Primero se escribe el do. 797 00:39:19,520 --> 00:39:21,520 Luego se ponen 798 00:39:21,520 --> 00:39:23,520 todas las sentencias. 799 00:39:25,520 --> 00:39:27,520 Que se van a repetir. 800 00:39:29,520 --> 00:39:31,520 Y luego, 801 00:39:31,520 --> 00:39:33,520 se pone el while 802 00:39:33,520 --> 00:39:35,520 y la condición que sea 803 00:39:35,520 --> 00:39:37,520 terminada en 804 00:39:37,520 --> 00:39:39,520 punto y coma. Ahí sí terminada 805 00:39:39,520 --> 00:39:41,520 en punto y coma porque es que la sentencia es toda esta. 806 00:39:41,520 --> 00:39:43,520 Bueno, pues esto 807 00:39:43,520 --> 00:39:45,520 es la programación de esto. 808 00:39:45,520 --> 00:39:47,520 Y hace lo mismo, hace lo mismo 809 00:39:47,520 --> 00:39:49,520 que esto de aquí, pero más cortito. 810 00:39:49,520 --> 00:39:51,520 Hace lo mismo que esto. 811 00:39:51,520 --> 00:39:53,520 Hago yo una primera vez las sentencias 812 00:39:53,520 --> 00:39:55,520 y ahora ya me hago un while 813 00:39:55,520 --> 00:39:57,520 con la condición. 814 00:40:05,520 --> 00:40:07,520 ¿Vale? 815 00:40:07,520 --> 00:40:09,520 El código Java de arriba y el código Java 816 00:40:09,520 --> 00:40:11,520 de abajo hacen 817 00:40:11,520 --> 00:40:13,520 lo mismo. Pero hombre, 818 00:40:13,520 --> 00:40:15,520 este queda más bonito, más claro y más corto. 819 00:40:15,520 --> 00:40:17,520 ¿Vale? 820 00:40:17,520 --> 00:40:19,520 Primera ejecución incondicional. 821 00:40:19,520 --> 00:40:21,520 Entramos sí o sí. 822 00:40:21,520 --> 00:40:23,520 Y ya la segunda, tercera, 823 00:40:23,520 --> 00:40:25,520 cuarta, depende de si la condición se cumple. 824 00:40:25,520 --> 00:40:27,520 Primera condición, 825 00:40:27,520 --> 00:40:29,520 perdón, primera ejecución incondicional 826 00:40:29,520 --> 00:40:31,520 y ya la segunda, 827 00:40:31,520 --> 00:40:33,520 tercera y cuarta depende de si se cumple. 828 00:40:33,520 --> 00:40:35,520 ¿Vale? 829 00:40:35,520 --> 00:40:37,520 Pero claro, esto tiene sentido 830 00:40:37,520 --> 00:40:39,520 hacerlo sólo cuando queremos que la 831 00:40:39,520 --> 00:40:41,520 primera ejecución se haga sí o sí. 832 00:40:41,520 --> 00:40:43,520 Pero eso no es en todos los casos, depende de mi problema. 833 00:40:43,520 --> 00:40:45,520 Habrá problemas en los cuales 834 00:40:45,520 --> 00:40:47,520 incluso la primera ejecución 835 00:40:47,520 --> 00:40:49,520 quiero yo que se haga condicionada a una condición, 836 00:40:49,520 --> 00:40:51,520 incluso la primera. Pues entonces no planto 837 00:40:51,520 --> 00:40:53,520 eso. Planto el bucle while 838 00:40:53,520 --> 00:40:55,520 de toda la vida, esto. 839 00:40:55,520 --> 00:40:57,520 ¿Vale? Pero si la primera 840 00:40:57,520 --> 00:40:59,520 se tiene que hacer incondicionalmente 841 00:40:59,520 --> 00:41:01,520 o hago esto o hago lo de arriba, 842 00:41:01,520 --> 00:41:03,520 que es lo mismo. Y lo de arriba está más corto 843 00:41:03,520 --> 00:41:05,520 y mejor. ¿Vale? 844 00:41:09,520 --> 00:41:11,520 Bueno, pues entonces 845 00:41:11,520 --> 00:41:13,520 importante 846 00:41:13,520 --> 00:41:15,520 que distingáis 847 00:41:15,520 --> 00:41:17,520 el while del do while, son 848 00:41:17,520 --> 00:41:19,520 bucles. 849 00:41:19,520 --> 00:41:21,520 La diferencia entre uno es que este, la primera 850 00:41:21,520 --> 00:41:23,520 ejecución es incondicional y la siguiente 851 00:41:23,520 --> 00:41:25,520 depende de la condición. ¿Cuál selecciono? 852 00:41:25,520 --> 00:41:27,520 El que se adapta a la situación que estoy 853 00:41:27,520 --> 00:41:29,520 programando para que el código me quede más bonito. 854 00:41:29,520 --> 00:41:31,520 Ya está, entendiendo lo que hace 855 00:41:31,520 --> 00:41:33,520 cada uno de ellos. Bueno, pues 856 00:41:33,520 --> 00:41:35,520 esta situación nuestra, 857 00:41:35,520 --> 00:41:37,520 de aquí, 858 00:41:37,520 --> 00:41:39,520 sí que se adaptaba 859 00:41:39,520 --> 00:41:41,520 a esa situación. 860 00:41:43,520 --> 00:41:45,520 ¿Vale? 861 00:42:13,520 --> 00:42:15,520 Vale, pues por ejemplo, 862 00:42:15,520 --> 00:42:17,520 aquí teníamos 863 00:42:17,520 --> 00:42:19,520 ese primer bucle, 864 00:42:31,520 --> 00:42:33,520 aquí teníamos 865 00:42:33,520 --> 00:42:35,520 este primer bucle que 866 00:42:35,520 --> 00:42:37,520 era solamente para pedir 867 00:42:37,520 --> 00:42:39,520 dato, si no cumple la condición 868 00:42:39,520 --> 00:42:41,520 pido el siguiente, si no cumple la condición, 869 00:42:41,520 --> 00:42:43,520 entonces este es un ejemplo de situación, 870 00:42:43,520 --> 00:42:45,520 un ejemplo, en las cuales 871 00:42:45,520 --> 00:42:47,520 la primera vez, la primera 872 00:42:47,520 --> 00:42:49,520 ejecución, la queremos hacer 873 00:42:49,520 --> 00:42:51,520 sí o sí, la primera hay que hacerla sí o sí, 874 00:42:51,520 --> 00:42:53,520 porque queremos pedir los datos 875 00:42:53,520 --> 00:42:55,520 una primera vez como poco. 876 00:42:55,520 --> 00:42:57,520 La primera la queremos hacer sí o sí. 877 00:42:57,520 --> 00:42:59,520 Bueno, pues este es un ejemplo 878 00:42:59,520 --> 00:43:01,520 en el cual el do while pega muy bien, 879 00:43:01,520 --> 00:43:03,520 porque queremos una primera vez pedir 880 00:43:03,520 --> 00:43:05,520 datos, y luego ya 881 00:43:05,520 --> 00:43:07,520 la segunda, tercera, cuarta, 882 00:43:07,520 --> 00:43:09,520 ya depende de cómo sean esos datos. 883 00:43:09,520 --> 00:43:11,520 Entonces, este código 884 00:43:11,520 --> 00:43:13,520 se adapta mucho mejor 885 00:43:13,520 --> 00:43:15,520 si lo hacemos con un do while, 886 00:43:15,520 --> 00:43:17,520 y hacemos, 887 00:43:17,520 --> 00:43:19,520 ahora lo borro el de arriba cuando hayamos hecho, 888 00:43:19,520 --> 00:43:21,520 a, pedir 889 00:43:21,520 --> 00:43:23,520 los datos, 890 00:43:27,520 --> 00:43:29,520 y ahora mientras 891 00:43:31,520 --> 00:43:33,520 a sea menor que 0 892 00:43:33,520 --> 00:43:35,520 o 893 00:43:39,520 --> 00:43:41,520 b menor que 0, 894 00:43:41,520 --> 00:43:43,520 mientras uno de los dos 895 00:43:43,520 --> 00:43:45,520 sea menor que 0, y terminas con punto y coma. 896 00:43:47,520 --> 00:43:49,520 Entonces, esto se presta mejor, 897 00:43:49,520 --> 00:43:51,520 haz 898 00:43:51,520 --> 00:43:53,520 una primera ejecución, 899 00:43:53,520 --> 00:43:55,520 cumple la condición de que uno 900 00:43:55,520 --> 00:43:57,520 de los dos es negativo, una segunda, 901 00:43:57,520 --> 00:43:59,520 sigue cumpliendo 902 00:43:59,520 --> 00:44:01,520 que uno es negativo, una tercera, 903 00:44:01,520 --> 00:44:03,520 que ya la segunda 904 00:44:03,520 --> 00:44:05,520 vez los dos son positivos, pues solo lo habrá 905 00:44:05,520 --> 00:44:07,520 hecho una vez. 906 00:44:07,520 --> 00:44:09,520 ¿Vale? Entonces, 907 00:44:09,520 --> 00:44:11,520 ¿y eso qué implica? 908 00:44:11,520 --> 00:44:13,520 Este ya, nos olvidamos 909 00:44:13,520 --> 00:44:15,520 de él, ¿y eso qué implica? 910 00:44:15,520 --> 00:44:17,520 Que es que ahora ya, la a y la b 911 00:44:17,520 --> 00:44:19,520 es que no tienen ni que estar inicializadas, 912 00:44:19,520 --> 00:44:21,520 luego el programa queda 913 00:44:21,520 --> 00:44:23,520 muchísimo más bonito, ya no tienen 914 00:44:23,520 --> 00:44:25,520 ni que estar inicializadas, ¿por qué? 915 00:44:25,520 --> 00:44:27,520 Porque como esta primera vez 916 00:44:27,520 --> 00:44:29,520 es incondicional, cuando la máquina 917 00:44:29,520 --> 00:44:31,520 virtual llega aquí, ya 918 00:44:31,520 --> 00:44:33,520 sabe que a y b van a tener un valor sí o sí, 919 00:44:33,520 --> 00:44:35,520 porque una primera lectura ya se ha 920 00:44:35,520 --> 00:44:37,520 hecho, ya sabe que van a tener un valor 921 00:44:37,520 --> 00:44:39,520 sí o sí, 922 00:44:39,520 --> 00:44:41,520 entonces nos ahorramos esa trampita 923 00:44:41,520 --> 00:44:43,520 de inicializar con 924 00:44:43,520 --> 00:44:45,520 un valor que obliga a la entrada, 925 00:44:45,520 --> 00:44:47,520 y al olvidarnos de esa trampa, el programa 926 00:44:47,520 --> 00:44:49,520 queda más claro, porque si la lectura 927 00:44:49,520 --> 00:44:51,520 está mil líneas más abajo, 928 00:44:51,520 --> 00:44:53,520 el que ve aquí las variables 929 00:44:53,520 --> 00:44:55,520 y las b 930 00:44:55,520 --> 00:44:57,520 inicializadas son un valor raro, si las cambia 931 00:44:57,520 --> 00:44:59,520 es que no pasa nada, porque 932 00:44:59,520 --> 00:45:01,520 es que da igual el valor que tengan a y b, 933 00:45:01,520 --> 00:45:03,520 porque aquí se van a leer de nuevas, 934 00:45:03,520 --> 00:45:05,520 entonces es mucho mejor 935 00:45:05,520 --> 00:45:07,520 esta opción para este código que la anterior, 936 00:45:07,520 --> 00:45:09,520 que las dos funcionan, por supuesto, 937 00:45:09,520 --> 00:45:11,520 pero esta es mejor, 938 00:45:11,520 --> 00:45:13,520 porque para este caso en particular, 939 00:45:13,520 --> 00:45:15,520 para este caso, 940 00:45:15,520 --> 00:45:17,520 la primera ejecución quiero 941 00:45:17,520 --> 00:45:19,520 que se haga sí o sí, 942 00:45:19,520 --> 00:45:21,520 ¿vale? 943 00:45:21,520 --> 00:45:23,520 Que habrá programas en los cuales la primera ejecución no quiero 944 00:45:23,520 --> 00:45:25,520 que se haga sí o sí, pues será el while, 945 00:45:25,520 --> 00:45:27,520 aquí por ejemplo, que hemos hecho un while, 946 00:45:27,520 --> 00:45:29,520 aquí le he pegado 947 00:45:29,520 --> 00:45:31,520 un while, ¿por qué? 948 00:45:31,520 --> 00:45:33,520 Porque imaginaos que 949 00:45:33,520 --> 00:45:35,520 a 950 00:45:41,520 --> 00:45:43,520 que a y b fueran iguales, 951 00:45:43,520 --> 00:45:45,520 ¿vale? 952 00:45:45,520 --> 00:45:47,520 Si a y b son iguales, 953 00:45:47,520 --> 00:45:49,520 si a y b son iguales, 954 00:45:49,520 --> 00:45:51,520 yo en ese caso no quiero que entre nunca, ni una sola vez, 955 00:45:51,520 --> 00:45:53,520 porque entonces la suma 956 00:45:53,520 --> 00:45:55,520 ya es cero, ya es el valor que me tiene que dar, 957 00:45:55,520 --> 00:45:57,520 ¿vale? Pues si son iguales, 958 00:45:57,520 --> 00:45:59,520 ya de partida, esta condición 959 00:45:59,520 --> 00:46:01,520 será true, nunca va a tener que entrar. 960 00:46:01,520 --> 00:46:03,520 Entonces lo que quiero es que distingáis 961 00:46:03,520 --> 00:46:05,520 situaciones, situaciones hay tropecientas 962 00:46:05,520 --> 00:46:07,520 mil diferentes a programar, muchas 963 00:46:07,520 --> 00:46:09,520 de ellas con bucles, algunos 964 00:46:09,520 --> 00:46:11,520 bucles ocurrirá que la 965 00:46:11,520 --> 00:46:13,520 primera ejecución queremos que se haga sí o sí, 966 00:46:13,520 --> 00:46:15,520 sí o sí, pase lo que pase, 967 00:46:15,520 --> 00:46:17,520 y las siguientes ya veremos, pues será un do while, 968 00:46:17,520 --> 00:46:19,520 otros bucles no, otros bucles 969 00:46:19,520 --> 00:46:21,520 harán cosas, y a lo mejor es que ya 970 00:46:21,520 --> 00:46:23,520 la primera de partida no tiene ni que hacerse, 971 00:46:23,520 --> 00:46:25,520 por la propia naturaleza del problema, 972 00:46:25,520 --> 00:46:27,520 es que todo esto depende del problema que estemos resolviendo. 973 00:46:29,520 --> 00:46:31,520 ¿Vale? Pues bueno, 974 00:46:31,520 --> 00:46:33,520 esto en cuanto al do while, vale, pues vamos a 975 00:46:33,520 --> 00:46:35,520 parar aquí.