1 00:00:00,000 --> 00:00:07,440 Vamos, que seguramente la mayoría hayáis hecho, dime. 2 00:00:08,279 --> 00:00:09,140 Uy, gracias. 3 00:00:19,109 --> 00:00:19,429 Venga. 4 00:00:22,550 --> 00:00:24,010 Ejercicio 7. 5 00:00:31,010 --> 00:00:33,109 Venga, vamos a pensar, repensar. 6 00:00:34,109 --> 00:00:36,869 Programa que lee tres números e indica cuál es el mayor. 7 00:00:37,869 --> 00:00:40,729 Entender lo que hace lo entendemos, no hay que preguntar más. 8 00:00:41,770 --> 00:00:42,030 ¿Vale? 9 00:00:42,369 --> 00:00:46,469 Pero hombre, en un contexto así sí que habría que refinar y decirle, 10 00:00:46,469 --> 00:00:48,530 Uy, casos especiales 11 00:00:48,530 --> 00:00:50,670 Siempre cuando uno ve en un enunciado 12 00:00:50,670 --> 00:00:52,890 O está haciendo una aplicación 13 00:00:52,890 --> 00:00:55,869 Se tiene que centrar en los casos especiales 14 00:00:55,869 --> 00:00:57,890 Porque puede haber que no los haya contemplado 15 00:00:57,890 --> 00:00:58,789 El que le pidió el software 16 00:00:58,789 --> 00:01:00,250 Y hay que pedirles aclaraciones 17 00:01:00,250 --> 00:01:02,770 En este caso, el caso especial es 18 00:01:02,770 --> 00:01:04,909 ¿Y si los tres son iguales? 19 00:01:05,530 --> 00:01:07,530 ¿O son dos iguales y uno más pequeño? 20 00:01:07,709 --> 00:01:08,790 ¿Entonces cuál digo que es mayor? 21 00:01:08,969 --> 00:01:10,689 Esos serían los casos especiales 22 00:01:10,689 --> 00:01:12,829 Que a lo mejor el cliente no nos ha especificado 23 00:01:12,829 --> 00:01:14,250 Y tendríamos que decirle 24 00:01:14,250 --> 00:01:15,469 Oye, en estos casos raros 25 00:01:15,469 --> 00:01:16,810 ¿qué quieres que te diga? 26 00:01:17,150 --> 00:01:18,810 pues son los tres iguales, son no sé qué 27 00:01:18,810 --> 00:01:21,069 vale, ahora mismo vamos a olvidarnos de eso 28 00:01:21,069 --> 00:01:22,469 y vamos a asumir de partida 29 00:01:22,469 --> 00:01:25,310 que los tres números son distintos 30 00:01:25,310 --> 00:01:27,150 que lo podemos dar por sentado 31 00:01:27,150 --> 00:01:27,989 que son distintos 32 00:01:27,989 --> 00:01:30,689 bueno, porque nos lo ha dicho el tío, nos ha dicho 33 00:01:30,689 --> 00:01:32,989 no, no, tranquilo, que siempre van a meter 34 00:01:32,989 --> 00:01:34,790 tres números distintos, vale 35 00:01:34,790 --> 00:01:37,489 pues ya está, nos quedamos entonces con esa restricción 36 00:01:37,489 --> 00:01:39,269 bueno, ahora ya empezamos a pensar 37 00:01:39,269 --> 00:01:40,230 en nuestro programa 38 00:01:40,230 --> 00:01:42,769 datos de entrada, tres números 39 00:01:42,769 --> 00:01:44,689 pues esa parte es que ya 40 00:01:44,689 --> 00:01:46,150 no la sabemos de memoria 41 00:01:46,150 --> 00:01:48,870 y poco hay que pensar, datos de entrada 42 00:01:48,870 --> 00:01:50,890 tres numeritos, pues 43 00:01:50,890 --> 00:01:52,670 venga, esa parte ya 44 00:01:52,670 --> 00:01:54,810 la hago como ahí sacando 45 00:01:54,810 --> 00:01:56,950 el rodillo 46 00:01:56,950 --> 00:02:06,099 vale, nombres 47 00:02:06,099 --> 00:02:08,439 feísimos, n1, n2 y n3 48 00:02:08,439 --> 00:02:10,560 pero bueno, así me quedan las líneas más cortas 49 00:02:10,560 --> 00:02:12,659 vale, sería 50 00:02:12,659 --> 00:02:14,379 un nombre más bonito, número 1 o dato 51 00:02:14,379 --> 00:02:16,360 entrada 1, dato entrada 2, dato entrada 3 52 00:02:16,360 --> 00:02:18,080 pero se me alarga mucho la línea 53 00:02:18,080 --> 00:02:20,400 y también por no alargar 54 00:02:20,400 --> 00:02:21,159 tanto el código 55 00:02:21,159 --> 00:02:23,159 este software es 56 00:02:23,159 --> 00:02:24,840 muy poco amable 57 00:02:24,840 --> 00:02:27,539 sería ideal que yo pusiera un mensajito 58 00:02:27,539 --> 00:02:29,759 introduzca primer número, introduzca segundo 59 00:02:29,759 --> 00:02:31,000 número, introduzca tercer número 60 00:02:31,000 --> 00:02:33,639 para no alargarnos tanto, lo omito 61 00:02:33,639 --> 00:02:35,659 vale, ahora ya sí que 62 00:02:35,659 --> 00:02:37,819 empezamos ya más a pensar en términos de nuestro 63 00:02:37,819 --> 00:02:38,580 algoritmo 64 00:02:38,580 --> 00:02:41,759 y decimos, venga, ya está, tengo los datos 65 00:02:41,759 --> 00:02:42,219 de entrada 66 00:02:42,219 --> 00:02:46,949 ¿cuáles son mis posibles salidas? 67 00:02:47,949 --> 00:02:48,710 pues tres 68 00:02:48,710 --> 00:02:50,770 el mayor es el primero 69 00:02:50,770 --> 00:02:53,310 el mayor es el segundo o el mayor es el tercero 70 00:02:53,310 --> 00:02:54,409 tres posibilidades 71 00:02:54,409 --> 00:02:57,189 luego ya sé que no voy a poder hacer 72 00:02:57,189 --> 00:02:58,770 ese programa con un único if 73 00:02:58,770 --> 00:03:01,530 ¿vale? porque mis posibilidades 74 00:03:01,530 --> 00:03:02,210 son estas 75 00:03:02,210 --> 00:03:09,960 son el mayor 76 00:03:09,960 --> 00:03:13,180 es el 77 00:03:13,180 --> 00:03:14,460 primero 78 00:03:14,460 --> 00:03:17,780 y lo mismo con el segundo 79 00:03:17,780 --> 00:03:31,500 y el tercero 80 00:03:31,500 --> 00:03:34,379 tercero 81 00:03:34,379 --> 00:03:36,300 entonces aquí nos quedamos 82 00:03:36,300 --> 00:03:38,699 Y esto, ¿cómo lo coloco yo? 83 00:03:38,900 --> 00:03:39,539 ¿Cómo lo coloco? 84 00:03:40,759 --> 00:03:42,180 En un if else 85 00:03:42,180 --> 00:03:44,780 Solo puedo elegir entre dos opciones 86 00:03:44,780 --> 00:03:47,080 Luego un único if else 87 00:03:47,080 --> 00:03:47,919 No puedo poner 88 00:03:47,919 --> 00:03:49,879 Vale, pues vamos haciendo 89 00:03:49,879 --> 00:03:51,719 Entonces, ¿qué sé que voy a necesitar? 90 00:03:52,659 --> 00:03:53,259 Pues dos 91 00:03:53,259 --> 00:03:56,379 Entonces, si yo tengo tres posibles salidas 92 00:03:56,379 --> 00:03:57,460 Dos if 93 00:03:57,460 --> 00:04:00,099 Si tengo cuatro posibles salidas 94 00:04:00,099 --> 00:04:01,219 Tres if 95 00:04:01,219 --> 00:04:04,259 O sea, voy a tener siempre 96 00:04:04,259 --> 00:04:06,000 Un número de decisiones 97 00:04:06,000 --> 00:04:08,479 una unidad inferior que el número de posibilidades. 98 00:04:09,259 --> 00:04:10,319 ¿No? Cuando solo 99 00:04:10,319 --> 00:04:12,259 teníamos una opción de salida, no había ninguna 100 00:04:12,259 --> 00:04:14,280 decisión. Cuando teníamos dos opciones de 101 00:04:14,280 --> 00:04:15,819 salida, una decisión, un if. 102 00:04:16,160 --> 00:04:18,019 Si tenemos tres opciones de salida, 103 00:04:18,439 --> 00:04:20,060 dos decisiones, dos if. 104 00:04:20,199 --> 00:04:21,279 Ahora tenemos que verlo como 105 00:04:21,279 --> 00:04:23,699 plasmarlo, claro. 106 00:04:24,180 --> 00:04:26,319 Si tengo siete posibilidades, 107 00:04:28,399 --> 00:04:30,240 pues seis if, seis condiciones. 108 00:04:31,600 --> 00:04:31,800 ¿Vale? 109 00:04:32,300 --> 00:04:34,500 Entonces, esa es la idea que más o menos 110 00:04:34,500 --> 00:04:36,480 lo vamos registrando en la cabeza de cara a que nos ayude 111 00:04:36,480 --> 00:04:38,319 a construir algoritmos, pero bueno, lo que nos importa 112 00:04:38,319 --> 00:04:39,579 a nosotros es cómo plasmar eso 113 00:04:39,579 --> 00:04:42,660 a lo que hemos llegado es que a un único 114 00:04:42,660 --> 00:04:45,000 if imposible, con un único if yo esto no lo resuelvo 115 00:04:45,000 --> 00:04:46,480 vale, pues vamos 116 00:04:46,480 --> 00:04:47,819 paso a paso 117 00:04:47,819 --> 00:04:50,540 vamos a tratar de resolver esto 118 00:04:50,540 --> 00:04:51,439 la primera rama 119 00:04:51,439 --> 00:04:53,579 ¿a esta rama cómo puedo llegar? 120 00:04:54,439 --> 00:04:56,100 ah, bueno, a esta rama puedo llegar 121 00:04:56,100 --> 00:04:58,579 si n1 122 00:04:58,579 --> 00:05:00,360 es mayor que n2 123 00:05:00,360 --> 00:05:02,060 y n1 es mayor que n3 124 00:05:02,060 --> 00:05:04,120 a esa rama puedo llegar por ahí 125 00:05:04,120 --> 00:05:05,980 Bueno, pues lo puedo meter ahí ya 126 00:05:05,980 --> 00:05:07,220 ¿Vale? 127 00:05:07,699 --> 00:05:09,360 Puedo meter esta rama ya ahí 128 00:05:09,360 --> 00:05:14,170 Si N1 es mayor que N2 129 00:05:14,170 --> 00:05:15,529 Y también 130 00:05:15,529 --> 00:05:17,449 Ocurre simultáneamente 131 00:05:17,449 --> 00:05:19,980 Que 132 00:05:19,980 --> 00:05:23,540 N2 es mayor que N1 133 00:05:23,540 --> 00:05:25,600 Uy, qué tontería estoy haciendo 134 00:05:25,600 --> 00:05:26,300 N1 135 00:05:26,300 --> 00:05:29,560 Mayor que N3 136 00:05:29,560 --> 00:05:31,160 Vale, lo he puesto bien 137 00:05:31,160 --> 00:05:33,379 Pues 138 00:05:33,379 --> 00:05:34,639 Esta rama ya la tengo 139 00:05:34,639 --> 00:05:40,139 A esta rama llego si se cumple esta condición 140 00:05:40,139 --> 00:05:42,180 ¿Vale? 141 00:05:42,720 --> 00:05:44,100 ¿Pero qué ocurre si no? 142 00:05:45,100 --> 00:05:46,220 ¿Qué ocurre si no? 143 00:05:47,240 --> 00:05:48,600 Y aquí viene la gran pregunta 144 00:05:48,600 --> 00:05:51,500 ¿Qué ocurre si N1 no es el mayor? 145 00:05:51,759 --> 00:05:52,240 ¿Qué ocurre? 146 00:05:53,519 --> 00:05:54,300 Pues de nuevo 147 00:05:54,300 --> 00:05:56,439 Aquí se me abren dos posibilidades 148 00:05:56,439 --> 00:05:59,180 O es N2 el mayor 149 00:05:59,180 --> 00:06:00,079 O es N3 150 00:06:00,079 --> 00:06:02,600 De nuevo se me abren dos posibilidades aquí 151 00:06:02,600 --> 00:06:04,259 ¿Vale? 152 00:06:04,759 --> 00:06:05,660 Aquí en el else 153 00:06:05,660 --> 00:06:08,540 o al método, o esta o esta 154 00:06:08,540 --> 00:06:10,180 pero claro 155 00:06:10,180 --> 00:06:12,620 depende de una condición de nuevas 156 00:06:12,620 --> 00:06:14,819 entonces aquí 157 00:06:14,819 --> 00:06:16,319 otra vez se me abren 158 00:06:16,319 --> 00:06:18,379 dos posibilidades, en el caso 159 00:06:18,379 --> 00:06:19,560 de que no sea N1 160 00:06:19,560 --> 00:06:22,160 se me abren de nuevo dos opciones 161 00:06:22,160 --> 00:06:24,379 o es N2 o N3, se me vuelven a abrir dos 162 00:06:24,379 --> 00:06:26,459 vale, pues yo puedo cascar ahí 163 00:06:26,459 --> 00:06:26,959 otro if 164 00:06:26,959 --> 00:06:32,290 y puedo cascar ahí otro if y decir 165 00:06:32,290 --> 00:06:34,629 vale, pues no es N1, será N2 166 00:06:34,629 --> 00:06:37,129 pues voy a preguntármelo a ver si es N2 167 00:06:37,129 --> 00:06:42,290 ¿Es N2 mayor que N1 y N2 mayor que N3? 168 00:06:44,110 --> 00:06:46,790 Vuelvo a hacer una pregunta porque no sé. 169 00:06:48,310 --> 00:06:53,879 Bueno, pues en ese caso, si esa se cumple, el mayor es el segundo. 170 00:06:54,060 --> 00:07:05,379 Y ahora ya, en este else mío de aquí, en este else mío, aquí ya sí que es el camino que queda, la opción que queda. 171 00:07:05,379 --> 00:07:08,819 Efectivamente 172 00:07:08,819 --> 00:07:11,360 Exclusivamente 173 00:07:11,360 --> 00:07:12,699 Porque hemos dado eso por sentado 174 00:07:12,699 --> 00:07:15,100 Si no, tendríamos más posibilidades 175 00:07:15,100 --> 00:07:16,420 Que contemplar 176 00:07:16,420 --> 00:07:23,060 Claro, se irían abriendo muchos 177 00:07:23,060 --> 00:07:25,160 Sí, se abren tantos 178 00:07:25,160 --> 00:07:26,720 Como caminos distintos tengas 179 00:07:26,720 --> 00:07:28,360 Si tú tienes siete 180 00:07:28,360 --> 00:07:32,579 Paz, calma 181 00:07:32,579 --> 00:07:33,800 ¿Vale? 182 00:07:33,800 --> 00:07:53,980 Entonces, si uno tiene como conclusión general, repito, 7 opciones posibles, que sepa que 6 decisiones va a tener que tomar. Si tiene 28 opciones posibles, 27 decisiones. ¿Vale? Eso como regla general de algoritmo. 183 00:07:53,980 --> 00:08:13,139 En este caso teníamos tres opciones, solo tres, porque hemos dado por sentado que no son iguales en ningún caso, solo tres, solo tres, porque hemos dado por sentado que no son iguales, para simplificarlo, ¿vale? Porque no quería yo que quedaran toquitos y sanidados, pues en ese caso hemos necesitado efectivamente dos decisiones, dos if, ¿vale? 184 00:08:13,139 --> 00:08:15,759 Entonces yo voy estructuradamente programándolo. 185 00:08:16,240 --> 00:08:17,579 El primer camino lo tengo aquí. 186 00:08:18,459 --> 00:08:19,540 ¿Pero qué pasa si no? 187 00:08:20,259 --> 00:08:23,560 Si no, pues entonces otra pregunta. 188 00:08:24,019 --> 00:08:24,740 Otra pregunta. 189 00:08:25,199 --> 00:08:28,740 Me vuelvo a preguntar si sí esto y si no esto otro. 190 00:08:29,180 --> 00:08:34,899 Entonces esto, esto que yo he dibujado aquí sería este diagrama de flujo, claro. 191 00:08:34,899 --> 00:08:37,539 A ver si consigo no hacer ninguna cosa rara aquí. 192 00:08:40,100 --> 00:08:40,220 ¿Vale? 193 00:08:40,779 --> 00:08:44,580 Es decir, en mi diagrama de flujo, mi programita viene por aquí. 194 00:08:44,840 --> 00:08:46,779 Ahí viene 195 00:08:46,779 --> 00:08:49,679 Ahí se hace una primera pregunta 196 00:08:49,679 --> 00:08:55,269 Se hace la primera preguntita 197 00:08:55,269 --> 00:08:57,809 Para ver si N1 es mayor 198 00:08:57,809 --> 00:08:59,470 Que esta le da que sí 199 00:08:59,470 --> 00:09:07,139 Pues ya está 200 00:09:07,139 --> 00:09:08,000 Ya tiene la 201 00:09:08,000 --> 00:09:10,799 Respuesta de que N1 es mayor 202 00:09:10,799 --> 00:09:12,200 Ya la tiene ahí 203 00:09:12,200 --> 00:09:14,059 Y responde 204 00:09:14,059 --> 00:09:14,879 Y se acabó el if 205 00:09:14,879 --> 00:09:19,960 Y se acabó 206 00:09:19,960 --> 00:09:23,039 Pero qué pasa si no es mayor el primero 207 00:09:23,039 --> 00:09:25,159 Pues no le queda más remedio 208 00:09:25,159 --> 00:09:26,740 que hacerse otra preguntita 209 00:09:26,740 --> 00:09:33,620 vale, he perdido el rombo 210 00:09:33,620 --> 00:09:34,379 ah, está ahí 211 00:09:34,379 --> 00:09:51,129 bueno, que arte, que arte 212 00:09:51,129 --> 00:09:59,000 esto, esto no está pagado 213 00:09:59,000 --> 00:09:59,200 eh 214 00:09:59,200 --> 00:10:04,340 ay, ya, ya, ya 215 00:10:04,340 --> 00:10:06,100 pero yo lo que quiero es 216 00:10:06,100 --> 00:10:07,340 como si fuera la pizarra 217 00:10:07,340 --> 00:10:10,059 simularlo, no quiero ponerme aquí a hacer 218 00:10:10,059 --> 00:10:12,440 vale, pues aquí se cierra 219 00:10:12,440 --> 00:10:13,200 este if 220 00:10:13,200 --> 00:10:15,480 y ahora esto sale por aquí 221 00:10:15,480 --> 00:10:17,899 y 222 00:10:17,899 --> 00:10:21,039 ¿Esto es el borrador? 223 00:10:21,879 --> 00:10:22,059 No 224 00:10:22,059 --> 00:10:24,580 Abajo a la izquierda es el borrador 225 00:10:24,580 --> 00:10:26,279 Ah, este 226 00:10:26,279 --> 00:10:30,440 Borra 227 00:10:30,440 --> 00:10:32,139 Esto borrado 228 00:10:32,139 --> 00:10:34,159 Vale, y ahora 229 00:10:34,159 --> 00:10:36,799 Esto así 230 00:10:36,799 --> 00:10:39,799 Esto así 231 00:10:39,799 --> 00:10:41,820 Y esto se va por aquí 232 00:10:41,820 --> 00:10:44,059 Vale, pues por favor 233 00:10:44,059 --> 00:10:46,200 ¡Qué susto! 234 00:10:46,200 --> 00:10:47,980 Este es el diagrama de flujo que hemos hecho 235 00:10:47,980 --> 00:10:50,019 ¿Vale? No lo perdáis de vista 236 00:10:50,019 --> 00:10:50,919 Este es el primer if 237 00:10:50,919 --> 00:10:54,340 Que el n1 es el mayor de los dos 238 00:10:54,340 --> 00:10:55,539 Sí 239 00:10:55,539 --> 00:10:57,620 Y la sentencia if gorda terminó 240 00:10:57,620 --> 00:10:58,980 En este punto 241 00:10:58,980 --> 00:11:01,360 Estamos en 242 00:11:01,360 --> 00:11:06,120 Estamos aquí 243 00:11:06,120 --> 00:11:08,139 Cuando ya este if 244 00:11:08,139 --> 00:11:09,440 Gordo terminó, aquí 245 00:11:09,440 --> 00:11:11,940 La sentencia terminó, hemos llegado a este punto 246 00:11:11,940 --> 00:11:13,919 Pero todo este else 247 00:11:13,919 --> 00:11:15,779 Todo ese else de ahí 248 00:11:15,779 --> 00:11:16,879 Todo este 249 00:11:16,879 --> 00:11:19,559 Es todo esto, este es el else 250 00:11:19,559 --> 00:11:22,860 vamos al ELSE, nos vamos a hacer la pregunta 251 00:11:22,860 --> 00:11:24,259 ahora 252 00:11:24,259 --> 00:11:25,879 esto ya sé que no 253 00:11:25,879 --> 00:11:28,759 pero ¿se cumple esto otro? 254 00:11:29,240 --> 00:11:30,120 ya tengo respuesta 255 00:11:30,120 --> 00:11:33,159 que no se cumple, este es el ELSE del IF que está dentro 256 00:11:33,159 --> 00:11:34,539 pues tengo respuesta 257 00:11:34,539 --> 00:11:36,320 y mi IF pequeñito terminó 258 00:11:36,320 --> 00:11:38,259 entonces dentro de mi IF grande 259 00:11:38,259 --> 00:11:40,700 que tiene sus dos ramas, esta rama 260 00:11:40,700 --> 00:11:42,919 y esta rama, tengo un IF pequeñito 261 00:11:42,919 --> 00:11:44,019 y no pasa nada 262 00:11:44,019 --> 00:11:46,759 ¿vale? en cualquiera de las ramas 263 00:11:46,759 --> 00:11:48,460 de un IF, yo puedo poner 264 00:11:48,460 --> 00:11:49,460 las sentencias que quiera 265 00:11:49,460 --> 00:11:51,279 a su vez otro if, ¿vale? 266 00:11:51,960 --> 00:11:53,779 Esta es la rama del sí, esta es la rama 267 00:11:53,779 --> 00:11:55,740 del no. Y en la del no resulta 268 00:11:55,740 --> 00:11:57,580 que me he hecho otra preguntita. Pues no pasa nada. 269 00:11:58,519 --> 00:11:59,860 En cualquiera de las dos ramas 270 00:11:59,860 --> 00:12:01,299 puedo poner sentencias válidas 271 00:12:01,299 --> 00:12:03,679 y el if lo es. Entonces, tanto 272 00:12:03,679 --> 00:12:05,500 el diagrama como 273 00:12:05,500 --> 00:12:08,039 el código que lo programa, 274 00:12:08,159 --> 00:12:09,659 el que acabamos de hacer, están claros. 275 00:12:12,000 --> 00:12:13,320 ¿Vale? Y cuando ya el if gordo 276 00:12:13,320 --> 00:12:15,460 ha terminado, pues el programa seguirá haciendo lo que sea. 277 00:12:15,899 --> 00:12:16,039 ¿Vale? 278 00:12:16,980 --> 00:12:19,220 Que yo en esta rama resulta 279 00:12:19,220 --> 00:12:21,000 que me tengo que hacer otra pregunta más 280 00:12:21,000 --> 00:12:23,259 pues en cuanto abra 281 00:12:23,259 --> 00:12:24,320 y haga otra pregunta 282 00:12:24,320 --> 00:12:29,120 si en esta rama S por ejemplo 283 00:12:29,120 --> 00:12:30,320 me tengo que hacer otra pregunta 284 00:12:30,320 --> 00:12:32,720 pues se abren otras dos, con lo cual tendría 285 00:12:32,720 --> 00:12:35,159 cuatro caminos posibles, este, este 286 00:12:35,159 --> 00:12:37,019 el que se ha abierto por aquí y este, o sea siempre 287 00:12:37,019 --> 00:12:39,019 tengo un camino más que 288 00:12:39,019 --> 00:12:40,120 decisiones, siempre 289 00:12:40,120 --> 00:12:43,320 ¿vale? que en esta rama 290 00:12:43,320 --> 00:12:44,659 me quiero hacer otra pregunta 291 00:12:44,659 --> 00:12:47,059 asumiendo que sí, ahora quiero 292 00:12:47,059 --> 00:12:49,019 distinguir otras opciones, pues aunque vea que 293 00:12:49,019 --> 00:12:50,879 otro identro, un ifanidado y ya está. 294 00:12:52,080 --> 00:12:52,259 ¿Vale? 295 00:12:55,110 --> 00:12:57,049 Bueno, pues entonces, esto 296 00:12:57,049 --> 00:12:59,090 hemos quedado que está claro y el programa 297 00:12:59,090 --> 00:13:01,289 que lo representa también, ¿no? 298 00:13:01,610 --> 00:13:03,090 Vale. Entonces, los 299 00:13:03,090 --> 00:13:05,330 ifanidados, pues están, no sólo 300 00:13:05,330 --> 00:13:07,149 es que estén bien, es que son imprescindibles. 301 00:13:07,529 --> 00:13:08,690 Muchas veces son imprescindibles. 302 00:13:09,590 --> 00:13:11,129 Pero, quedan 303 00:13:11,129 --> 00:13:12,450 feos a la vista. 304 00:13:13,490 --> 00:13:14,470 Sólo a la vista. 305 00:13:15,490 --> 00:13:17,129 Entonces, hay otra forma de escribirlo. 306 00:13:17,509 --> 00:13:19,149 Que sólo significa 307 00:13:19,149 --> 00:13:21,070 otra forma de escribirlo. Para la máquina 308 00:13:21,070 --> 00:13:23,070 virtual es lo mismo. Para la máquina virtual 309 00:13:23,070 --> 00:13:25,169 solamente hay if, else 310 00:13:25,169 --> 00:13:27,090 y con bucles anidados. Es lo único 311 00:13:27,090 --> 00:13:27,870 que hay para ella. 312 00:13:29,289 --> 00:13:31,070 Esto. Esto es lo único que hay para 313 00:13:31,070 --> 00:13:33,049 la máquina virtual. Ella va haciendo 314 00:13:33,049 --> 00:13:35,169 sus caminitos. Voy por aquí o voy por aquí 315 00:13:35,169 --> 00:13:37,210 y ahora voy por aquí. Es lo único que hay. 316 00:13:37,789 --> 00:13:39,070 Pero nosotros, cuando tenemos 317 00:13:39,070 --> 00:13:41,049 un if anidado dentro de un else, 318 00:13:41,389 --> 00:13:43,049 como es el caso, podemos 319 00:13:43,049 --> 00:13:44,509 escribirlo de forma un poco más simple. 320 00:13:44,929 --> 00:13:47,169 Pero solo es términos de escritura. Nada más. 321 00:13:48,450 --> 00:13:49,129 Vale. Y esa es 322 00:13:49,129 --> 00:13:51,090 la sentencia ELSEIF. 323 00:13:51,889 --> 00:13:52,809 Entonces, este código. 324 00:13:53,049 --> 00:13:55,210 Este código yo lo puedo escribir de otra manera. 325 00:13:56,350 --> 00:13:57,029 ¿Vale? Pero 326 00:13:57,029 --> 00:13:59,049 recordad, no olvidéis, que esa otra manera 327 00:13:59,049 --> 00:14:01,070 es válida para esta 328 00:14:01,070 --> 00:14:03,289 situación. Dentro de un ELSE 329 00:14:03,289 --> 00:14:04,570 me abro yo un IF. 330 00:14:05,309 --> 00:14:06,730 Solo para ese caso concreto. 331 00:14:07,629 --> 00:14:09,029 No cuando dentro de un IF me abro 332 00:14:09,029 --> 00:14:11,029 otra cosa. No. Solo 333 00:14:11,029 --> 00:14:13,009 cuando dentro de un ELSE resulta que 334 00:14:13,009 --> 00:14:15,029 me he abierto un IF, yo ahí 335 00:14:15,029 --> 00:14:17,250 puedo escribirlo de otra forma para que quede más bonito. 336 00:14:18,470 --> 00:14:18,990 Y vamos a 337 00:14:18,990 --> 00:14:34,049 ponerlo aquí otra forma de escribirlo con la sentencia if else if que se llame vale bueno 338 00:14:34,049 --> 00:14:43,639 pues yo empiezo mi sentencia esta primera parte se queda igual así y ahora pongo mi else y aquí 339 00:14:43,639 --> 00:14:48,820 es donde yo abriría las llaves para hacer el if dentro pues pongo el if directamente y seguido 340 00:14:48,820 --> 00:14:50,940 Pongo el if directamente ahí seguido 341 00:14:50,940 --> 00:14:53,659 Y planto la condición que tenía el if anidado 342 00:14:53,659 --> 00:14:56,019 La que tenía el if anidado 343 00:14:56,019 --> 00:14:59,559 Esa que tenía el if anidado 344 00:14:59,559 --> 00:15:00,399 La planto aquí 345 00:15:00,399 --> 00:15:03,360 Efectivamente 346 00:15:03,360 --> 00:15:05,519 Y planto aquí lo que había 347 00:15:05,519 --> 00:15:07,559 Dentro del if 348 00:15:07,559 --> 00:15:09,559 Que estaba anidado 349 00:15:09,559 --> 00:15:14,230 Y luego ya el if normal 350 00:15:14,230 --> 00:15:16,090 Entonces lo único que he hecho ha sido 351 00:15:16,090 --> 00:15:17,070 Ese if anidado 352 00:15:17,070 --> 00:15:18,909 Lo escribo aquí seguidito 353 00:15:18,909 --> 00:15:20,350 Sin llaves y sin nada 354 00:15:20,350 --> 00:15:23,309 Y ahora este else que yo pongo aquí 355 00:15:23,309 --> 00:15:25,230 Se refiere 356 00:15:25,230 --> 00:15:26,570 Al else de este if 357 00:15:26,570 --> 00:15:28,230 ¿Vale? 358 00:15:29,330 --> 00:15:29,809 Entonces 359 00:15:29,809 --> 00:15:32,830 Y aquí tendría que poner esto 360 00:15:32,830 --> 00:15:40,419 A ver, te ahorras cuando ya empieces a tener 361 00:15:40,419 --> 00:15:41,419 Muchos if anidados 362 00:15:41,419 --> 00:15:42,679 Vamos a ver 363 00:15:42,679 --> 00:15:45,580 Esto, vale 364 00:15:45,580 --> 00:15:48,340 Aquí lo que pasa es que esto parece como que 365 00:15:48,340 --> 00:15:49,460 Queda más bonito a la vista 366 00:15:49,460 --> 00:15:50,480 ¿Verdad? 367 00:15:50,480 --> 00:15:53,480 Claro, son menos llaves 368 00:15:53,480 --> 00:15:55,600 No hay tanta tabulación hacia adentro 369 00:15:55,600 --> 00:15:57,179 Y es como más claro de ver 370 00:15:57,179 --> 00:15:58,960 Porque aquí tú ves rápidamente que tienes 371 00:15:58,960 --> 00:16:00,639 Tres posibilidades, las ves claras 372 00:16:00,639 --> 00:16:02,200 Tienes esta, esta y esta, las ves 373 00:16:02,200 --> 00:16:04,500 Aquí como que se te han quedado para adentro 374 00:16:04,500 --> 00:16:07,240 No ves tanto que tu programa tiene tres ramas 375 00:16:07,240 --> 00:16:09,179 Aquí lo ves muy claro, tiene esta rama 376 00:16:09,179 --> 00:16:10,460 Esta rama y esta rama 377 00:16:10,460 --> 00:16:12,639 Pero estas ramas 378 00:16:12,639 --> 00:16:14,559 Se corresponden en realidad a esto 379 00:16:14,559 --> 00:16:16,279 A esta estructura de aquí, a esta 380 00:16:16,279 --> 00:16:18,340 Lo que pasa es que yo lo he escrito de esta manera 381 00:16:18,340 --> 00:16:21,000 y se ve como más claro que tengo tres ramas 382 00:16:21,000 --> 00:16:23,220 si esta condición se da, pongo esto 383 00:16:23,220 --> 00:16:25,320 si esta se da, pongo esto 384 00:16:25,320 --> 00:16:27,059 y si no se da ninguna 385 00:16:27,059 --> 00:16:28,860 de las anteriores, pongo esto 386 00:16:28,860 --> 00:16:30,980 eso es lo que significa la sentencia 387 00:16:30,980 --> 00:16:31,679 if-else-if 388 00:16:31,679 --> 00:16:34,440 entonces la sentencia if-else-if 389 00:16:34,440 --> 00:16:37,059 pues ya la podemos generalizar 390 00:16:37,059 --> 00:16:39,360 y usarla ya para casos concretos 391 00:16:39,360 --> 00:16:42,440 claro, eso es lo que vamos a ver 392 00:16:42,440 --> 00:16:43,940 entonces ahora ya esto es muy útil 393 00:16:43,940 --> 00:16:45,759 para determinadas situaciones 394 00:16:45,759 --> 00:16:50,440 Y aquí ya sí que esto, como no sea pizarra, nos volvemos locos. 395 00:16:56,000 --> 00:16:58,320 Vale, a ver. 396 00:17:04,559 --> 00:17:14,819 Vale, pues por ejemplo. 397 00:17:30,660 --> 00:17:40,660 Vale, pues ya cómo se generaliza esto para que usemos la sentencia IF-ELSEIF ya con soltura 398 00:17:40,660 --> 00:17:42,460 Para una situación concreta 399 00:17:42,460 --> 00:17:43,099 Que se nos dé 400 00:17:43,099 --> 00:17:47,140 Vale 401 00:17:47,140 --> 00:17:50,000 La pizarra con esta luz apagada 402 00:17:50,000 --> 00:17:51,319 Los de atrás lo habéis bien 403 00:17:51,319 --> 00:17:53,700 Porque si no tenéis el interruptor atrás 404 00:17:53,700 --> 00:17:54,779 Porque yo aquí no lo tengo 405 00:17:54,779 --> 00:18:18,000 Bueno, a ver, ahora ya que encontré 406 00:18:18,000 --> 00:18:18,839 Mi rotulador 407 00:18:18,839 --> 00:18:22,819 Si me lo había mangado Estefano 408 00:18:22,819 --> 00:18:24,339 ¿Qué os parece? 409 00:18:24,799 --> 00:18:25,680 Muy peor 410 00:18:25,680 --> 00:18:26,759 Involuntariamente 411 00:18:26,759 --> 00:18:28,359 Bueno, eso dice 412 00:18:28,359 --> 00:18:31,680 Eso es lo que dice 413 00:18:31,680 --> 00:19:03,190 Vale, pues entonces ahora ya, la sentencia if, el se if en general, ¿cómo se escribe? Aquí if una condición y aquí ponemos lo que se hace si se cumple esa condición, la llave está muy mal colocada, vale, aquí el se espacio if y otra condición y lo que se hace si se cumple esa condición. 414 00:19:03,190 --> 00:19:05,430 y así yo puedo poner tropecientos el SEIF 415 00:19:05,430 --> 00:19:07,289 aquí seguidito 416 00:19:07,289 --> 00:19:08,529 otro el SEIF 417 00:19:08,529 --> 00:19:11,269 y aquí lo que se hace 418 00:19:11,269 --> 00:19:13,490 si se cumple 419 00:19:13,490 --> 00:19:14,789 esta otra condición 420 00:19:14,789 --> 00:19:15,950 la 2 me la he saltado 421 00:19:15,950 --> 00:19:19,369 y así puedo poner todos los 422 00:19:19,369 --> 00:19:20,730 el SEIF que yo quiera, todos 423 00:19:20,730 --> 00:19:23,089 y finalmente acabar con un ELSE 424 00:19:23,089 --> 00:19:27,599 vale, esta sería 425 00:19:27,599 --> 00:19:29,779 silencio 426 00:19:29,779 --> 00:19:31,779 sería 427 00:19:31,779 --> 00:19:34,059 la forma general 428 00:19:34,059 --> 00:19:35,579 de la sentencia 429 00:19:35,579 --> 00:19:36,359 if el save. 430 00:19:37,460 --> 00:19:39,599 ¿Vale? ¿Cómo se interpreta esto? 431 00:19:40,980 --> 00:19:41,680 La máquina 432 00:19:41,680 --> 00:19:43,440 virtual evalúa esta condición. 433 00:19:43,599 --> 00:19:45,200 Que se cumple, ejecuta esto. 434 00:19:45,380 --> 00:19:47,799 Y se acabó. Termina. Ya no mira nada más. Sigue por aquí. 435 00:19:48,380 --> 00:19:49,640 Por ahí sigue con el resto del programa. 436 00:19:50,200 --> 00:19:51,460 Que esta no se cumple, 437 00:19:52,220 --> 00:19:53,059 pasa a mirar esta. 438 00:19:53,880 --> 00:19:55,200 Que esta sí que se cumple, 439 00:19:56,079 --> 00:19:56,839 nos vamos aquí. 440 00:19:57,480 --> 00:19:59,539 Lo ejecuta y ya termina. Y con lo demás 441 00:19:59,539 --> 00:20:01,619 y sigue. Y así va una por una. 442 00:20:02,579 --> 00:20:02,880 ¿Vale? 443 00:20:03,240 --> 00:20:04,720 Aquí podría haber muchos más 444 00:20:04,720 --> 00:20:06,720 el SEIF. En cuanto encuentra una 445 00:20:06,720 --> 00:20:08,480 que se cumple, entra adentro 446 00:20:08,480 --> 00:20:10,819 y ya deja de evaluar las demás. Pasa. 447 00:20:11,440 --> 00:20:12,599 Y sigue por aquí. ¿Vale? 448 00:20:13,339 --> 00:20:14,740 ¿Qué ha pasado todas las 449 00:20:14,740 --> 00:20:16,940 el SEIF y ninguna se ha cumplido? Ninguna. 450 00:20:17,140 --> 00:20:18,579 Hace lo que hay en el ELSE. ¿Vale? 451 00:20:19,099 --> 00:20:20,539 El ELSE de nuevo es opcional. 452 00:20:21,859 --> 00:20:22,720 El ELSE podría 453 00:20:22,720 --> 00:20:23,180 no estar. 454 00:20:25,140 --> 00:20:26,359 Entonces, en este caso, 455 00:20:26,859 --> 00:20:28,640 la máquina virtual solo hace cosas 456 00:20:28,640 --> 00:20:30,400 si se cumple una de estas. 457 00:20:31,059 --> 00:20:32,619 Si no se cumple ninguna, como el ELSE 458 00:20:32,619 --> 00:20:34,700 no está, pues se va por aquí y ya está. ¿Vale? 459 00:20:34,720 --> 00:20:37,119 ELSE es opcional como en el IFELSE normal 460 00:20:37,119 --> 00:20:39,400 Como en nuestro IFELSE normal 461 00:20:39,400 --> 00:20:40,440 Que es este de aquí 462 00:20:40,440 --> 00:20:43,500 Si se cumple la condición 463 00:20:43,500 --> 00:20:44,700 Hace esto y si no, esto 464 00:20:44,700 --> 00:20:46,799 Pero no hace falta que pongas 465 00:20:46,799 --> 00:20:48,779 El último ELSE no hace falta 466 00:20:48,779 --> 00:20:51,059 No, no, no, esto lo puedes quitar todo entero 467 00:20:51,059 --> 00:20:52,140 Si quieres, no hace falta 468 00:20:52,140 --> 00:20:55,299 Y si no está, en el caso de que no se cumpla ninguna de estas 469 00:20:55,299 --> 00:20:57,259 No hace nada y ya continúa 470 00:20:57,259 --> 00:20:58,220 Con el resto del programa 471 00:20:58,220 --> 00:21:00,480 Entonces esta estructura 472 00:21:00,480 --> 00:21:03,119 Se adapta muy bien a una situación 473 00:21:03,119 --> 00:21:04,480 En la que 474 00:21:04,480 --> 00:21:06,220 el resultado del programa 475 00:21:06,220 --> 00:21:08,900 depende de condiciones excluyentes 476 00:21:08,900 --> 00:21:10,519 ¿vale? yo tengo 477 00:21:10,519 --> 00:21:11,960 si se cumple esto, pasa esto 478 00:21:11,960 --> 00:21:14,460 si se cumple esto, pasa esta otra cosa 479 00:21:14,460 --> 00:21:15,880 si se cumple esto, pasa esta otra 480 00:21:15,880 --> 00:21:17,140 y si se cumple esto, pasa esta otra 481 00:21:17,140 --> 00:21:18,500 condiciones excluyentes 482 00:21:18,500 --> 00:21:21,640 pues cuando yo identifico en un ejercicio, en un problema 483 00:21:21,640 --> 00:21:22,740 que mi situación es esa 484 00:21:22,740 --> 00:21:24,559 ¿qué tengo que hacer? 485 00:21:25,339 --> 00:21:27,680 tengo muchas ramas, muchas posibilidades 486 00:21:27,680 --> 00:21:29,759 muchas ramas y cada una de ellas 487 00:21:29,759 --> 00:21:32,059 se corresponde con una condición 488 00:21:32,059 --> 00:21:33,839 cada una de ellas con una condición 489 00:21:33,839 --> 00:21:36,319 pues entonces planto esto directamente 490 00:21:36,319 --> 00:21:38,000 ¿vale? pero cuidado 491 00:21:38,000 --> 00:21:39,220 que sean excluyentes 492 00:21:39,220 --> 00:21:42,000 porque imaginaos que 493 00:21:42,000 --> 00:21:44,099 en un caso concreto 494 00:21:44,099 --> 00:21:46,380 para un conjunto de datos de entrada 495 00:21:46,380 --> 00:21:48,319 se cumple la 2 y la 3 496 00:21:48,319 --> 00:21:50,579 en ese caso vosotros querríais 497 00:21:50,579 --> 00:21:52,160 ah, quiero que se hagan las dos cosas 498 00:21:52,160 --> 00:21:54,400 porque se cumple la 2 y la 3 499 00:21:54,400 --> 00:21:55,559 luego que no 500 00:21:55,559 --> 00:21:57,680 él en cuanto encuentra una que se cumple 501 00:21:57,680 --> 00:21:59,799 ejecuta esa y pasa de todas las demás 502 00:21:59,799 --> 00:22:01,519 pasa de todas las demás 503 00:22:01,519 --> 00:22:05,059 luego entender bien que el funcionamiento de esto es 504 00:22:05,059 --> 00:22:08,559 cuando tenéis una situación con condiciones excluyentes 505 00:22:08,559 --> 00:22:11,339 y que solo queréis que se haga una de las ramas 506 00:22:11,339 --> 00:22:15,640 nunca queréis que se hagan dos en el caso de que se cumplan dos condiciones 507 00:22:15,640 --> 00:22:18,940 si queréis eso no lo tenéis que hacer así 508 00:22:18,940 --> 00:22:21,000 lo tenéis que hacer pues cambiando esa sentencia 509 00:22:21,000 --> 00:22:22,400 cambiando las condiciones, lo que sea 510 00:22:22,400 --> 00:22:25,099 esto se adapta exclusivamente a un programa 511 00:22:25,099 --> 00:22:27,900 que tiene varias posibilidades de actuación 512 00:22:27,900 --> 00:22:30,119 y solo queréis que se ejecute 513 00:22:30,119 --> 00:22:32,059 una de esas posibilidades 514 00:22:32,059 --> 00:22:32,799 solo una 515 00:22:32,799 --> 00:22:35,819 pues a cada posibilidad de actuación le asociáis 516 00:22:35,819 --> 00:22:37,859 una condición y lo plantáis 517 00:22:37,859 --> 00:22:39,240 aquí y se acabó 518 00:22:39,240 --> 00:22:41,480 ¿esto aporta algo nuevo? 519 00:22:41,740 --> 00:22:43,680 no, esto es un el serifanidado 520 00:22:43,680 --> 00:22:45,619 esto es lo mismo que hacer esto 521 00:22:45,619 --> 00:22:47,519 lo que pasa es que queda más feo 522 00:22:47,519 --> 00:22:49,660 esto es lo mismo que hacer 523 00:22:49,660 --> 00:22:51,079 si se cumple la condición 1 524 00:22:51,079 --> 00:22:53,980 hago esto, que no se cumple 525 00:22:53,980 --> 00:22:56,019 voy a repetir mi pregunta 526 00:22:56,019 --> 00:22:59,319 Se cumple la condición 2 527 00:22:59,319 --> 00:23:01,160 Hago esto 528 00:23:01,160 --> 00:23:02,859 Que no se cumple 529 00:23:02,859 --> 00:23:05,400 Vuelvo a hacerme la pregunta aquí anidado 530 00:23:05,400 --> 00:23:08,160 Que se cumple la condición 3 531 00:23:08,160 --> 00:23:09,480 Hago esto 532 00:23:09,480 --> 00:23:11,200 Que no se cumple 533 00:23:11,200 --> 00:23:12,619 El se 534 00:23:12,619 --> 00:23:14,079 Así 535 00:23:14,079 --> 00:23:16,480 Y ahora ya, aquí cierro este el se 536 00:23:16,480 --> 00:23:17,799 Aquí cierro este el se 537 00:23:17,799 --> 00:23:19,160 Y aquí cierro este el se 538 00:23:19,160 --> 00:23:21,980 Luego, eso y eso es lo mismo 539 00:23:21,980 --> 00:23:23,880 Pero yo he ido anidando 540 00:23:23,880 --> 00:23:25,220 En este el se este if 541 00:23:25,220 --> 00:23:27,359 Que esta de arriba no, voy a mirar esta. 542 00:23:27,740 --> 00:23:30,099 Que esta tampoco, voy a mirar esta. 543 00:23:30,240 --> 00:23:32,019 Que esta tampoco, voy a mirar esta. 544 00:23:32,119 --> 00:23:32,720 Es lo mismo. 545 00:23:33,380 --> 00:23:34,980 Este código y ese es el mismo. 546 00:23:35,619 --> 00:23:39,140 Pero claro, esto es un rollo de iranidad. 547 00:23:40,059 --> 00:23:41,319 Entonces, esto queda más claro. 548 00:23:41,980 --> 00:23:42,519 Queda más claro. 549 00:23:42,700 --> 00:23:44,119 Uno mira esto y dice, ah, vale. 550 00:23:44,759 --> 00:23:47,059 O hago esto, o esto, o esto, o esto. 551 00:23:47,359 --> 00:23:48,359 Solo una de esas. 552 00:23:48,960 --> 00:23:49,720 ¿De qué va a depender? 553 00:23:49,720 --> 00:23:51,200 De que se cumpla esta condición. 554 00:23:51,380 --> 00:23:53,660 O esta, o esta, o no se cumpla ninguna. 555 00:23:53,740 --> 00:23:54,420 De eso va a depender. 556 00:23:54,539 --> 00:23:54,880 Y ya está. 557 00:23:55,220 --> 00:23:56,460 Entonces queda un programa más claro. 558 00:23:57,279 --> 00:24:00,400 Entonces un programa que tiene siete posibilidades de actuación, 559 00:24:01,160 --> 00:24:03,359 pues un LCI con seis decisiones. 560 00:24:04,160 --> 00:24:06,380 Uno que tiene diez posibilidades de actuación, 561 00:24:06,680 --> 00:24:08,059 pues un LCI con nueve. 562 00:24:08,859 --> 00:24:09,880 ¿Vale? En general. 563 00:24:10,240 --> 00:24:11,500 Hablamos en términos generales, ¿vale? 564 00:24:12,839 --> 00:24:14,859 Vale, pues nada, ya podemos usar el LCI 565 00:24:14,859 --> 00:24:17,660 para que nuestros códigos queden un poquito más compactos 566 00:24:17,660 --> 00:24:19,660 y más monos y más eso. 567 00:24:21,019 --> 00:24:23,500 Bueno, pues... 568 00:24:23,500 --> 00:24:25,460 Entonces, sí.