1 00:00:01,070 --> 00:00:27,870 Bueno, pues aquí ¿qué haríamos? Pues la misma situación que la anterior, tenemos que sumar un montón de cosas, un montón de cosas tenemos que sumar, vale, pues entonces, como hay que sumar un montón de cosas, un montón de sumas acumulativas, pues una variable suma que empieza valiendo cero y dentro de un bucle, dentro de un bucle, iremos haciendo esta operación. 2 00:00:27,870 --> 00:00:35,630 suma igual a lo que tuviera de antes, más el sumando nuevo que tenga yo que incorporar, ¿vale? 3 00:00:35,850 --> 00:00:43,070 Hemos identificado que es un montón de sumas, inicialmente cero y cada vuelta del bucle un sumando nuevo, 4 00:00:43,649 --> 00:00:49,869 siguiente vuelta, otro sumando nuevo. Ahora lo que pasa es que tenemos que particularizarlo a nuestra situación, 5 00:00:49,869 --> 00:01:16,370 ¿Qué es? ¿De dónde llegan los sumandos? Los sumandos llegan de números que se van leyendo por teclado, de ahí llegan. Pues entonces, el sumando lo tendré que pedir aquí, tendré que pedirlo aquí, para lo cual voy a necesitar, pues, el escáner para leer del teclado. 6 00:01:16,370 --> 00:01:25,079 vale, lo tendré que pedir aquí 7 00:01:25,079 --> 00:01:26,879 y ahora pues por ejemplo 8 00:01:26,879 --> 00:01:29,219 mi sumando que sea 9 00:01:29,219 --> 00:01:30,719 igual a esto 10 00:01:30,719 --> 00:01:33,480 a scan.nextIn 11 00:01:33,480 --> 00:01:36,430 vale, en este caso 12 00:01:36,430 --> 00:01:38,150 lo tengo casi más fácil que el anterior 13 00:01:38,150 --> 00:01:40,450 aquí el cada sumando 14 00:01:40,450 --> 00:01:42,549 de cada iteración es un 15 00:01:42,549 --> 00:01:43,709 número nuevo que he leído 16 00:01:43,709 --> 00:01:46,510 pues lo leo, en el ejercicio 17 00:01:46,510 --> 00:01:48,650 anterior, cada sumando 18 00:01:48,650 --> 00:01:50,510 lo tenía yo que ir 19 00:01:50,510 --> 00:01:52,450 obteniendo a partir de un valor 20 00:01:52,450 --> 00:01:54,370 inicial al que le iba sumando 21 00:01:54,370 --> 00:01:55,109 de uno en uno 22 00:01:55,109 --> 00:01:58,409 porque en ese caso me decían suma uno, luego dos 23 00:01:58,409 --> 00:02:00,349 luego tres, me decían los que había que sumar 24 00:02:00,349 --> 00:02:02,510 luego cuatro, luego cinco, me lo estaban diciendo 25 00:02:02,510 --> 00:02:03,370 pues ya está 26 00:02:03,370 --> 00:02:06,430 aquí me están diciendo, los que tienes que sumar no son 27 00:02:06,430 --> 00:02:08,669 primero uno, luego dos, luego tres, tienes que sumar 28 00:02:08,669 --> 00:02:09,650 este que yo te doy 29 00:02:09,650 --> 00:02:13,490 y ahora este que yo te doy, y ahora este que yo te doy 30 00:02:13,490 --> 00:02:14,469 bueno, pues entonces 31 00:02:14,469 --> 00:02:16,389 cada uno de los sumandos 32 00:02:16,389 --> 00:02:17,490 que voy sumando es 33 00:02:17,490 --> 00:02:20,389 este que yo te doy, para adentro de la suma 34 00:02:20,389 --> 00:02:35,930 Ahora este otro que yo te doy, para dentro de la suma, en cada suma acumulativa, los sumandos que se van generando en cada iteración, tengo que ver de dónde salen, pues en este caso salen de que los voy leyendo del teclado, de ahí salen. 35 00:02:35,930 --> 00:02:38,909 Vale, pues esto ya está bastante hecho 36 00:02:38,909 --> 00:02:41,150 Es una suma acumulativa 37 00:02:41,150 --> 00:02:42,250 Donde estos números 38 00:02:42,250 --> 00:02:44,650 Estos sumandos cada vez 39 00:02:44,650 --> 00:02:46,210 Lo voy pidiendo 40 00:02:46,210 --> 00:02:49,629 Vale, pero esto sigue sin terminar 41 00:02:49,629 --> 00:02:50,930 Por supuesto 42 00:02:50,930 --> 00:02:52,889 Me faltaría 43 00:02:52,889 --> 00:02:55,629 Lógicamente mostrar la suma 44 00:02:55,629 --> 00:02:59,129 Pero también está sin terminar 45 00:02:59,129 --> 00:03:01,250 Porque, oye, ¿cuándo termino yo? 46 00:03:02,189 --> 00:03:03,050 ¿Cuándo termino yo? 47 00:03:03,629 --> 00:03:05,090 Pues estoy en las mismas 48 00:03:05,090 --> 00:03:08,330 cuando el número que 49 00:03:08,330 --> 00:03:10,270 estás leyendo, que en este caso 50 00:03:10,270 --> 00:03:12,550 el número que estás leyendo sea este 51 00:03:12,550 --> 00:03:14,710 sea igual a cero 52 00:03:14,710 --> 00:03:16,409 vale, pues estoy 53 00:03:16,409 --> 00:03:18,229 en la misma situación que ya he visto 54 00:03:18,229 --> 00:03:20,310 que ya conozco, que ya tengo en la cabeza 55 00:03:20,310 --> 00:03:22,409 ah, vale, estoy en 56 00:03:22,409 --> 00:03:24,150 un programa que está pidiendo un valor 57 00:03:24,150 --> 00:03:26,610 para hacer algo, pidiendo un valor para hacer algo 58 00:03:26,610 --> 00:03:28,629 pero la primera vez 59 00:03:28,629 --> 00:03:30,110 tiene que entrar sí o sí, o sea 60 00:03:30,110 --> 00:03:32,009 el primer valor tiene que entrar sí o sí 61 00:03:32,009 --> 00:03:33,789 ah, vale, estoy en las mismas de siempre 62 00:03:33,789 --> 00:03:35,909 Pues voy a cambiarlo por un do while 63 00:03:35,909 --> 00:03:37,969 Me hago yo aquí mi do 64 00:03:37,969 --> 00:03:41,520 Lees el primer número 65 00:03:41,520 --> 00:03:43,020 Y lo sumas 66 00:03:43,020 --> 00:03:45,819 Y esto mientras ocurra que 67 00:03:45,819 --> 00:03:49,840 Mientras ocurra que el número leído 68 00:03:49,840 --> 00:03:51,139 Sea diferente de cero 69 00:03:51,139 --> 00:03:53,800 Lo mismo del primer ejemplo 70 00:03:53,800 --> 00:03:54,599 Que hemos hecho hoy 71 00:03:54,599 --> 00:03:57,879 Mientras sumando sea diferente 72 00:03:57,879 --> 00:03:58,539 De cero 73 00:03:58,539 --> 00:04:02,719 Entonces casi está 74 00:04:02,719 --> 00:04:05,360 Lo he cambiado un do while 75 00:04:05,360 --> 00:04:07,020 simplemente porque me he dado cuenta 76 00:04:07,020 --> 00:04:09,659 que tiene que entrar una primera vez sí o sí 77 00:04:09,659 --> 00:04:11,340 el primer número tengo que dárselo 78 00:04:11,340 --> 00:04:13,759 que ese número ya es cero, no pasa nada 79 00:04:13,759 --> 00:04:16,100 no vuelvo, pero el primer número tengo que dárselo 80 00:04:16,100 --> 00:04:16,579 sí o sí 81 00:04:16,579 --> 00:04:19,759 entonces lo he cambiado a un do while porque veo que se 82 00:04:19,759 --> 00:04:21,100 adapta al do while 83 00:04:21,100 --> 00:04:24,079 pues venga, leo el primer número 84 00:04:24,079 --> 00:04:26,160 lo sumo a la suma acumulativa 85 00:04:26,160 --> 00:04:27,839 ese número es 86 00:04:27,839 --> 00:04:28,879 diferente de cero 87 00:04:28,879 --> 00:04:31,740 vuelvo al siguiente y así todo el rato 88 00:04:31,740 --> 00:04:33,600 vale 89 00:04:33,600 --> 00:04:36,779 Casi está, si no fuera porque el compilador me ha dado un problema. 90 00:04:37,779 --> 00:04:38,740 De nuevo, ¿qué problema? 91 00:04:38,879 --> 00:04:40,579 ¿Por qué me está dando ese problema el compilador? 92 00:04:48,620 --> 00:04:55,889 Ahora ya no es tan fácil de verlo, aunque, ¿vale? 93 00:04:55,949 --> 00:05:01,029 Porque es, oye, no puede ser porque no esté inicializada cuando llegue aquí, 94 00:05:01,189 --> 00:05:02,069 porque claro que lo está. 95 00:05:03,290 --> 00:05:05,069 Yo lo primero que hago es leerlo. 96 00:05:06,269 --> 00:05:11,449 Y podríais decir, pero no puede ser que sea porque no está declarada, 97 00:05:11,750 --> 00:05:13,930 porque si es que la estoy viendo declarada aquí arriba. 98 00:05:14,350 --> 00:05:17,329 Entonces, no puede ser por eso, porque no está declarada. 99 00:05:23,740 --> 00:05:29,040 Vale, pues entonces, ¿por qué me da este error? 100 00:05:31,319 --> 00:05:37,120 Pues me da por una cosa interesantísima y básica y fundamental en programación, 101 00:05:37,800 --> 00:05:41,560 que es el ámbito de las variables. 102 00:05:47,720 --> 00:05:51,439 O lo que es lo mismo, ¿cuánto tiempo están vivas las variables? 103 00:05:51,439 --> 00:05:57,769 el error me da por esto 104 00:05:57,769 --> 00:05:59,629 ¿vale? 105 00:06:00,129 --> 00:06:01,629 no me da porque no 106 00:06:01,629 --> 00:06:03,490 esté declarada anteriormente 107 00:06:03,490 --> 00:06:05,850 en principio, porque yo la estoy viendo aquí arriba 108 00:06:05,850 --> 00:06:07,569 no me da porque no esté 109 00:06:07,569 --> 00:06:09,829 inicializada, porque claro que lo está 110 00:06:09,829 --> 00:06:11,709 yo entro una primera vez y lo está 111 00:06:11,709 --> 00:06:13,470 me da por otra cosa 112 00:06:13,470 --> 00:06:15,689 otra cosa que tenemos que 113 00:06:15,689 --> 00:06:17,350 entender ahora muy bien 114 00:06:17,350 --> 00:06:19,949 ¿vale? entonces vamos a aprovechar para explicarla 115 00:06:19,949 --> 00:06:21,850 ahora, porque es el sitio en el 116 00:06:21,850 --> 00:06:22,730 que encaja 117 00:06:23,670 --> 00:06:41,420 Entonces, pues a ver, vámonos aquí a la pizarra. 118 00:06:48,060 --> 00:06:50,699 Vale, pues nosotros ahora, ¿vale? 119 00:06:51,259 --> 00:06:59,430 Vamos a mencionar que es esto del ámbito de las variables, que es muy importante. 120 00:06:59,430 --> 00:07:00,310 Bueno, como todo. 121 00:07:05,879 --> 00:07:11,360 Vale, pues nosotros ya conocemos, nos suena el término bloque de código. 122 00:07:14,040 --> 00:07:16,060 Nos suena el término bloque de código. 123 00:07:16,060 --> 00:07:17,519 que era un bloque de código 124 00:07:17,519 --> 00:07:19,819 cualquier trozo de código 125 00:07:19,819 --> 00:07:21,379 entre llaves 126 00:07:21,379 --> 00:07:24,620 eso es un bloque de código 127 00:07:24,620 --> 00:07:26,439 entonces 128 00:07:26,439 --> 00:07:28,240 ahora ya estamos viendo programas 129 00:07:28,240 --> 00:07:29,839 que tienen varios bloques de código 130 00:07:29,839 --> 00:07:31,379 al principio de los tiempos 131 00:07:31,379 --> 00:07:33,839 cuando nuestro programa tenía solamente 132 00:07:33,839 --> 00:07:36,180 el bueno class 133 00:07:36,180 --> 00:07:36,800 no se que 134 00:07:36,800 --> 00:07:40,139 y aquí el main 135 00:07:40,139 --> 00:07:42,379 el bla bla bla 136 00:07:42,379 --> 00:07:42,860 main 137 00:07:42,860 --> 00:07:49,379 decíamos nuestro programa va siempre aquí dentro 138 00:07:49,379 --> 00:07:50,759 aquí va siempre 139 00:07:50,759 --> 00:07:54,019 ya entenderemos por qué, por qué hace falta esto 140 00:07:54,019 --> 00:07:55,220 cuando va a funcionar en todo objeto 141 00:07:55,220 --> 00:07:57,779 pero lo que sí que sabemos desde ya 142 00:07:57,779 --> 00:07:59,839 porque estamos partiendo de eso es que nuestro programa 143 00:07:59,839 --> 00:08:01,839 siempre va aquí, vale, eso está claro 144 00:08:01,839 --> 00:08:03,560 bueno, pues 145 00:08:03,560 --> 00:08:06,120 en los primeros tiempos 146 00:08:06,120 --> 00:08:07,819 nuestro programa 147 00:08:07,819 --> 00:08:09,319 estaba en un único bloque 148 00:08:09,319 --> 00:08:10,819 que es en este, ¿verdad? 149 00:08:11,560 --> 00:08:13,720 entre esta llave que se abre aquí 150 00:08:13,720 --> 00:08:15,639 y esta llave que se abre aquí, era un único 151 00:08:15,639 --> 00:08:17,360 bloque de código donde hacíamos todo 152 00:08:17,360 --> 00:08:19,680 pues declarar valiables, las sumas 153 00:08:19,680 --> 00:08:21,720 las operaciones, lo que fuera, un único bloque 154 00:08:21,720 --> 00:08:23,459 ¿qué ocurre? 155 00:08:24,079 --> 00:08:25,680 que cuando hemos incorporado 156 00:08:25,680 --> 00:08:27,459 las sentencias de decisión 157 00:08:27,459 --> 00:08:29,060 y los bucles 158 00:08:29,060 --> 00:08:31,720 han empezado 159 00:08:31,720 --> 00:08:33,919 a aparecer bloques anidados 160 00:08:33,919 --> 00:08:35,700 que lo hemos 161 00:08:35,700 --> 00:08:37,320 pasado un poco por alto, no pasa nada 162 00:08:37,320 --> 00:08:39,360 y no nos hemos parado a pensar 163 00:08:39,360 --> 00:08:41,460 qué implicaciones podía tener, que las tiene 164 00:08:41,460 --> 00:08:43,519 y muchas, y muy gordas 165 00:08:43,519 --> 00:08:45,440 vale, por ejemplo 166 00:08:45,440 --> 00:08:48,820 pues eso, nosotros tenemos aquí nuestro programa 167 00:08:48,820 --> 00:08:54,220 pues una variable n que leemos del teclado 168 00:08:54,220 --> 00:08:57,820 scan no sé qué, bla bla bla 169 00:08:57,820 --> 00:09:02,899 y ahora hemos hecho, por ejemplo, si mi variable n es mayor 170 00:09:02,899 --> 00:09:06,860 que cero y aquí hemos abierto otras llaves 171 00:09:06,860 --> 00:09:10,740 para poner un conjunto de sentencias, hemos abierto 172 00:09:10,740 --> 00:09:14,940 otras llaves, con lo cual desde que hemos incorporado los if y los while 173 00:09:14,940 --> 00:09:16,960 nos están apareciendo 174 00:09:16,960 --> 00:09:18,960 subbloques más pequeños 175 00:09:18,960 --> 00:09:20,879 dentro del bloque grande 176 00:09:20,879 --> 00:09:23,100 que es este, el bloque más grandote 177 00:09:23,100 --> 00:09:24,899 ¿vale? cada vez que hemos abierto 178 00:09:24,899 --> 00:09:26,860 un if con una llave nos ha aparecido un bloque 179 00:09:26,860 --> 00:09:27,539 pequeñito 180 00:09:27,539 --> 00:09:31,279 luego, los bloques 181 00:09:31,279 --> 00:09:33,220 primera cosa de la que nos damos cuenta 182 00:09:33,220 --> 00:09:34,779 pueden estar, de hecho 183 00:09:34,779 --> 00:09:36,379 están unos dentro de otros 184 00:09:36,379 --> 00:09:38,899 aquí tengo yo un bloque de código 185 00:09:38,899 --> 00:09:40,120 con esas sentencias 186 00:09:40,120 --> 00:09:43,039 y resulta que este bloque de código está dentro 187 00:09:43,039 --> 00:09:44,159 de este otro grandote 188 00:09:44,159 --> 00:09:47,080 no pasa nada, los bloques están unos dentro de otros 189 00:09:47,080 --> 00:09:48,220 vale, ya está 190 00:09:48,220 --> 00:09:50,220 y lo que es más 191 00:09:50,220 --> 00:09:52,379 imaginaos que dentro de este if 192 00:09:52,379 --> 00:09:54,600 si n es mayor que 0 193 00:09:54,600 --> 00:09:56,820 yo quiero hacer no sé qué operación que implica 194 00:09:56,820 --> 00:09:57,279 un bucle 195 00:09:57,279 --> 00:10:00,460 pues entonces, dentro de ese if 196 00:10:00,460 --> 00:10:02,940 yo podría a lo mejor tener aquí un while 197 00:10:02,940 --> 00:10:04,179 porque quiero hacer no sé qué 198 00:10:04,179 --> 00:10:06,980 con lo cual abro otras llaves 199 00:10:06,980 --> 00:10:08,580 con lo cual ahora tengo 200 00:10:08,580 --> 00:10:09,340 tres bloques 201 00:10:09,340 --> 00:10:12,279 este bloque con sus sentencias dentro 202 00:10:12,279 --> 00:10:15,480 que está dentro de este otro más grandote 203 00:10:15,480 --> 00:10:16,720 que es el asociado al id 204 00:10:16,720 --> 00:10:19,059 que está dentro del mayor 205 00:10:19,059 --> 00:10:21,720 luego los bloques pueden estar perfectamente 206 00:10:21,720 --> 00:10:22,720 unos dentro de otros 207 00:10:22,720 --> 00:10:25,659 y así hemos estado programando 208 00:10:25,659 --> 00:10:26,120 y ya está 209 00:10:26,120 --> 00:10:30,139 pero, ¿qué implicación tiene un bloque? 210 00:10:31,000 --> 00:10:31,679 pues desde el momento 211 00:10:31,679 --> 00:10:32,740 en que aparece un bloque 212 00:10:32,740 --> 00:10:35,399 lo que ocurre es que 213 00:10:35,399 --> 00:10:37,580 las variables que estén declaradas 214 00:10:37,580 --> 00:10:38,860 dentro de un bloque 215 00:10:38,860 --> 00:10:41,960 solo tienen vida 216 00:10:41,960 --> 00:10:50,580 solo existe en el trozo de código correspondiente a ese bloque, solo, fuera no existe, es decir, 217 00:10:50,720 --> 00:10:57,340 imaginaos que yo tengo efectivamente aquí un programa en el cual, pues tengo aquí mi 218 00:10:57,340 --> 00:11:09,679 mail y ahora, pues yo que sé, tengo una variable n por aquí y ahora me hago un if, que sea 219 00:11:09,679 --> 00:11:19,100 oye, si n es mayor que 3 o me da igual, pues leo una variable m y yo la declaro aquí dentro, 220 00:11:19,200 --> 00:11:24,440 la leo por teclado, me da igual, le doy un valor, leo una variable m y súmasela a la n, 221 00:11:24,720 --> 00:11:29,440 n igual a n más m. Yo qué sé, imaginaos este código. 222 00:11:31,919 --> 00:11:36,000 Vale, en este bloque más pequeñito, que está aquí dentro, en este bloque, 223 00:11:36,259 --> 00:11:41,120 yo he declarado una variable y puedo, no hay ningún problema porque yo he declarado las variables 224 00:11:41,120 --> 00:11:42,639 en el punto que a mí me dé la gana 225 00:11:42,639 --> 00:11:45,480 siempre y cuando las declare antes de su primer uso 226 00:11:45,480 --> 00:11:47,679 claro, esta está declarada 227 00:11:47,679 --> 00:11:49,120 antes de su primer uso, ningún problema 228 00:11:49,120 --> 00:11:50,720 pero ¿qué ocurre? 229 00:11:51,440 --> 00:11:53,559 que está declarada dentro de este 230 00:11:53,559 --> 00:11:57,039 ¿eso qué significa? 231 00:11:57,100 --> 00:11:59,100 que esta variable al estar declarada 232 00:11:59,100 --> 00:12:00,019 dentro de este bloque 233 00:12:00,019 --> 00:12:02,879 solo es visible o accesible 234 00:12:02,879 --> 00:12:05,379 para las sentencias del interior 235 00:12:05,379 --> 00:12:07,000 de este bloque, solo para ellas 236 00:12:07,000 --> 00:12:08,820 para esta lo ha podido ser 237 00:12:08,820 --> 00:12:09,539 sin problema 238 00:12:09,539 --> 00:12:12,240 pero si yo salgo de este bloque 239 00:12:12,240 --> 00:12:14,980 me voy fuera e intento acceder a M 240 00:12:14,980 --> 00:12:16,480 para mostrar M 241 00:12:16,480 --> 00:12:19,000 pues me va a decir 242 00:12:19,000 --> 00:12:20,240 ¿eh? ¿M quién es? 243 00:12:20,639 --> 00:12:21,159 no lo sé 244 00:12:21,159 --> 00:12:24,019 porque la variable M solo es visible 245 00:12:24,019 --> 00:12:25,019 solo existe 246 00:12:25,019 --> 00:12:29,299 en el bloque más interno en el que está declarada 247 00:12:29,299 --> 00:12:30,279 solo en este 248 00:12:30,279 --> 00:12:31,620 ¿vale? 249 00:12:32,379 --> 00:12:34,440 entonces esta variable está declarada en este bloque 250 00:12:34,440 --> 00:12:37,039 luego solo existe en este bloque 251 00:12:37,039 --> 00:12:37,460 de aquí 252 00:12:37,460 --> 00:12:39,519 no en los que le contienen 253 00:12:39,519 --> 00:12:41,759 en los que le contienen no existe, no es visible 254 00:12:41,759 --> 00:12:44,019 Cuando este código termine 255 00:12:44,019 --> 00:12:46,200 La variable m desaparece 256 00:12:46,200 --> 00:12:46,980 Se va a la basura 257 00:12:46,980 --> 00:12:48,919 En cuanto este código termine 258 00:12:48,919 --> 00:12:50,980 Con lo cual si yo intento mostrarla 259 00:12:50,980 --> 00:12:52,360 Una vez que he acabado este bloque 260 00:12:52,360 --> 00:12:56,100 Es imposible porque m va a haber desaparecido 261 00:12:56,100 --> 00:12:59,220 Esto como va a haber funcionado 262 00:12:59,220 --> 00:13:00,759 Cuando la máquina virtual lo ejecute 263 00:13:00,759 --> 00:13:03,039 Pues la máquina virtual llegará por aquí 264 00:13:03,039 --> 00:13:04,279 Y dirá n igual a 3 265 00:13:04,279 --> 00:13:06,840 Ah muy bien, me declaro mi variable n 266 00:13:06,840 --> 00:13:08,700 Esta cajita n y le doy el 3 267 00:13:08,700 --> 00:13:09,980 Vale 268 00:13:09,980 --> 00:13:11,620 Ahora entro en el if 269 00:13:11,620 --> 00:13:15,059 n es mayor que 3, ah vale, bueno, mayor o igual que 3 270 00:13:15,059 --> 00:13:16,379 para que entre, por ejemplo 271 00:13:16,379 --> 00:13:19,500 n es mayor o igual que 3, sí, pues entro en el bucle 272 00:13:19,500 --> 00:13:20,720 ¿qué hago en el bucle? 273 00:13:21,000 --> 00:13:22,039 abro un nuevo bloque 274 00:13:22,039 --> 00:13:25,679 y ahora, ah, declaro una variable m 275 00:13:25,679 --> 00:13:27,240 5, muy bien 276 00:13:27,240 --> 00:13:29,320 pues declaro una variable m que se llama 5 277 00:13:29,320 --> 00:13:30,460 y ahora hago 278 00:13:30,460 --> 00:13:33,159 n igual a n más m, luego n más m 279 00:13:33,159 --> 00:13:34,639 es 3 más 5, 8 280 00:13:34,639 --> 00:13:36,399 este 3 desaparece 281 00:13:36,399 --> 00:13:39,120 y se convierte en 8, muy bien 282 00:13:39,120 --> 00:13:40,659 y este código terminó 283 00:13:40,659 --> 00:13:44,059 entonces en cuanto termina la ejecución 284 00:13:44,059 --> 00:13:44,740 de un código 285 00:13:44,740 --> 00:13:48,059 todas las variables que estaban declaradas dentro 286 00:13:48,059 --> 00:13:49,799 todas se van a la basura 287 00:13:49,799 --> 00:13:51,120 todas desaparecen 288 00:13:51,120 --> 00:13:53,879 en cuanto este código ha terminado 289 00:13:53,879 --> 00:13:55,899 la variable m fuera 290 00:13:55,899 --> 00:13:57,840 ya no existe, a la basura 291 00:13:57,840 --> 00:13:59,360 ¿vale? 292 00:14:00,320 --> 00:14:01,679 la variable n no 293 00:14:01,679 --> 00:14:03,419 porque la variable n estaba en el código 294 00:14:03,419 --> 00:14:05,679 superior que no ha terminado 295 00:14:05,679 --> 00:14:07,460 entonces 296 00:14:07,460 --> 00:14:09,919 si una vez terminado este código yo intentara 297 00:14:09,919 --> 00:14:11,740 acceder a M para hacer lo que fuera 298 00:14:11,740 --> 00:14:13,399 me diría, ¿y M quién es? 299 00:14:13,440 --> 00:14:16,080 si es que no hay ninguna caja que sea M, ha desaparecido 300 00:14:16,080 --> 00:14:18,000 claro, porque 301 00:14:18,000 --> 00:14:19,519 cuando un bloque termina 302 00:14:19,519 --> 00:14:22,299 todas las variables declaradas 303 00:14:22,299 --> 00:14:23,960 dentro de ese bloque 304 00:14:23,960 --> 00:14:26,120 desaparecen, todas 305 00:14:26,120 --> 00:14:28,019 yo las habré usado 306 00:14:28,019 --> 00:14:30,019 aquí dentro para hacer cosas, porque para eso 307 00:14:30,019 --> 00:14:32,179 las declaré, lógicamente, para hacer cosas 308 00:14:32,179 --> 00:14:34,220 pero en cuanto el bloque termina 309 00:14:34,220 --> 00:14:35,580 todas esas variables 310 00:14:35,580 --> 00:14:37,860 declaradas aquí dentro han desaparecido 311 00:14:37,860 --> 00:14:43,120 todas, a eso se les llama 312 00:14:43,120 --> 00:14:44,759 variables locales 313 00:14:44,759 --> 00:14:46,620 a un bloque 314 00:14:46,620 --> 00:14:49,019 m es la variable local 315 00:14:49,019 --> 00:14:49,860 de este bloque 316 00:14:49,860 --> 00:14:52,919 ahí solamente 317 00:14:52,919 --> 00:14:55,019 dura, vive el tiempo 318 00:14:55,019 --> 00:14:56,720 que esté este bloque ejecutándose 319 00:14:56,720 --> 00:14:59,279 en cuanto estas llaves ya se cierran 320 00:14:59,279 --> 00:15:00,120 ya he terminado 321 00:15:00,120 --> 00:15:02,200 esta que está aquí declarada 322 00:15:02,200 --> 00:15:03,940 desaparece 323 00:15:03,940 --> 00:15:11,250 ¿vale? a ver en un ejemplo 324 00:15:11,250 --> 00:15:32,970 entonces voy a 325 00:15:32,970 --> 00:15:35,009 ponerlo aquí en una clase aparte para 326 00:15:35,009 --> 00:15:56,179 vale, pues este es un bloque, está claro 327 00:15:56,179 --> 00:15:57,679 este es un primer bloque 328 00:15:57,679 --> 00:16:00,340 el bloque más grande que hay 329 00:16:00,340 --> 00:16:02,059 en el que puede haber código, este 330 00:16:02,059 --> 00:16:04,539 entonces yo aquí me puedo declarar una variable 331 00:16:04,539 --> 00:16:08,220 todas las que quiera, vale, y aquí están 332 00:16:08,220 --> 00:16:15,460 mis variables, ya está 333 00:16:15,460 --> 00:16:17,120 ahora 334 00:16:17,120 --> 00:16:19,159 yo voy a hacer un bloque cualquiera 335 00:16:19,159 --> 00:16:21,500 por ejemplo, mientras 336 00:16:21,500 --> 00:16:23,559 n 337 00:16:23,559 --> 00:16:24,500 sea 338 00:16:24,500 --> 00:16:27,379 menor o igual 339 00:16:27,379 --> 00:16:29,840 que 18 340 00:16:29,840 --> 00:16:32,179 pues que voy a hacer 341 00:16:32,179 --> 00:16:34,940 pues a la variable n 342 00:16:34,940 --> 00:16:36,840 le voy a ir sumando un valor 343 00:16:36,840 --> 00:16:45,309 n igual a 344 00:16:45,309 --> 00:16:46,669 n 345 00:16:46,669 --> 00:16:50,009 más igual 346 00:16:50,009 --> 00:16:52,090 1 yo que sé cualquier tontería 347 00:16:52,090 --> 00:16:53,529 vale 348 00:16:53,529 --> 00:16:56,250 entonces a n o n más más me da igual 349 00:16:56,250 --> 00:16:59,639 vale pues estoy yo aquí en este bucle 350 00:16:59,639 --> 00:17:01,820 en este bucle a mi variable n 351 00:17:01,820 --> 00:17:27,839 le voy sumando 1 y cuando n llega a valer 18, pues ya está, sale, cualquier tontería, vale, pues con este código chorra aquí resulta que tengo otro bloque más, vale, entonces tengo este bloque que está dentro de este otro, bueno, primera cosa, desde un bloque interno no hay ningún problema con acceder a las variables de los bloques que están fuera, 352 00:17:27,839 --> 00:17:30,980 porque estas variables declaradas aquí 353 00:17:30,980 --> 00:17:33,900 al estar declaradas en este bloque gordo 354 00:17:33,900 --> 00:17:38,180 van a existir todo el tiempo hasta que el bloque termina 355 00:17:38,180 --> 00:17:39,200 que el bloque termina aquí 356 00:17:39,200 --> 00:17:44,279 entonces estas variables N y M están asociadas al bloque que empieza aquí 357 00:17:44,279 --> 00:17:47,140 ese bloque no termina hasta aquí 358 00:17:47,140 --> 00:17:50,480 con lo cual hasta este punto 359 00:17:50,480 --> 00:17:53,380 N y M están visibles 360 00:17:53,380 --> 00:17:56,519 en particular aquí dentro, ningún problema en todas partes 361 00:17:56,519 --> 00:17:58,000 n y m están visibles 362 00:17:58,000 --> 00:17:58,460 vale 363 00:17:58,460 --> 00:18:02,359 ahora vamos a imaginar que en este bloque 364 00:18:02,359 --> 00:18:03,279 que está aquí dentro 365 00:18:03,279 --> 00:18:05,779 dentro del otro interno, interior 366 00:18:05,779 --> 00:18:08,319 este bloque que es el 367 00:18:08,319 --> 00:18:12,279 del while, aquí declaro 368 00:18:12,279 --> 00:18:13,000 yo una variable 369 00:18:13,000 --> 00:18:16,140 porque yo que sé, por cualquier cosa 370 00:18:16,140 --> 00:18:19,880 declaro una variable por ejemplo 371 00:18:19,880 --> 00:18:23,619 para leerla por teclado 372 00:18:23,619 --> 00:18:43,470 vale, leo esta variable 373 00:18:43,470 --> 00:18:45,210 del teclado y 374 00:18:45,210 --> 00:18:47,869 que quiero hacer con esta variable 375 00:18:47,869 --> 00:18:49,630 pues sumarse la n, por ejemplo 376 00:18:49,630 --> 00:18:52,049 n igual a 377 00:18:52,049 --> 00:18:54,150 n más n2 378 00:18:54,150 --> 00:18:55,950 por ejemplo, voy a cambiar el programa 379 00:18:55,950 --> 00:18:58,170 así, entonces este programa 380 00:18:58,170 --> 00:19:00,109 lee una variable del teclado 381 00:19:00,109 --> 00:19:01,269 y se la suma a n2 382 00:19:01,269 --> 00:19:04,329 lee una variable del teclado y se la suma 383 00:19:04,329 --> 00:19:06,230 a n, perdón, a n2 384 00:19:06,230 --> 00:19:08,029 lee una variable del teclado 385 00:19:08,029 --> 00:19:09,369 y se la suma a n, vale 386 00:19:09,369 --> 00:19:11,730 bueno, pues ya está 387 00:19:11,730 --> 00:19:13,710 este programa hace lo que tenga que hacer 388 00:19:13,710 --> 00:19:16,690 y en este caso en particular que he hecho yo 389 00:19:16,690 --> 00:19:18,289 a la variable 390 00:19:18,289 --> 00:19:20,309 la variable n2 esta de aquí 391 00:19:20,309 --> 00:19:22,430 la he declarado aquí dentro 392 00:19:22,430 --> 00:19:24,549 bueno muy bien 393 00:19:24,549 --> 00:19:26,470 está declarada antes de su primer uso 394 00:19:26,470 --> 00:19:28,230 y no hay ningún problema 395 00:19:28,230 --> 00:19:30,190 pero que ocurre 396 00:19:30,190 --> 00:19:32,670 que en cuanto este bucle while ha terminado 397 00:19:32,670 --> 00:19:34,529 en cuanto este while acabó 398 00:19:34,529 --> 00:19:36,509 y yo ya estoy aquí colocada 399 00:19:36,509 --> 00:19:39,269 la variable n2 ya ha desaparecido 400 00:19:39,269 --> 00:19:41,089 esta variable n2 401 00:19:41,089 --> 00:19:42,869 solo va a existir 402 00:19:42,869 --> 00:19:45,089 durante todo el tiempo en el que se esté ejecutando 403 00:19:45,089 --> 00:19:46,349 ese bucle, solo ahí 404 00:19:46,349 --> 00:19:48,349 porque está declarada aquí dentro 405 00:19:48,349 --> 00:19:50,789 solo ahí, no va a existir fuera 406 00:19:50,789 --> 00:19:52,230 entonces si yo aquí 407 00:19:52,230 --> 00:19:54,789 intentara mostrar 408 00:19:54,789 --> 00:19:56,910 el valor con el que se ha quedado N2 409 00:19:56,910 --> 00:19:59,170 su valor último, cuando el bucle salió 410 00:19:59,170 --> 00:20:01,269 pues N2 habrá tenido su última lectura 411 00:20:01,269 --> 00:20:03,430 el compilador 412 00:20:03,430 --> 00:20:05,069 me va a decir un mensajito que sea 413 00:20:05,069 --> 00:20:07,490 N2 no lo encuentro 414 00:20:07,490 --> 00:20:09,750 N2 está sin declarar 415 00:20:09,750 --> 00:20:10,309 no existe 416 00:20:10,309 --> 00:20:12,690 claro porque N2 417 00:20:12,690 --> 00:20:14,690 está declarada en un bucle 418 00:20:14,690 --> 00:20:16,250 interno a este 419 00:20:16,250 --> 00:20:18,109 en el que está esta sentencia 420 00:20:18,109 --> 00:20:20,069 en un bucle interno, luego N2 421 00:20:20,069 --> 00:20:21,289 no existe 422 00:20:21,289 --> 00:20:24,150 dentro del bucle superior 423 00:20:24,150 --> 00:20:26,289 ¿vale? N2 no existe ahí 424 00:20:26,289 --> 00:20:28,529 entonces si yo quiero 425 00:20:28,529 --> 00:20:29,470 que N2 426 00:20:29,470 --> 00:20:32,609 sea visible también aquí 427 00:20:32,609 --> 00:20:33,069 fuera 428 00:20:33,069 --> 00:20:35,630 lo podría arreglar 429 00:20:35,630 --> 00:20:37,410 declarándola aquí 430 00:20:37,410 --> 00:20:39,789 yo la declaro ahí en vez de aquí 431 00:20:39,789 --> 00:20:43,440 y ya está 432 00:20:43,440 --> 00:20:45,519 está declarada afuera 433 00:20:45,519 --> 00:20:46,480 está declarada aquí 434 00:20:46,480 --> 00:20:49,819 aquí es donde recibe su valor, se va sumando 435 00:20:49,819 --> 00:20:51,599 pero al estar declarada afuera 436 00:20:51,599 --> 00:20:52,660 esta caja 437 00:20:52,660 --> 00:20:55,400 esa caja no se pierde ni desaparece 438 00:20:55,400 --> 00:20:56,660 hasta el final de su bloque 439 00:20:56,660 --> 00:20:58,359 y ahí se queda 440 00:20:58,359 --> 00:21:00,299 ¿vale? 441 00:21:02,690 --> 00:21:08,660 entonces, tenéis que ver esto 442 00:21:08,660 --> 00:21:20,700 lo del ámbito de las variables 443 00:21:20,700 --> 00:21:22,539 los bloques tenéis que verlos 444 00:21:22,539 --> 00:21:24,059 como si fueran espacios 445 00:21:24,059 --> 00:21:26,339 donde uno puede declarar variables 446 00:21:26,339 --> 00:21:28,220 este sería mi bloque grande, el main 447 00:21:28,220 --> 00:21:39,180 Entonces yo aquí puedo declarar mi variable n, mi variable m, por ejemplo, y ahora resulta que tengo un bloque más pequeñito asociado a un if que va aquí dentro. 448 00:21:40,200 --> 00:21:48,400 Entonces si dentro de ese bloque del if yo declaro la variable x e y, pues esas cajas están aquí solamente, están ahí. 449 00:21:48,400 --> 00:21:51,640 e imaginaos que dentro de las llaves de ese if 450 00:21:51,640 --> 00:21:53,940 yo hago otra sentencia if o while 451 00:21:53,940 --> 00:21:55,299 con lo cual 452 00:21:55,299 --> 00:21:57,720 a ver, para que se vea mejor 453 00:21:57,720 --> 00:21:58,839 voy a ponerlo en otro color 454 00:21:58,839 --> 00:22:07,420 lo que pongo en verde son los bloques de código 455 00:22:07,420 --> 00:22:09,440 y lo que pongo en rojo 456 00:22:09,440 --> 00:22:10,259 serían las variables 457 00:22:10,259 --> 00:22:13,440 por ejemplo, yo aquí tengo mi variable n declarada 458 00:22:13,440 --> 00:22:14,359 y mi variable m 459 00:22:14,359 --> 00:22:17,700 vale, este es mi main 460 00:22:17,700 --> 00:22:21,380 dentro del bloque de mi main 461 00:22:21,380 --> 00:22:23,640 resulta que yo he abierto un if 462 00:22:23,640 --> 00:22:26,039 que empieza y se cierra ahí 463 00:22:26,039 --> 00:22:28,720 y dentro de mi if resulta que yo 464 00:22:28,720 --> 00:22:30,019 a lo mejor he abierto un while 465 00:22:30,019 --> 00:22:31,920 que empieza y se cierra aquí 466 00:22:31,920 --> 00:22:34,619 entonces tendría tres bloques, este bloque 467 00:22:34,619 --> 00:22:36,200 que está dentro del bloque del if 468 00:22:36,200 --> 00:22:37,259 que a su vez está dentro del main 469 00:22:37,259 --> 00:22:40,559 vale, si dentro del bloque del if yo declaro 470 00:22:40,559 --> 00:22:45,029 x e y, pues x e y 471 00:22:45,029 --> 00:22:46,609 están declaradas solo 472 00:22:46,609 --> 00:22:48,910 en este bloque de aquí, imaginaos que dentro 473 00:22:48,910 --> 00:22:50,829 del while yo he declarado otra 474 00:22:50,829 --> 00:22:52,769 variable t, ahí, vale 475 00:22:52,769 --> 00:22:53,970 aquí he declarado esta 476 00:22:53,970 --> 00:22:57,869 aquí he declarado estas 477 00:22:57,869 --> 00:23:02,750 y aquí he declarado estas 478 00:23:02,750 --> 00:23:03,670 vale 479 00:23:03,670 --> 00:23:06,529 pues cuando el while termine 480 00:23:06,529 --> 00:23:08,869 esta variable int 481 00:23:08,869 --> 00:23:10,490 desaparece 482 00:23:10,490 --> 00:23:11,690 se acabó 483 00:23:11,690 --> 00:23:14,390 pero sin embargo dentro del while 484 00:23:14,390 --> 00:23:16,269 yo puedo acceder a estas 485 00:23:16,269 --> 00:23:17,710 sin problema y a estas 486 00:23:17,710 --> 00:23:20,789 vale, pero cuando el while termine 487 00:23:20,789 --> 00:23:22,430 esto 488 00:23:22,430 --> 00:23:23,829 desaparece 489 00:23:23,829 --> 00:23:25,630 con lo cual esta variable desapareció 490 00:23:25,630 --> 00:23:28,789 luego desde aquí yo no puedo acceder aquí 491 00:23:28,789 --> 00:23:30,789 cuando yo esté en este bloque 492 00:23:30,789 --> 00:23:32,490 yo no puedo acceder a esta variable 493 00:23:32,490 --> 00:23:34,769 aunque está declarada antes 494 00:23:34,769 --> 00:23:36,690 claro, pero está declarada dentro de este bloque 495 00:23:36,690 --> 00:23:38,529 entonces en cuanto este bloque 496 00:23:38,529 --> 00:23:40,170 terminó, esto ha desaparecido 497 00:23:40,170 --> 00:23:42,470 desde aquí, t, no lo puedo ver 498 00:23:42,470 --> 00:23:43,509 no puedo verlo 499 00:23:43,509 --> 00:23:45,309 y aquí lo mismo 500 00:23:45,309 --> 00:23:48,430 int x e int y, yo las puedo ver en cualquier zona 501 00:23:48,430 --> 00:23:49,809 de aquí, en cualquier zona 502 00:23:49,809 --> 00:23:51,970 donde a mí me dé la gana, aquí dentro también 503 00:23:51,970 --> 00:23:54,369 las puedo ver, donde a mí me dé la gana 504 00:23:54,369 --> 00:24:03,069 Pero en cuanto este if termine, tanto int x como int y han desaparecido en cuanto este if termine. 505 00:24:03,589 --> 00:24:08,450 Con lo cual aquí, fuera de esa caja, yo no podría acceder ni a la x ni a la y. 506 00:24:08,650 --> 00:24:13,849 Ahí no puedo, porque esta caja ya terminó, sus variables asociadas desaparecieron. 507 00:24:17,210 --> 00:24:19,109 Y eso es lo que se llama variables locales. 508 00:24:19,670 --> 00:24:23,809 Esta variable es local a este while, solo se puede usar aquí dentro. 509 00:24:23,809 --> 00:24:26,789 estas variables x y y son locales 510 00:24:26,789 --> 00:24:28,809 al bloque del if, solo las puedo usar 511 00:24:28,809 --> 00:24:29,130 aquí 512 00:24:29,130 --> 00:24:32,670 y estas variables n y m son locales 513 00:24:32,670 --> 00:24:34,710 al mail, las puedo usar en cualquier sitio 514 00:24:34,710 --> 00:24:35,829 ¿vale? 515 00:24:36,369 --> 00:24:37,410 y luego además 516 00:24:37,410 --> 00:24:40,529 en un bloque en particular no solo 517 00:24:40,529 --> 00:24:42,569 puedes usar las locales a que 518 00:24:42,569 --> 00:24:44,490 hayas declarado tú, sino también 519 00:24:44,490 --> 00:24:46,529 lógicamente las que 520 00:24:46,529 --> 00:24:47,990 están declaradas por encima de ti 521 00:24:47,990 --> 00:24:50,089 ¿vale? 522 00:24:52,890 --> 00:24:53,450 entonces 523 00:24:53,450 --> 00:25:06,539 aquí por tanto 524 00:25:06,539 --> 00:25:08,900 n2 imposible usarlo 525 00:25:08,900 --> 00:25:10,579 perdón, aquí n2 526 00:25:10,579 --> 00:25:12,380 ya si podríamos, vale 527 00:25:12,380 --> 00:25:14,259 aquí el error que nos da 528 00:25:14,259 --> 00:25:16,740 ya no es n2 529 00:25:16,740 --> 00:25:18,539 no la puedo ver, claro que la puedes ver 530 00:25:18,539 --> 00:25:19,940 está declarada aquí n2 531 00:25:19,940 --> 00:25:22,660 está aquí, aquí el error que te da 532 00:25:22,660 --> 00:25:24,299 es otro, te dice, oye podría no estar 533 00:25:24,299 --> 00:25:27,940 inicializada, efectivamente 534 00:25:27,940 --> 00:25:29,960 podría no estar inicializada, ¿por qué? porque el 535 00:25:29,960 --> 00:25:32,059 compilador no sabe si 536 00:25:32,059 --> 00:25:34,059 va a entrar aquí alguna vez o no, no tiene ni idea 537 00:25:34,059 --> 00:25:35,900 el compilador ve reglas 538 00:25:35,900 --> 00:25:38,339 no ve los valores concretos 539 00:25:38,339 --> 00:25:39,839 entonces ve que esto es un while 540 00:25:39,839 --> 00:25:42,039 él sabe que a un while 541 00:25:42,039 --> 00:25:43,819 puede que no se entre nunca 542 00:25:43,819 --> 00:25:45,980 a lo mejor no se entre nunca, depende de la condición 543 00:25:45,980 --> 00:25:47,779 entonces el compilador te dice 544 00:25:47,779 --> 00:25:49,900 oye, ¿qué pasa si a este while 545 00:25:49,900 --> 00:25:50,819 no entras nunca? 546 00:25:51,619 --> 00:25:54,079 n2 no tendría valor, no puedo mostrártela 547 00:25:54,079 --> 00:25:55,880 es el error que te da 548 00:25:55,880 --> 00:25:58,019 no que no esté declarada, porque sí que lo está 549 00:25:58,019 --> 00:26:00,220 entonces bueno, ese error en particular 550 00:26:00,220 --> 00:26:02,039 yo que si lo inicializamos a cualquiera y ya está 551 00:26:02,039 --> 00:26:07,799 entonces como veis desde este bloque pequeñito 552 00:26:07,799 --> 00:26:11,079 he podido acceder tanto a n que está declarada aquí fuera 553 00:26:11,079 --> 00:26:15,640 como a n2 que está declarada aquí dentro 554 00:26:15,640 --> 00:26:26,380 cuando lo estaba, desde este bloque puedo acceder 555 00:26:26,380 --> 00:26:29,759 tanto a n que está aquí como a n2 que está local 556 00:26:29,759 --> 00:26:34,019 pero cuando este while termina esta variable ya 557 00:26:34,019 --> 00:26:38,200 desaparece y desde aquí ya es imposible que yo pueda 558 00:26:38,200 --> 00:26:40,259 acceder a ella para ver qué valor tiene 559 00:26:40,259 --> 00:26:41,759 lo que sea, porque ya ha desaparecido 560 00:26:41,759 --> 00:26:43,619 solamente puedo acceder 561 00:26:43,619 --> 00:26:45,319 a las que están declaradas ahí 562 00:26:45,319 --> 00:26:50,359 ¿vale? pues ese es el problema 563 00:26:50,359 --> 00:26:52,079 que nos daba en este ejercicio de aquí 564 00:26:52,079 --> 00:26:54,519 que sumando 565 00:26:54,519 --> 00:26:56,259 resulta que está 566 00:26:56,259 --> 00:26:58,059 declarada dentro de este bloque 567 00:26:58,059 --> 00:26:59,680 la he declarado yo aquí 568 00:26:59,680 --> 00:27:01,279 con lo cual 569 00:27:01,279 --> 00:27:04,640 fuera de estas llaves es inaccesible 570 00:27:04,640 --> 00:27:06,559 fuera de estas llaves es inaccesible 571 00:27:06,559 --> 00:27:08,259 entonces 572 00:27:08,259 --> 00:27:09,880 no pasa nada 573 00:27:09,880 --> 00:27:11,259 la declaro fuera 574 00:27:11,259 --> 00:27:13,160 y arreglado 575 00:27:13,160 --> 00:27:16,359 tengo ya mi programa arreglado 576 00:27:16,359 --> 00:27:19,140 vale 577 00:27:19,140 --> 00:27:21,140 la he declarado fuera 578 00:27:21,140 --> 00:27:24,000 ella toma valor dentro, que es donde tiene que tomarlo 579 00:27:24,000 --> 00:27:26,079 en cada iteración del bucle va tomando 580 00:27:26,079 --> 00:27:27,859 su valor, va tomando valor, va tomando valor 581 00:27:27,859 --> 00:27:30,200 va tomando valor, aquí va tomando su valor 582 00:27:30,200 --> 00:27:32,059 pero está declarada afuera 583 00:27:32,059 --> 00:27:34,240 entonces al estar declarada afuera, esa caja 584 00:27:34,240 --> 00:27:36,359 de esa variable, ya va a estar 585 00:27:36,359 --> 00:27:38,359 viva, aunque este bucle 586 00:27:38,359 --> 00:27:40,220 termine, su valor 587 00:27:40,220 --> 00:27:42,539 lo va a ir recibiendo aquí dentro, pero lo que es la caja 588 00:27:42,539 --> 00:27:44,099 va a estar 589 00:27:44,099 --> 00:27:46,059 viva y va a existir todo el rato 590 00:27:46,059 --> 00:27:48,160 porque está declarado aquí, todo el rato 591 00:27:48,160 --> 00:27:49,339 va a existir ahí la caja 592 00:27:49,339 --> 00:27:52,240 con lo cual la puedo usar aquí sin ningún problema 593 00:27:52,240 --> 00:27:55,900 vale, y ahora este programa 594 00:27:55,900 --> 00:27:57,880 pues ya sí que parece que lo tiene todo 595 00:27:57,880 --> 00:27:59,799 vamos leyendo 596 00:27:59,799 --> 00:28:02,200 dame número, lo sumo 597 00:28:02,200 --> 00:28:04,039 a la variable 598 00:28:04,039 --> 00:28:04,819 acumuladora 599 00:28:04,819 --> 00:28:07,720 ¿es diferente de cero? 600 00:28:08,339 --> 00:28:09,859 siguiente, otra vez 601 00:28:09,859 --> 00:28:12,980 es diferente de 0 siguiente otra vez a sumar 602 00:28:12,980 --> 00:28:14,880 cuando ya el bucle ha terminado 603 00:28:14,880 --> 00:28:16,640 es porque el sumando que me han introducido 604 00:28:16,640 --> 00:28:19,000 es 0 pues muestro la suma y punto pelota 605 00:28:19,000 --> 00:28:21,420 vale 606 00:28:21,420 --> 00:28:24,339 entonces hemos aplicado 607 00:28:24,339 --> 00:28:25,079 de nuevo 608 00:28:25,079 --> 00:28:27,900 pues lo que ya sabíamos 609 00:28:27,900 --> 00:28:30,380 primero que esto es una suma acumulativa 610 00:28:30,380 --> 00:28:32,420 pues ya tengo yo mi estructura 611 00:28:32,420 --> 00:28:34,400 mi variable acumuladora 612 00:28:34,400 --> 00:28:36,440 iniciándose a 0 y la operación 613 00:28:36,440 --> 00:28:37,740 de incorporar sumando 614 00:28:37,740 --> 00:28:40,319 que lo estoy poniendo así para que se vea más claro 615 00:28:40,319 --> 00:28:42,440 lo que hacemos, pero ahora ya que lo tenemos 616 00:28:42,440 --> 00:28:43,880 claro, esto quedaría más bonito 617 00:28:43,880 --> 00:28:46,480 así, ¿verdad? que ya sabemos que es equivalente 618 00:28:46,480 --> 00:28:46,960 a lo anterior 619 00:28:46,960 --> 00:28:50,460 estos operadores cuando los vimos 620 00:28:50,460 --> 00:28:52,140 pues ya sabemos que se queda entre lo anterior 621 00:28:52,140 --> 00:28:54,440 vale, pues entonces 622 00:28:54,440 --> 00:28:56,579 suma acumuladora, empieza valiendo 623 00:28:56,579 --> 00:28:58,680 cero y voy sumando lo que toque 624 00:28:58,680 --> 00:29:00,519 ¿qué es lo que toca? 625 00:29:00,700 --> 00:29:01,880 pues depende del ejercicio 626 00:29:01,880 --> 00:29:04,259 voy a pensarlo, ah, pues lo que toca es lo que yo 627 00:29:04,259 --> 00:29:06,259 meta por teclado, pues lo meto por teclado 628 00:29:06,259 --> 00:29:08,380 como esta suma acumulativa 629 00:29:08,380 --> 00:29:10,259 tiene que ir dentro de un bucle, pues 630 00:29:10,259 --> 00:29:12,359 condición del bucle, pues esta 631 00:29:12,359 --> 00:29:14,119 y ya está, ¿vale? 632 00:29:14,119 --> 00:29:16,200 estoy reutilizando todo el rato lo que ya he 633 00:29:16,200 --> 00:29:23,630 aprendido a hacer, vamos a hacer 634 00:29:23,630 --> 00:29:25,589 la prueba final ejecutándolo por si hubiéramos 635 00:29:25,589 --> 00:29:26,329 hecho algo raro 636 00:29:26,329 --> 00:29:30,569 hay algo que no he 637 00:29:30,569 --> 00:29:32,670 corregido aquí 638 00:29:32,670 --> 00:29:46,859 ah bueno, vale, que hay un error 639 00:29:46,859 --> 00:29:48,779 en el otro, vale, pues 640 00:29:48,779 --> 00:29:50,460 venga, vamos a ir sumando el 2 641 00:29:50,460 --> 00:29:52,619 el 3, el 1, el 4 642 00:29:52,619 --> 00:29:54,779 y el 0, la suma es 643 00:29:54,779 --> 00:29:56,039 efectivamente 10 644 00:29:56,039 --> 00:29:58,119 2 más 3 más 1 más 4 645 00:29:58,119 --> 00:30:01,990 ¿Vale? 646 00:30:05,839 --> 00:30:08,980 Bueno, pues ahora con estas ideas ya podéis hacer vosotros 647 00:30:08,980 --> 00:30:11,680 Este que se nos ha quedado colgado 648 00:30:11,680 --> 00:30:14,680 10 649 00:30:14,680 --> 00:30:17,380 El 10 tiene un matiz 650 00:30:17,380 --> 00:30:20,619 Este, esto, pero que es una cosa que se añade 651 00:30:20,619 --> 00:30:21,140 Que es 652 00:30:21,140 --> 00:30:26,279 Si el primer valor que se introduce no es menor 653 00:30:26,279 --> 00:30:28,039 Intercambiar uno por otro 654 00:30:28,039 --> 00:30:31,180 Entonces pensad a ver como podéis intercambiar el borde de una variable con otra 655 00:30:31,180 --> 00:30:32,960 Pensadlo a ver 656 00:30:32,960 --> 00:30:35,240 y luego habrá que una vez que lo tengáis 657 00:30:35,240 --> 00:30:37,039 es de nuevo hacer una suma acumulativa 658 00:30:37,039 --> 00:30:39,019 aquí hay 659 00:30:39,019 --> 00:30:40,960 en lugar de suma acumulativa es 660 00:30:40,960 --> 00:30:42,819 producto acumulativo 661 00:30:42,819 --> 00:30:45,220 porque es A por A por A por A 662 00:30:45,220 --> 00:30:47,519 a ver si se os ocurre 663 00:30:47,519 --> 00:30:49,700 aquí es producto acumulativo 664 00:30:49,700 --> 00:30:51,299 es la misma idea pero en lugar de sumando 665 00:30:51,299 --> 00:30:52,660 multiplicando igual 666 00:30:52,660 --> 00:30:54,579 en lugar de sumar multiplicar 667 00:30:54,579 --> 00:30:56,579 porque es multiplicar un número por otro por otro 668 00:30:56,579 --> 00:30:57,819 por otro por otro es igual 669 00:30:57,819 --> 00:31:00,000 factorial 670 00:31:00,000 --> 00:31:02,660 buscáis que operación es 671 00:31:02,660 --> 00:31:06,380 el factorial de n es n por n-1 por n-2 672 00:31:06,380 --> 00:31:08,500 luego de nuevo es una multiplicación acumulativa 673 00:31:08,500 --> 00:31:11,099 es hacer lo mismo y una y otra vez 674 00:31:11,099 --> 00:31:15,839 aquí es una suma y un contador 675 00:31:15,839 --> 00:31:19,539 porque la media es la suma entre el total de números 676 00:31:19,539 --> 00:31:21,619 luego hay que sumar y además contar 677 00:31:21,619 --> 00:31:27,640 entonces con esto podríamos aplicarlo 678 00:31:27,640 --> 00:31:30,000 con un nivel de complejidad pues quizá cada vez mayor 679 00:31:30,000 --> 00:31:33,319 porque hay que hacer más cositas pero todo usando lo mismo una y otra vez 680 00:31:33,319 --> 00:31:35,599 adaptándolo hasta el 16 681 00:31:35,599 --> 00:31:36,859 ¿vale? 682 00:31:41,150 --> 00:31:42,849 venga, pues poneos con ello 683 00:31:42,849 --> 00:31:44,690 y mañana seleccionamos algunos 684 00:31:44,690 --> 00:31:46,569 para corregir 685 00:31:46,569 --> 00:31:50,019 algunos os ocurrirá más fácil 686 00:31:50,019 --> 00:31:51,759 otro más complicado, pero todo el tiempo 687 00:31:51,759 --> 00:31:54,000 dediquéis a pensarlo 688 00:31:54,000 --> 00:31:56,220 y a hacer 689 00:31:56,220 --> 00:31:58,339 bocetos de programa, aunque al final no los terminéis 690 00:31:58,339 --> 00:32:00,200 es todo ese tiempo el que habrá servido 691 00:32:00,200 --> 00:32:00,859 para aprender 692 00:32:00,859 --> 00:32:04,279 ver la solución de partida desde el principio 693 00:32:04,279 --> 00:32:06,240 se entiende que bien que bonito, no habrá servido 694 00:32:06,240 --> 00:32:06,819 para aprender 695 00:32:06,819 --> 00:32:09,039 el único aprendizaje habrá sido 696 00:32:09,039 --> 00:32:11,319 el rato que uno está tratando de hacerlo 697 00:32:11,319 --> 00:32:12,779 probando, haciendo cosas 698 00:32:12,779 --> 00:32:14,859 y seguramente no llegando a nada 699 00:32:14,859 --> 00:32:17,380 pero habrá avanzado una barbaridad 700 00:32:17,380 --> 00:32:18,279 haciendo eso 701 00:32:18,279 --> 00:32:21,619 ¿vale?