20251031 BucleFOR - Contenido educativo
Ajuste de pantallaEl ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:
Vale, pues a ver esto. Bueno, pues entonces, el ejemplo que estaba proyectado antes, era un ejemplo en el cual después de denunciado, hemos identificado que hay algo que se tiene que hacer exactamente 10 veces.
00:00:03
no hasta que el usuario
00:00:23
introduzca un cero
00:00:26
o no hasta que ocurra
00:00:27
que la suma me dé positivo
00:00:30
no hasta una condición cualquiera
00:00:31
que hace que el número de veces
00:00:34
que se realice sea indeterminado
00:00:36
no hasta una condición
00:00:37
sino un número exacto de veces
00:00:38
vale, pues esa situación
00:00:40
un número exacto de veces
00:00:43
también
00:00:45
como es un bucle
00:00:46
la resolveríamos con un while
00:00:48
¿verdad? algo que se haga un número exacto de veces
00:00:52
pues podríamos hacer esto
00:00:54
si yo quiero que algo se haga
00:00:55
un número exacto de veces
00:00:58
pues cojo una variable
00:00:59
que me va a servir de contadora
00:01:03
para contar cuantas veces ejecuta eso
00:01:04
me pongo aquí esta condición
00:01:07
aquí hago lo que haya que hacer
00:01:10
lo que sea
00:01:12
y ahora ya incremento
00:01:13
¿vale? entonces repito
00:01:15
si yo quisiera
00:01:18
si yo quisiera un programa
00:01:19
en el que algo, lo que sea
00:01:25
se me haga un número
00:01:27
exacto de veces
00:01:29
n, por ejemplo
00:01:31
pues tendríamos que hacer esto
00:01:32
¿verdad? este bucle
00:01:34
se ejecuta mientras
00:01:37
i sea menor, perdón, menor
00:01:39
exactamente que n, no menor o igual
00:01:41
¿vale?
00:01:43
y empieza valiendo 0
00:01:47
y mientras i sea menor que n
00:01:49
hago lo que tenga que hacer y dejo
00:01:51
incrementada i
00:01:54
entonces esta variable i que yo he puesto ahí
00:01:54
como se puede llamar i, j, h, o la
00:01:57
esa variable me está sirviendo solo
00:02:00
para contar las veces que se ejecuta el bucle
00:02:03
¿vale?
00:02:06
entonces lo que hace el bucle
00:02:08
pues no lo sé, dependerá de mi problema
00:02:09
lo que haga
00:02:11
pero sí que sé que esa estructura de aquí
00:02:12
es una estructura en la cual
00:02:14
esto, sea lo que sea
00:02:17
se hace exactamente n veces
00:02:19
¿vale?
00:02:22
entonces es una situación que se nos puede dar
00:02:23
el tener que hacer un programa
00:02:26
en el que algo se haga
00:02:28
un número de veces que ya conocemos
00:02:30
tal cual, como ese ejemplo
00:02:32
de antes, programa que lee
00:02:34
10 números, pues 10 veces se va a ejecutar
00:02:36
pues lee 20 nombres
00:02:38
pues ese bucle se va a ejecutar
00:02:40
20 veces, entonces cuando tenemos
00:02:42
un programa en el cual algo
00:02:44
ya sabemos de partida
00:02:46
cuantas veces se va a ejecutar
00:02:48
pues con el while podríamos hacer algo así
00:02:50
y listo, ¿vale?
00:02:52
Entonces, recordad que esto
00:02:54
es una situación distinta a
00:02:55
un bucle
00:02:57
que se va a ejecutar
00:02:59
mientras
00:03:02
una condición sea falsa, pero
00:03:04
no sé cuántas veces
00:03:06
va a tardar el bucle en conseguir
00:03:07
que la condición sea falsa.
00:03:10
Es otra situación, ¿no? Como cuando hacemos un programa.
00:03:11
Programa que está todo el rato
00:03:14
introduciendo números hasta que
00:03:15
introduzca uno positivo.
00:03:18
¿No? Un programa de validar que tú estás
00:03:20
metiendo un número todo el rato, mientras el usuario
00:03:22
meta negativo, no te interesa. Hasta
00:03:24
que no meta positivo, no sales del bucle.
00:03:25
Ese bucle, no sabemos cuántas
00:03:28
veces se va a ejecutar. En alguna
00:03:30
ejecución, igual que se ejecuta 5, porque
00:03:31
ha tardado 5 veces en meter el positivo.
00:03:33
Pero en otra ejecución
00:03:36
que hagamos después, a lo mejor se ejecuta
00:03:37
10 veces, porque ha tardado
00:03:39
10 veces en meter el positivo.
00:03:41
Esa sería
00:03:44
otra situación.
00:03:45
Pero una situación muy concreta,
00:03:47
repito, es aquella en la cual
00:03:49
sabemos a priori las veces
00:03:51
que queremos que se ejecute el bucle
00:03:54
lo sabemos a priori, quiero que se ejecute
00:03:56
20, porque es mi problema
00:03:57
y necesita eso
00:04:00
bueno, pues en ese caso
00:04:02
haríamos algo así
00:04:03
pero hay otra sintaxis
00:04:05
para el bucle, hay otra sintaxis
00:04:08
que lo único que aporta
00:04:10
es escribir esto de forma más bonita
00:04:12
nada más
00:04:14
y esa sintaxis
00:04:15
es la sintaxis del bucle for
00:04:17
que la usamos
00:04:20
porque queda más bonito
00:04:22
solo por eso
00:04:24
en situaciones en las cuales yo quiero
00:04:25
que lo que hay dentro del bucle se ejecute
00:04:28
exactamente un número
00:04:30
concreto de veces
00:04:32
¿vale?
00:04:33
¿que es obligatorio usar el for?
00:04:37
pues no, este bucle está muy bien
00:04:39
este bucle
00:04:40
es un bucle que se ejecuta exactamente
00:04:42
n veces
00:04:44
esto está bien
00:04:45
lo que pasa es que, bueno, que he tenido que hacer esta variable aquí fuera,
00:04:46
ahora tengo que incrementarla aquí, que ni siquiera tengo que incrementarla aquí,
00:04:51
podría poner el más más ahí, ¿verdad?
00:04:54
Podría poner ahí el más más, y aquí esto ya no me haría falta, ¿vale?
00:04:57
Que, por tanto, el for no lo necesitamos en realidad.
00:05:04
Es otra herramienta de sintaxis más para que mis códigos queden más bonitos, nada más.
00:05:08
Bueno, pues vamos a ver entonces cuál es esa sintaxis del bucle for,
00:05:14
que nos va a facilitar la escritura del código en algunos casos, simplemente nos va a facilitar la escritura porque es más ágil, pero no aporta nada que no haga un while, ¿vale?
00:05:18
Bueno, pues ¿cuál es la sintaxis del bucle for? Vale, pues la sintaxis es, primero escribimos for, como no podía ser de otra manera, escribimos for.
00:05:31
Y ahora, entre paréntesis, se pone lo que vamos a ver ahora. Y ahora ya aquí lo que se repite, ¿vale? Entre llaves. Que puede ser una sentencia o muchas, como siempre. Si es solo una, de nuevo, las llaves no son obligatorias. Si lo que se repite es solo una sentencia, las llaves no son obligatorias, ¿vale?
00:05:48
vale
00:06:13
ahora, ¿qué se pone
00:06:15
aquí en estos paréntesis? pues tres
00:06:17
cositas, aquí hay espacio
00:06:19
para tres cosas
00:06:22
y cada una de ellas está separada
00:06:23
por el punto y coma, entonces en el
00:06:27
bucle for van tres cosas separadas
00:06:29
por punto y coma, ¿vale?
00:06:31
¿es obligatorio que aparezcan las tres?
00:06:35
no, puede que en alguna yo no quiera poner nada
00:06:37
ahora cuando veamos lo que significa
00:06:39
puede que lleguemos a la conclusión, no
00:06:40
aquí no me interesa poner nada, pues se queda en blanco
00:06:43
da igual, se queda en blanco
00:06:45
pero el espacio tiene que estar
00:06:46
no me refiero al espacio físico
00:06:49
sino que los puntos y comas
00:06:50
separando los campos tienen que estar
00:06:53
aunque uno no tenga nada dentro
00:06:55
vale, pues vamos a ver
00:06:57
que se pone en estas posiciones
00:06:59
en la 1
00:07:00
en la 2 y en la 3
00:07:02
en la posición 1
00:07:04
yo ahí pongo
00:07:08
una sentencia o varias
00:07:11
¿vale? voy a
00:07:14
poner lo que se puede poner ahí
00:07:26
luego otra cosa es el uso habitual que se le dé
00:07:28
una sentencia o varias
00:07:31
y las que yo ponga ahí
00:07:32
sé que se van a ejecutar
00:07:34
en el momento en el que el for
00:07:37
arranca
00:07:38
y solo esa vez, ya nunca más se volverán
00:07:39
a ejecutar, luego
00:07:42
se ejecutan
00:07:44
al comienzo del bucle
00:07:46
pero solo una primera
00:07:51
a ver, es decir, es como unas sentencias que se ejecutan cuando el bucle arranca, ¿vale?
00:07:53
Y solo se ejecutan esa vez. ¿Qué se pone en la posición 2? Ahí hay que poner una
00:08:04
condición, eso es lo que se pone ahí, una condición, muller. Esta condición sería
00:08:23
como la condición del while, tiene el mismo significado, es una condición que si se cumple
00:08:33
entramos y el bucle for vuelve arriba otra vez y vuelve a evaluar condición. Si se cumple
00:08:38
volvemos a entrar y vuelve a evaluar condición. Si se cumple volvemos a entrar. Luego, este
00:08:45
bucle, por ejemplo, este bucle con una condición aquí y este bucle for con esto y esto serían
00:09:03
lo mismo, por ejemplo
00:09:18
yo este campo no lo uso, este campo
00:09:19
que todavía sabemos lo que es, no lo uso, uso solo
00:09:22
la condición, luego
00:09:24
esto y
00:09:26
esto
00:09:28
serían exactamente igual, me da igual
00:09:29
poner una cosa que otra, lo que pasa
00:09:32
es que esta queda muy fea, cuando usamos el
00:09:34
for es porque queremos usar
00:09:36
esta posibilidad y esta
00:09:38
posibilidad, si no quiero
00:09:40
usarlas, para eso pongo un while
00:09:42
que se ve mucho más claro, mientras se cumple
00:09:44
la condición y tera, mientras se cumple y tera
00:09:46
entonces poner esto y poner esto
00:09:48
significa lo mismo
00:09:51
a efectos de lo que va a ejecutar el programa es lo mismo
00:09:52
pero en este caso
00:09:55
esta queda más fea
00:09:57
para qué poner yo ahí unos espacios que no uso
00:09:59
vacíos, pongo lo de arriba y ya está
00:10:01
el for lo usamos
00:10:02
cuando esto nos interesa
00:10:05
vale, pues ya sabemos lo que significa
00:10:06
este segundo campo
00:10:09
y qué significa el tercer campo
00:10:10
qué puedo poner yo ahí si quiero
00:10:13
no es obligatorio poner algo
00:10:15
ahí ponemos de nuevo
00:10:16
una sentencia o varias
00:10:19
una sentencia o varias
00:10:21
¿y cuándo se ejecutan esas?
00:10:32
pues se ejecutan
00:10:34
en cada iteración
00:10:36
y una vez que ha terminado lo que hay dentro
00:10:38
¿vale? o sea el bucle for
00:10:41
tendrá sentencias que son las que se repiten
00:10:43
pues en cada vuelta
00:10:44
se hará lo que hay dentro
00:10:47
y después de hacerse
00:10:49
se hace lo que hay aquí
00:10:51
y volvemos arriba a evaluar condición
00:10:52
si es cierta, se hace lo que hay dentro
00:10:54
y se hace lo que hay aquí
00:10:57
otra vez, luego
00:10:59
esto se hace una vez en cada
00:11:00
iteración
00:11:03
y siempre después de haber terminado
00:11:03
lo que hay escrito dentro
00:11:07
no, solo se hace
00:11:08
al principio cuando arranca el bucle
00:11:23
y ya está
00:11:25
solo esa vez
00:11:27
vale, pues esta es la sintaxis, ahora el tema es
00:11:28
¿en qué me puede
00:11:39
ayudar a mí esto a escribir código?
00:11:42
¿en qué puede ser útil?
00:11:44
¿en qué puede ser práctico? ¿cómo me puede ayudar
00:11:46
a escribir códigos un poquito
00:11:48
más claros?
00:11:49
¿vale? pues si ya entendemos
00:11:53
lo que significa cada cosa, esto se
00:11:54
adapta exactamente
00:11:56
a la situación que hemos escrito antes
00:11:58
para hacer un bucle
00:12:00
que se ejecuta exactamente n veces
00:12:02
¿por qué? vamos a
00:12:04
esto, ah no
00:12:08
¿cómo era lo de, a ver
00:12:14
¿le puedo hacer?
00:12:21
no, no sé cómo se hace pequeño
00:12:28
cómo se hacía pequeño esto, por probar
00:12:30
¿eh?
00:12:32
¿es así? ¿por qué no lo
00:12:34
pero y por qué no me
00:12:35
ah, vale, así sí, vale
00:12:38
vale, pues a ver
00:12:42
vale, pues en qué medida
00:12:45
este for de aquí
00:12:51
este for de aquí
00:12:54
nos puede ser útil para escribir código
00:12:56
ya digo, no es que nos aporte nada
00:12:58
todo lo que hacemos aquí lo pensamos como un while
00:13:00
¿en qué medida? pues por ejemplo
00:13:01
antes hemos dicho, vamos a ver
00:13:03
yo quiero hacer algo exactamente
00:13:05
n mayúscula a veces
00:13:08
pues hemos dicho
00:13:09
pues bueno
00:13:12
tendré yo que hacer una variable
00:13:12
ahora un bucle while
00:13:16
que mientras esa variable sea menor que ese número exactamente de veces
00:13:20
se haga lo que se tiene que hacer
00:13:25
y luego voy a incrementar esta variable en cada iteración
00:13:27
para asegurarme de que se va a ejecutar exactamente n veces
00:13:31
la primera vez que entra i vale 0
00:13:38
y luego sale con i valiendo 1
00:13:40
la siguiente vez i vale 1
00:13:42
y luego sale con i valiendo 2
00:13:45
Mientras sea menor que n sigo entrando, luego con esta estructura está claro que este bucle se ejecuta n veces, ¿vale?
00:13:47
Pero para conseguir que este bucle se ejecute n veces, pues he tenido que hacerme esta sentencia que se ejecuta al principio
00:14:00
y luego he tenido que hacerme esta otra aquí que se va a ejecutar en cada iteración y al finalizar.
00:14:07
pues es que es justo
00:14:15
para lo que sirven los campos
00:14:17
del for, es justo para lo que sirven
00:14:19
entonces el for
00:14:21
aunque se puede usar
00:14:23
poniendo uno aquí lo que le dé la gana
00:14:25
sabiendo lo que hará
00:14:27
la situación típica para la que
00:14:28
encajes en esta
00:14:31
si yo quiero programar esto con un for digo
00:14:32
ah maravilloso, esta sentencia
00:14:35
que quiero que se ejecute una vez
00:14:37
al arrancar, esta sentencia
00:14:39
la coloco aquí
00:14:41
en el 1
00:14:43
aquí pongo la condición
00:14:44
porque es la condición que marca
00:14:46
si yo
00:14:48
sigo iterando o no
00:14:49
y esta otra la pongo
00:14:51
aquí, que está
00:14:54
este campo de aquí tiene la sentencia
00:14:56
que se hace una vez
00:14:59
por iteración
00:15:01
y siempre al acabar
00:15:02
pues justo, en lugar de escribirlo así con el while
00:15:03
que queda más feo
00:15:07
pues lo puedo escribir esto a mismo
00:15:08
con un for
00:15:11
y si lo escribo con un for
00:15:13
pues esto será
00:15:18
en el primer campo esa primera sentencia
00:15:19
luego la condición
00:15:28
y luego esta otra
00:15:30
y ahora aquí ya
00:15:36
lo que sea
00:15:40
luego el código de la izquierda
00:15:41
y el código de la derecha
00:15:48
hacen exactamente lo mismo
00:15:49
hacen lo mismo
00:15:51
pero aquí está como más compacto
00:15:52
está más bonito
00:15:56
y este es el uso habitual
00:15:57
de un bucle for
00:16:02
el uso habitual
00:16:03
el
00:16:05
escribir un bucle
00:16:06
que sabemos que se va a ejecutar
00:16:10
exactamente lo que yo ponga aquí
00:16:12
que yo quiero un bucle que se ejecute
00:16:14
exactamente 10 veces
00:16:16
pongo esto, con n igual a 10
00:16:17
si quiero un bucle que se ejecute exactamente 15 veces
00:16:20
pongo esto, con n igual a 15
00:16:23
¿el que?
00:16:25
la llave
00:16:27
Bueno, sí, quería ponerla que se abriera
00:16:28
¿Vale?
00:16:31
Dime
00:16:33
No, no es tercera condición, es sentencia
00:16:33
Sí, y más más
00:16:37
Que es esta misma que va aquí
00:16:39
¿Vale?
00:16:40
Pues es el uso habitual
00:16:48
Que programa que lee
00:16:49
30 números
00:16:52
Pues lo metemos en un for desde i igual a 0
00:16:53
Mientras i sea menor que 30, incrementando i
00:16:57
Leo número y hago lo que sea con él
00:16:59
¿Vale?
00:17:01
En lugar de hacer esto
00:17:02
primero hago la sentencia, aquí la voy incrementando
00:17:03
pues escribimos esto y ya está
00:17:06
que es más
00:17:08
cómodo
00:17:10
pero eso sí, el uso que se le
00:17:11
puede hacer de estos campos
00:17:14
es el que a uno le dé la gana
00:17:16
pero claro
00:17:18
la idea es simplificar, o sea no meter aquí
00:17:19
un montón de código que se hacía al principio
00:17:22
lo pongo antes y ya está
00:17:24
o no poner aquí un montón de sentencias
00:17:26
porque eso se me estira y queda un montón de lío
00:17:28
para eso las pongo aquí y se ve más
00:17:30
claro, la idea es no hacer
00:17:32
aquí un lío
00:17:34
este es su uso habitual
00:17:35
pero aquí se puede meter cualquier condición
00:17:37
aquí cualquier
00:17:40
sentencia, aquí también
00:17:41
vale
00:17:43
escribirlo así
00:17:46
en lugar de así
00:17:49
tiene una ventaja añadida
00:17:51
primero lo claro que parece que se ve
00:17:53
¿no?
00:17:56
la ventaja añadida es que mirad
00:17:57
esta declaración
00:17:59
es decir, todo esto
00:18:02
es una declaración
00:18:04
a la vez que una asignación
00:18:06
vale, pero la declaración
00:18:07
está hecha en los paréntesis
00:18:10
¿eso qué significa?
00:18:12
que esta variable i
00:18:15
dura solo
00:18:16
solamente está viva, solo existe
00:18:18
el tiempo que se ejecute este for
00:18:20
sin embargo aquí
00:18:22
esta variable i va a estar
00:18:24
ya viva todo el programa
00:18:26
con lo cual hay un nombre
00:18:28
de variable i
00:18:30
que ya está ahí
00:18:31
molestando para siempre.
00:18:33
¿Vale? Repito.
00:18:38
Un segundo. Cuando declaramos una variable,
00:18:39
por ejemplo, haciendo esto, ya sabemos
00:18:42
lo que pasa.
00:18:44
¿Qué hacemos? Que de repente aparece un espacio en memoria.
00:18:46
¡Pum! Aparece. Del tamaño que toque.
00:18:48
En este caso, 32 bits.
00:18:50
A ese espacio en memoria se le da un nombrecito.
00:18:52
El que yo ya he puesto aquí.
00:18:55
Y luego, además, si hay una asignación,
00:18:56
si además la hay, pues se asigna.
00:18:58
Todo esto pasa.
00:19:00
Vale, pues en esta versión del código, cuando hemos hecho esta declaración, pum, este espacio ha aparecido bajo el nombre i y ese espacio se queda para siempre, ya está, todo el programa ahí se queda, con lo cual este nombrecito i va a estar accesible en cualquier punto del programa, incluso 200 líneas más abajo, donde ya ni nos acordábamos de que había una variable i porque solo servía para esto, que es una cosa muy puntual.
00:19:01
entonces no deja de ser una molestia
00:19:30
el tener esa caja ahí
00:19:32
que yo solamente la quería
00:19:33
como contador de este bucle
00:19:35
no deja de ser una molestia
00:19:37
vale, pues al meterla aquí
00:19:38
en estos paréntesis
00:19:41
esta caja pum
00:19:43
que de repente ha aparecido y se ha abierto
00:19:46
cuando
00:19:48
se ha hecho aquí la declaración
00:19:49
cuando el bucle termina
00:19:51
esta caja desaparece
00:19:53
vale, solo está viva
00:19:56
solo vive y solo está accesible
00:19:58
Dentro del bucle, solo dentro
00:19:59
Solo dentro, fuera ya no
00:20:02
Fuera ya no hay variable ing
00:20:04
Y nada
00:20:06
Porque está declarada aquí dentro
00:20:06
¿Vale?
00:20:09
¿En el while?
00:20:10
¿En el dentro del?
00:20:12
¿Puede declarar dentro del while una variable?
00:20:19
¿Aquí?
00:20:22
No, ¿vale?
00:20:23
No, no, no, eso es
00:20:27
Lo siguiente con lo que a raíz de esto
00:20:29
Me quería meter, el ámbito de variables
00:20:31
Lo que pasa es que en este caso en concreto
00:20:33
no la podrías declarar dentro del este
00:20:35
porque si no la condición no la vería
00:20:37
para esta situación en concreto es que no la podrías
00:20:39
declarar dentro
00:20:41
entonces ahora
00:20:42
vamos por partes
00:20:44
entendéis la diferencia
00:20:46
de situaciones
00:20:49
entonces esto nos lleva
00:20:50
precisamente a lo que apuntas tú
00:20:53
que las variables
00:20:55
nosotros hemos asumido hasta ahora
00:20:56
que desde el momento en que las declaras
00:20:59
aparecen
00:21:01
y ya están ahí
00:21:03
vivas en memoria RAM
00:21:05
para siempre con su nombre, todo el
00:21:06
programa. Eso
00:21:08
podría llegar a ser una molestia porque
00:21:10
las variables a lo mejor yo las uso solo
00:21:13
en un trocito de código
00:21:14
y no quiero esa caja ahí abierta con ese
00:21:16
nombre el resto del programa. Puede ser
00:21:18
una molestia primero de ocupación
00:21:20
de RAM innecesaria
00:21:22
y luego que al final pues hay un montón de nombres
00:21:24
que yo los puedo usar
00:21:26
por error y se refiere a una variable
00:21:28
que he declarado docente a líneas más arriba.
00:21:30
Entonces nos gustaría alguna
00:21:33
manera de acortar
00:21:34
la vida de las variables y que sólo
00:21:36
existan durante el tiempo
00:21:38
el trozo de código en el que me interesa
00:21:40
usarlas. ¿Se puede hacer
00:21:42
eso? Sí. ¿Gracias a qué?
00:21:44
Gracias a la existencia
00:21:47
de lo que
00:21:48
hemos mencionado que se llama
00:21:49
bloques de código, que son
00:21:52
trozos de código entre llaves.
00:21:54
Entonces, esto que voy a
00:21:57
mencionar ahora a raíz de lo del FOR
00:21:58
es lo que llamamos
00:22:00
ámbito
00:22:02
de las variables
00:22:03
el ámbito de las variables
00:22:05
es
00:22:08
el trozo de código
00:22:10
en el que están vivas y son accesibles
00:22:12
el ámbito de las variables
00:22:14
es
00:22:20
la porción de código
00:22:20
en el que existen y son accesibles
00:22:23
claro, por su nombre
00:22:32
en el que existen y digamos
00:22:34
que y por tanto
00:22:42
son accesibles, claro
00:22:43
por su nombre
00:22:45
si no existen lógicamente no pueden ser accesibles
00:22:47
bueno pues como controlamos
00:22:50
esto del ámbito de las variables
00:22:55
que ámbito tiene una variable
00:22:57
como sé yo
00:22:59
en que porción de código está viva
00:23:01
y en que porción de código no está viva y por tanto
00:23:03
no es accesible o no existe
00:23:05
bueno pues esto está estrechamente
00:23:07
relacionado con lo que
00:23:10
hemos llamado bloques de código
00:23:12
que son troces de código entre llaves
00:23:13
entonces nosotros ya al hacer
00:23:15
if for while
00:23:17
ya hemos hecho programas
00:23:19
que habrían muchos bloques de código
00:23:21
por ejemplo
00:23:23
nuestro programa
00:23:25
siempre está dentro de un main
00:23:26
eso sí o sí
00:23:28
eso ya lo sabemos
00:23:30
está dentro de un main
00:23:32
pues siempre, obligatoriamente
00:23:33
siempre hay un primer bloque de código gordote
00:23:36
que es
00:23:39
el que engloba todo
00:23:40
este es el primer bloque de código
00:23:42
el más gordo, el que lo engloba todo
00:23:44
¿vale? que es mi programa en sí
00:23:46
mi programa es todo un bloque de código muy grande
00:23:48
que está comprendido
00:23:50
entre las llaves del main, ¿vale?
00:23:52
esto es un bloque de código
00:23:54
por ejemplo, llamémosle bloque 1
00:23:55
es un bloque de código, ¿vale?
00:23:58
ahora, yo aquí
00:24:01
dentro de este bloque, puedo declarar
00:24:02
variables
00:24:04
por ejemplo, int
00:24:04
any, ¿vale?
00:24:08
pues esta variable
00:24:10
por estar declarada
00:24:12
dentro de este bloque de código
00:24:14
va a ser visible, accesible,
00:24:16
va a existir todo el bloque entero.
00:24:20
Es decir, una variable existe
00:24:24
en todo el código,
00:24:26
en todo el bloque, perdón,
00:24:29
en todo el bloque en el cual se ha declarado.
00:24:31
Entonces, como int n se ha declarado en el main,
00:24:33
existe en todo el main.
00:24:37
Si yo hago 10.000 líneas
00:24:39
y ahora en la última de todos hago n igual a 100,
00:24:41
ningún problema porque n sigue existiendo ahí
00:24:44
n existe en todo el bloque
00:24:47
por muy largo que sea
00:24:49
vale, pero ocurre
00:24:50
que dentro de un bloque puede abrirse
00:24:53
otro
00:24:55
por ejemplo, mi programa puede
00:24:56
tener aquí a lo mejor una condición
00:24:59
y aquí en esta condición
00:25:01
se me abre otro bloque
00:25:04
vale, en esta
00:25:05
condición, como
00:25:11
tiene un if con varias sentencias
00:25:13
o solo con una
00:25:15
pero yo le puedo poner llaves
00:25:17
pues aquí
00:25:18
se ha abierto otro bloque
00:25:20
llamémosle a este
00:25:22
bloque 2
00:25:25
entonces los bloques son jerárquicos
00:25:26
unos están contenidos dentro de otros
00:25:29
igual que dentro del if
00:25:31
podría haber otro if
00:25:33
podría haber otro if con otra condición
00:25:35
que abriera otro bloque dentro
00:25:37
podría perfectamente
00:25:40
entonces este programa tendría
00:25:41
tres bloques, el bloque 3
00:25:43
que es el código entre estas llaves
00:25:46
del if, que estaría a su vez
00:25:48
contenido dentro del bloque 2
00:25:50
y el bloque 2 a su vez estaría
00:25:52
contenido en el bloque 1 que es el
00:25:54
grandote
00:25:56
bueno pues
00:25:56
dentro de cada bloque yo puedo
00:25:59
declarar variables, las puedo declarar donde me
00:26:02
dé la gana por supuesto
00:26:04
bueno pues a lo mejor dentro de este bloque yo he declarado
00:26:05
una variable m
00:26:08
bueno pues esta variable m como está
00:26:09
declarada en este bloque con estas
00:26:13
llaves, solo existe
00:26:15
en el trozo
00:26:18
de código correspondiente a este bloque
00:26:19
solo existe ahí
00:26:21
cuando este código
00:26:22
ya ha terminado, porque ya se ha ejecutado
00:26:25
la rama del ir, aquí
00:26:27
ya m no existe, y si yo intentara
00:26:29
después de este bloque, hacer m
00:26:31
igual a 100, me diría
00:26:33
el compilador en particular
00:26:35
me dice m is not visible, me diría
00:26:37
eso, ¿qué significa? m no
00:26:39
existe, ¿quién es m? claro que
00:26:41
no existe, porque m
00:26:43
Al estar declarada, recordad que es tener el tipo puesto delante, que es el momento en el que aparece la variable.
00:26:45
Pues al estar declarada en este bloque, durante todo el bloque yo la puedo usar para hacer cosas.
00:26:52
Pero cuando el bloque ha terminado, esa ha desaparecido.
00:26:59
Entonces, ¿esto qué nomenclatura tiene?
00:27:06
Pues bueno, se dice que esta variable M es local a este bucle.
00:27:12
una variable se dice que es
00:27:16
local a un bloque
00:27:19
es local a un bloque porque
00:27:21
solamente funciona
00:27:23
dentro de ese bloque
00:27:26
es una variable local de ese bloque
00:27:27
está localizada en ese bloque
00:27:29
es una variable local de ese bloque
00:27:31
entonces yo puedo
00:27:33
jugar con donde declaro las variables
00:27:38
podría hacer un código
00:27:41
en el cual todas las declaro aquí arriba
00:27:43
todas, muy bien, no pasa nada
00:27:45
están todas aquí arriba, pero hombre
00:27:47
tengo durante todo el programa
00:27:49
tengo un montón de variables que no estoy
00:27:51
utilizando, entonces lo
00:27:53
ideal es declarar
00:27:55
las variables en el bloque
00:27:56
más pequeño posible
00:27:58
si yo esta variable m
00:28:00
solo la utilizo aquí porque es una variable
00:28:02
para hacer cositas que solo se hace aquí
00:28:05
pues la declaro aquí
00:28:07
¿para qué la voy a declarar aquí arriba?
00:28:08
esta variable
00:28:11
¿para qué la voy a declarar aquí?
00:28:11
si solo la uso en este bloque de list
00:28:14
para que esté ya la m viva
00:28:16
todo el rato ahí ocupando
00:28:18
memoria, pues no, la declaro
00:28:21
aquí dentro y ya está
00:28:23
¿vale? bueno pues
00:28:24
tenemos por tanto
00:28:29
que saber dos cosas, una
00:28:32
principio básico de programación
00:28:33
cuanto más locales
00:28:35
sean las variables mejor, porque van a existir
00:28:37
solo el tiempo que es necesario
00:28:40
¿vale? entonces yo selecciono
00:28:41
el código más pequeño en el que es obligatorio
00:28:44
que estén, claro
00:28:46
eso por un lado, y luego
00:28:46
quedémonos con ese error
00:28:49
cuando el compilador me dice
00:28:52
oye, esta variable no es visible
00:28:53
cuando me diga que esta variable no es visible
00:28:55
rápidamente conectamos
00:28:58
a esto, ah, es que la he declarado
00:29:00
en un bloque pequeño
00:29:02
y la tengo que sacar y declarar al bloque
00:29:04
de arriba, porque la estoy usando
00:29:06
aquí, entonces cuidado
00:29:08
que la he declarado en un bloque demasiado pequeño
00:29:10
saquemosla y declarémosla fuera
00:29:12
para poder acceder yo aquí
00:29:14
esas son las dos cosas esencialmente
00:29:15
con las que tenemos que quedarnos por ahora
00:29:19
en relación con el ámbito de las variables, ¿vale?
00:29:22
Vamos a verlo con ejemplos.
00:29:29
Vale, pues, a ver.
00:29:57
En el proyecto de ejemplo de bucles,
00:30:04
que volveré a subir,
00:30:07
pues vamos a poner ejemplo de for.
00:30:08
Vale, pues, por ejemplo,
00:30:29
Vamos a leer 10 números decimales
00:30:31
Por ejemplo
00:30:38
Podrían decirme leer 10 números decimales
00:30:39
Para hacer lo que sea
00:30:42
Vale, entonces yo tengo que hacer 10 veces
00:30:43
Esto de leer el numerito, ¿verdad?
00:31:05
Tengo que hacer 10 veces esto
00:31:08
Vale, pues entonces
00:31:10
Desde el momento en que sé exactamente
00:31:12
Las veces que tengo que hacer algo
00:31:13
Pues ya me puedo hacer un bucle for directamente
00:31:15
con esta sintaxis
00:31:19
por ejemplo, este podría ser
00:31:20
nuestro numerito
00:31:35
vale, pues ya está
00:31:36
esta es la sintaxis
00:31:53
del for
00:31:55
¿verdad? entonces lo vamos a leer
00:31:57
vale, y esto se ejecutará
00:31:59
a ver, voy a ponerle 3 para no tener que meter
00:32:21
10 números
00:32:23
le pongo 3
00:32:24
y este bucle
00:32:27
se va a ejecutar exactamente 3 veces
00:32:29
esto ya es que
00:32:32
la lectura ya no es muy natural
00:32:33
porque esto significará, arrancando con i igual a 0
00:32:35
y mientras i sea menor que 3
00:32:40
e incrementando i en una unidad cada vez
00:32:42
pues hace esto, eso que significa
00:32:45
ejecútate 3 veces, si empiezas en 0
00:32:48
te incrementas en una unidad cada vez y mientras i sea menor que 3
00:32:51
pues se ejecutará
00:32:55
para i igual a 0, 1 y 2
00:32:58
¿vale? entonces
00:33:00
aquí dentro
00:33:03
podemos mostrar
00:33:09
la variable i tranquilamente si queremos
00:33:11
porque la variable i
00:33:15
la hemos declarado aquí dentro
00:33:17
y es una variable que existe y es accesible
00:33:20
dentro de este código sin ningún problema
00:33:23
¿no? por ejemplo este for me va a decir
00:33:25
número 0
00:33:29
y luego me pide el número
00:33:31
número 1, número 2
00:33:33
porque irá valiendo primero 0
00:33:35
luego 1 y luego 2
00:33:37
¿verdad? mi variable i
00:33:38
la primera vez vale 0, la siguiente vale 1
00:33:40
la siguiente vale 2
00:33:43
y mi variable i yo la podría
00:33:43
tocar aquí dentro y hacer con ellas
00:33:47
mil cosas, bueno primero vamos a
00:33:48
probar esto por si
00:33:51
hemos escrito algo mal
00:33:53
el número 0, pues este
00:33:54
el número 1, este
00:34:00
el número 2, este y ya está
00:34:02
tres veces y acabó
00:34:04
tres veces y acabó
00:34:08
vale
00:34:09
la variable i
00:34:10
yo aquí puedo hacer con ella lo que me dé la gana
00:34:13
es una variable más que está declarada
00:34:15
en este bloque
00:34:17
es una variable más
00:34:17
por ejemplo
00:34:20
¿qué podríamos hacer aquí para convertir a este
00:34:23
bucle en un bucle infinito que no acabará nunca?
00:34:26
¿qué sentencia puedo poner ahí?
00:34:29
no, aquí mismo
00:34:34
en donde yo estoy situada en este
00:34:35
¿qué sentencia me sugerís
00:34:36
para convertir este bucle en infinito?
00:34:39
aquí, como última línea de código
00:34:41
aquí
00:34:43
¿qué podría escribir?
00:34:44
claro, si la vuelvo a bajar otra vez
00:34:50
entonces no avanzo
00:34:52
porque i se va incrementando
00:34:53
en cada iteración, pero yo aquí la vuelvo
00:34:56
a bajar, con lo cual i no avanza
00:34:58
jamás va a llegar a 3
00:35:00
entonces este bucle
00:35:01
se convertiría en un bucle
00:35:02
ah bueno, es que le he metido
00:35:05
una letra en vez de un número
00:35:08
ahí se me queda hasta el infinito
00:35:10
¿vale?
00:35:14
entonces lo paro
00:35:17
Cuando tenéis un programa que no para, acordaos que el proceso lo podéis detener aquí, ¿vale? Porque hay veces que habéis lanzado un programa un montón de veces porque no le funciona y lo volvéis a lanzar, no lo volvéis a lanzar y tenéis un montón de procesos ejecutándose.
00:35:20
habéis lanzado un programa un montón de veces
00:35:38
y que el programa no termina
00:35:40
entonces
00:35:41
cuidado
00:35:43
para ver uno
00:35:45
los programas que tiene lanzados
00:35:47
si le dais aquí
00:35:50
por ejemplo
00:35:53
voy a lanzar
00:35:55
este no ha terminado porque es imposible
00:35:56
y sé que no ha terminado porque me aparece
00:35:58
esto en rojo
00:36:01
y podría lanzar otra vez
00:36:01
este
00:36:04
ala, otro lanjao que tengo aquí
00:36:04
Y digo, uy, he cambiado una cosa
00:36:08
He cambiado una cosa
00:36:12
Voy a poner dos puntos
00:36:14
Voy a volver a probarlo
00:36:15
Y lo lanzo otra vez
00:36:17
Otro, un tercer proceso que se está ejecutando
00:36:18
Hombre, evitemos esto
00:36:23
Vale, ahora mismo tengo tres procesos lanzados
00:36:26
¿Cómo podemos pararlos?
00:36:30
Este lo puedo parar así
00:36:33
Pero, si le vais dando aquí
00:36:34
A estas dos X de aquí
00:36:37
te van resucitando los otros que tenías ahí parados
00:36:39
o sea, que tenías ahí lanzados
00:36:42
ahora voy a parar este
00:36:44
¿tengo algún otro? uy, sí, tengo otro
00:36:45
ahora lo voy a parar
00:36:47
¿tengo algún otro? no, ya no tengo nada
00:36:49
¿vale? cuidado con cuando lanzáis
00:36:51
programas que tienen bucles infinitos
00:36:54
o lecturas a menú
00:36:56
y siguen ahí esperando
00:36:57
no tengáis mil ejecuciones lanzadas a la vez
00:36:58
porque llega un momento en que no sabéis en qué ejecución estáis
00:37:02
y creéis que estáis ejecutando
00:37:04
un código y estáis ejecutando otro
00:37:06
¿vale?
00:37:07
Entonces, dime, ¿puede haber cualquier cosa que sea una condición? Por ejemplo, imaginaos que el programa se modifica y me dicen ahora, introduce 10 números decimales, pero cuidado, si el número es 0, para.
00:37:11
No hagas más, o sea, 10 siempre y cuando sean diferentes de 0
00:37:59
¿Vale? Vamos a ponerlo aquí
00:38:02
Versión en la que introduzco 3 números
00:38:04
3 números decimales, pero si se introduce 0 se para
00:38:20
¿Vale? Entonces aquí van a ser 10, pero si es 0 para
00:38:29
Entonces podemos meter esto en esta condición
00:38:39
Entonces, por ejemplo, esta versión
00:38:41
Pues la podríamos hacer
00:38:47
con esto leemos los tres números
00:38:50
está claro, pero espérate
00:38:54
si el número
00:38:56
es cero
00:38:57
quiero parar, entonces la condición
00:39:00
para seguir, ahora la puedo
00:39:02
modificar para que sea
00:39:04
no solo si es menor que tres, sino que
00:39:06
tiene que ser menor que tres
00:39:08
y además
00:39:09
el número leído
00:39:11
que sea diferente de
00:39:13
cero
00:39:17
vale
00:39:18
entonces
00:39:20
aquí esta condición es más compleja
00:39:24
este bucle
00:39:28
se va a ejecutar
00:39:30
una vez, otra vez, otra vez
00:39:31
y así, mientras si sea menor que 3
00:39:34
pero también es obligatorio
00:39:36
que num sea diferente de 0
00:39:38
si en algún momento yo meto el número 0 ya se para
00:39:39
vale
00:39:42
aquí claro me sale el error
00:39:43
de compilación que me dice, oye num podría no tener
00:39:46
nada, no pasa nada
00:39:48
Lo vamos a inicializar a un valor cualquiera
00:39:50
Para forzarle a entrar en el bucle
00:39:52
Lo inicializamos a un valor cualquiera
00:39:56
Y así entra en el bucle
00:39:59
Entra la primera vez
00:40:01
Si no hemos terminado todavía
00:40:02
Y además num no es cero
00:40:07
Entra la segunda
00:40:09
Si todavía no hemos terminado
00:40:10
Y num sigue sin ser cero
00:40:14
Entra la tercera
00:40:16
Luego efectivamente en estos campos de aquí
00:40:17
Uno puede poner cualquier cosa que le interese
00:40:25
Para hacer lo que tiene que hacer
00:40:29
Por ejemplo, muchos de los enunciados que hemos hecho
00:40:31
Pues habrían sido a lo mejor más legibles
00:40:46
Más claros de hacer con un for
00:40:50
Pero en lugar de volver a hacer esos
00:40:52
Vamos a buscar alguno para hacerlo con un for
00:40:56
vale, por ejemplo
00:41:00
el 10
00:41:09
esto, el 9 y el 10
00:41:12
tenían ya que ver
00:41:14
con el concepto de acumulador, ¿verdad?
00:41:15
estos dos
00:41:19
estos tres primeros
00:41:20
eran una suma acumulativa
00:41:21
y este será
00:41:24
un producto acumulativo, que es lo que
00:41:26
dijimos ayer, que fuerais haciendo
00:41:28
vale, pues este primero
00:41:30
esto se tiene que hacer exactamente
00:41:32
10 veces, ¿el qué? el ir multiplicando
00:41:36
por un acumulador
00:41:38
pues venga, tratad de pensar el 10
00:41:39
de hacer el 10 con un
00:41:42
con un for, en lugar de, no sé si
00:41:44
lo habéis hecho o no, pero si
00:41:46
no lo habéis hecho, hacedlo
00:41:48
y en lugar de con un while, con un for
00:41:50
¿vale? idealmente
00:41:52
tanto el 9 como el 10, el que no lo haya hecho
00:41:54
que lo trate de hacer
00:41:56
pero en lugar de con un while, con un for
00:41:58
¿vale? el 9 y el 10, y ahora
00:42:00
antes de irnos lo...
00:42:02
- Materias:
- Programación
- Niveles educativos:
- ▼ Mostrar / ocultar niveles
- Formación Profesional
- Ciclo formativo de grado superior
- Primer Curso
- Subido por:
- Raquel G.
- Licencia:
- Todos los derechos reservados
- Visualizaciones:
- 4
- Fecha:
- 3 de noviembre de 2025 - 10:26
- Visibilidad:
- Clave
- Centro:
- IES ROSA CHACEL
- Duración:
- 42′ 04″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1920x1080 píxeles
- Tamaño:
- 1.55