Saltar navegación

20261022 Ambito_Variables - Contenido educativo

Ajuste de pantalla

El ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:

Subido el 25 de octubre de 2026 por Raquel G.

2 visualizaciones

Descargar la transcripción

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. 00:00:01
suma igual a lo que tuviera de antes, más el sumando nuevo que tenga yo que incorporar, ¿vale? 00:00:27
Hemos identificado que es un montón de sumas, inicialmente cero y cada vuelta del bucle un sumando nuevo, 00:00:35
siguiente vuelta, otro sumando nuevo. Ahora lo que pasa es que tenemos que particularizarlo a nuestra situación, 00:00:43
¿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. 00:00:49
vale, lo tendré que pedir aquí 00:01:16
y ahora pues por ejemplo 00:01:25
mi sumando que sea 00:01:26
igual a esto 00:01:29
a scan.nextIn 00:01:30
vale, en este caso 00:01:33
lo tengo casi más fácil que el anterior 00:01:36
aquí el cada sumando 00:01:38
de cada iteración es un 00:01:40
número nuevo que he leído 00:01:42
pues lo leo, en el ejercicio 00:01:43
anterior, cada sumando 00:01:46
lo tenía yo que ir 00:01:48
obteniendo a partir de un valor 00:01:50
inicial al que le iba sumando 00:01:52
de uno en uno 00:01:54
porque en ese caso me decían suma uno, luego dos 00:01:55
luego tres, me decían los que había que sumar 00:01:58
luego cuatro, luego cinco, me lo estaban diciendo 00:02:00
pues ya está 00:02:02
aquí me están diciendo, los que tienes que sumar no son 00:02:03
primero uno, luego dos, luego tres, tienes que sumar 00:02:06
este que yo te doy 00:02:08
y ahora este que yo te doy, y ahora este que yo te doy 00:02:09
bueno, pues entonces 00:02:13
cada uno de los sumandos 00:02:14
que voy sumando es 00:02:16
este que yo te doy, para adentro de la suma 00:02:17
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. 00:02:20
Vale, pues esto ya está bastante hecho 00:02:35
Es una suma acumulativa 00:02:38
Donde estos números 00:02:41
Estos sumandos cada vez 00:02:42
Lo voy pidiendo 00:02:44
Vale, pero esto sigue sin terminar 00:02:46
Por supuesto 00:02:49
Me faltaría 00:02:50
Lógicamente mostrar la suma 00:02:52
Pero también está sin terminar 00:02:55
Porque, oye, ¿cuándo termino yo? 00:02:59
¿Cuándo termino yo? 00:03:02
Pues estoy en las mismas 00:03:03
cuando el número que 00:03:05
estás leyendo, que en este caso 00:03:08
el número que estás leyendo sea este 00:03:10
sea igual a cero 00:03:12
vale, pues estoy 00:03:14
en la misma situación que ya he visto 00:03:16
que ya conozco, que ya tengo en la cabeza 00:03:18
ah, vale, estoy en 00:03:20
un programa que está pidiendo un valor 00:03:22
para hacer algo, pidiendo un valor para hacer algo 00:03:24
pero la primera vez 00:03:26
tiene que entrar sí o sí, o sea 00:03:28
el primer valor tiene que entrar sí o sí 00:03:30
ah, vale, estoy en las mismas de siempre 00:03:32
Pues voy a cambiarlo por un do while 00:03:33
Me hago yo aquí mi do 00:03:35
Lees el primer número 00:03:37
Y lo sumas 00:03:41
Y esto mientras ocurra que 00:03:43
Mientras ocurra que el número leído 00:03:45
Sea diferente de cero 00:03:49
Lo mismo del primer ejemplo 00:03:51
Que hemos hecho hoy 00:03:53
Mientras sumando sea diferente 00:03:54
De cero 00:03:57
Entonces casi está 00:03:58
Lo he cambiado un do while 00:04:02
simplemente porque me he dado cuenta 00:04:05
que tiene que entrar una primera vez sí o sí 00:04:07
el primer número tengo que dárselo 00:04:09
que ese número ya es cero, no pasa nada 00:04:11
no vuelvo, pero el primer número tengo que dárselo 00:04:13
sí o sí 00:04:16
entonces lo he cambiado a un do while porque veo que se 00:04:16
adapta al do while 00:04:19
pues venga, leo el primer número 00:04:21
lo sumo a la suma acumulativa 00:04:24
ese número es 00:04:26
diferente de cero 00:04:27
vuelvo al siguiente y así todo el rato 00:04:28
vale 00:04:31
Casi está, si no fuera porque el compilador me ha dado un problema. 00:04:33
De nuevo, ¿qué problema? 00:04:37
¿Por qué me está dando ese problema el compilador? 00:04:38
Ahora ya no es tan fácil de verlo, aunque, ¿vale? 00:04:48
Porque es, oye, no puede ser porque no esté inicializada cuando llegue aquí, 00:04:55
porque claro que lo está. 00:05:01
Yo lo primero que hago es leerlo. 00:05:03
Y podríais decir, pero no puede ser que sea porque no está declarada, 00:05:06
porque si es que la estoy viendo declarada aquí arriba. 00:05:11
Entonces, no puede ser por eso, porque no está declarada. 00:05:14
Vale, pues entonces, ¿por qué me da este error? 00:05:23
Pues me da por una cosa interesantísima y básica y fundamental en programación, 00:05:31
que es el ámbito de las variables. 00:05:37
O lo que es lo mismo, ¿cuánto tiempo están vivas las variables? 00:05:47
el error me da por esto 00:05:51
¿vale? 00:05:57
no me da porque no 00:06:00
esté declarada anteriormente 00:06:01
en principio, porque yo la estoy viendo aquí arriba 00:06:03
no me da porque no esté 00:06:05
inicializada, porque claro que lo está 00:06:07
yo entro una primera vez y lo está 00:06:09
me da por otra cosa 00:06:11
otra cosa que tenemos que 00:06:13
entender ahora muy bien 00:06:15
¿vale? entonces vamos a aprovechar para explicarla 00:06:17
ahora, porque es el sitio en el 00:06:19
que encaja 00:06:21
Entonces, pues a ver, vámonos aquí a la pizarra. 00:06:23
Vale, pues nosotros ahora, ¿vale? 00:06:48
Vamos a mencionar que es esto del ámbito de las variables, que es muy importante. 00:06:51
Bueno, como todo. 00:06:59
Vale, pues nosotros ya conocemos, nos suena el término bloque de código. 00:07:05
Nos suena el término bloque de código. 00:07:14
que era un bloque de código 00:07:16
cualquier trozo de código 00:07:17
entre llaves 00:07:19
eso es un bloque de código 00:07:21
entonces 00:07:24
ahora ya estamos viendo programas 00:07:26
que tienen varios bloques de código 00:07:28
al principio de los tiempos 00:07:29
cuando nuestro programa tenía solamente 00:07:31
el bueno class 00:07:33
no se que 00:07:36
y aquí el main 00:07:36
el bla bla bla 00:07:40
main 00:07:42
decíamos nuestro programa va siempre aquí dentro 00:07:42
aquí va siempre 00:07:49
ya entenderemos por qué, por qué hace falta esto 00:07:50
cuando va a funcionar en todo objeto 00:07:54
pero lo que sí que sabemos desde ya 00:07:55
porque estamos partiendo de eso es que nuestro programa 00:07:57
siempre va aquí, vale, eso está claro 00:07:59
bueno, pues 00:08:01
en los primeros tiempos 00:08:03
nuestro programa 00:08:06
estaba en un único bloque 00:08:07
que es en este, ¿verdad? 00:08:09
entre esta llave que se abre aquí 00:08:11
y esta llave que se abre aquí, era un único 00:08:13
bloque de código donde hacíamos todo 00:08:15
pues declarar valiables, las sumas 00:08:17
las operaciones, lo que fuera, un único bloque 00:08:19
¿qué ocurre? 00:08:21
que cuando hemos incorporado 00:08:24
las sentencias de decisión 00:08:25
y los bucles 00:08:27
han empezado 00:08:29
a aparecer bloques anidados 00:08:31
que lo hemos 00:08:33
pasado un poco por alto, no pasa nada 00:08:35
y no nos hemos parado a pensar 00:08:37
qué implicaciones podía tener, que las tiene 00:08:39
y muchas, y muy gordas 00:08:41
vale, por ejemplo 00:08:43
pues eso, nosotros tenemos aquí nuestro programa 00:08:45
pues una variable n que leemos del teclado 00:08:48
scan no sé qué, bla bla bla 00:08:54
y ahora hemos hecho, por ejemplo, si mi variable n es mayor 00:08:57
que cero y aquí hemos abierto otras llaves 00:09:02
para poner un conjunto de sentencias, hemos abierto 00:09:06
otras llaves, con lo cual desde que hemos incorporado los if y los while 00:09:10
nos están apareciendo 00:09:14
subbloques más pequeños 00:09:16
dentro del bloque grande 00:09:18
que es este, el bloque más grandote 00:09:20
¿vale? cada vez que hemos abierto 00:09:23
un if con una llave nos ha aparecido un bloque 00:09:24
pequeñito 00:09:26
luego, los bloques 00:09:27
primera cosa de la que nos damos cuenta 00:09:31
pueden estar, de hecho 00:09:33
están unos dentro de otros 00:09:34
aquí tengo yo un bloque de código 00:09:36
con esas sentencias 00:09:38
y resulta que este bloque de código está dentro 00:09:40
de este otro grandote 00:09:43
no pasa nada, los bloques están unos dentro de otros 00:09:44
vale, ya está 00:09:47
y lo que es más 00:09:48
imaginaos que dentro de este if 00:09:50
si n es mayor que 0 00:09:52
yo quiero hacer no sé qué operación que implica 00:09:54
un bucle 00:09:56
pues entonces, dentro de ese if 00:09:57
yo podría a lo mejor tener aquí un while 00:10:00
porque quiero hacer no sé qué 00:10:02
con lo cual abro otras llaves 00:10:04
con lo cual ahora tengo 00:10:06
tres bloques 00:10:08
este bloque con sus sentencias dentro 00:10:09
que está dentro de este otro más grandote 00:10:12
que es el asociado al id 00:10:15
que está dentro del mayor 00:10:16
luego los bloques pueden estar perfectamente 00:10:19
unos dentro de otros 00:10:21
y así hemos estado programando 00:10:22
y ya está 00:10:25
pero, ¿qué implicación tiene un bloque? 00:10:26
pues desde el momento 00:10:31
en que aparece un bloque 00:10:31
lo que ocurre es que 00:10:32
las variables que estén declaradas 00:10:35
dentro de un bloque 00:10:37
solo tienen vida 00:10:38
solo existe en el trozo de código correspondiente a ese bloque, solo, fuera no existe, es decir, 00:10:41
imaginaos que yo tengo efectivamente aquí un programa en el cual, pues tengo aquí mi 00:10:50
mail y ahora, pues yo que sé, tengo una variable n por aquí y ahora me hago un if, que sea 00:10:57
oye, si n es mayor que 3 o me da igual, pues leo una variable m y yo la declaro aquí dentro, 00:11:09
la leo por teclado, me da igual, le doy un valor, leo una variable m y súmasela a la n, 00:11:19
n igual a n más m. Yo qué sé, imaginaos este código. 00:11:24
Vale, en este bloque más pequeñito, que está aquí dentro, en este bloque, 00:11:31
yo he declarado una variable y puedo, no hay ningún problema porque yo he declarado las variables 00:11:36
en el punto que a mí me dé la gana 00:11:41
siempre y cuando las declare antes de su primer uso 00:11:42
claro, esta está declarada 00:11:45
antes de su primer uso, ningún problema 00:11:47
pero ¿qué ocurre? 00:11:49
que está declarada dentro de este 00:11:51
¿eso qué significa? 00:11:53
que esta variable al estar declarada 00:11:57
dentro de este bloque 00:11:59
solo es visible o accesible 00:12:00
para las sentencias del interior 00:12:02
de este bloque, solo para ellas 00:12:05
para esta lo ha podido ser 00:12:07
sin problema 00:12:08
pero si yo salgo de este bloque 00:12:09
me voy fuera e intento acceder a M 00:12:12
para mostrar M 00:12:14
pues me va a decir 00:12:16
¿eh? ¿M quién es? 00:12:19
no lo sé 00:12:20
porque la variable M solo es visible 00:12:21
solo existe 00:12:24
en el bloque más interno en el que está declarada 00:12:25
solo en este 00:12:29
¿vale? 00:12:30
entonces esta variable está declarada en este bloque 00:12:32
luego solo existe en este bloque 00:12:34
de aquí 00:12:37
no en los que le contienen 00:12:37
en los que le contienen no existe, no es visible 00:12:39
Cuando este código termine 00:12:41
La variable m desaparece 00:12:44
Se va a la basura 00:12:46
En cuanto este código termine 00:12:46
Con lo cual si yo intento mostrarla 00:12:48
Una vez que he acabado este bloque 00:12:50
Es imposible porque m va a haber desaparecido 00:12:52
Esto como va a haber funcionado 00:12:56
Cuando la máquina virtual lo ejecute 00:12:59
Pues la máquina virtual llegará por aquí 00:13:00
Y dirá n igual a 3 00:13:03
Ah muy bien, me declaro mi variable n 00:13:04
Esta cajita n y le doy el 3 00:13:06
Vale 00:13:08
Ahora entro en el if 00:13:09
n es mayor que 3, ah vale, bueno, mayor o igual que 3 00:13:11
para que entre, por ejemplo 00:13:15
n es mayor o igual que 3, sí, pues entro en el bucle 00:13:16
¿qué hago en el bucle? 00:13:19
abro un nuevo bloque 00:13:21
y ahora, ah, declaro una variable m 00:13:22
5, muy bien 00:13:25
pues declaro una variable m que se llama 5 00:13:27
y ahora hago 00:13:29
n igual a n más m, luego n más m 00:13:30
es 3 más 5, 8 00:13:33
este 3 desaparece 00:13:34
y se convierte en 8, muy bien 00:13:36
y este código terminó 00:13:39
entonces en cuanto termina la ejecución 00:13:40
de un código 00:13:44
todas las variables que estaban declaradas dentro 00:13:44
todas se van a la basura 00:13:48
todas desaparecen 00:13:49
en cuanto este código ha terminado 00:13:51
la variable m fuera 00:13:53
ya no existe, a la basura 00:13:55
¿vale? 00:13:57
la variable n no 00:14:00
porque la variable n estaba en el código 00:14:01
superior que no ha terminado 00:14:03
entonces 00:14:05
si una vez terminado este código yo intentara 00:14:07
acceder a M para hacer lo que fuera 00:14:09
me diría, ¿y M quién es? 00:14:11
si es que no hay ninguna caja que sea M, ha desaparecido 00:14:13
claro, porque 00:14:16
cuando un bloque termina 00:14:18
todas las variables declaradas 00:14:19
dentro de ese bloque 00:14:22
desaparecen, todas 00:14:23
yo las habré usado 00:14:26
aquí dentro para hacer cosas, porque para eso 00:14:28
las declaré, lógicamente, para hacer cosas 00:14:30
pero en cuanto el bloque termina 00:14:32
todas esas variables 00:14:34
declaradas aquí dentro han desaparecido 00:14:35
todas, a eso se les llama 00:14:37
variables locales 00:14:43
a un bloque 00:14:44
m es la variable local 00:14:46
de este bloque 00:14:49
ahí solamente 00:14:49
dura, vive el tiempo 00:14:52
que esté este bloque ejecutándose 00:14:55
en cuanto estas llaves ya se cierran 00:14:56
ya he terminado 00:14:59
esta que está aquí declarada 00:15:00
desaparece 00:15:02
¿vale? a ver en un ejemplo 00:15:03
entonces voy a 00:15:11
ponerlo aquí en una clase aparte para 00:15:32
vale, pues este es un bloque, está claro 00:15:35
este es un primer bloque 00:15:56
el bloque más grande que hay 00:15:57
en el que puede haber código, este 00:16:00
entonces yo aquí me puedo declarar una variable 00:16:02
todas las que quiera, vale, y aquí están 00:16:04
mis variables, ya está 00:16:08
ahora 00:16:15
yo voy a hacer un bloque cualquiera 00:16:17
por ejemplo, mientras 00:16:19
sea 00:16:23
menor o igual 00:16:24
que 18 00:16:27
pues que voy a hacer 00:16:29
pues a la variable n 00:16:32
le voy a ir sumando un valor 00:16:34
n igual a 00:16:36
más igual 00:16:46
1 yo que sé cualquier tontería 00:16:50
vale 00:16:52
entonces a n o n más más me da igual 00:16:53
vale pues estoy yo aquí en este bucle 00:16:56
en este bucle a mi variable n 00:16:59
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, 00:17:01
porque estas variables declaradas aquí 00:17:27
al estar declaradas en este bloque gordo 00:17:30
van a existir todo el tiempo hasta que el bloque termina 00:17:33
que el bloque termina aquí 00:17:38
entonces estas variables N y M están asociadas al bloque que empieza aquí 00:17:39
ese bloque no termina hasta aquí 00:17:44
con lo cual hasta este punto 00:17:47
N y M están visibles 00:17:50
en particular aquí dentro, ningún problema en todas partes 00:17:53
n y m están visibles 00:17:56
vale 00:17:58
ahora vamos a imaginar que en este bloque 00:17:58
que está aquí dentro 00:18:02
dentro del otro interno, interior 00:18:03
este bloque que es el 00:18:05
del while, aquí declaro 00:18:08
yo una variable 00:18:12
porque yo que sé, por cualquier cosa 00:18:13
declaro una variable por ejemplo 00:18:16
para leerla por teclado 00:18:19
vale, leo esta variable 00:18:23
del teclado y 00:18:43
que quiero hacer con esta variable 00:18:45
pues sumarse la n, por ejemplo 00:18:47
n igual a 00:18:49
n más n2 00:18:52
por ejemplo, voy a cambiar el programa 00:18:54
así, entonces este programa 00:18:55
lee una variable del teclado 00:18:58
y se la suma a n2 00:19:00
lee una variable del teclado y se la suma 00:19:01
a n, perdón, a n2 00:19:04
lee una variable del teclado 00:19:06
y se la suma a n, vale 00:19:08
bueno, pues ya está 00:19:09
este programa hace lo que tenga que hacer 00:19:11
y en este caso en particular que he hecho yo 00:19:13
a la variable 00:19:16
la variable n2 esta de aquí 00:19:18
la he declarado aquí dentro 00:19:20
bueno muy bien 00:19:22
está declarada antes de su primer uso 00:19:24
y no hay ningún problema 00:19:26
pero que ocurre 00:19:28
que en cuanto este bucle while ha terminado 00:19:30
en cuanto este while acabó 00:19:32
y yo ya estoy aquí colocada 00:19:34
la variable n2 ya ha desaparecido 00:19:36
esta variable n2 00:19:39
solo va a existir 00:19:41
durante todo el tiempo en el que se esté ejecutando 00:19:42
ese bucle, solo ahí 00:19:45
porque está declarada aquí dentro 00:19:46
solo ahí, no va a existir fuera 00:19:48
entonces si yo aquí 00:19:50
intentara mostrar 00:19:52
el valor con el que se ha quedado N2 00:19:54
su valor último, cuando el bucle salió 00:19:56
pues N2 habrá tenido su última lectura 00:19:59
el compilador 00:20:01
me va a decir un mensajito que sea 00:20:03
N2 no lo encuentro 00:20:05
N2 está sin declarar 00:20:07
no existe 00:20:09
claro porque N2 00:20:10
está declarada en un bucle 00:20:12
interno a este 00:20:14
en el que está esta sentencia 00:20:16
en un bucle interno, luego N2 00:20:18
no existe 00:20:20
dentro del bucle superior 00:20:21
¿vale? N2 no existe ahí 00:20:24
entonces si yo quiero 00:20:26
que N2 00:20:28
sea visible también aquí 00:20:29
fuera 00:20:32
lo podría arreglar 00:20:33
declarándola aquí 00:20:35
yo la declaro ahí en vez de aquí 00:20:37
y ya está 00:20:39
está declarada afuera 00:20:43
está declarada aquí 00:20:45
aquí es donde recibe su valor, se va sumando 00:20:46
pero al estar declarada afuera 00:20:49
esta caja 00:20:51
esa caja no se pierde ni desaparece 00:20:52
hasta el final de su bloque 00:20:55
y ahí se queda 00:20:56
¿vale? 00:20:58
entonces, tenéis que ver esto 00:21:02
lo del ámbito de las variables 00:21:08
los bloques tenéis que verlos 00:21:20
como si fueran espacios 00:21:22
donde uno puede declarar variables 00:21:24
este sería mi bloque grande, el main 00:21:26
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. 00:21:28
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í. 00:21:40
e imaginaos que dentro de las llaves de ese if 00:21:48
yo hago otra sentencia if o while 00:21:51
con lo cual 00:21:53
a ver, para que se vea mejor 00:21:55
voy a ponerlo en otro color 00:21:57
lo que pongo en verde son los bloques de código 00:21:58
y lo que pongo en rojo 00:22:07
serían las variables 00:22:09
por ejemplo, yo aquí tengo mi variable n declarada 00:22:10
y mi variable m 00:22:13
vale, este es mi main 00:22:14
dentro del bloque de mi main 00:22:17
resulta que yo he abierto un if 00:22:21
que empieza y se cierra ahí 00:22:23
y dentro de mi if resulta que yo 00:22:26
a lo mejor he abierto un while 00:22:28
que empieza y se cierra aquí 00:22:30
entonces tendría tres bloques, este bloque 00:22:31
que está dentro del bloque del if 00:22:34
que a su vez está dentro del main 00:22:36
vale, si dentro del bloque del if yo declaro 00:22:37
x e y, pues x e y 00:22:40
están declaradas solo 00:22:45
en este bloque de aquí, imaginaos que dentro 00:22:46
del while yo he declarado otra 00:22:48
variable t, ahí, vale 00:22:50
aquí he declarado esta 00:22:52
aquí he declarado estas 00:22:53
y aquí he declarado estas 00:22:57
vale 00:23:02
pues cuando el while termine 00:23:03
esta variable int 00:23:06
desaparece 00:23:08
se acabó 00:23:10
pero sin embargo dentro del while 00:23:11
yo puedo acceder a estas 00:23:14
sin problema y a estas 00:23:16
vale, pero cuando el while termine 00:23:17
esto 00:23:20
desaparece 00:23:22
con lo cual esta variable desapareció 00:23:23
luego desde aquí yo no puedo acceder aquí 00:23:25
cuando yo esté en este bloque 00:23:28
yo no puedo acceder a esta variable 00:23:30
aunque está declarada antes 00:23:32
claro, pero está declarada dentro de este bloque 00:23:34
entonces en cuanto este bloque 00:23:36
terminó, esto ha desaparecido 00:23:38
desde aquí, t, no lo puedo ver 00:23:40
no puedo verlo 00:23:42
y aquí lo mismo 00:23:43
int x e int y, yo las puedo ver en cualquier zona 00:23:45
de aquí, en cualquier zona 00:23:48
donde a mí me dé la gana, aquí dentro también 00:23:49
las puedo ver, donde a mí me dé la gana 00:23:51
Pero en cuanto este if termine, tanto int x como int y han desaparecido en cuanto este if termine. 00:23:54
Con lo cual aquí, fuera de esa caja, yo no podría acceder ni a la x ni a la y. 00:24:03
Ahí no puedo, porque esta caja ya terminó, sus variables asociadas desaparecieron. 00:24:08
Y eso es lo que se llama variables locales. 00:24:17
Esta variable es local a este while, solo se puede usar aquí dentro. 00:24:19
estas variables x y y son locales 00:24:23
al bloque del if, solo las puedo usar 00:24:26
aquí 00:24:28
y estas variables n y m son locales 00:24:29
al mail, las puedo usar en cualquier sitio 00:24:32
¿vale? 00:24:34
y luego además 00:24:36
en un bloque en particular no solo 00:24:37
puedes usar las locales a que 00:24:40
hayas declarado tú, sino también 00:24:42
lógicamente las que 00:24:44
están declaradas por encima de ti 00:24:46
¿vale? 00:24:47
entonces 00:24:52
aquí por tanto 00:24:53
n2 imposible usarlo 00:25:06
perdón, aquí n2 00:25:08
ya si podríamos, vale 00:25:10
aquí el error que nos da 00:25:12
ya no es n2 00:25:14
no la puedo ver, claro que la puedes ver 00:25:16
está declarada aquí n2 00:25:18
está aquí, aquí el error que te da 00:25:19
es otro, te dice, oye podría no estar 00:25:22
inicializada, efectivamente 00:25:24
podría no estar inicializada, ¿por qué? porque el 00:25:27
compilador no sabe si 00:25:29
va a entrar aquí alguna vez o no, no tiene ni idea 00:25:32
el compilador ve reglas 00:25:34
no ve los valores concretos 00:25:35
entonces ve que esto es un while 00:25:38
él sabe que a un while 00:25:39
puede que no se entre nunca 00:25:42
a lo mejor no se entre nunca, depende de la condición 00:25:43
entonces el compilador te dice 00:25:45
oye, ¿qué pasa si a este while 00:25:47
no entras nunca? 00:25:49
n2 no tendría valor, no puedo mostrártela 00:25:51
es el error que te da 00:25:54
no que no esté declarada, porque sí que lo está 00:25:55
entonces bueno, ese error en particular 00:25:58
yo que si lo inicializamos a cualquiera y ya está 00:26:00
entonces como veis desde este bloque pequeñito 00:26:02
he podido acceder tanto a n que está declarada aquí fuera 00:26:07
como a n2 que está declarada aquí dentro 00:26:11
cuando lo estaba, desde este bloque puedo acceder 00:26:15
tanto a n que está aquí como a n2 que está local 00:26:26
pero cuando este while termina esta variable ya 00:26:29
desaparece y desde aquí ya es imposible que yo pueda 00:26:34
acceder a ella para ver qué valor tiene 00:26:38
lo que sea, porque ya ha desaparecido 00:26:40
solamente puedo acceder 00:26:41
a las que están declaradas ahí 00:26:43
¿vale? pues ese es el problema 00:26:45
que nos daba en este ejercicio de aquí 00:26:50
que sumando 00:26:52
resulta que está 00:26:54
declarada dentro de este bloque 00:26:56
la he declarado yo aquí 00:26:58
con lo cual 00:26:59
fuera de estas llaves es inaccesible 00:27:01
fuera de estas llaves es inaccesible 00:27:04
entonces 00:27:06
no pasa nada 00:27:08
la declaro fuera 00:27:09
y arreglado 00:27:11
tengo ya mi programa arreglado 00:27:13
vale 00:27:16
la he declarado fuera 00:27:19
ella toma valor dentro, que es donde tiene que tomarlo 00:27:21
en cada iteración del bucle va tomando 00:27:24
su valor, va tomando valor, va tomando valor 00:27:26
va tomando valor, aquí va tomando su valor 00:27:27
pero está declarada afuera 00:27:30
entonces al estar declarada afuera, esa caja 00:27:32
de esa variable, ya va a estar 00:27:34
viva, aunque este bucle 00:27:36
termine, su valor 00:27:38
lo va a ir recibiendo aquí dentro, pero lo que es la caja 00:27:40
va a estar 00:27:42
viva y va a existir todo el rato 00:27:44
porque está declarado aquí, todo el rato 00:27:46
va a existir ahí la caja 00:27:48
con lo cual la puedo usar aquí sin ningún problema 00:27:49
vale, y ahora este programa 00:27:52
pues ya sí que parece que lo tiene todo 00:27:55
vamos leyendo 00:27:57
dame número, lo sumo 00:27:59
a la variable 00:28:02
acumuladora 00:28:04
¿es diferente de cero? 00:28:04
siguiente, otra vez 00:28:08
es diferente de 0 siguiente otra vez a sumar 00:28:09
cuando ya el bucle ha terminado 00:28:12
es porque el sumando que me han introducido 00:28:14
es 0 pues muestro la suma y punto pelota 00:28:16
vale 00:28:19
entonces hemos aplicado 00:28:21
de nuevo 00:28:24
pues lo que ya sabíamos 00:28:25
primero que esto es una suma acumulativa 00:28:27
pues ya tengo yo mi estructura 00:28:30
mi variable acumuladora 00:28:32
iniciándose a 0 y la operación 00:28:34
de incorporar sumando 00:28:36
que lo estoy poniendo así para que se vea más claro 00:28:37
lo que hacemos, pero ahora ya que lo tenemos 00:28:40
claro, esto quedaría más bonito 00:28:42
así, ¿verdad? que ya sabemos que es equivalente 00:28:43
a lo anterior 00:28:46
estos operadores cuando los vimos 00:28:46
pues ya sabemos que se queda entre lo anterior 00:28:50
vale, pues entonces 00:28:52
suma acumuladora, empieza valiendo 00:28:54
cero y voy sumando lo que toque 00:28:56
¿qué es lo que toca? 00:28:58
pues depende del ejercicio 00:29:00
voy a pensarlo, ah, pues lo que toca es lo que yo 00:29:01
meta por teclado, pues lo meto por teclado 00:29:04
como esta suma acumulativa 00:29:06
tiene que ir dentro de un bucle, pues 00:29:08
condición del bucle, pues esta 00:29:10
y ya está, ¿vale? 00:29:12
estoy reutilizando todo el rato lo que ya he 00:29:14
aprendido a hacer, vamos a hacer 00:29:16
la prueba final ejecutándolo por si hubiéramos 00:29:23
hecho algo raro 00:29:25
hay algo que no he 00:29:26
corregido aquí 00:29:30
ah bueno, vale, que hay un error 00:29:32
en el otro, vale, pues 00:29:46
venga, vamos a ir sumando el 2 00:29:48
el 3, el 1, el 4 00:29:50
y el 0, la suma es 00:29:52
efectivamente 10 00:29:54
2 más 3 más 1 más 4 00:29:56
¿Vale? 00:29:58
Bueno, pues ahora con estas ideas ya podéis hacer vosotros 00:30:05
Este que se nos ha quedado colgado 00:30:08
El 10 tiene un matiz 00:30:14
Este, esto, pero que es una cosa que se añade 00:30:17
Que es 00:30:20
Si el primer valor que se introduce no es menor 00:30:21
Intercambiar uno por otro 00:30:26
Entonces pensad a ver como podéis intercambiar el borde de una variable con otra 00:30:28
Pensadlo a ver 00:30:31
y luego habrá que una vez que lo tengáis 00:30:32
es de nuevo hacer una suma acumulativa 00:30:35
aquí hay 00:30:37
en lugar de suma acumulativa es 00:30:39
producto acumulativo 00:30:40
porque es A por A por A por A 00:30:42
a ver si se os ocurre 00:30:45
aquí es producto acumulativo 00:30:47
es la misma idea pero en lugar de sumando 00:30:49
multiplicando igual 00:30:51
en lugar de sumar multiplicar 00:30:52
porque es multiplicar un número por otro por otro 00:30:54
por otro por otro es igual 00:30:56
factorial 00:30:57
buscáis que operación es 00:31:00
el factorial de n es n por n-1 por n-2 00:31:02
luego de nuevo es una multiplicación acumulativa 00:31:06
es hacer lo mismo y una y otra vez 00:31:08
aquí es una suma y un contador 00:31:11
porque la media es la suma entre el total de números 00:31:15
luego hay que sumar y además contar 00:31:19
entonces con esto podríamos aplicarlo 00:31:21
con un nivel de complejidad pues quizá cada vez mayor 00:31:27
porque hay que hacer más cositas pero todo usando lo mismo una y otra vez 00:31:30
adaptándolo hasta el 16 00:31:33
¿vale? 00:31:35
venga, pues poneos con ello 00:31:41
y mañana seleccionamos algunos 00:31:42
para corregir 00:31:44
algunos os ocurrirá más fácil 00:31:46
otro más complicado, pero todo el tiempo 00:31:50
dediquéis a pensarlo 00:31:51
y a hacer 00:31:54
bocetos de programa, aunque al final no los terminéis 00:31:56
es todo ese tiempo el que habrá servido 00:31:58
para aprender 00:32:00
ver la solución de partida desde el principio 00:32:00
se entiende que bien que bonito, no habrá servido 00:32:04
para aprender 00:32:06
el único aprendizaje habrá sido 00:32:06
el rato que uno está tratando de hacerlo 00:32:09
probando, haciendo cosas 00:32:11
y seguramente no llegando a nada 00:32:12
pero habrá avanzado una barbaridad 00:32:14
haciendo eso 00:32:17
¿vale? 00:32:18
Materias:
Programación
Niveles educativos:
▼ Mostrar / ocultar niveles
  • Formación Profesional
    • Ciclo formativo de grado básico
      • Primer Curso
      • Segundo Curso
    • Ciclo formativo de grado medio
      • Primer Curso
      • Segundo Curso
    • Ciclo formativo de grado superior
      • Primer Curso
      • Segundo Curso
Subido por:
Raquel G.
Licencia:
Todos los derechos reservados
Visualizaciones:
2
Fecha:
25 de octubre de 2026 - 19:19
Visibilidad:
Clave
Centro:
IES ROSA CHACEL
Duración:
32′ 23″
Relación de aspecto:
1.78:1
Resolución:
1920x1080 píxeles
Tamaño:
639.24 MBytes

Del mismo autor…

Ver más del mismo autor


EducaMadrid, Plataforma Educativa de la Comunidad de Madrid

Plataforma Educativa EducaMadrid