1 00:00:00,430 --> 00:00:02,270 así que no pasa nada 2 00:00:02,270 --> 00:00:05,070 vale, lo que sí que 3 00:00:05,070 --> 00:00:06,790 no se nos ha olvidado ninguno 4 00:00:06,790 --> 00:00:09,009 es que seguimos con programación 5 00:00:09,009 --> 00:00:10,910 estructurada, aquí todavía no tenemos 6 00:00:10,910 --> 00:00:12,689 ni clases, ni objetos 7 00:00:12,689 --> 00:00:15,189 con lo cual todo ese maravilloso 8 00:00:15,189 --> 00:00:16,609 mundo de posibilidades 9 00:00:16,609 --> 00:00:18,850 que nos habla programación estructurada de objetos 10 00:00:18,850 --> 00:00:20,570 todavía no lo tenemos, pero 11 00:00:20,570 --> 00:00:22,910 poquito a poco, en breve lo tendremos 12 00:00:22,910 --> 00:00:24,609 ¿vale? en cuanto acabemos esto de los bucles 13 00:00:24,609 --> 00:00:25,269 lo tendremos 14 00:00:25,269 --> 00:00:28,929 todavía estamos, por tanto, con programación estructurada 15 00:00:28,929 --> 00:00:30,109 y 16 00:00:30,109 --> 00:00:56,170 Y la programación estructurada ya sabemos que está basada en construir programas que sean una secuencia de sentencias, finita por supuesto, una tras otra, y esas sentencias son exclusivamente asignaciones a variables para incorporar datos, operaciones por supuesto también, 17 00:00:56,170 --> 00:00:58,270 es decir, asignaciones a variables en general 18 00:00:58,270 --> 00:00:59,270 me da igual que venga 19 00:00:59,270 --> 00:01:02,590 que yo los leo del teclado o que yo hago una operación 20 00:01:02,590 --> 00:01:03,729 asignaciones a variables 21 00:01:03,729 --> 00:01:06,370 decisiones para permitir 22 00:01:06,370 --> 00:01:08,390 que mi programa haga una cosa 23 00:01:08,390 --> 00:01:10,870 u otra en función de condiciones 24 00:01:10,870 --> 00:01:12,090 sobre los datos de entrada 25 00:01:12,090 --> 00:01:12,790 normalmente 26 00:01:12,790 --> 00:01:16,810 y nos falta una última sentencia 27 00:01:16,810 --> 00:01:18,810 y ya está, ya no hay más en la aprobación estructurada 28 00:01:18,810 --> 00:01:20,489 que es la sentencia 29 00:01:20,489 --> 00:01:21,230 iterativa 30 00:01:21,230 --> 00:01:24,430 la otra 31 00:01:24,430 --> 00:01:26,049 era la sentencia de decisión 32 00:01:26,049 --> 00:01:31,730 Y la sentencia iterativa que nos permite 33 00:01:31,730 --> 00:01:35,129 Nos permite un bloque de código 34 00:01:35,129 --> 00:01:39,150 Un bloque de código 35 00:01:39,150 --> 00:01:42,209 Hacerlo varias veces 36 00:01:42,209 --> 00:01:47,769 Ejecutar varias veces el mismo bloque de código 37 00:01:47,769 --> 00:01:51,109 Esto hasta ahora no lo podíamos hacer, era imposible 38 00:01:51,109 --> 00:01:55,329 Cada bloque de código, cada sentencia 39 00:01:55,329 --> 00:01:57,750 se ejecutaba solo una vez 40 00:01:57,750 --> 00:01:58,810 o ninguna 41 00:01:58,810 --> 00:02:01,730 ninguna si estaba en una rama de una decisión 42 00:02:01,730 --> 00:02:02,569 que no se cumplía 43 00:02:02,569 --> 00:02:05,569 pero el mayor número de veces que se podría 44 00:02:05,569 --> 00:02:07,230 ejecutar un bloque de código 45 00:02:07,230 --> 00:02:09,449 con lo que nosotros sabemos hasta ahora es una vez 46 00:02:09,449 --> 00:02:11,750 si cae dentro de la rama 47 00:02:11,750 --> 00:02:13,689 cuya condición se hace cierta 48 00:02:13,689 --> 00:02:15,129 si no, cero veces 49 00:02:15,129 --> 00:02:17,729 pero que un mismo bloque de código se ejecute 50 00:02:17,729 --> 00:02:19,930 varias veces, no lo podíamos hacer 51 00:02:19,930 --> 00:02:22,069 ¿es interesante 52 00:02:22,069 --> 00:02:22,830 poder hacerlo? 53 00:02:22,830 --> 00:02:25,810 Pues por supuesto que es interesante 54 00:02:25,810 --> 00:02:28,689 ¿Vale? Porque hay muchísimos programas 55 00:02:28,689 --> 00:02:30,289 Que no son planteables 56 00:02:30,289 --> 00:02:32,650 Si no tenemos un bucle 57 00:02:32,650 --> 00:02:34,590 Por ejemplo 58 00:02:34,590 --> 00:02:37,530 Ejemplo típico 59 00:02:37,530 --> 00:02:39,870 Nos plantean un programa 60 00:02:39,870 --> 00:02:41,789 Que ya directamente me dicen 61 00:02:41,789 --> 00:02:43,810 Solicita un número 62 00:02:43,810 --> 00:02:45,990 Pero ahora ya sí que nos van a pedir 63 00:02:45,990 --> 00:02:46,770 Que validemos 64 00:02:46,770 --> 00:02:49,849 Si el número 65 00:02:49,849 --> 00:02:51,449 Tiene que ser positivo 66 00:02:51,449 --> 00:03:12,229 Si no es positivo, el programa lo vuelve a solicitar una y otra vez. Ejemplito, programa cualquiera que hemos hecho que incorpore ahora una validación de los datos. Una validación en el sentido de que si el usuario no ha introducido un dato válido, te lo está pidiendo una y otra vez. 67 00:03:13,110 --> 00:03:15,370 ¿Cómo podemos hacer eso sin bucles? 68 00:03:16,129 --> 00:03:17,090 Es imposible, ¿no? 69 00:03:17,270 --> 00:03:19,409 No podemos hacer una sentencia de if uno tras otro. 70 00:03:19,849 --> 00:03:20,669 Introduzca dato. 71 00:03:21,030 --> 00:03:22,849 Si dato no válido, anidamos. 72 00:03:23,289 --> 00:03:24,449 Eso no tendría ningún sentido. 73 00:03:26,330 --> 00:03:31,310 Es decir, le diríamos al tío, introduzca el dato. 74 00:03:32,509 --> 00:03:34,330 Leemos el dato, bla, bla, bla. 75 00:03:35,330 --> 00:03:39,849 Si el dato no es válido, lo que sea, 76 00:03:39,849 --> 00:03:42,009 pues entonces 77 00:03:42,009 --> 00:03:44,449 otra vez introduzca 78 00:03:44,449 --> 00:03:48,120 dato, si el 79 00:03:48,120 --> 00:03:50,219 dato no es válido 80 00:03:50,219 --> 00:03:51,939 otra vez introduzca dato 81 00:03:51,939 --> 00:03:53,939 esto cuando acaba, este programa 82 00:03:53,939 --> 00:03:56,280 es implanteable, así es que no se puede resolver 83 00:03:56,280 --> 00:03:57,580 se puede resolver 84 00:03:57,580 --> 00:04:00,139 ¿vale? no se trata de que 85 00:04:00,139 --> 00:04:01,900 un bucle nos permita 86 00:04:01,900 --> 00:04:03,860 repetir un código varias veces 87 00:04:03,860 --> 00:04:06,159 pero si yo no tengo bucles 88 00:04:06,159 --> 00:04:07,960 no pasa nada porque lo que hago es poner 89 00:04:07,960 --> 00:04:09,800 eso varias veces y listo, no 90 00:04:09,800 --> 00:04:12,379 es que de partida, ya por el planteamiento 91 00:04:12,379 --> 00:04:14,120 de los programas, es que hay cosas 92 00:04:14,120 --> 00:04:16,439 que no se pueden hacer si yo no lo hago con un bucle 93 00:04:16,439 --> 00:04:18,199 por ejemplo, esta situación 94 00:04:18,199 --> 00:04:20,360 sencilla, de solicitar 95 00:04:20,360 --> 00:04:21,180 un dato de entrada 96 00:04:21,180 --> 00:04:24,000 y mientras ese dato no sea 97 00:04:24,000 --> 00:04:25,920 válido, pedirlo otra vez 98 00:04:25,920 --> 00:04:28,199 pedirlo otra vez, entonces si yo me olvido 99 00:04:28,199 --> 00:04:29,879 de los bucles, con lo que sabemos ahora 100 00:04:29,879 --> 00:04:31,939 esto me 101 00:04:31,939 --> 00:04:33,360 ¿hasta dónde escribo if? 102 00:04:33,579 --> 00:04:36,560 es imposible, escribiría if hasta el infinito 103 00:04:36,560 --> 00:04:38,339 ¿verdad? no puedo hacer un programa 104 00:04:38,339 --> 00:04:41,000 con infinitos ir, pero tendrían 105 00:04:41,000 --> 00:04:41,959 que tener infinito. 106 00:04:43,000 --> 00:04:44,959 ¿Vale? Entonces, lógicamente 107 00:04:44,959 --> 00:04:46,899 hay muchas cosas que 108 00:04:46,899 --> 00:04:48,899 no se pueden hacer con las sentencias de decisión 109 00:04:48,899 --> 00:04:50,819 exclusivamente, con las sentencias 110 00:04:50,819 --> 00:04:53,019 exclusivamente de decisión. Como este ejemplo 111 00:04:53,019 --> 00:04:53,879 que hemos dicho, ¿verdad? 112 00:05:02,300 --> 00:05:04,639 Es un ejemplito sin más, para motivarlo. 113 00:05:08,139 --> 00:05:09,639 Vale, pues entonces, vamos a asumir 114 00:05:09,639 --> 00:05:11,860 que ahora sí que tenemos un bucle. ¿Cómo podríamos hacer eso? 115 00:05:12,540 --> 00:05:13,399 Pues una vez que yo he 116 00:05:13,399 --> 00:05:15,519 identificado que mi 117 00:05:15,519 --> 00:05:17,819 problema necesita resolverse 118 00:05:17,819 --> 00:05:21,459 haciendo algo muchas veces, pues ya me he dado cuenta 119 00:05:21,459 --> 00:05:22,800 de que es un núcleo lo que necesito. 120 00:05:24,600 --> 00:05:28,699 Primero, como siempre decimos, uno se mira bien su enunciado, 121 00:05:28,959 --> 00:05:30,139 entiende lo que hay que hacer, 122 00:05:30,759 --> 00:05:35,439 si no, se vuelve a reunir con aquel que se lo planteó, 123 00:05:35,519 --> 00:05:37,139 pero tiene que tener muy claro lo que tiene que hacer. 124 00:05:37,740 --> 00:05:40,360 Una vez que lo tenemos claro, ya empezamos a hacer 125 00:05:40,360 --> 00:05:42,220 un diseño mental en la cabeza. 126 00:05:42,920 --> 00:05:44,680 Pues en este caso, solamente esta parte, 127 00:05:45,240 --> 00:05:47,500 introducir un número, 128 00:05:47,819 --> 00:05:52,360 por ejemplo, y mientras ese número no sea positivo, 129 00:05:52,699 --> 00:05:53,839 volverlo a pedir una y otra vez. 130 00:05:54,860 --> 00:05:58,560 Entonces, introduce número, es negativo, vuelve a introducir. 131 00:05:59,180 --> 00:06:01,579 Introduce número, es negativo, vuelve a introducir. 132 00:06:01,740 --> 00:06:03,720 Introduce número, es negativo, vuelve a introducir. 133 00:06:04,379 --> 00:06:05,800 Ese es el problema que nos han planteado. 134 00:06:06,800 --> 00:06:09,019 Entonces, una vez que ya hemos entendido lo que hay que hacer, 135 00:06:09,100 --> 00:06:11,139 ya vamos a este primer diseño mental. 136 00:06:11,360 --> 00:06:15,379 Dicimos, bueno, esto es hacer algo un montón de veces. 137 00:06:16,279 --> 00:06:17,560 Es hacer algo muchas veces. 138 00:06:17,819 --> 00:06:28,540 ¿Cuántas? No lo sé, ese es un segundo problema que ya resolveré, pero por lo menos ya me he dado cuenta de la primera parte importante, que es que este programa consiste en hacer algo muchas veces. 139 00:06:29,680 --> 00:06:42,720 ¿Cuántas? Repito, eso ya es una segunda pregunta, pero la primera es que me identifica que mi programa va a necesitar un bucle, porque voy a hacer algo muchas veces. 140 00:06:42,720 --> 00:06:45,759 Bueno, pues aquí hay algo que voy a hacer un montón de veces 141 00:06:45,759 --> 00:06:48,560 En este caso, ¿qué voy a hacer un montón de veces? 142 00:06:50,139 --> 00:06:51,740 Pedir el número, ¿vale? 143 00:06:52,240 --> 00:06:53,300 Con el mensajito 144 00:06:53,300 --> 00:06:54,740 Y leerlo 145 00:06:54,740 --> 00:06:56,459 Leer el número 146 00:06:56,459 --> 00:06:58,300 Esto lo voy a hacer un montón de veces 147 00:06:58,300 --> 00:07:01,339 Leer el número, leer el número, leer el número 148 00:07:01,339 --> 00:07:02,879 Un montón de veces, ¿vale? 149 00:07:02,920 --> 00:07:05,339 Luego esto se va a convertir en un programa 150 00:07:05,339 --> 00:07:07,339 Que va a estar todo el rato haciendo esto 151 00:07:07,339 --> 00:07:09,019 Esto por aquí 152 00:07:09,019 --> 00:07:12,120 Y otra vez, y otra vez, y otra vez 153 00:07:12,120 --> 00:07:27,500 Esto es un bucle, un trozo de código que yo he identificado que se va a hacer muchas veces y otra y otra y otra, muchas veces. Vale, gracias a que tenemos los bucles, por tanto, no tendré que escribir esto dentro de mis ifelse y ifelse porque no tenía sentido. 154 00:07:27,500 --> 00:07:31,740 Luego, mi programa, mi primera arquitectura mental de programa es esto 155 00:07:31,740 --> 00:07:33,779 Leer el número un montón de veces, un montón de veces 156 00:07:33,779 --> 00:07:37,300 Pero claro, ningún programa puede ser infinito 157 00:07:37,300 --> 00:07:41,379 Entonces, esto no puede ser dar vueltas al lazo todo el rato 158 00:07:41,379 --> 00:07:44,220 ¿Vale? Esto no puede ser dar vueltas al lazo 159 00:07:44,220 --> 00:07:48,279 ¿Vale? ¿Cuándo voy a dejar yo de dar vueltas al lazo? 160 00:07:48,279 --> 00:07:51,899 Bueno, pues en algún sitio tendré que, tendrá que haber 161 00:07:51,899 --> 00:07:54,860 En algún sitio tendrá que estar recogida 162 00:07:54,860 --> 00:08:00,529 una condición, vamos a poner las condiciones 163 00:08:00,529 --> 00:08:05,319 como las ponemos siempre, de alguna manera 164 00:08:05,319 --> 00:08:07,560 tendrá que estar recogida sintácticamente 165 00:08:07,560 --> 00:08:09,839 ahora veremos cómo será la sintaxis 166 00:08:09,839 --> 00:08:13,899 de alguna manera tendrá que estar recogida una condición 167 00:08:13,899 --> 00:08:17,220 que me va a fijar si el bucle 168 00:08:17,220 --> 00:08:19,439 se vuelve a repetir y se vuelve a repetir 169 00:08:19,439 --> 00:08:22,740 y se vuelve a repetir y se vuelve a repetir, de alguna manera tendrá que estar fijada 170 00:08:22,740 --> 00:08:25,639 vale, pues ahora ya me hago la segunda parte 171 00:08:25,639 --> 00:08:28,680 de mi diseño mental, la primera es identificar 172 00:08:28,680 --> 00:08:31,100 que hay algo que lo voy a hacer muchas veces. 173 00:08:31,360 --> 00:08:31,920 Esa es la primera. 174 00:08:32,720 --> 00:08:35,500 La segunda es, ¿y qué es lo que voy a hacer muchas veces? 175 00:08:36,059 --> 00:08:36,740 Pedir el número. 176 00:08:36,980 --> 00:08:37,539 Un montón de veces. 177 00:08:37,639 --> 00:08:38,919 Pedir el número, pedir el número, pedir el número. 178 00:08:39,000 --> 00:08:39,460 Un montón de veces. 179 00:08:39,639 --> 00:08:40,279 Vale, pues ya está. 180 00:08:40,320 --> 00:08:40,919 Un montón de veces. 181 00:08:41,080 --> 00:08:41,940 Y ya la tercera. 182 00:08:44,700 --> 00:08:49,779 ¿De qué depende que yo vuelva una y otra vez a dar la vuelta? 183 00:08:49,919 --> 00:08:52,779 ¿De qué depende de que este círculo se haga otra vez 184 00:08:52,779 --> 00:08:53,860 y otra vez y otra vez? 185 00:08:54,580 --> 00:08:55,659 Depende de una condición. 186 00:08:56,639 --> 00:08:59,120 Bueno, pues ahora ya pienso en la condición. 187 00:08:59,700 --> 00:09:02,840 ¿Qué va a hacer que yo dé otra vuelta más y dé otra vuelta más? 188 00:09:02,919 --> 00:09:06,240 Pues me han dicho que mientras que el número sea negativo, 189 00:09:06,360 --> 00:09:07,700 porque el válido es el positivo, 190 00:09:08,559 --> 00:09:12,460 entonces que yo dé otra vuelta y que dé otra vuelta y que dé otra vuelta 191 00:09:12,460 --> 00:09:14,519 va a depender de que este número sea negativo. 192 00:09:15,220 --> 00:09:16,779 Bueno, pues ya he fijado una condición. 193 00:09:18,379 --> 00:09:22,740 Entonces, cuando el número sea negativo, 194 00:09:22,740 --> 00:09:24,960 Efectivamente yo 195 00:09:24,960 --> 00:09:26,840 Entraré aquí otra vez 196 00:09:26,840 --> 00:09:27,960 ¿Vale? 197 00:09:28,259 --> 00:09:31,419 Y luego volveré a preguntarme la condición 198 00:09:31,419 --> 00:09:33,860 Luego si el número es negativo 199 00:09:33,860 --> 00:09:35,139 Me vendré por aquí 200 00:09:35,139 --> 00:09:37,899 Y volveré a preguntarme la condición 201 00:09:37,899 --> 00:09:39,279 Si sigue siendo negativo 202 00:09:39,279 --> 00:09:40,960 Entraré por aquí 203 00:09:40,960 --> 00:09:42,840 Y volveré a preguntarme la condición 204 00:09:42,840 --> 00:09:44,659 Si sigue siendo negativo 205 00:09:44,659 --> 00:09:46,840 Entraré por aquí y volveré a preguntármela 206 00:09:46,840 --> 00:09:49,000 Pero claro, habrá alguna vez 207 00:09:49,000 --> 00:09:50,820 Que el programa 208 00:09:50,820 --> 00:09:53,200 que el usuario ya meta el número positivo 209 00:09:53,200 --> 00:09:55,539 bueno, pues si 210 00:09:55,539 --> 00:09:57,559 esta condición tiene 211 00:09:57,559 --> 00:09:59,600 dos posibilidades, que se cumpla 212 00:09:59,600 --> 00:10:00,820 o que no se cumpla 213 00:10:00,820 --> 00:10:03,279 si se cumple ya sabemos que 214 00:10:03,279 --> 00:10:05,179 otra vez, otra vez 215 00:10:05,179 --> 00:10:07,440 y si no se cumple, ya el programa 216 00:10:07,440 --> 00:10:09,559 ya sigue, ya el dato está válido 217 00:10:09,559 --> 00:10:11,240 y ya pues lo que sea 218 00:10:11,240 --> 00:10:17,679 la condición es 219 00:10:17,679 --> 00:10:20,019 la contraria 220 00:10:20,019 --> 00:10:22,100 a la que permite la salida 221 00:10:22,100 --> 00:10:24,059 ¿vale? la condición 222 00:10:24,059 --> 00:10:25,980 es condición que mientras se cumpla 223 00:10:25,980 --> 00:10:27,460 vuelves a entrar, vuelves a entrar 224 00:10:27,460 --> 00:10:30,320 luego es la contraria de la salida 225 00:10:30,320 --> 00:10:32,120 la contraria de la que fije 226 00:10:32,120 --> 00:10:32,659 la salida 227 00:10:32,659 --> 00:10:34,279 ¿vale? 228 00:10:36,000 --> 00:10:38,460 entonces, así más o menos es un diagramita 229 00:10:38,460 --> 00:10:39,340 de lo que es un bucle 230 00:10:39,340 --> 00:10:42,519 lo que pasa es que esto, puesto en diagrama de flujo 231 00:10:42,519 --> 00:10:44,419 que es esa herramienta gráfica 232 00:10:44,419 --> 00:10:45,440 que dijimos en su momento 233 00:10:45,440 --> 00:10:48,139 que nos es de ayuda para entender el flujo 234 00:10:48,139 --> 00:10:50,120 de un programa, en diagrama de 235 00:10:50,120 --> 00:10:52,100 flujo, esto se queda un poco 236 00:10:52,100 --> 00:10:54,000 más bonito. Un bucle en diagrama de flujo 237 00:10:54,000 --> 00:10:56,059 sería esto. Mi programita viene 238 00:10:56,059 --> 00:10:57,820 por aquí, haciendo las intenciones que sea. 239 00:10:58,600 --> 00:10:59,899 Aquí tiene una condición. 240 00:11:01,279 --> 00:11:02,019 ¿El número 241 00:11:02,019 --> 00:11:02,940 es menor que cero? 242 00:11:04,019 --> 00:11:06,299 Sí, es menor que cero. 243 00:11:06,740 --> 00:11:07,779 Entro en el bucle 244 00:11:07,779 --> 00:11:10,120 y hago lo que tenga que hacer. En este 245 00:11:10,120 --> 00:11:11,480 caso, pues por ejemplo, 246 00:11:12,200 --> 00:11:13,740 el si soy, leer en. 247 00:11:14,580 --> 00:11:16,039 Y vuelvo otra vez 248 00:11:16,039 --> 00:11:16,759 aquí arriba. 249 00:11:18,139 --> 00:11:24,899 a preguntarme la condición, que no, hemos terminado y el programa ya sigue por aquí 250 00:11:24,899 --> 00:11:33,210 haciendo lo que tenga que hacer, mostrando dato válido, lo que sea, esto ya sí es la 251 00:11:33,210 --> 00:11:42,220 foto de un diagrama de flujo de un bucle, ¿vale? Una condición, si se cumple hago 252 00:11:42,220 --> 00:11:50,059 esto y si no he terminado y sigo, pero claro se distingue mucho de un if, porque hay veces 253 00:11:50,059 --> 00:11:51,360 en algunos casos que 254 00:11:51,360 --> 00:11:53,879 confundís los if y los while 255 00:11:53,879 --> 00:11:58,799 y no, ah bueno 256 00:11:58,799 --> 00:11:59,919 que esto es más fácil así 257 00:11:59,919 --> 00:12:05,269 un if 258 00:12:05,269 --> 00:12:08,500 ya sabemos que es esto 259 00:12:08,500 --> 00:12:11,000 empieza igual, empieza con una condición 260 00:12:11,000 --> 00:12:11,600 la que sea 261 00:12:11,600 --> 00:12:15,200 si se cumple, hago una cosa 262 00:12:15,200 --> 00:12:16,120 lo que sea 263 00:12:16,120 --> 00:12:19,120 si no se cumple, hago otra 264 00:12:19,120 --> 00:12:21,159 o no hago nada 265 00:12:21,159 --> 00:12:22,480 tengo una rama vacía 266 00:12:22,480 --> 00:12:25,179 pero en ambos casos el programa termina 267 00:12:25,179 --> 00:12:43,320 Me da igual en una sentencia de decisión haber ido por esta rama que haber ido por esta, que una vez completado lo que haya que hacer, que podría no ser nada, podría aquí haber nada o podría aquí haber nada, pero sea lo que sea, una vez completado lo que haya que hacer, ya está. 268 00:12:43,320 --> 00:12:45,419 sin embargo el while 269 00:12:45,419 --> 00:12:47,779 también es una condición 270 00:12:47,779 --> 00:12:49,399 el bucle es una condición 271 00:12:49,399 --> 00:12:51,279 que como todas las condiciones 272 00:12:51,279 --> 00:12:53,340 hay dos posibilidades, o se cumple o no, no hay más 273 00:12:53,340 --> 00:12:55,919 si se cumple, hago algo 274 00:12:55,919 --> 00:12:57,600 y a diferencia 275 00:12:57,600 --> 00:12:59,799 del if, que ya me piro 276 00:12:59,799 --> 00:13:01,679 de ahí y se acabó y continuo 277 00:13:01,679 --> 00:13:03,539 con el programa, a diferencia 278 00:13:03,539 --> 00:13:04,980 del if, el bucle 279 00:13:04,980 --> 00:13:07,500 vuelve otra vez a preguntarse 280 00:13:07,500 --> 00:13:09,679 la misma condición, que sigue siendo 281 00:13:09,679 --> 00:13:11,559 cierta, repito esto 282 00:13:11,559 --> 00:13:13,519 una segunda vez y vuelvo 283 00:13:13,519 --> 00:13:15,659 otra vez a preguntármela. ¿Que sigue siendo cierta? 284 00:13:16,879 --> 00:13:17,559 Ejecuto de nuevo 285 00:13:17,559 --> 00:13:18,940 esta y vuelvo otra vez. 286 00:13:19,700 --> 00:13:21,500 Luego esa es la diferencia, que aquí la rama del 287 00:13:21,500 --> 00:13:23,460 sí no vuelve arriba. Se va 288 00:13:23,460 --> 00:13:25,659 y listo. Y la rama 289 00:13:25,659 --> 00:13:27,519 del no, si es que no, se 290 00:13:27,519 --> 00:13:29,580 acabó. Continúo con el resto 291 00:13:29,580 --> 00:13:31,240 del programa. Ya está. No hay más que hacer. 292 00:13:31,980 --> 00:13:35,220 ¿Vale? Entonces 293 00:13:35,220 --> 00:13:37,259 esto nos permite, esta estructura 294 00:13:37,259 --> 00:13:39,159 nos permite algo que yo he 295 00:13:39,159 --> 00:13:41,080 identificado que tengo que hacer varias veces 296 00:13:41,080 --> 00:13:43,120 que realmente se haga muchas veces. 297 00:13:43,320 --> 00:13:46,080 ¿Cuántas? Pues depende 298 00:13:46,080 --> 00:13:47,600 En este ejemplo en concreto 299 00:13:47,600 --> 00:13:49,379 ¿Cuántas? Depende 300 00:13:49,379 --> 00:13:52,539 De las que tarde el usuario meter un número positivo 301 00:13:52,539 --> 00:13:54,200 En una ejecución 302 00:13:54,200 --> 00:13:55,740 Igual lo hace solo una vez 303 00:13:55,740 --> 00:13:58,659 Pero a lo mejor dentro de tres ejecuciones 304 00:13:58,659 --> 00:14:00,820 Tarda siete veces en meter el positivo 305 00:14:00,820 --> 00:14:02,740 Pues siete veces 306 00:14:02,740 --> 00:14:04,340 Que va a estar ahí dando vueltas 307 00:14:04,340 --> 00:14:05,620 ¿Vale? 308 00:14:06,539 --> 00:14:08,279 Cada una de las vueltas 309 00:14:08,279 --> 00:14:10,700 Es lo que llamamos, es una iteración 310 00:14:10,700 --> 00:14:12,399 Del bucle, cada una de las vueltas 311 00:14:12,399 --> 00:14:13,340 es una iteración 312 00:14:13,340 --> 00:14:17,159 y por eso esta es la sentencia 313 00:14:17,159 --> 00:14:18,320 iterativa 314 00:14:18,320 --> 00:14:20,639 que se llama, porque va haciendo iteraciones 315 00:14:20,639 --> 00:14:23,100 esta es la sentencia 316 00:14:23,100 --> 00:14:25,220 iterativa o repetitiva 317 00:14:25,220 --> 00:14:25,840 iterativa 318 00:14:25,840 --> 00:14:31,250 y la programación estructurada 319 00:14:31,250 --> 00:14:33,529 no necesita nada más que esto 320 00:14:33,529 --> 00:14:34,889 las variables 321 00:14:34,889 --> 00:14:36,470 con sus operaciones 322 00:14:36,470 --> 00:14:38,870 esto y esto 323 00:14:38,870 --> 00:14:40,490 ya está, nada más 324 00:14:40,490 --> 00:14:42,929 todo lo demás 325 00:14:42,929 --> 00:14:45,009 son añadidos 326 00:14:45,009 --> 00:14:46,909 para que el programa sea 327 00:14:46,909 --> 00:14:49,590 más bonito, más reutilizable 328 00:14:49,590 --> 00:14:51,269 separarlo en partes 329 00:14:51,269 --> 00:14:53,009 porque si no el programa es 330 00:14:53,009 --> 00:14:55,110 inmanejable, todo lo demás de la 331 00:14:55,110 --> 00:14:57,149 programación está orientado 332 00:14:57,149 --> 00:14:59,330 a esto que os digo, para la algoritmia 333 00:14:59,330 --> 00:15:01,250 ya no hace falta nada más 334 00:15:01,250 --> 00:15:02,850 para cualquier algoritmo 335 00:15:02,850 --> 00:15:04,450 que yo tenga que hacer 336 00:15:04,450 --> 00:15:06,730 lo voy a poder resolver con lo que 337 00:15:06,730 --> 00:15:08,629 hemos visto hasta ahora 338 00:15:08,629 --> 00:15:10,149 incluyendo el bucle, ya está 339 00:15:10,149 --> 00:15:12,370 todo lo demás ya compete 340 00:15:12,370 --> 00:15:14,850 a cómo almaceno los datos, 341 00:15:15,549 --> 00:15:17,029 cómo organizo el programa, 342 00:15:17,909 --> 00:15:20,149 qué variables declaro, 343 00:15:20,649 --> 00:15:22,649 a conocimientos en relación a eso 344 00:15:22,649 --> 00:15:24,529 para que mi programa se convierta en algo 345 00:15:24,529 --> 00:15:28,850 realmente manejable, útil, escalable, modificable, etc. 346 00:15:29,629 --> 00:15:29,850 ¿Vale? 347 00:15:31,190 --> 00:15:34,070 Bueno, pues entonces, ¿cómo ahora ya? 348 00:15:34,309 --> 00:15:35,750 ¿Cómo programamos esto? 349 00:15:35,909 --> 00:15:38,070 Esto ya tiene una sintaxis, lógicamente. 350 00:15:38,529 --> 00:15:40,389 Tiene una sintaxis, pues vamos ya 351 00:15:40,389 --> 00:15:42,110 a verlo 352 00:15:42,110 --> 00:15:44,009 ahí que 353 00:15:44,009 --> 00:15:46,070 se queda más claro y más bonito 354 00:15:46,070 --> 00:15:55,590 ahí, vale 355 00:15:55,590 --> 00:16:00,070 venga 356 00:16:00,070 --> 00:16:14,720 vale 357 00:16:17,460 --> 00:16:20,019 vale, y vosotros decís entonces 358 00:16:20,019 --> 00:16:21,379 si lo decís de verdad 359 00:16:21,379 --> 00:16:24,139 este ejemplo, nos ha quedado 360 00:16:24,139 --> 00:16:25,960 a todos claro que no hay otra forma 361 00:16:25,960 --> 00:16:27,440 de hacerlo que no sea un bucle 362 00:16:27,440 --> 00:16:29,360 ¿vale? porque hombre 363 00:16:29,360 --> 00:16:32,100 un programa que me dicen, lee 10 364 00:16:32,100 --> 00:16:33,559 números, luego haz no sé qué 365 00:16:33,559 --> 00:16:36,080 pues yo podría hacer las 366 00:16:36,080 --> 00:16:37,940 10 lecturas una tras otra, me queda muy feo 367 00:16:37,940 --> 00:16:40,080 si tengo un bucle, pues no lo hago 368 00:16:40,080 --> 00:16:42,200 así, pero podría hacerlo sin bucles 369 00:16:42,200 --> 00:16:43,740 es que este ni siquiera 370 00:16:43,740 --> 00:16:44,480 no podemos 371 00:16:44,480 --> 00:16:47,679 entonces, ah, ya que hemos entendido 372 00:16:47,679 --> 00:16:49,159 que no podemos y que 373 00:16:49,159 --> 00:16:51,240 estructura tendríamos que hacer 374 00:16:51,240 --> 00:16:53,559 pues ahora ya podemos programarlo 375 00:16:53,559 --> 00:16:55,639 venga 376 00:16:55,639 --> 00:17:07,400 eh 377 00:17:07,400 --> 00:17:11,319 el que se ha hecho automáticamente 378 00:17:11,319 --> 00:17:15,930 hay una pestañita 379 00:17:15,930 --> 00:17:16,450 abajo 380 00:17:16,450 --> 00:17:18,710 que puedes marcar 381 00:17:18,710 --> 00:17:21,450 pero mira, gracias a que no lo he descubierto hasta ahora 382 00:17:21,450 --> 00:17:23,829 se lo sabe de memoria seguro perfectísimamente 383 00:17:23,829 --> 00:17:26,069 claro, vale, pues entonces 384 00:17:26,069 --> 00:17:27,910 vamos a hacer este ejemplo 385 00:17:27,910 --> 00:17:49,400 Tenemos nuestro numerito, nuestro escáner para leer del teclado y aquí nuestro numerito N, ¿vale? 386 00:17:49,880 --> 00:18:08,089 Entonces, ¿qué vamos a hacer aquí? Pues vamos a solicitar número hasta que se introduzca uno positivo. 387 00:18:09,089 --> 00:18:17,480 Esto es lo que queremos hacer, ¿vale? 388 00:18:17,480 --> 00:18:19,039 Pues entonces 389 00:18:19,039 --> 00:18:21,539 Ya hemos identificado 390 00:18:21,539 --> 00:18:23,819 Que sentencias queremos hacer un montón de veces 391 00:18:23,819 --> 00:18:24,559 Un montón de veces 392 00:18:24,559 --> 00:18:26,519 Ler número, ler número, ler número 393 00:18:26,519 --> 00:18:28,099 Entonces un montón de veces 394 00:18:28,099 --> 00:18:30,140 Vamos a 395 00:18:30,140 --> 00:18:32,140 Querer hacer esto 396 00:18:32,140 --> 00:18:38,240 Introduzca número 397 00:18:38,240 --> 00:18:40,000 Y ahora 398 00:18:40,000 --> 00:18:46,059 Un montón de veces queremos hacer esto 399 00:18:46,059 --> 00:18:46,980 Vale 400 00:18:46,980 --> 00:18:50,019 Luego esto va a estar dentro del bucle 401 00:18:50,019 --> 00:18:55,650 La sintaxis del bucle 402 00:18:55,650 --> 00:18:56,190 ¿Cuál es? 403 00:18:56,190 --> 00:19:00,190 empieza una de las posibles 404 00:19:00,190 --> 00:19:01,490 la primera que vamos a ver 405 00:19:01,490 --> 00:19:04,150 empieza con while 406 00:19:04,150 --> 00:19:06,009 mientras como no podía ser de otra manera 407 00:19:06,009 --> 00:19:09,549 y aquí es donde va esa condición 408 00:19:09,549 --> 00:19:13,930 que tenemos que seguir perfilando 409 00:19:13,930 --> 00:19:15,690 entonces 410 00:19:15,690 --> 00:19:19,950 todo el código que se repite 411 00:19:19,950 --> 00:19:21,190 dentro del bucle 412 00:19:21,190 --> 00:19:22,750 todo el código que se repite 413 00:19:22,750 --> 00:19:25,190 va entre llaves después del while 414 00:19:25,190 --> 00:19:27,269 Ahí entre llaves 415 00:19:27,269 --> 00:19:28,450 Ahora 416 00:19:28,450 --> 00:19:29,950 ¿Vale? 417 00:19:31,289 --> 00:19:33,410 De nuevo con el mismo matiz de leave 418 00:19:33,410 --> 00:19:36,269 Si lo que se repite fuera solo una sentencia 419 00:19:36,269 --> 00:19:38,670 Puedo quitar las llaves 420 00:19:38,670 --> 00:19:39,329 ¿Vale? 421 00:19:39,650 --> 00:19:41,650 Si lo que se va a repetir es solo una sentencia 422 00:19:41,650 --> 00:19:42,589 Puedo quitarlas 423 00:19:42,589 --> 00:19:45,410 Lo podemos poner aquí 424 00:19:45,410 --> 00:19:49,319 Pesarias 425 00:19:49,319 --> 00:19:51,839 Pesarias 426 00:19:51,839 --> 00:19:53,680 Llaves 427 00:19:53,680 --> 00:19:56,720 Si dentro del bucle 428 00:19:56,720 --> 00:19:59,779 solo hay una sentencia 429 00:19:59,779 --> 00:20:04,839 ¿vale? en este caso hay dos 430 00:20:04,839 --> 00:20:06,380 luego en este caso 431 00:20:06,380 --> 00:20:08,000 obligatorio poner las llaves 432 00:20:08,000 --> 00:20:09,279 de nuevo 433 00:20:09,279 --> 00:20:11,640 sigamos las pautas de 434 00:20:11,640 --> 00:20:14,440 sigamos las pautas de estilo 435 00:20:14,440 --> 00:20:16,500 el while es una sentencia más 436 00:20:16,500 --> 00:20:18,440 que empieza al mismo nivel que están 437 00:20:18,440 --> 00:20:20,660 las otras, como esta de declaración de variables 438 00:20:20,660 --> 00:20:22,640 y 439 00:20:22,640 --> 00:20:23,940 la llave 440 00:20:23,940 --> 00:20:26,420 que abre el código que va dentro del bucle 441 00:20:26,420 --> 00:20:28,420 la pongo justo después del while, la pongo aquí 442 00:20:28,420 --> 00:20:42,059 Y todo lo que va tabulado, no es obligatorio, repito, es una cuestión de estilo, todo lo que va dentro, perdón, lo tabulo por estilo para que se vea claro qué es lo que va dentro del while, para que se vea claro. 443 00:20:42,900 --> 00:20:55,619 Una vez que ya he terminado todo lo que va dentro del bucle, cierro la llave y esa llave la cierro a la misma altura que se abrió el while, porque así queda claro esa llave que código cierra. 444 00:20:55,619 --> 00:20:58,920 como pauta de estilo, repito 445 00:20:58,920 --> 00:21:03,369 vale, entonces 446 00:21:03,369 --> 00:21:05,210 parte de este programa 447 00:21:05,210 --> 00:21:07,210 está hecho, estamos aquí 448 00:21:07,210 --> 00:21:09,089 un montón de veces pidiendo 449 00:21:09,089 --> 00:21:10,450 número, pidiendo número, pidiendo número 450 00:21:10,450 --> 00:21:13,069 y ahora os hacemos la pregunta, me han dicho 451 00:21:13,069 --> 00:21:15,049 que salga cuando 452 00:21:15,049 --> 00:21:16,390 se introduce un número positivo 453 00:21:16,390 --> 00:21:19,309 luego la condición que pongo aquí efectivamente es 454 00:21:19,309 --> 00:21:21,130 la contraria a la 455 00:21:21,130 --> 00:21:22,930 de salida, es decir 456 00:21:22,930 --> 00:21:24,890 la condición que si se cumple 457 00:21:24,890 --> 00:21:27,309 tengo que volver a repetir, tengo que volver a repetir 458 00:21:27,309 --> 00:21:30,470 Aquí pongo la condición que me obliga a repetir 459 00:21:30,470 --> 00:21:33,390 En este caso la condición que me obliga a repetir 460 00:21:33,390 --> 00:21:33,950 ¿Cuál sería? 461 00:21:36,150 --> 00:21:38,089 N menor que 0, el número negativo 462 00:21:38,089 --> 00:21:39,430 ¿Vale? 463 00:21:40,009 --> 00:21:42,609 Luego este programa estaría casi hecho 464 00:21:42,609 --> 00:21:43,710 ¿Vale? 465 00:21:44,430 --> 00:21:44,910 Casi 466 00:21:44,910 --> 00:21:46,809 Solo le falta un matiz 467 00:21:46,809 --> 00:21:49,289 De hecho aquí estamos viendo un error de compilación 468 00:21:49,289 --> 00:21:50,230 ¿Vale? 469 00:21:50,849 --> 00:21:51,950 Claro, tiene sentido 470 00:21:51,950 --> 00:21:53,589 Ahora ya esto se empieza a ejecutar 471 00:21:53,589 --> 00:21:56,910 ¿Y cómo se ejecuta esto ya? 472 00:21:57,309 --> 00:22:04,930 Pues la máquina virtual viene por aquí, variable n, estupendo, le creo un espacio en memoria para n, ahí se queda con valor indefinido porque no le has asignado nada. 473 00:22:05,690 --> 00:22:17,069 Ahora empiezo, lo primero que haces es evaluar la condición, lo primero, si la condición fuera falsa de partida, es que jamás nunca se haría esto, 474 00:22:17,750 --> 00:22:24,730 porque si la condición ya la primera vez que llegamos por aquí ya es falsa, es que ni se haría, saltaríamos por aquí. 475 00:22:24,730 --> 00:22:47,130 Vamos a poner aquí una sentencia, el número introducido es n, ¿vale? Es decir, saldríamos por aquí, si el número ya de partida fuera, si esta condición de partida fuera falsa. 476 00:22:47,130 --> 00:22:50,289 pero si es cierta, entramos 477 00:22:50,289 --> 00:22:51,809 entramos una primera vez 478 00:22:51,809 --> 00:22:53,410 pedimos el número 479 00:22:53,410 --> 00:22:56,009 si el número es negativo 480 00:22:56,009 --> 00:22:57,410 lo pedimos una segunda vez 481 00:22:57,410 --> 00:23:00,029 entonces, ¿cómo se os ocurre 482 00:23:00,029 --> 00:23:01,390 que podemos arreglar este programa? 483 00:23:01,789 --> 00:23:04,230 porque una primera vez queremos entrar sí o sí 484 00:23:04,230 --> 00:23:06,130 la primera petición queremos hacerla 485 00:23:06,130 --> 00:23:11,589 por ejemplo, podríamos 486 00:23:11,589 --> 00:23:13,190 hacer la primera petición 487 00:23:13,190 --> 00:23:14,710 fuera, esta sería una posibilidad 488 00:23:14,710 --> 00:23:17,210 pido el primer número fuera 489 00:23:17,210 --> 00:23:19,089 introduzca número 490 00:23:19,089 --> 00:23:20,509 si el número es negativo 491 00:23:20,509 --> 00:23:23,269 Ya me va a pedir el segundo otra vez 492 00:23:23,269 --> 00:23:25,089 Si el número es positivo 493 00:23:25,089 --> 00:23:26,269 Ya de partida no entra 494 00:23:26,269 --> 00:23:28,910 Luego este arreglo está bien 495 00:23:28,910 --> 00:23:29,789 ¿Vale? 496 00:23:30,029 --> 00:23:31,950 De hecho si lo ejecutamos 497 00:23:31,950 --> 00:23:36,799 Pues aquí se queda 498 00:23:36,799 --> 00:23:40,119 Menos 6, menos 6 499 00:23:40,119 --> 00:23:41,920 Menos 3, 4 500 00:23:41,920 --> 00:23:43,539 Ahí se queda 501 00:23:43,539 --> 00:23:44,900 Bla, bla, bla, encajado 502 00:23:44,900 --> 00:23:46,460 Vale, este sería un arreglo 503 00:23:46,460 --> 00:23:49,180 Aquí lo único, está bien 504 00:23:49,180 --> 00:23:51,759 Lo único es que estamos duplicando código 505 00:23:51,759 --> 00:23:53,160 Escribiendo esto dos veces 506 00:23:53,160 --> 00:23:57,000 Si os ocurre algún otro arreglo 507 00:23:57,000 --> 00:24:04,009 Claro, vamos a inicializar n 508 00:24:04,009 --> 00:24:06,269 Con un número negativo cualquiera 509 00:24:06,269 --> 00:24:10,180 Entonces, con un número negativo cualquiera 510 00:24:10,180 --> 00:24:13,559 De partida esta condición es falsa 511 00:24:13,559 --> 00:24:15,099 De partida es falsa 512 00:24:15,099 --> 00:24:18,119 Con lo cual la primera vez va a entrar sí o sí 513 00:24:18,119 --> 00:24:19,779 La primera vez va a entrar 514 00:24:19,779 --> 00:24:23,440 Y ya las siguientes dependerá 515 00:24:23,440 --> 00:24:24,559 De si el número es positivo o no 516 00:24:24,559 --> 00:24:38,670 Sí, puedes meter aquí un if 517 00:24:38,670 --> 00:24:41,509 Y cambiar salir a true o false 518 00:24:41,509 --> 00:24:45,769 Claro, sí, pero esa variable booleana 519 00:24:45,769 --> 00:24:47,589 Si tú pones aquí, tú te refieres a esto 520 00:24:47,589 --> 00:24:49,869 Poner aquí un boolean 521 00:24:49,869 --> 00:24:53,369 Salir, que de partida es false 522 00:24:53,369 --> 00:24:55,349 Y ahora aquí 523 00:24:55,349 --> 00:24:56,670 A este boolean 524 00:24:56,670 --> 00:24:59,730 Sí, ya, pero lo tendrías que cambiar 525 00:24:59,730 --> 00:25:00,490 De valor dentro 526 00:25:00,490 --> 00:25:03,369 Salir, y ahora aquí salir 527 00:25:03,390 --> 00:25:05,730 Y tendrás que volverla a actualizar. 528 00:25:06,329 --> 00:25:10,990 Número mayor o igual que cero. 529 00:25:12,089 --> 00:25:12,269 ¿Vale? 530 00:25:12,289 --> 00:25:13,069 Te refieres a esto. 531 00:25:13,930 --> 00:25:14,109 ¿No? 532 00:25:14,509 --> 00:25:14,829 Sí. 533 00:25:15,750 --> 00:25:19,970 Pero bueno, que si algún código es largo, 534 00:25:20,109 --> 00:25:21,829 necesitas dejar más claro. 535 00:25:22,009 --> 00:25:24,529 Pero aquí en realidad estamos añadiendo una complejidad. 536 00:25:25,029 --> 00:25:25,750 Hacer un boolean. 537 00:25:26,109 --> 00:25:28,509 Para poner aquí el boolean y aquí actualizarlo cada vez. 538 00:25:28,509 --> 00:25:31,170 Estamos añadiendo que quizá en este caso es innecesaria. 539 00:25:31,869 --> 00:25:31,910 ¿Vale? 540 00:25:31,910 --> 00:25:34,609 o sea, guardar la condición en un boolean aparte siempre 541 00:25:34,609 --> 00:25:37,109 a veces puede dejar el programa más claro 542 00:25:37,109 --> 00:25:40,849 si este bucle, por ejemplo, es larguísimo 543 00:25:40,849 --> 00:25:44,190 puedes perder la noción de por qué necesitas 544 00:25:44,190 --> 00:25:46,309 que esto sea menor que cero, entonces pues le puedes dar 545 00:25:46,309 --> 00:25:49,769 pero si no, aparte que 546 00:25:49,769 --> 00:25:52,670 de esta manera enmascaras parte de la información 547 00:25:52,670 --> 00:25:56,250 porque yo veo este código de partida, yo estoy viendo el programa de otro 548 00:25:56,250 --> 00:25:57,390 y veo while salir 549 00:25:57,390 --> 00:26:01,130 y para entender por qué este código sale 550 00:26:01,130 --> 00:26:02,849 tengo que mirar todo dentro del while 551 00:26:02,849 --> 00:26:05,289 a ver qué valor le doy a salir 552 00:26:05,289 --> 00:26:07,890 sin embargo, si pongo aquí la condición 553 00:26:07,890 --> 00:26:10,650 yo de partida veo este bucle 554 00:26:10,650 --> 00:26:11,990 cuándo va a salir y cuándo no 555 00:26:11,990 --> 00:26:14,569 entonces, bueno, dependiendo de la situación 556 00:26:14,569 --> 00:26:16,970 pues a lo mejor puede ser más claro, más legible 557 00:26:16,970 --> 00:26:18,549 ¿vale? depende de la situación 558 00:26:18,549 --> 00:26:21,289 ahora mismo en particular, para no complicarlo 559 00:26:21,289 --> 00:26:24,740 pues no vamos a... 560 00:26:24,740 --> 00:26:25,019 ¿vale? 561 00:26:33,519 --> 00:26:34,000 vale 562 00:26:34,000 --> 00:26:39,529 vale 563 00:26:39,529 --> 00:26:41,569 bueno, pues entonces 564 00:26:41,569 --> 00:26:44,930 podemos poner un valor negativo 565 00:26:44,930 --> 00:26:47,009 y ya está, forzamos la primera iteración 566 00:26:47,009 --> 00:26:48,890 vale 567 00:26:48,890 --> 00:26:50,369 luego, el bucle 568 00:26:50,369 --> 00:26:52,589 es única y exclusivamente 569 00:26:52,589 --> 00:26:53,549 esto 570 00:26:53,549 --> 00:26:56,569 el while con la condición 571 00:26:56,569 --> 00:26:58,710 de la contraria 572 00:26:58,710 --> 00:27:00,109 a la salida, o lo que es lo mismo 573 00:27:00,109 --> 00:27:01,470 la condición que hace que vuelvas 574 00:27:01,470 --> 00:27:04,509 que puede ser muy pequeña o puede ser muy grande 575 00:27:04,509 --> 00:27:05,849 depende de lo que haga mi programa 576 00:27:05,849 --> 00:27:08,549 ¿vale? y luego ya 577 00:27:08,549 --> 00:27:10,309 dentro lo que yo quiero que se repita 578 00:27:10,309 --> 00:27:12,710 cuando la condición se hace 579 00:27:12,710 --> 00:27:13,869 falsa, se acabó 580 00:27:13,869 --> 00:27:15,289 y ya está 581 00:27:15,289 --> 00:27:21,579 en este 582 00:27:21,579 --> 00:27:23,720 en este caso en particular sí, porque 583 00:27:23,720 --> 00:27:25,799 así no duplico código 584 00:27:25,799 --> 00:27:27,740 aquí arriba, ¿vale? todo depende 585 00:27:27,740 --> 00:27:30,019 de la situación, una vez que conocemos las herramientas 586 00:27:30,019 --> 00:27:32,180 yo en este caso la inicializaría 587 00:27:32,180 --> 00:27:34,039 a un número que ya fuerza la primera 588 00:27:34,039 --> 00:27:35,799 claro, porque en este 589 00:27:35,799 --> 00:27:37,960 ejemplo en particular, yo una primera 590 00:27:37,960 --> 00:27:46,180 vez tengo que entrar sí o sí, ¿vale? Tengo que entrar. Vale, entonces, ¿por qué he puesto este 591 00:27:46,180 --> 00:27:53,539 ejemplo? Para comparar esta versión de bucle con otra sintaxis posible que tiene, que es muy 592 00:27:53,539 --> 00:28:00,559 parecida pero es igual, que es la sintaxis do while. Vale, entonces, esta sintaxis y lo que 593 00:28:00,559 --> 00:28:01,920 hace, está entendida, ¿no? 594 00:28:03,339 --> 00:28:04,480 Y este 595 00:28:04,480 --> 00:28:06,519 bucle, si de partida 596 00:28:06,519 --> 00:28:08,740 la condición fuera falsa, 597 00:28:09,319 --> 00:28:10,619 que podría ocurrir, 598 00:28:10,740 --> 00:28:12,539 esto nunca se ejecutaría. Luego 599 00:28:12,539 --> 00:28:14,579 un bucle while puede ocurrir que lo que tenga dentro 600 00:28:14,579 --> 00:28:16,519 nunca se haga, ¿vale? Puede ocurrir que 601 00:28:16,519 --> 00:28:18,599 nunca se haga. De hecho, 602 00:28:18,700 --> 00:28:20,559 en esta solución que teníamos aquí, sacando 603 00:28:20,559 --> 00:28:21,819 este código fuera, 604 00:28:22,859 --> 00:28:24,680 si metemos el número positivo 605 00:28:24,680 --> 00:28:26,480 de partida, lo que hay aquí 606 00:28:26,480 --> 00:28:27,980 dentro no se va a ejecutar jamás. 607 00:28:27,980 --> 00:28:30,819 luego lo que hay dentro de un while puede que no se ejecute nunca 608 00:28:30,819 --> 00:28:35,359 si la primera vez esta condición es falsa 609 00:28:35,359 --> 00:28:37,019 vale, pero 610 00:28:37,019 --> 00:28:40,140 hay programas, situaciones 611 00:28:40,140 --> 00:28:42,920 hay mil posibilidades de programas a solucionar 612 00:28:42,920 --> 00:28:47,180 en los cuales por la naturaleza del problema 613 00:28:47,180 --> 00:28:50,359 resolver nosotros queremos que una primera vez 614 00:28:50,359 --> 00:28:51,900 se haga sí o sí 615 00:28:51,900 --> 00:28:54,759 incondicionalmente, sí o sí 616 00:28:54,759 --> 00:28:57,039 sin mirar condición ni historias 617 00:28:57,039 --> 00:29:00,559 y luego ya las siguientes dependiendo de la condición. 618 00:29:01,039 --> 00:29:02,019 Es una situación típica. 619 00:29:02,619 --> 00:29:03,880 Por ejemplo, en casos como este. 620 00:29:04,599 --> 00:29:07,299 Cuando hacemos un menú de datos de entrada, 621 00:29:08,220 --> 00:29:09,500 mostrar el menú y leer la opción, 622 00:29:09,759 --> 00:29:11,740 una primera vez la queremos sí o sí. 623 00:29:13,039 --> 00:29:13,240 ¿Vale? 624 00:29:13,859 --> 00:29:16,299 Entonces, vamos a ponerlo aquí. 625 00:29:21,240 --> 00:29:23,759 Hay situaciones, problemas o programas 626 00:29:23,759 --> 00:29:27,819 en las cuales necesitamos 627 00:29:27,819 --> 00:29:31,640 Necesitamos 628 00:29:31,640 --> 00:29:33,940 Que la 629 00:29:33,940 --> 00:29:35,359 Primera 630 00:29:35,359 --> 00:29:37,279 Ejecución 631 00:29:37,279 --> 00:29:39,059 Se haga 632 00:29:39,059 --> 00:29:42,680 Incondicionalmente 633 00:29:42,680 --> 00:29:46,619 Que se haga sí o sí 634 00:29:46,619 --> 00:29:47,859 Que se haga siempre 635 00:29:47,859 --> 00:29:49,440 La primera ejecución del bucle 636 00:29:49,440 --> 00:29:51,420 Y ya las demás dependiendo 637 00:29:51,420 --> 00:29:54,859 La primera se haga sí o sí 638 00:29:54,859 --> 00:30:00,680 si, ahora vemos la sintaxis 639 00:30:00,680 --> 00:30:02,539 ¿vale? pero por ejemplo 640 00:30:02,539 --> 00:30:04,480 podría ser como esta, en este 641 00:30:04,480 --> 00:30:05,980 bucle de pedir datos 642 00:30:05,980 --> 00:30:08,680 sabemos que es un bucle, tiene que ser un bucle porque se va a hacer 643 00:30:08,680 --> 00:30:10,500 varias veces, ¿vale? pero 644 00:30:10,500 --> 00:30:12,700 también hemos visto que la primera vez 645 00:30:12,700 --> 00:30:14,680 de la 646 00:30:14,680 --> 00:30:16,680 primera vez, esto se 647 00:30:16,680 --> 00:30:18,579 tiene que hacer, esta se tiene 648 00:30:18,579 --> 00:30:20,640 que hacer, porque el primer 649 00:30:20,640 --> 00:30:21,720 número lo tienes que pedir 650 00:30:21,720 --> 00:30:24,599 entonces, para 651 00:30:24,599 --> 00:30:26,660 forzar a que la primera vez se haga, hemos tenido 652 00:30:26,660 --> 00:30:28,440 que hacer la trampa, entre comillas, 653 00:30:29,180 --> 00:30:30,700 de por esto negativo. Hemos tenido que 654 00:30:30,700 --> 00:30:32,140 hacer esa trampa, entre comillas, 655 00:30:32,740 --> 00:30:34,779 para forzar la primera iteración. 656 00:30:35,559 --> 00:30:36,579 ¿Vale? Que no pasa nada, 657 00:30:36,680 --> 00:30:38,740 no pasa nada, es lo más natural del mundo y lo más 658 00:30:38,740 --> 00:30:40,960 habitual. Fuerzo la primera iteración. 659 00:30:41,619 --> 00:30:42,759 Y a las segundas 660 00:30:42,759 --> 00:30:44,819 vendrán dadas, por si este numerito 661 00:30:44,819 --> 00:30:46,319 ya es negativo o no. 662 00:30:47,200 --> 00:30:48,539 Vale, pero, bueno, 663 00:30:49,079 --> 00:30:50,700 precisamente, para no tener 664 00:30:50,700 --> 00:30:52,319 que hacer estas trampitas, 665 00:30:52,319 --> 00:30:56,259 existe otra sintaxis del while 666 00:30:56,259 --> 00:30:57,700 otra sintaxis del bucle 667 00:30:57,700 --> 00:31:00,400 que fuerza a que la primera 668 00:31:00,400 --> 00:31:01,759 iteración se haga sí o sí 669 00:31:01,759 --> 00:31:04,180 que es la sintaxis do while 670 00:31:04,180 --> 00:31:11,230 ¿cómo es la sintaxis del bucle 671 00:31:11,230 --> 00:31:13,309 do while? primero se escribe 672 00:31:13,309 --> 00:31:15,150 do, se abren ahí 673 00:31:15,150 --> 00:31:15,930 las llavecitas 674 00:31:15,930 --> 00:31:18,970 y la condición se pone después 675 00:31:18,970 --> 00:31:20,470 al final 676 00:31:20,470 --> 00:31:26,049 y ya terminamos aquí en punto y coma 677 00:31:26,049 --> 00:31:29,670 y ahora esto que 678 00:31:29,670 --> 00:31:31,289 tenía que hacer lo meto aquí dentro 679 00:31:31,289 --> 00:31:37,900 Vale, pues esto es un bucle igualmente 680 00:31:37,900 --> 00:31:44,839 Esto es una sintaxis 681 00:31:44,839 --> 00:31:45,579 De bucle igual 682 00:31:45,579 --> 00:31:48,359 ¿Qué es lo que se repite? Esto 683 00:31:48,359 --> 00:31:50,779 ¿Qué es lo único que cambia? 684 00:31:51,460 --> 00:31:52,559 Lo único que cambia es que 685 00:31:52,559 --> 00:31:54,140 La máquina virtual viene por aquí, pam, pam 686 00:31:54,140 --> 00:31:56,740 Lo primero que hace es 687 00:31:56,740 --> 00:31:58,660 Hacer una ejecución, sí o sí 688 00:31:58,660 --> 00:31:59,839 Es lo primero que hace 689 00:31:59,839 --> 00:32:02,859 Y a partir de ahí ya empieza a mirar la condición 690 00:32:02,859 --> 00:32:04,619 ¿Esto es negativo? 691 00:32:05,079 --> 00:32:07,059 Vuelvo arriba y ejecuto 692 00:32:07,059 --> 00:32:08,660 ¿Sigue siendo negativo? 693 00:32:08,660 --> 00:32:10,299 vuelvo arriba y ejecuto 694 00:32:10,299 --> 00:32:12,900 pero la primera se hace sí o sí 695 00:32:12,900 --> 00:32:14,619 y las siguientes ya 696 00:32:14,619 --> 00:32:18,000 depende de la condición 697 00:32:18,000 --> 00:32:22,599 aquí se termina con un punto y coma, etc. 698 00:32:26,339 --> 00:32:26,680 entonces 699 00:32:26,680 --> 00:32:29,559 el bucle do while se prestaría mejor 700 00:32:29,559 --> 00:32:30,700 a este ejemplito nuestro 701 00:32:30,700 --> 00:32:33,660 porque la primera petición 702 00:32:33,660 --> 00:32:34,819 la va a hacer sí o sí 703 00:32:34,819 --> 00:32:37,000 y ya las siguientes 704 00:32:37,000 --> 00:32:38,940 pues dependerá 705 00:32:38,940 --> 00:32:41,000 dependerá de si el número es negativo o no 706 00:32:41,000 --> 00:32:57,599 vale, entonces yo aquí la variable 707 00:32:57,599 --> 00:32:59,559 n, no tendría 708 00:32:59,559 --> 00:33:01,039 por qué inicializarla 709 00:33:01,039 --> 00:33:03,420 vale, o sea 710 00:33:03,420 --> 00:33:05,259 de hecho voy a comentar todo lo anterior 711 00:33:05,259 --> 00:33:07,240 aunque para 712 00:33:07,240 --> 00:33:08,960 comprobarlo 713 00:33:08,960 --> 00:33:11,599 comento aquí 714 00:33:11,599 --> 00:33:13,160 la inicialización de la n 715 00:33:13,160 --> 00:33:18,329 y comento este código 716 00:33:18,329 --> 00:33:20,990 vale 717 00:33:20,990 --> 00:33:23,630 vale, entonces tengo 718 00:33:23,630 --> 00:33:25,549 mi variable n sin inicializar 719 00:33:25,549 --> 00:33:26,529 limpia 720 00:33:26,529 --> 00:33:30,349 y el do while no me da ningún error de compilación 721 00:33:30,349 --> 00:33:32,190 ¿por qué? 722 00:33:32,450 --> 00:33:34,849 porque la primera vez que llega la condición 723 00:33:34,849 --> 00:33:37,390 ha llegado después de una primera ejecución 724 00:33:37,390 --> 00:33:39,710 esta ejecución se ha hecho una primera vez 725 00:33:39,710 --> 00:33:44,289 con lo cual obligatoriamente la variable n tiene que tener un valor 726 00:33:44,289 --> 00:33:46,789 porque eso se ha hecho una vez obligatorio 727 00:33:46,789 --> 00:33:50,849 con lo cual la primera vez que evalúo la condición 728 00:33:50,849 --> 00:33:52,869 n ya tiene algo seguro 729 00:33:52,869 --> 00:33:58,299 luego esto pega muchísimo más 730 00:33:58,299 --> 00:34:01,220 Para programas 731 00:34:01,220 --> 00:34:02,940 Que te muestren un menú de opciones 732 00:34:02,940 --> 00:34:05,880 Pega mucho más 733 00:34:05,880 --> 00:34:14,360 Voy a dejarlo como estaba 734 00:34:14,360 --> 00:34:18,000 ¿Vale? 735 00:34:18,980 --> 00:34:20,019 Podemos hacer la parte del while 736 00:34:20,019 --> 00:34:25,699 Ese sería el do while 737 00:34:25,699 --> 00:34:28,059 ¿Y la variable, la n, la has declarado? 738 00:34:28,559 --> 00:34:30,760 La n la he declarado antes 739 00:34:30,760 --> 00:34:33,559 Y puede no tener valor 740 00:34:33,559 --> 00:34:36,320 Tú prueba a hacer este programa 741 00:34:36,320 --> 00:34:37,659 Con una n delante 742 00:34:37,659 --> 00:34:39,840 sin ningún valor inicializado 743 00:34:39,840 --> 00:34:41,539 y no hay ningún problema 744 00:34:41,539 --> 00:34:43,739 porque como lo primero que hace es esto 745 00:34:43,739 --> 00:34:45,260 ya aquí recibe su primer valor 746 00:34:45,260 --> 00:34:47,659 claro, la inicialización de n 747 00:34:47,659 --> 00:34:49,719 se hace en la primera 748 00:34:49,719 --> 00:34:51,360 iteración del bucle, en la primera 749 00:34:51,360 --> 00:34:53,739 y como esa primera 750 00:34:53,739 --> 00:34:55,219 iteración se hace sí o sí 751 00:34:55,219 --> 00:34:57,699 pues no hay duda, vamos a llegar 752 00:34:57,699 --> 00:34:59,619 a la condición con n con un primer 753 00:34:59,619 --> 00:35:01,599 valor, el de la primera lectura 754 00:35:01,599 --> 00:35:03,019 ¿vale? 755 00:35:10,250 --> 00:35:10,769 esto 756 00:35:10,769 --> 00:35:26,969 Un segundito y paramos 757 00:35:26,969 --> 00:35:31,239 Vale 758 00:35:31,239 --> 00:35:38,280 Es decir, el while es esto 759 00:35:38,280 --> 00:35:41,889 Yo tengo mi condición 760 00:35:41,889 --> 00:35:43,650 Que es lo primero que se hace 761 00:35:43,650 --> 00:35:45,429 Si se cumple 762 00:35:45,429 --> 00:35:47,130 Hago el código que sea 763 00:35:47,130 --> 00:35:49,949 Y vuelvo arriba otra vez 764 00:35:49,949 --> 00:35:54,829 Que no se cumple 765 00:35:54,829 --> 00:35:56,190 Me voy 766 00:35:56,190 --> 00:36:00,530 este es el while a secas 767 00:36:00,530 --> 00:36:01,949 que hemos visto 768 00:36:01,949 --> 00:36:03,409 el while condición 769 00:36:03,409 --> 00:36:05,190 sentencias 770 00:36:05,190 --> 00:36:06,929 y el do 771 00:36:06,929 --> 00:36:10,809 sentencias while condición 772 00:36:10,809 --> 00:36:13,869 esta es la condición que sea 773 00:36:13,869 --> 00:36:16,110 la condición que sea, sería esto 774 00:36:16,110 --> 00:36:17,670 primero 775 00:36:17,670 --> 00:36:20,130 ejecuto el código que sea 776 00:36:20,130 --> 00:36:21,710 lo primero de todo 777 00:36:21,710 --> 00:36:22,730 y ahora ya 778 00:36:22,730 --> 00:36:25,230 me planteo la condición 779 00:36:25,230 --> 00:36:27,929 que se cumple 780 00:36:27,929 --> 00:36:30,230 me voy 781 00:36:30,230 --> 00:36:30,690 arriba 782 00:36:30,690 --> 00:36:33,110 que no se cumple 783 00:36:33,110 --> 00:36:34,809 sigo por abajo 784 00:36:34,809 --> 00:36:37,570 luego ese es el while 785 00:36:37,570 --> 00:36:38,929 y este es el do while 786 00:36:38,929 --> 00:36:43,739 que no funcionan exactamente 787 00:36:43,739 --> 00:36:45,380 igual, los dos son bucles 788 00:36:45,380 --> 00:36:46,940 que hacen muchas veces algo 789 00:36:46,940 --> 00:36:49,679 tienen una pequeña diferencia 790 00:36:49,679 --> 00:36:50,960 que en el do while 791 00:36:50,960 --> 00:36:53,860 lo que se ejecuta una primera 792 00:36:53,860 --> 00:36:55,059 vez se hace sí o sí 793 00:36:55,059 --> 00:36:57,840 y ya las siguientes dependen de la condición 794 00:36:57,840 --> 00:37:00,679 porque si la condición la primera vez es falsa 795 00:37:00,679 --> 00:37:02,980 solo se ejecuta una vez y luego ya me piro 796 00:37:02,980 --> 00:37:04,719 se ejecuta una vez y me piro 797 00:37:04,719 --> 00:37:06,659 pero en este bucle 798 00:37:06,659 --> 00:37:08,780 si la condición es falsa 799 00:37:08,780 --> 00:37:11,000 ya es que no se va a ejecutar nunca 800 00:37:11,000 --> 00:37:11,639 ninguna 801 00:37:11,639 --> 00:37:14,539 si es falsa como es lo primero que miro 802 00:37:14,539 --> 00:37:15,639 al ser lo primero 803 00:37:15,639 --> 00:37:18,360 si es falsa nunca se va a ejecutar esto 804 00:37:18,360 --> 00:37:20,179 sin embargo en este caso 805 00:37:20,179 --> 00:37:21,400 si la condición es falsa 806 00:37:21,400 --> 00:37:23,219 la primera vez se ejecuta 807 00:37:23,219 --> 00:37:24,860 y ya las siguientes no 808 00:37:24,860 --> 00:37:27,380 Entonces dependiendo de mi funcionamiento 809 00:37:27,380 --> 00:37:29,059 De programa, lo que yo quiera hacer 810 00:37:29,059 --> 00:37:31,500 Pues pega más una o pega más la otra 811 00:37:31,500 --> 00:37:32,719 ¿Vale? 812 00:37:33,340 --> 00:37:34,579 Queda más bonito uno o la otra 813 00:37:34,579 --> 00:37:36,980 Todo lo podemos hacer con las dos 814 00:37:36,980 --> 00:37:38,900 Pero habrá que hacer retoques 815 00:37:38,900 --> 00:37:40,679 Lo que hemos hecho antes del menú 816 00:37:40,679 --> 00:37:44,280 Se adaptaba mejor esto 817 00:37:44,280 --> 00:37:45,980 Muestro menú, leo opción 818 00:37:45,980 --> 00:37:47,139 No es válida 819 00:37:47,139 --> 00:37:48,760 Muestro menú, leo opción 820 00:37:48,760 --> 00:37:49,500 No es válida 821 00:37:49,500 --> 00:37:50,440 Muestro menú, leo opción 822 00:37:50,440 --> 00:37:51,360 Es válida, se acabó 823 00:37:51,360 --> 00:37:52,800 Con esta 824 00:37:52,800 --> 00:37:56,599 hemos tenido que hacer una trampa 825 00:37:56,599 --> 00:37:58,880 para forzar a que la condición 826 00:37:58,880 --> 00:38:00,340 sea falsa de partida 827 00:38:00,340 --> 00:38:01,480 y hacerlo una primera vez 828 00:38:01,480 --> 00:38:03,559 ¿vale? 829 00:38:04,260 --> 00:38:06,539 podemos hacer todo con cualquiera de los dos 830 00:38:06,539 --> 00:38:07,760 pero entonces tendremos que hacer 831 00:38:07,760 --> 00:38:10,139 los retoques correspondientes 832 00:38:10,139 --> 00:38:12,679 para que haga exactamente lo que queremos que se haga 833 00:38:12,679 --> 00:38:12,920 ¿verdad? 834 00:38:14,019 --> 00:38:16,940 vale, vamos a parar unos minutos 835 00:38:18,800 --> 00:38:19,800 ¿no?