20251111 EjerBucles_9 - 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:
Bueno, pues momento en el cual leemos el enunciado, para entender exactamente qué nos han pedido.
00:00:00
Solicitar un número por teclado, y a partir de ahí mostrar todos los números inferiores a él que cumplan la condición de ser primo.
00:00:07
vale
00:00:18
pues entonces ya nos hacemos
00:00:20
como ya, ver si un número
00:00:22
es primo o no
00:00:24
ya lo hemos hecho
00:00:26
automáticamente decimos, uy esto me va a ser fácil
00:00:28
porque se apoya
00:00:30
en algo que ya sé hacer
00:00:32
porque ya lo he hecho, que es dado un número cualquiera
00:00:34
a ver si es primo o no
00:00:36
¿en qué cambia este
00:00:38
enunciado? que eso de
00:00:40
ver si un número es primo o no, lo voy a
00:00:42
tener que hacer un montón de veces
00:00:44
en particular lo voy a tener que hacer
00:00:46
para todos los inferiores al dato de entrada
00:00:48
luego es
00:00:50
lo que ya hemos hecho, ver si un número es primo
00:00:51
o no, pero hacer eso dentro de un bucle
00:00:54
que vaya recorriendo
00:00:56
todos los números inferiores
00:00:58
al que me han dado
00:01:00
luego de nuevo como casi siempre
00:01:01
uno construye un programa, hace un diseño
00:01:04
que se va apoyando
00:01:06
en cosas que ya sabe y va construyendo el algoritmo
00:01:08
aquí ya
00:01:10
lo que se nos ocurre es eso, repito
00:01:12
como a mí me dan un número
00:01:13
un único número
00:01:16
tengo que recorrer todos los inferiores
00:01:17
a él, luego ahí hay un primer bucle
00:01:20
este, el siguiente, siguiente
00:01:22
siguiente, un primer bucle
00:01:24
y ahora en cada bucle ¿qué hago?
00:01:25
ver
00:01:29
si el número en el que estoy es primo o no lo es
00:01:30
si lo es lo muestro
00:01:32
y si no pues nada, ver si es primo o no
00:01:33
sé hacerlo, pues esa parte
00:01:36
que va dentro del bucle gordo
00:01:38
es hacer lo que ya hemos hecho
00:01:40
y ya está, y con eso construimos el programa gordo
00:01:42
y luego ya si la versión que nos
00:01:44
queda, pues vemos que la podemos
00:01:46
reducir, dejar más bonita, quitar variables
00:01:48
refactorizar
00:01:51
de alguna manera, pues lo hacemos
00:01:52
vale, pues hala, venga
00:01:53
¿cómo vamos a leer del teclado?
00:01:57
pues el escáner
00:02:01
y ya está, y leemos el número
00:02:02
introduzca número
00:02:13
o ingrese, como me ponéis en el examen
00:02:25
continuamente
00:02:28
los que venís del otro lado del charco
00:02:29
me ponéis ingrese
00:02:32
y los que venís de aquí
00:02:33
me ponéis todo tipo de palabras
00:02:36
extrañas
00:02:38
vale, pues a ver, ya está
00:02:39
vale, ahora ya
00:02:48
tenemos el dato de entrada
00:02:57
pues ahora ya un bucle que
00:02:58
recorra todos los números que van
00:03:01
entre 1 y n
00:03:03
bueno, habría que preguntarle
00:03:05
¿cuándo quieres que
00:03:06
haga la comprobación de todos los inferiores
00:03:09
a él hasta 2 o hasta 1
00:03:11
porque el 1 ya sabemos que no es primo
00:03:14
pues bueno, esos pequeños detalles se podrían aclarar
00:03:15
¿vale? ahora aquí no queda
00:03:18
muy claro, esos pequeños detallitos
00:03:20
la lista de números primos
00:03:22
y fríos a ese número
00:03:24
pues podríamos directamente, mira
00:03:25
entre
00:03:27
entre él y 2
00:03:29
el 1 ya no lo contabilizamos, está fuera de categoría
00:03:31
por ejemplo, y ya está
00:03:34
vale, pues un bucle que recorra
00:03:35
todos los números comprendidos
00:03:38
entre 2 y el que me han dado
00:03:40
que los recorra a todos
00:03:41
¿con qué estructura lo haríais?
00:03:43
pues con un for
00:03:47
porque el for te permite
00:03:48
de forma sencilla declarar una variable
00:03:50
y esa variable que se vaya incrementando
00:03:52
arrancando desde 2
00:03:54
lo podemos hacer con un while pero habría que hacer una variable
00:03:55
fuera y esa variable se iría
00:03:58
incrementando, pero ¿para qué
00:04:00
si tenemos un for que ya tiene
00:04:02
huequitos dentro para hacer eso?
00:04:04
pues como el for ya me
00:04:07
permite hacer eso
00:04:08
para mis numeritos
00:04:09
empezando desde 2
00:04:13
mientras
00:04:15
num sea menor
00:04:18
o igual que el número
00:04:20
que me han dado
00:04:22
no, num es mi variable interna del bucle
00:04:23
n es el que me han dado
00:04:28
incrementando num
00:04:29
num es el i
00:04:31
lo que pasa es que lo he cambiado
00:04:33
para favorecer que no seáis tan rígidos
00:04:35
y estrictos
00:04:38
Que hay veces que, ¡Dios mío, un for sin un i!
00:04:40
Eso está mal.
00:04:42
¿Qué más da?
00:04:44
Hay que favorecer un poquito también
00:04:46
la plasticidad cerebral.
00:04:48
Vale, pues este bucle
00:04:50
me va ofreciendo
00:04:51
números. Me va ofreciendo números
00:04:54
desde el 2 hasta el n, me los va ofreciendo.
00:04:56
Repito, un while
00:04:59
también me los podría ofrecer, pero tendría que
00:05:00
declarar num arriba y luego irlo incrementando
00:05:02
dentro. Pues como ya
00:05:04
tengo el for que me permite
00:05:06
poner esto dentro
00:05:08
que sería como ponerlo aquí
00:05:10
pues me permite ponerlo dentro
00:05:11
y poner esto aquí
00:05:13
que sería como ponerlo aquí debajo
00:05:14
pues lo hago con un for
00:05:16
y más cómodo y más bonito
00:05:17
ahora
00:05:18
este algoritmo en modo caja negra
00:05:20
pues sería
00:05:24
si num es primo
00:05:24
si num es primo
00:05:27
pues
00:05:29
mostrar num
00:05:31
el programa se convertiría en esto
00:05:34
y ya estaría mi programa
00:05:37
para todos los inferiores
00:05:39
si el número es primo lo muestro
00:05:41
ya tengo mi primer boceto
00:05:43
y ya he hecho mucho, ya he hecho un montón
00:05:45
ahora voy
00:05:47
desglosando, ahora voy yendo al detalle
00:05:49
el detalle que se me ha quedado ahí colgando
00:05:53
num es primo, tengo yo alguna condición sencilla
00:05:57
para poner si un número es primo o no
00:06:00
no, no lo tenemos
00:06:02
porque de hecho ya habíamos hecho un ejercicio
00:06:03
que era de un número, te decía si era primo o no.
00:06:05
Y tuvimos que hacer
00:06:07
todo un bucle para que lo hiciera.
00:06:08
Bueno, pues entonces, esto así
00:06:11
no lo puedo hacer.
00:06:13
Entonces, ¿cómo
00:06:15
averiguábamos si un número
00:06:15
era primo o no? Pues lo hicimos
00:06:19
en su momento así.
00:06:21
Voy a asumir
00:06:24
de partida
00:06:25
que es primo.
00:06:26
Es decir, que no tiene ningún divisor
00:06:29
comprendido. Entre
00:06:31
dos y ese número
00:06:33
menos 1, y ahora voy a ver
00:06:35
si me llega un contraejemplo
00:06:37
hasta luego
00:06:38
voy a ver si me llega un contraejemplo
00:06:45
entonces, íbamos tirando
00:06:48
los datos a comprobar
00:06:50
los datos a comprobar, los íbamos
00:06:52
tirando con un for
00:06:54
desde i igual a
00:06:55
2
00:06:58
mientras i sea menor
00:06:59
que num
00:07:02
incrementando i, vamos a ver si
00:07:03
encontrábamos un contraejemplo
00:07:06
si
00:07:07
número es divisible
00:07:09
por este i
00:07:12
ah, le habíamos encontrado un contraejemplo
00:07:13
luego es primo
00:07:16
igual a true
00:07:18
perdona, false
00:07:20
vale, esto es lo que habíamos hecho, tal cual
00:07:21
para averiguar si un número era primo
00:07:24
o no lo era, habíamos hecho esto
00:07:26
tal cual, pues ya está, yo ya lo sé
00:07:28
hacer, lo pongo aquí
00:07:30
¿verdad? lo he escrito bien, ¿no?
00:07:31
asumo de partida que no tiene ningún divisor
00:07:33
voy tirando todos los comprendidos
00:07:36
entre 2 y una unidad inferior a él
00:07:38
voy tirando
00:07:41
en cuanto encuentre un divisor
00:07:41
puedo automáticamente cambiar ya
00:07:44
mi suposición de partida
00:07:47
y decir que no puede ser primo
00:07:48
vale, pues ahora ya sí que tenemos
00:07:50
ya la condición
00:07:53
ahora ya sí que la tenemos
00:07:54
y ya la puedo poner aquí y completar
00:07:56
la parte que me faltaba
00:07:58
vale
00:08:00
y ya está
00:08:02
entonces empezaría a tirar las pruebas
00:08:06
a ver si lo he escrito bien
00:08:10
si alguna me casca, que pasa con los casos
00:08:12
extraños y ahí tiraría
00:08:14
pero bueno, vamos a ejecutarlo porque hay
00:08:15
alguna burrada muy gruesa
00:08:20
dime
00:08:22
es primo en el if es igual a
00:08:24
es primo igual a true
00:08:25
claro, claro, porque lo que
00:08:27
hace el if es mirar si esto que hay aquí
00:08:29
es true o false
00:08:32
es primo ya es un boolean
00:08:33
ya es una caja que tiene dentro true o false
00:08:36
entonces poner esto
00:08:38
y poner esto
00:08:40
es la misma cosa
00:08:41
te da igual decir
00:08:44
llueve
00:08:46
el boolean podría ser llueve
00:08:48
pues te daría igual decir llueve
00:08:50
que decir que llueve
00:08:52
es verdad
00:08:54
son dos enunciados idénticos
00:08:55
son dos enunciados idénticos
00:08:57
entonces hombre
00:08:58
lo que pasa es que queda raro
00:09:00
entonces este
00:09:01
mira el contenido de esprimo
00:09:05
si el contenido de esprimo es true
00:09:06
o lo que es lo mismo si es igual a true
00:09:08
que es lo mismo que decir que su valor es true
00:09:10
pues ya está
00:09:12
se muestra esto
00:09:13
entonces
00:09:14
a ver, primos inferiores
00:09:17
a
00:09:22
24
00:09:23
pues todos esos
00:09:24
son los inferiores a 24
00:09:27
bueno, pues no hace falta que nos detengamos
00:09:28
más con esto
00:09:33
de nuevo
00:09:35
otro ejemplo
00:09:37
de la
00:09:39
pauta lógica de alguna manera
00:09:40
uno pues
00:09:42
sabe que herramientas tiene, que son las decisiones
00:09:44
los bucles y dar valor a las variables
00:09:46
con expresiones, ya está, no tiene más herramientas
00:09:48
que esas y con esas lo tiene que hacer
00:09:50
todo y ahora ya
00:09:52
pues hacemos un diseño que conjuga
00:09:54
esas herramientas y que
00:09:56
basado
00:09:58
en cosas que ya hemos
00:09:59
resuelto, sabiendo como funcionan los bucles
00:10:02
las decisiones, pues yo me hago
00:10:04
mi boceto, voy completando las partes
00:10:06
y ya está
00:10:08
Sí, sí, sí
00:10:09
¿Eh?
00:10:23
Ay, estás ahí
00:10:26
Tiene
00:10:27
No, tiene el perfil que
00:10:28
hace falta, es que tiene ganas de avanzar
00:10:31
de aprender, de saber
00:10:33
Es un vicioso de la programación
00:10:34
Pues ya está
00:10:37
Realmente es lo que debería ocurrirnos a todos
00:10:38
A mí me ocurre
00:10:42
el que esto te genere adicción
00:10:43
y estés deseando ir a tu casa
00:10:45
Para seguir probando cosas
00:10:47
Y cuando las aplicaciones son más gordas
00:10:49
Pues más adición te genera
00:10:53
Porque claro, más errores te pueden dar
00:10:55
Más ganas tienes de ponerte a ver si lo arreglas
00:10:56
Claro, podéis haceros ahí cualquier cosa
00:10:58
En cuanto ya veamos clases
00:11:07
Podéis hacer lo que os dé la gana
00:11:09
Vale, venga
00:11:11
¿Algún otro a corregir?
00:11:15
Venga, pues vale
00:11:24
Vamos a hacer el 24
00:11:26
Y luego ya nos vamos a
00:11:29
RAIS
00:11:35
Venga
00:11:36
¿Qué dice este?
00:11:47
Este enunciado ya es más largo
00:11:51
Entonces uno se hace una primera leída para entender de qué va
00:11:53
Y luego ya lo puede ir desmenuzando
00:11:55
Pues un programa que te pide
00:11:57
Dos números
00:11:59
máximo y mínimo, dos valores extremos
00:12:00
de un intervalo y un número de intentos
00:12:05
vale, pues el programa ¿qué hace?
00:12:07
te genera él internamente, sin que el usuario lo conozca
00:12:10
claro, un número aleatorio entre esos dos números
00:12:13
y a partir de ahí empieza a preguntarle
00:12:15
al usuario, introduce número, introduce número
00:12:19
cada vez que el usuario introduce un número comprueba
00:12:21
si es mayor o menor
00:12:25
que el que la ha seleccionado
00:12:28
como el número objetivo
00:12:30
le informa, le dice ahorita no me intento
00:12:31
claro, si el usuario
00:12:35
acierta, pues dice, ya la hayas ganado
00:12:37
ya está, nada más
00:12:38
y si se pasa el número de intentos
00:12:39
le dice, pues no, has perdido porque has pasado el número de intentos
00:12:42
bueno, pues la combinación
00:12:45
de todo eso, entonces un primer diseño
00:12:47
en la cabeza ya podemos pensar
00:12:49
la primera parte, pedir
00:12:50
los extremos del intervalo y generar el aleatorio
00:12:52
esa primera parte, pues ya está
00:12:55
Leer los dos datos, extremos y pide general lectorio.
00:12:58
Luego ahora ya vendrá un bucle, que es un bucle que está todo el rato.
00:13:02
Pide número, me da mi resultado.
00:13:07
Pide número, me da mi resultado.
00:13:10
Ese bucle cuando terminará.
00:13:11
Cuando el número introducido sea igual que el objetivo o me haya pasado el número de intentos.
00:13:13
Cuando el bucle ya ha terminado, pues ya dices, has ganado, has perdido, lo que sea.
00:13:20
Entonces ya más o menos una primera estructura en la cabeza ya tenemos.
00:13:24
pedir el dato y generar el aleatorio
00:13:27
el bucle que va actuando
00:13:30
pidiendo los números
00:13:32
y dando la realimentación que toque
00:13:34
ese bucle
00:13:36
ya habrá que perfilar cuál es su condición
00:13:38
de finalización
00:13:40
y luego ya decir el resultado final
00:13:41
si has ganado, entonces ya con eso en la cabeza
00:13:44
más o menos, pues ya podemos
00:13:46
empezar a escribir y hacer un primer
00:13:48
boceto, pero el tener antes
00:13:50
en la cabeza una idea de cómo lo vamos
00:13:52
a construir, eso es imprescindible
00:13:54
Si queremos no andar ahí mareando la pardiz y al final a las 2 horas preguntas a la HGPT.
00:13:56
Bueno, ¿qué digo yo a las 2 horas? Ojalá, a los 5 minutos.
00:14:02
Pues venga, EGER24.
00:14:07
Como vamos a pedirle números, pues necesitamos esto.
00:14:11
Vale, introduzca número, el número menor del intervalo.
00:14:26
Y ahora vamos a pedirle que introduzca el número mayor.
00:14:37
hala, ya tenemos los dos extremos
00:14:41
del intervalo en el cual
00:14:52
el programa tiene que generar su aleatorio
00:14:54
bueno, pues aquí
00:14:56
vamos a tener que tirar
00:14:58
de algunas funciones
00:15:00
que ya están hechas en Java
00:15:02
para hacer cosas
00:15:04
¿vale? entonces esa es la base
00:15:05
de la programación de entrada de objetos
00:15:08
que hay ya muchísimo código hecho
00:15:09
en clases, como ya veremos
00:15:12
y tú lo puedes invocar
00:15:14
para que se ejecute
00:15:16
y te dé el resultado, si tuviéramos que hacerlo
00:15:18
todo de cero nosotros sería imposible
00:15:20
entonces ya hay
00:15:22
dentro de las 200.000.200.448.300.900.320
00:15:24
clases que ya hay hechas y funciones
00:15:31
pues dentro de todas esas
00:15:33
hay una que te permite
00:15:34
generar un número aleatorio
00:15:37
entre decimal
00:15:39
entre cero y uno
00:15:41
vale, pues cuál es
00:15:43
esa
00:15:46
pues dice aquí, utiliza
00:15:48
de la clase math o random
00:15:50
vale, pues a ver
00:15:52
aunque no podemos entender
00:15:54
muy bien, ¿por qué lo llamamos
00:15:56
así? pues vamos a
00:15:59
entonces
00:16:01
si uno pone aquí math y pone
00:16:02
puntito
00:16:04
se le abren un montón de
00:16:05
posibilidades que son funciones
00:16:08
que hacen cosas y te dan resultados
00:16:10
un montón
00:16:12
¿Vale? Pues logaritmos
00:16:13
De todo
00:16:16
Raíces cuadradas
00:16:17
Senos, cosenos
00:16:20
De todo
00:16:22
Y entre todas ellas
00:16:23
Pues hay una
00:16:27
Que es
00:16:30
Random, jolín, que no la he encontrado
00:16:32
Que es esta
00:16:44
¿Eh?
00:16:45
Sí, entonces, más random
00:16:48
Si uno mira la ayuda, te dice
00:16:50
Te da un valor decimal
00:16:51
comprendido entre 0.0 y 1.0
00:16:54
pseudo aleatorio
00:16:58
lógicamente
00:17:02
porque la aleatoriedad no existe
00:17:03
hay que simularla
00:17:05
no hay absolutamente ningún proceso aleatorio
00:17:06
en el universo como la va a haber
00:17:09
dentro de una CPU
00:17:10
que es Sota, Caballo y Rey
00:17:13
entonces bueno
00:17:15
tendrá su proceso
00:17:16
interno de generar el número aleatorio
00:17:19
que tiene que ver
00:17:21
pues que cosas hay únicas
00:17:23
La única cosa que hay única
00:17:25
Para la CPU es la hora del sistema
00:17:27
¿Vale?
00:17:30
Si llegamos hasta los milisegundos
00:17:32
Nanosegundos, eso sí que es único
00:17:34
A cada nanosegundo que pasa
00:17:35
Estás en una hora distinta
00:17:37
Entonces pues a partir del único
00:17:38
Dato único que hay
00:17:41
Que es la hora del sistema
00:17:43
Con precisión de nanosegundos
00:17:44
Pues a partir de ahí te simula
00:17:47
Lo que para el usuario podría ser un número aleatorio
00:17:48
Pero hombre, no existe
00:17:51
La aleatoriedad
00:17:53
Lo saco de la nada
00:17:55
Pues no, no lo puedes sacar de la nada
00:17:56
Tienes que simularlo
00:17:57
Y bueno, esto lo digo como curiosidad
00:17:58
Pues lo simulará, intuyo yo
00:18:00
Y creo que es así
00:18:02
Del único patrón único que tiene
00:18:03
Que es la ola del sistema
00:18:06
Vale, pues entonces te simula
00:18:07
Un número pseudo aleatorio
00:18:09
De hecho es honesto
00:18:11
Y te lo dice
00:18:12
Te dice que es pseudo aleatorio
00:18:13
No va a mentir y tirarse el pisto
00:18:15
Con que es aleatorio
00:18:17
Vale, y además uniformemente distribuido
00:18:18
O sea, todos los números se supone que son iguales de probables dentro de ese rango 0.0 y 1.0.
00:18:22
¿Esto es exactamente lo que queremos?
00:18:29
No, lo queremos entre mínimo y máximo.
00:18:32
Claro, pero como somos tan listos, pues podemos hacer una transformación,
00:18:36
una pequeña transformación, para convertir este número aleatorio decimal entre 0,0 y 1,0,
00:18:42
convertirlo a un número aleatorio entero entre mínimo y máximo,
00:18:49
que es lo que queremos, ¿vale?
00:18:52
Como afortunadamente somos listos y nos vamos a ver en situaciones
00:18:54
en las cuales tenemos que hacer operaciones, cambiar, transformar,
00:18:57
pues, y vamos a poder hacerlo, pues aquí también podremos.
00:19:01
Por ejemplo, en este caso de aquí,
00:19:05
vale, yo tengo math.random
00:19:14
que me genera un número decimal
00:19:33
entre 0,0 y 0,1, perdón, 1,0, 1,0, vale.
00:19:37
Si yo quiero 1 decimal entre 0 y 27 o entre 0 y 14,
00:19:51
lo tendría muy fácil, lo multiplico por este número, ¿verdad?
00:19:58
si me dicen 1, un aleatorio decimal entre 0 y n, por ejemplo, el numerito n, pues bueno, este primer paso lo tengo facilísimo,
00:20:01
este primer paso podría ser más punto random, no sé qué he puesto, multiplicado por n, ¿verdad?, ya lo tendríamos,
00:20:18
un aleatorio entre 0 y n
00:20:32
o sea, si yo multiplico por n
00:20:35
este intervalo lo extiendo
00:20:36
si este intervalo
00:20:39
entre 0 y 1,0
00:20:47
lo multiplico por n
00:20:48
lo extiendo hasta 0,0
00:20:49
y n,0
00:20:53
si multiplico por n
00:20:54
lo extiendo así
00:20:57
¿qué quiero que sea entero?
00:20:58
lo tendría facilísimo
00:21:02
le hago el casting
00:21:03
¿qué quiero que sea entero?
00:21:04
le hago el casting
00:21:13
Bueno, pues con esta tontería podría generar un número entero aleatorio entre 0 y n, ¿vale? Lo que pasa es que aquí no lo quiero entre 0 y n, aquí lo quiero entre mínimo y máximo, ¿vale?
00:21:14
que un aleatorio entre mínimo y máximo
00:21:35
no entre 0
00:21:37
y un n cualquiera
00:21:39
no entre 0 y un n cualquiera
00:21:41
sino entre mínimo y máximo
00:21:43
bueno, pero puedo hacer una transformación
00:21:44
es decir, voy a generarme
00:21:46
un aleatorio
00:21:49
si esta distancia de aquí
00:21:51
mínimo y máximo, imaginaos que esta distancia
00:21:55
la llamo d
00:21:57
pues me voy a generar un aleatorio entre 0 y d
00:21:58
y ese aleatorio se lo sumo
00:22:01
a mínimo
00:22:03
ya está, ya lo he conseguido, ¿verdad?
00:22:04
Imaginaos que esta distancia
00:22:07
Que me genero es 3
00:22:10
Aquí tendría el 3
00:22:11
Se lo sumo a mínimo
00:22:12
Y ya tengo ese valor
00:22:14
¿Vale?
00:22:16
Entonces me genero un aleatorio
00:22:18
Entre 0 y esta distancia de aquí
00:22:19
Para que me dé este incremento
00:22:22
Entre 0 y esta distancia
00:22:25
Me da este incremento
00:22:26
Y luego este incremento
00:22:27
Se lo sumo a mínimo
00:22:28
Y ya está
00:22:29
Luego esto
00:22:30
Se convertiría en
00:22:32
Generar un aleatorio
00:22:36
Entre 0 y esto
00:22:38
¿Vale?
00:22:42
Ya tengo un número entero aleatorio
00:22:45
Entre 0 y esta distancia
00:22:47
Y ahora ya
00:22:52
A esto le sumo el min
00:22:54
Y ya lo tengo
00:22:56
¿Vale?
00:22:59
¿No es más fácil sumar 0 más min?
00:23:01
O sea
00:23:03
0 más min
00:23:03
Bueno, 0 más min
00:23:06
En el cielo lo puedes quitar
00:23:09
min más eso
00:23:10
no te entiendo
00:23:11
tienes un intervalo
00:23:12
tengo un intervalo
00:23:16
entonces mi forma de construir el número es
00:23:18
generar aleatoriamente este incremento
00:23:19
este incremento generarlo aleatoriamente
00:23:22
y ahora a este que sería esto
00:23:24
y ahora a este
00:23:26
incremento le sumo min
00:23:31
con lo cual el numerito
00:23:33
que genero pues ya será o este
00:23:35
o este o este es decir el incremento
00:23:36
lo genero aleatoriamente y se lo sumo a min
00:23:38
y ahora ya el número que me da
00:23:41
pues será 1 comprendido en este intervalo
00:23:43
o sea, genera un incremento
00:23:46
a ver, el extremo
00:23:55
si, el problema del extremo
00:23:56
derecho es que como esto es 0,0
00:23:59
1,0
00:24:01
si el 1,0
00:24:02
no se genera, si se genera
00:24:05
se podría hacer aleatoriamente alguna vez
00:24:07
entonces
00:24:09
tú dices que este nunca se podría
00:24:10
generar
00:24:15
No, bueno, estoy haciendo el casting
00:24:16
para quedarme con la parte decimal.
00:24:25
Entonces, bueno, yo aquí estoy asumiendo
00:24:27
que
00:24:29
el 1,0
00:24:30
se va a generar alguna vez. Es cierto que
00:24:32
es muy improbable. Entonces,
00:24:35
al quitarle el int,
00:24:37
pues sí que podrías llegar a generar
00:24:39
este incremento
00:24:41
y cuando generes este incremento,
00:24:42
pues te daría el máximo
00:24:45
pero será cuando este math random
00:24:47
te genere el 1,0
00:24:49
exactamente
00:24:51
que hombre
00:24:52
habría que ver si están
00:24:53
incluidos los extremos en el math.ram
00:24:57
habría que ver lo que dice
00:25:00
la ayuda
00:25:01
claro, luego está la otra librería
00:25:02
random, que tiene otros métodos
00:25:09
¿vale?
00:25:11
más específicos de aleatoriedad
00:25:12
y tiene otras cosas, pero
00:25:14
yo he puesto esto de aquí, pues yo que sé
00:25:16
Para que penséis un poco
00:25:18
Solamente para que penséis un poquito
00:25:19
Es que yo lo que he pensado
00:25:21
Tú el 1 lo multiplicas por n
00:25:24
Porque claro, 1 por n es n
00:25:27
Pero no lo puedes multiplicar por 0
00:25:29
Porque habría 0 siempre
00:25:31
Pero si le sumas el mínimo
00:25:32
Claro, es que le estoy sumando el mínimo
00:25:33
O sea, cuando te dé 0
00:25:37
Y eso más o menos 1000
00:25:39
Bueno, porque al mínimo
00:25:40
Le tengo que sumar el incremento aleatorio
00:25:43
Lo que es aleatorio es el incremento
00:25:45
vale, y max menos min
00:25:47
es este incremento entero
00:25:50
vale
00:25:52
vale, pues es una
00:25:52
posibilidad, vale
00:26:01
pues si usamos esto
00:26:05
si usáramos esto
00:26:07
pero ya digo que podéis
00:26:14
usar de random
00:26:16
también se desplegan
00:26:18
un montón de funciones
00:26:20
para generar aleatorios y cosas raras
00:26:21
pero bueno, quería yo que
00:26:24
hiciéramos un poco este cálculo para
00:26:27
vale, pues entonces lo que yo he escrito
00:26:29
es el número aleatorio, el número objetivo
00:26:32
sería
00:26:34
al aleatorio 0,0
00:26:37
entre 0,0 y 1,0
00:26:41
lo multiplico por
00:26:43
la diferencia
00:26:47
entre mayor y menor
00:26:49
para generar el incremento aleatorio
00:26:51
mayor, menos, menor
00:26:53
ahora
00:26:55
a ese incremento aleatorio
00:26:57
a todo ese incremento aleatorio
00:26:59
le hago el casting a entero
00:27:03
para quitarle la parte decimal
00:27:04
y ahora
00:27:06
le sumo el mínimo
00:27:08
para ese incremento menor
00:27:10
para que ese incremento se sume al menor
00:27:12
bueno
00:27:18
más o menos esto simula
00:27:19
una aleatoriedad entre mayor y menor
00:27:21
más o menos
00:27:23
tampoco nos vamos a poner muy exquisitos
00:27:24
vale
00:27:27
ahora ya tengo simul aleatorio
00:27:29
que lo podéis haber generado de otra manera
00:27:32
como sea, da igual
00:27:33
esta es una posibilidad que más o menos
00:27:34
simularía un aleatorio entre mayor y menor
00:27:38
ahora ya sí que viene un bucle
00:27:40
que estamos todo el rato
00:27:41
le número
00:27:42
opera con él
00:27:45
vale, entonces uno podría
00:27:46
plantearse esto así
00:27:50
mientras la condición
00:27:51
que sea no se cumpla
00:27:54
vamos a hacerlo con un do while
00:27:55
si os parece
00:27:57
porque es lee número, opera con él
00:27:58
y cuando lleguemos a la condición queremos tener ya el número leído
00:28:02
bueno, pues vamos a suponer que me lo planteamos así
00:28:06
¿qué va a hacer este bucle todo el rato?
00:28:11
va a estar todo el rato pidiendo número
00:28:14
guardando el intento
00:28:17
¿qué ocurre con el intento?
00:28:28
el intento lo podemos declarar y guardar aquí dentro
00:28:34
pero ¿cuándo vamos a salir del bucle?
00:28:39
vamos a salir del bucle cuando el intento sea igual al objetivo
00:28:47
luego tiene toda la pinta de que esta condición de aquí
00:28:52
va a involucrar la variable intento
00:28:56
la va a involucrar, tiene toda la pinta
00:29:02
porque una de las razones por las que se sale del bucle
00:29:04
es porque el número introducido sea igual al objetivo
00:29:07
entonces como tiene toda la pinta de que la va a involucrar
00:29:10
Como yo declaré esto dentro de este bloque
00:29:13
No voy a poder acceder a esa variable aquí fuera
00:29:16
Es imposible, no voy a poder acceder
00:29:20
Con lo cual vamos a declararla fuera
00:29:22
Aunque la leamos dentro
00:29:24
Que es donde la tenemos que leer
00:29:26
Ahora ya sí, leemos número
00:29:27
Ahora podemos hacer ya
00:29:33
Si es mayor
00:29:36
que el objetivo
00:29:44
te has pasado por arriba
00:29:52
pues le puedes decir
00:29:56
te has pasado
00:29:59
si intento
00:30:04
como son condiciones excluyentes
00:30:09
pues lo podemos hacer con un if el se if
00:30:16
porque son excluyentes
00:30:18
si pudieran ser a la vez varias
00:30:19
Recordad que no es un if, el se if
00:30:23
Serán if separados, pero estas son excluyentes
00:30:25
O eres mayor, o eres menor, o eres igual
00:30:27
No hay tutía
00:30:29
Pues si intento es menor
00:30:29
Que el objetivo
00:30:32
Entonces tú le dices
00:30:34
Pues no has llegado
00:30:37
Y si no es ni mayor
00:30:41
Ni menor que el objetivo
00:30:46
Es que has acertado
00:30:48
Entonces le dices
00:30:49
Has acertado
00:30:52
vale, nos vamos aproximando a la versión
00:30:55
pero bueno, hay que completarla
00:30:59
falta esta condición y faltan cosas
00:31:01
porque
00:31:02
el enunciado nos dice
00:31:04
que
00:31:06
tiene que salir
00:31:07
como mucho
00:31:14
hay un número de intentos
00:31:16
que se pide al principio, que no lo hemos pedido
00:31:17
vamos a pedir
00:31:20
vamos a decirle número de intentos
00:31:22
número de intentos
00:31:24
que quieres darte
00:31:38
vale
00:31:39
pues entonces
00:31:52
esta condición que va a involucrar
00:31:55
va a involucrar
00:31:58
que intento
00:32:00
sea igual al objetivo
00:32:02
y también va a involucrar
00:32:04
no habernos pasado el número de intentos
00:32:06
entonces aquí podríamos pensar
00:32:08
bueno, me voy a hacer un contador
00:32:10
lo voy incrementando y que la condición sea
00:32:11
mientras el contador sea menor que el número de intentos
00:32:14
vale, podemos hacerlo así
00:32:16
lo que pasa es que, ¿para qué usar
00:32:19
una variable adicional contadora
00:32:21
si esta variable
00:32:23
número de intentos ya no la usamos para nada más?
00:32:25
No podríamos irla decrementando y cuando
00:32:28
llegue a cero, pues ya está.
00:32:29
En lugar de hacer un contador,
00:32:32
¿vale? Esta sería una opción.
00:32:35
Como yo tengo que contar,
00:32:36
pues podemos hacer la opción
00:32:37
un contador igual a cero.
00:32:39
Aquí en cada intento
00:32:42
vamos contando.
00:32:44
Y cuando salimos
00:32:46
del bucle
00:32:49
una parte de la condición del bucle
00:32:50
es mientras contador
00:32:53
sea menor
00:32:55
que num de intentos
00:32:56
como el contador ha llegado al número de intentos
00:32:58
ya vas a salir
00:33:01
¿vale?
00:33:02
lo único es eso, que num intentos
00:33:07
como eso no tenemos que conservar su valor para nada
00:33:09
no nos hace falta
00:33:12
podríamos no usar una variable
00:33:12
adicional, decir bueno voy a ir decrementando
00:33:16
num intentos y cuando llegue a cero
00:33:18
Y ya está. Entonces podemos ahorrarnos esta variable de contador, podemos ahorrarnos esto y decir mientras numIntentos sea mayor que cero.
00:33:19
y a numintentos además
00:33:37
lo voy a decrementar cada vez
00:33:39
a numintentos
00:33:42
comparo a ver si sigue siendo mayor que 0
00:33:46
y después de haber hecho
00:33:48
la comparación lo dejo decrementado
00:33:50
que os lía mucho
00:33:52
que el decremento se haga
00:33:56
a la vez que la condición
00:33:58
bueno pues lo decrementáis
00:34:00
aquí dentro, ponéis aquí numintentos
00:34:02
menos menos y aquí os limitáis a compararlo
00:34:04
y se acabó
00:34:06
vale
00:34:10
O bien lo decrementáis aquí a la vez
00:34:10
Que lo comparáis
00:34:14
O bien lo decrementáis aquí
00:34:15
Y aquí lo comparáis sin más
00:34:17
¿Vale? Estamos haciendo
00:34:22
No estamos haciendo exactamente lo mismo
00:34:25
Porque aquí primero se decrementa
00:34:28
Y luego se compara y tal y como yo lo he puesto
00:34:30
Primero se compara y luego se decrementa
00:34:32
Vale, entonces
00:34:33
Luego ya, uno cuando haga pruebas
00:34:36
Tiene que pulir esto
00:34:38
Uy, que tengo que quitarle a una, que me he pasado, que no sé qué
00:34:39
se va puliendo, que uno va construyendo
00:34:42
su primera versión
00:34:44
vale, pues ahora mismo
00:34:46
este parece que es un bucle
00:34:48
que está todo el rato diciéndote esto
00:34:50
y sale cuando hayas sacado
00:34:52
los intentos
00:34:54
pero claro, no solo
00:34:55
también tiene que salir si has acertado
00:34:57
también tiene que salir si has acertado
00:35:00
luego esta condición
00:35:02
habrá que combinarla
00:35:05
y aquí como la combino
00:35:06
con un AND o con un OR
00:35:09
es la condición que te hace que sigas
00:35:10
con cualquiera
00:35:21
de las dos que se cumpla ya sales
00:35:23
luego para seguir
00:35:25
tiene que cumplirse las dos
00:35:27
es decir, la otra condición es
00:35:28
n diferente
00:35:30
en un, perdón
00:35:32
intento, perdón
00:35:35
la otra condición es intento
00:35:36
diferente del blanco
00:35:40
estas serían las dos condiciones involucradas
00:35:42
esta es la que hace
00:35:45
esta hace que sigas
00:35:48
y esta también hace que sigas
00:35:49
entonces
00:35:52
sales
00:35:53
cuando alguna de las dos falla
00:35:55
entonces que pones, and or
00:35:58
quien vota por and
00:36:01
quien vota por or
00:36:10
yo también voto por and
00:36:13
en cuanto una de las dos
00:36:21
se haga false, ya tienes que irte.
00:36:24
Con lo cual, en cuanto una de las dos se haga false,
00:36:28
quieres que la global se haga false para irte de ahí.
00:36:31
Entonces, para que la global se haga false
00:36:34
en cuanto una de las dos se haga false,
00:36:37
tiene que ser un and.
00:36:39
Es decir, tú te vas a ir de ese while por dos posibilidades.
00:36:41
O bien porque esta sea false, porque ya hayas llegado a cero.
00:36:45
O bien porque esta sea false, porque hayas encontrado el blanco.
00:36:48
con cualquiera de las dos que sea
00:36:52
falsa te vas
00:36:55
entonces lo que a ti te interesa es que cuando
00:36:55
una de las dos lo sea, el total lo sea
00:36:59
entonces
00:37:01
para que eso ocurra tiene que ser un and
00:37:02
porque si esto es un or
00:37:04
y de repente ya se ha cubierto esta
00:37:05
condición, esta es falsa
00:37:09
pero esta seguiría siendo true, con lo cual tú
00:37:11
volverías arriba otra vez y no
00:37:12
tienes que salir en cuanto una cualquiera
00:37:14
de las dos, la que sea, se ha hecho falsa
00:37:17
entonces tienes que conseguir
00:37:19
que la global sea false
00:37:21
cuando una de las dos lo sea.
00:37:23
Entonces, conseguir
00:37:26
que la global sea false cuando una de las dos
00:37:27
lo sea, se consigue con un and.
00:37:29
¿Vale?
00:37:33
Vale, pues este sería
00:37:40
un primer boceto.
00:37:41
Este sería un primer boceto.
00:37:51
Lo que pasa es que aquí ya habrá detallitos
00:37:53
Que no vayan bien
00:37:55
Porque vamos a hacer una primera prueba
00:37:57
Por ejemplo
00:37:59
Vamos a hacer una primera prueba
00:38:02
El número menor
00:38:03
En el 2
00:38:11
Y número mayor
00:38:12
10 para no estar ahí 2 horas
00:38:13
Vale
00:38:16
Número de intentos
00:38:17
7 intentos para salir
00:38:19
Haga intento
00:38:21
Es el 3, no has llegado
00:38:23
Es el 5, no has llegado
00:38:25
es el 7, has acertado
00:38:27
y termina
00:38:30
vale, esta prueba, pues bien, ha hecho lo que tenía que hacer
00:38:30
vale, vamos a hacer
00:38:34
otra prueba
00:38:36
introduzca número menor, 2
00:38:36
introduzca número mayor, 10
00:38:41
número de intentos, 2 intentos
00:38:43
para forzar ahora
00:38:46
a que termine por el número de intentos
00:38:47
a ver si lo hace bien, haga intento
00:38:49
el 2, no has llegado
00:38:51
haga intento, el 3
00:38:53
no has llegado
00:38:55
y ha terminado
00:38:56
ha terminado y es que
00:38:58
porque he consumido el número de intentos
00:39:00
luego ha funcionado bien, pero hombre
00:39:01
es que ni me informa, ni siquiera me dice
00:39:04
has consumido el número de intentos
00:39:06
no me está informando
00:39:08
entonces hombre, algo me falta
00:39:09
es decir, cuando yo salgo ya
00:39:12
cuando yo he terminado y ya he roto el bucle
00:39:14
porque ya he terminado
00:39:16
debería ir a decir
00:39:17
debería ir de alguna manera a distinguir
00:39:19
si he llegado porque he alcanzado el blanco
00:39:21
o porque he consumido el número de intentos
00:39:24
para en función de eso decir un mensaje u otro
00:39:26
pues entonces
00:39:28
eso es muy fácil de detectar
00:39:30
¿cuándo habré salido yo
00:39:32
si número de intentos
00:39:34
es igual a cero?
00:39:36
¿vale?
00:39:39
he acabado los intentos
00:39:40
y además no he acertado
00:39:42
porque podría haber coincidido
00:39:45
que haya acabado los intentos
00:39:46
en la vez que he acertado
00:39:48
entonces si ha coincidido
00:39:50
ahí no quiero que me diga
00:39:52
has conseguido el número de intentos
00:39:54
Entonces, si has consumido los intentos y además de haber consumido los intentos, intento es diferente de target, es decir, y además de haberlos consumido, pues en este caso has agotado intentos.
00:39:56
es decir, has salido por aquí
00:40:19
pero no has salido por ahí, por esa no
00:40:23
no lo has acertado
00:40:25
porque podrías haber salido por aquí
00:40:27
y también coincidir que es que en ese has acertado
00:40:31
entonces te estaría diciendo, por aquí has acertado
00:40:34
y por aquí te diría esa gota de intentos
00:40:37
sería un poco feo
00:40:39
aún así, igual nos puede bailar algún caso extremo
00:40:41
vamos a probar
00:40:44
introduzca número menor
00:40:47
2, 10, número de intentos
00:40:50
2, haga intento
00:40:53
el 3, te has pasado
00:40:55
entonces si me he pasado está claro
00:40:56
cuál es, el 2, has acertado, vale
00:40:59
es que esta prueba
00:41:00
no me ha valido
00:41:03
número menor, el 2 otra vez
00:41:03
número mayor
00:41:08
el 29
00:41:09
para asegurarme de favorecer
00:41:12
que no genere el 2
00:41:14
número de intentos, 2 intentos
00:41:16
Venga, primer intento
00:41:18
No has llegado
00:41:20
No has llegado y has agotado intentos
00:41:21
Porque yo le he dicho dos intentos
00:41:24
Y efectivamente los he agotado
00:41:26
Sin haber acertado
00:41:29
¿Vale?
00:41:30
Vale, pues bueno
00:41:42
Pues así lo podemos dejar
00:41:43
Es una versión
00:41:46
Habréis hecho a lo mejor algo un poco distinto
00:41:46
Que te muestre el mensaje en otro sitio
00:41:49
De otra manera
00:41:51
Pero bueno, esencialmente es esto
00:41:52
Un bucle que está todo el rato
00:41:55
comprobando una condición
00:41:56
además va contando
00:41:58
y ya está
00:42:00
vale
00:42:02
venga pues vamos a parar aquí un momentito
00:42:05
y luego ya introducir
00:42:09
- 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:
- 3
- Fecha:
- 11 de noviembre de 2025 - 20:25
- Visibilidad:
- Clave
- Centro:
- IES ROSA CHACEL
- Duración:
- 42′ 12″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1920x1080 píxeles
- Tamaño:
- 482.79 MBytes