20250923-ProgEstr-Variables_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, antes de completar con los flow, add, double y los boolean básicos, vamos a revisar por encima lo que dijimos de char, que lo tenemos en el ejemplo de ayer, que fue cuando nos fuimos ya al final pitando, ¿verdad? Con lo de la letra mayúscula, minúscula, etcétera, etcétera, ¿vale?
00:00:00
Entonces, de char recordamos rápidamente que una variable char admite un único carácter. La asignación se puede hacer directa.
00:00:18
La asignación se puede hacer con el carácter entre comillas
00:00:33
o se puede hacer asignando un número entero
00:00:50
y entonces ya sabemos que en el char
00:00:55
se guardan el carácter de la tabla
00:00:58
así, silencio, ¿vale?
00:01:01
Entonces, el hecho de que en los char
00:01:04
puedan ir tanto, silencio, enteros
00:01:07
como char básicos, permite que podamos hacer sumas y restas
00:01:11
con char, porque también tiene enteros dentro, que es la codificación entera
00:01:15
del ASCII, y eso nos permite hacer, pues, tonterías
00:01:19
como esta, ¿vale? Si yo tenía una letra
00:01:23
a esta letra, como en realidad lo que tiene dentro es el
00:01:25
entero, que según la tabla ASCII codifica B
00:01:31
si le resto 32
00:01:34
lo que se queda
00:01:36
adentro es el
00:01:38
entero que en la
00:01:40
tabla ASCII codifica la mayúscula
00:01:42
porque entre minúscula y mayúscula hay una diferencia de 32
00:01:44
¿vale?
00:01:46
y lo comprobábamos
00:01:48
haciendo el system out println
00:01:49
y aquí fue cuando nos fuimos
00:01:52
ya deprisa y corriendo, vamos a
00:01:54
dejarlo para que no se quede así tan deprisa
00:01:56
y corriendo y luego ya vamos al float y al double
00:01:58
¿vale? recordáis esto de ayer
00:02:00
¿no?
00:02:02
Sí, sí, sí, tú puedes hacer, pero no sería next int, sería otra cosa, ¿vale?
00:02:07
Vamos, podemos incorporarlo aquí para que este programa sea poner en mayúscula la letra que tú quieras, ¿vale?
00:02:12
Pero vamos a completarlo antes.
00:02:18
Entonces, aquí, ¿qué dos problemillas nos encontrábamos para este programa?
00:02:20
¿Qué?
00:02:26
Para restar 32 a este char, yo tenía que hacer menos 32.
00:02:28
aquí otra vez
00:02:33
nos aparecía el problema
00:02:36
de esa conversión automática
00:02:38
entonces puse esa situación a propósito
00:02:41
a propósito
00:02:42
para que viéramos que es otra situación
00:02:43
en la que Java necesita
00:02:46
promocionar variables
00:02:47
aquí tenemos
00:02:49
esto que es char
00:02:50
al que yo puedo sumar y restar
00:02:52
porque en el fondo es un int
00:02:56
y aquí tengo el 32
00:02:58
Cuando la máquina virtual de Java ejecuta esto, recordad que cuando hay una sucesión de cifras, él construye un int, construye un int, vale, entonces como él aquí tiene char e int, el char le añade ceros para que sea ese mismo char pero en int, en 32 bits, con lo cual no nos dejaba guardarlo en letra mayúscula si letra mayúscula se guardaba como char, ¿verdad?
00:03:00
esto es lo que estábamos viendo cuando nos íbamos ayer
00:03:30
si lo guardamos
00:03:32
como char
00:03:34
no nos deja
00:03:35
porque
00:03:37
esto es un int
00:03:39
decíamos, no pasa nada
00:03:42
int y char son intercambiables
00:03:44
pues venga
00:03:46
como int ya si me deja
00:03:48
y ahora cuando mostrábamos
00:03:50
la letra
00:03:52
vamos a mostrar la letra mayúscula
00:03:53
ejecutábamos esto
00:03:57
no nos sacaba
00:03:59
lo último que nos muestra
00:04:10
es
00:04:13
el último system out
00:04:15
que es el último del programa, este
00:04:17
no nos muestra la B mayúscula
00:04:19
que fallaba aquí
00:04:21
pues fallaba lo que habíamos dicho
00:04:22
unas horitas antes
00:04:25
y es que yo una letra cualquiera
00:04:26
esta letra B
00:04:29
la puedo guardar en char o la puedo guardar en int
00:04:30
¿vale? es decir
00:04:33
yo a led
00:04:34
puedo hacer esto
00:04:36
y puedo hacer esto
00:04:37
¿vale?
00:04:39
las dos cosas son válidas
00:04:49
porque un char
00:04:50
también es el int dentro que codifica
00:04:52
esta b
00:04:55
la puedo guardar en char
00:04:57
o esta b la puedo guardar en int
00:04:59
me da lo mismo
00:05:01
¿qué implicación tiene guardarla
00:05:02
en char o en int?
00:05:05
cuando la voy a mostrar por consola
00:05:06
si nosotros ahora
00:05:08
mostramos letra
00:05:10
no lo voy a ejecutar
00:05:13
porque tenemos este programa, tantas cosas metidas
00:05:15
no se ve claro, si ejecutamos letra
00:05:16
creedme
00:05:19
si os digo que entonces mostrará la B
00:05:20
¿por qué?
00:05:23
porque el system out
00:05:25
mira como está declarada la variable
00:05:26
y está declarada como char
00:05:28
entonces tú
00:05:31
lo que te interesa es el char
00:05:32
y te muestra B
00:05:34
esto es de hace un par de días
00:05:36
pero sin embargo
00:05:38
yo ahora muestro letra 1
00:05:39
pues si yo muestro letra 1
00:05:41
no va a mostrar la B
00:05:46
va a mostrar el numerito entero
00:05:47
que según la tabla ASCII codifica la B
00:05:50
¿por qué? porque el system
00:05:52
out println mira esto
00:05:54
y dice esto como está declarado o como int
00:05:56
ah, entonces te interesa su versión
00:05:58
entera, entonces como te interesa
00:06:00
su versión entera, te muestro el numerito
00:06:02
que la tabla ASCII codifica la B
00:06:04
entonces esa es la diferencia entre
00:06:06
declarar como char
00:06:08
o como int y luego asignar un char
00:06:10
que a la hora de mostrar el valor
00:06:12
pues
00:06:14
me muestra o su versión
00:06:16
entera de la tabla ASCII
00:06:18
o su versión char de la tabla ASCII
00:06:20
que hay una
00:06:22
de cada, ¿verdad?
00:06:24
Vale, pues aquí nos está pasando
00:06:27
esto.
00:06:28
Aquí nos está pasando esto.
00:06:30
Que yo aquí, esta letra
00:06:34
menos 32 lo he tenido que guardar
00:06:35
obligatoriamente en int
00:06:38
obligatoriamente
00:06:39
porque si no la asignación no me dejaba
00:06:40
hacerla, si lo paso
00:06:43
al system out, él interpreta
00:06:45
que me interesa la versión int de este carácter
00:06:47
y por eso me saca
00:06:49
el 66
00:06:51
que es la versión int
00:06:54
de la B mayúscula
00:06:57
entonces, ¿cómo puedo
00:06:58
salvar esta situación?
00:07:01
ya lo ponemos ya todos juntos en un programa
00:07:03
¿cómo puedo salvarla?
00:07:05
poniendo el char delante
00:07:07
¿vale?
00:07:09
Entonces, si yo hago esto, esto es hacer una cosa que se llama
00:07:11
casting, que ya nos tendremos que meter en ella más adelante
00:07:19
cuando tengamos que usarla para otras cosas.
00:07:21
Pero que para los char no tendré que usar desde ya.
00:07:25
Si yo tengo un char en versión int y quiero mostrarlo.
00:07:28
Si yo tengo un char en versión int y quiero mostrarlo y quiero
00:07:32
que el system out me muestre la versión char, no la versión int,
00:07:36
Dejo ese in, claro
00:07:39
Y le digo, cuidado, pero no su versión
00:07:41
Como está declarada, no como está declarada
00:07:44
Sino su versión esta
00:07:46
Quiero su versión esta
00:07:47
Entonces, ahora ya sí
00:07:49
Si ejecutamos esto
00:07:51
Pues ahora ya sí que me saca
00:07:53
La B mayúscula, ¿vale?
00:07:55
Lo que tiene esto por dentro
00:07:57
Es lo mismo
00:08:00
Tiene
00:08:01
Lo que la tabla ASCII codifica
00:08:03
La B, tiene lo mismo
00:08:05
La diferencia es cómo me lo muestra el System.out, si como número o como char.
00:08:06
Y eso va a depender de cómo está declarado.
00:08:12
Si está como int y quiero su versión char, pues así, sí o sí.
00:08:15
¿Vale?
00:08:21
Entonces, vale, lo de los char más o menos, las cosas que hemos visto, está más o menos clara, ¿no?
00:08:22
Entonces, tenemos los cuatro tipos de datos de enteros.
00:08:36
El char
00:08:39
Conocemos más o menos
00:08:42
Las casuísticas más interesantes
00:08:44
De cada uno de ellos
00:08:47
En cuanto a promoción automática, etc
00:08:48
Nos falta
00:08:50
Float, Double y Boolean
00:08:51
Pues venga
00:08:54
Vamos a hacer aquí otra clase
00:08:55
Para trabajar con números decimales
00:08:58
Si la vais haciendo vosotros
00:09:02
Pues tendréis ese
00:09:06
Claro, para irlo practicando vosotros es lo mejor, ¿no?
00:09:07
Uy, va, eso está a punto de irse al suelo.
00:09:11
¿Vale?
00:09:14
Venga, pues ahora queremos hacer un programa que haga eso mismo.
00:09:20
A lo mejor multiplicar por 2 un número que yo te dé, pero quiero, ya que trabajé con decimales, no solo con enteros, con decimales.
00:09:27
Pues entonces, ¿qué dos tipos de datos tengo para guardar un número decimal?
00:09:35
Hemos dicho que teníamos dos, el float y el dabble, ¿vale?
00:09:44
Float usa 32 bits para guardar el dato y dabble usa 64 bits.
00:09:52
¿Cuál es la diferencia entre usar 32 o 64? La cantidad de cifras decimales que caben, ¿vale?
00:10:05
el float, no sé si son 7 cifras
00:10:14
decimales, 7 u 8
00:10:17
y el dabble pues
00:10:18
son unas cuantas más
00:10:20
¿vale? la precisión
00:10:22
¿se incluye la parte entera?
00:10:24
si hombre, claro, claro
00:10:26
un millón
00:10:28
a ver, es que esto va con el complemento
00:10:34
a 2, la forma
00:10:37
de, que no sé cuál es
00:10:38
vamos a ver si tuviera
00:10:40
una constante java
00:10:41
para darte el máximo
00:10:44
y el mínimo de
00:10:46
a ver
00:10:48
mira, si que tiene
00:10:50
max value
00:10:55
uy
00:10:59
max value
00:11:19
esto lo hago
00:11:23
solo para ver el mayor y menor
00:11:26
número que se puede
00:11:28
codificar con estos valores
00:11:30
vale, esto me va a
00:11:32
mostrar, esto es un valor que tiene ya java
00:11:34
configurado, que es el mayor valor
00:11:36
float posible y este es el
00:11:38
menor valor float posible
00:11:40
y este es un valor que tiene ya configurado
00:11:41
que es el mayor valor float
00:11:44
double posible y el menor
00:11:46
entonces si ejecutamos esto
00:11:47
para ver cuáles son estos valores
00:11:50
vale
00:11:51
pues el mayor float es
00:11:57
3, esto
00:12:03
por 10 elevado a 38
00:12:05
o sea
00:12:08
mucho
00:12:09
pero como veis solo admite estas cifras
00:12:10
decimales que son
00:12:14
7
00:12:15
sin embargo
00:12:16
el mayor número
00:12:19
de Abel posible
00:12:20
es 1, no sé cuántos
00:12:21
por 10 elevado a 308
00:12:24
que es una barbaridad
00:12:27
como lo está diciendo ahí
00:12:28
lo estoy leyendo de ahí
00:12:31
la anotación científica no la conocéis
00:12:31
la E significa
00:12:34
10 elevado a
00:12:37
¿vale?
00:12:37
¿pero qué mates habéis estudiado vosotros?
00:12:41
¿qué bachillerato habéis estudiado?
00:12:43
¿qué bachillerato habéis estudiado?
00:12:45
es un 10 elevado
00:12:47
es un 10 elevado
00:12:49
y ya está calculado
00:12:50
pero a ver, hay una cultura científica
00:12:51
mínima
00:12:57
el 10 elevado a
00:12:58
pero a ver, en realidad
00:13:00
no nos importa especialmente
00:13:02
pero hombre
00:13:07
si vais a ser programadores
00:13:07
y os vais a meter de lleno en el mundo
00:13:11
la inteligencia artificial y los números
00:13:12
y todo eso
00:13:14
Pues hay ciertas notaciones que si vais conociendo mejor
00:13:15
¿Vale?
00:13:19
Si vais conociendo mejor
00:13:21
Pues esto es un número tocho
00:13:22
10 a la 38
00:13:28
Y este es muy pequeñajo
00:13:29
Porque es 10 elevado a menos 45
00:13:31
Y este es por 10 elevado a menos 324
00:13:34
O sea, es muy enano
00:13:39
Muy enano, ¿vale?
00:13:41
Y como veis, la precisión del float son siete cifras y la del dabble son muchas más.
00:13:43
A ver, no nos importan los detalles.
00:13:50
Lo único que nos importa es que tanto float como dabble son para guardar números con decimales.
00:13:53
Si yo necesito muchísima precisión en mis números, dabble.
00:13:59
Si no necesito tanta precisión con siete cifras, pues floa.
00:14:04
en general no lo sé, la verdad es que esto no sabría
00:14:09
decirlo con mucho criterio
00:14:12
a mí me gusta más el dabble
00:14:14
y supongo
00:14:16
que porque por tradición lo he visto
00:14:18
más, no sé si significa que se usa más
00:14:20
da un poco
00:14:23
igual, igual que sí que os digo que cuando uno
00:14:25
tiene que usar un entero, pone int siempre
00:14:28
por sistema, pues floato dabble
00:14:30
da un poco
00:14:32
igual
00:14:34
¿vale? venga pues entonces
00:14:35
esto que estaba aquí, vamos a quitarlo
00:14:38
ahora
00:14:41
si yo tengo por ejemplo
00:14:43
un número
00:14:46
decimal
00:14:48
lo declaro poniendo el double delante
00:14:49
lógicamente si quiero que sea double
00:14:55
y le puedo asignar un valor
00:14:56
exactamente igual que a los enteros
00:14:59
pues por ejemplo
00:15:01
la 5.7
00:15:04
luego
00:15:09
la coma decimal para java
00:15:11
es el punto
00:15:13
como para la mayoría de los lenguajes de programación
00:15:13
para la mayoría de los lenguajes de programación
00:15:16
la coma decimal es el punto
00:15:19
en realidad
00:15:20
¿vale? y también podría usar
00:15:21
un float para un numerito decimal
00:15:26
¿vale?
00:15:28
pero
00:15:34
aquí pasa
00:15:35
algo similar a lo que nos encontramos
00:15:36
con los indios y los dabels, aquí me ha dado error, ¿por qué?
00:15:39
cuando yo a java
00:15:42
le doy un numerito con un punto
00:15:43
un número decimal, él asume
00:15:46
que por defecto es dabel
00:15:48
entonces aquí lo ha
00:15:49
clavado en dabel, perfecto
00:15:51
dabel cabe en dabel
00:15:54
yo aquí le he dado 7.8
00:15:56
él asume que por defecto es dabel
00:15:58
y lo codifica en 64
00:16:00
pero al revés
00:16:01
porque en los números enteros
00:16:04
él le das 37
00:16:06
y por defecto asume que sí
00:16:08
que es más pequeño que el long
00:16:09
Pues aquí al revés
00:16:11
Si tú das un número decimal
00:16:12
Por defecto asume que es la versión más grande
00:16:14
Que es la label
00:16:16
Por defecto asume que es la grande, la label
00:16:16
Entonces, yo aquí le he puesto
00:16:19
7.8
00:16:22
Él lo construye con 64 bits
00:16:23
¿Y qué ocurre? Que no cabe en float
00:16:26
Pues por eso me da error
00:16:28
De compilación, me dice no cabe
00:16:30
¿Cómo le digo yo? No, no, no
00:16:32
Por favor, construyelo en
00:16:34
32
00:16:36
Pues poniendo una F
00:16:37
poniendo una F
00:16:39
¿vale?
00:16:42
pongo ahí una F
00:16:43
y con esto digo
00:16:44
ojo, construye el número en 32
00:16:46
como cuando le damos una L
00:16:50
a un número entero
00:16:54
le damos una L y le decíamos
00:16:54
construye en 64
00:16:56
porque si no le damos nada
00:16:57
lo construye en 32
00:16:59
pues aquí si no le damos nada
00:17:00
lo construye en double, 64
00:17:03
y si le queremos decir
00:17:05
que lo construya en 32
00:17:07
que es el más pequeño, hay que decirlo en f
00:17:08
hay que ponerle en f
00:17:10
ya sabía yo que había alguna razón
00:17:11
por la que siempre usamos dabel
00:17:16
para no arrastrar la f
00:17:18
yo le quiero dar un valor calcado
00:17:22
bueno, para no ocupar tanta memoria
00:17:23
imagínate que tuvieras una aplicación
00:17:28
crítica con tropecientos mil números
00:17:32
pues es que es la mitad de memoria
00:17:34
tal cual, porque son 32 bits
00:17:36
por cada número en lugar de 64
00:17:38
¿Vale? Entonces
00:17:40
Ya no solo que el número ocupe menos
00:17:42
Sino que la operativa con esos números
00:17:44
Va a ser más rápida
00:17:47
Entonces, por cuestiones de rendimiento
00:17:48
El float rinde mejor
00:17:50
Por lo que ocupa
00:17:53
Pero a la hora de escribir código
00:17:54
Es más cómodo
00:17:58
Cuando tienes que arrastrar la F
00:17:59
¿Es crítico el rendimiento?
00:18:00
Depende, si en tu aplicación lo es
00:18:02
Y en tu hardware lo es
00:18:04
Pero si no lo es, pues es más cómodo
00:18:06
Trabajar con W
00:18:09
Bueno, pues igual que hemos hecho con los enteros
00:18:09
Uno puede operar
00:18:17
Y asignar
00:18:18
Por ejemplo, vamos a
00:18:20
A otro numerito 3
00:18:23
Le vamos a dar el resultado de
00:18:25
Dividir num1 entre num2
00:18:28
Vale
00:18:32
Estupendo
00:18:33
Num1 entre num2
00:18:35
Ahora este operador
00:18:37
Ya no es el cociente
00:18:39
porque el cociente
00:18:41
entre números decimales no existe
00:18:44
el cociente es sólo entre enteros
00:18:46
tú un entero
00:18:48
tienes cociente y resto
00:18:50
por toda la vida
00:18:52
pero entre números decimales no hay cociente
00:18:53
entre números decimales hay división con sus decimales
00:18:56
entonces si
00:18:58
dividimos esto
00:19:01
pues nos dará el numerito con decimales
00:19:02
que nos dé
00:19:05
pues este es la división entera
00:19:06
mogollón de cifras decimales
00:19:15
porque es un dabble
00:19:17
porque es un dabble
00:19:19
¿vale? fijaos
00:19:21
he mezclado
00:19:27
variables de diferente
00:19:29
tipo en la expresión
00:19:31
esta es dabble, esta es float
00:19:32
igual que en expresiones
00:19:34
con números enteros
00:19:37
en el ejemplo de antes hemos mezclado int y long
00:19:38
no pasa nada, lo que hace
00:19:41
con el int es subirlo a long, ya está
00:19:43
no pasa nada, pues aquí
00:19:45
lo mismo, lo que hace con este
00:19:47
es subirlo a dabel, no pasa nada
00:19:49
se puede promocionar
00:19:53
de float a dabel, añades ceros
00:19:54
como cifra decimal
00:19:56
promocionar
00:19:57
yo tengo, o yo no
00:20:00
la máquina virtual
00:20:02
este numerito
00:20:03
a lo mejor es
00:20:07
7,82, está guardado como
00:20:07
float, lo quiero
00:20:10
como dabel, la máquina virtual lo tiene que promocionar
00:20:12
a dabel para irlo con este dabel
00:20:15
no pasa nada
00:20:16
mogollón de ceros
00:20:18
ala, ya está promocionado a dabel
00:20:20
a la inversa sin embargo no
00:20:22
tengo un numerito dabel
00:20:25
7,81569324675
00:20:27
este es un dabel
00:20:34
para cambiarlo a float
00:20:35
¿qué tendría que hacer?
00:20:37
esto a la basura
00:20:39
porque el float solo me admite 7 cifras
00:20:40
eso a la basura, hombre eso no
00:20:43
eso no lo podemos hacer porque
00:20:45
perdemos información.
00:20:47
Toda esta precisión la estamos tirando
00:20:49
a la basura. Luego de
00:20:51
dabel, perdón, de float
00:20:53
a dabel,
00:20:55
la máquina virtual lo hace automáticamente
00:20:57
porque se trata de añadir ceros.
00:21:00
No se pierde información.
00:21:04
De dabel
00:21:07
a float no te deja
00:21:07
porque, claro, que estás
00:21:09
perdiendo información, estás perdiendo precisión.
00:21:11
Aquí, por tanto,
00:21:15
teníamos el dabble
00:21:15
el float
00:21:17
¿qué ha hecho?
00:21:19
ha cogido el float
00:21:21
le añade ceros, no pasa nada
00:21:23
con lo cual lo ha promocionado
00:21:25
a dabble y la operación
00:21:28
cae en un dabble, ya está
00:21:30
no pasa nada
00:21:31
sí que habría sido un problema
00:21:32
el siguiente
00:21:42
float num3
00:21:43
igual a num1
00:21:46
entre
00:21:48
num4
00:21:49
que num3 ya lo tengo
00:21:52
num1
00:21:53
entre num2
00:21:56
esto
00:21:58
si habría sido un problema
00:22:00
esta sí, esta no
00:22:01
esta no
00:22:07
porque claro
00:22:09
aquí la máquina virtual primero evalúa la expresión
00:22:10
luego ya después se mete
00:22:13
a ver a qué variables lo das
00:22:15
float double
00:22:16
al revés
00:22:19
el float
00:22:20
lo estiro con ceros al double
00:22:22
hago la división
00:22:25
me queda el double
00:22:27
¿un double puede ir a un float?
00:22:28
no
00:22:31
¿un float puede ir a un double? sí
00:22:32
exactamente igual que
00:22:34
¿un int puede ir a un long? sí
00:22:36
¿un long puede ir a un int? no
00:22:38
pues aquí aplican los mismos
00:22:40
principios, dime
00:22:43
te lo va a truncar a la precisión que sea
00:22:44
si es double te lo truncará
00:22:52
a las 14 cifras decimales
00:22:54
que tenga, que no recuerdo cuantas son
00:22:56
te lo trunca
00:22:58
siempre te lo va a truncar
00:22:59
si el resultado te da un número periódico
00:23:06
la operación te da un número periódico
00:23:08
te va a obtener un resultado
00:23:09
pero truncando solo
00:23:12
a los decimales que admite
00:23:14
el resto no
00:23:16
el resto no te lo va
00:23:18
por ejemplo
00:23:19
a ver esto
00:23:21
no se puede hacer, aquí podríamos
00:23:24
vamos a
00:23:26
entonces aquí haría
00:23:29
Vamos a dejar esto
00:23:31
Promoción automática
00:23:34
De Float a Dabble
00:23:36
Esta se puede
00:23:39
Esto si se puede y no hay problema
00:23:40
Sin embargo
00:23:45
De Float a Dabble
00:23:46
La promoción automática se puede
00:23:51
Sin embargo
00:23:53
No se puede
00:23:54
Promocionar
00:23:56
De Dabble a Float
00:23:59
Eso no
00:24:01
Porque perderíamos información
00:24:02
¿Vale? Esto no se puede y me daba error
00:24:05
Vale, entonces
00:24:07
Vamos a crear un número periódico
00:24:09
Para ver cómo te lo muestra
00:24:11
Por ejemplo, num3
00:24:12
Igual a
00:24:14
1 entre 3
00:24:17
¿No? Es 0,33333
00:24:22
¿No?
00:24:23
1 entre 3
00:24:25
Y vamos a mostrar
00:24:27
Num3
00:24:29
Ah, perdón
00:24:32
Ah, mira, qué
00:24:44
Buen ejemplo, nos ha salido antes de
00:24:45
De tiempo, vale
00:24:48
Porque además viene al pelo
00:24:50
Justo de lo que teníamos que contar ahora
00:24:54
Vale, generando el ejemplo suyo
00:24:56
Este de número periódico
00:24:58
Vale, hemos dicho
00:25:00
1 entre 3
00:25:01
Es 0,333333
00:25:03
Hasta el infinito, ¿verdad?
00:25:06
Lo hemos
00:25:10
Hemos hecho la división
00:25:11
La hemos guardado en este numerito de Abel
00:25:12
Y vamos a mostrar este número
00:25:14
¿Cuál es?
00:25:16
Esperábamos encontrar 0.3333
00:25:18
Así hasta las cifras decimales
00:25:21
Que quepan en Abel
00:25:23
Que son las que me han salido
00:25:24
Antes ahí que no las he contado
00:25:26
12 o 13 serán
00:25:27
Vale, entonces lo hemos ejecutado
00:25:30
¿Y qué corte?
00:25:32
Nos ha salido 0
00:25:35
En lugar de 0,33333
00:25:36
Vale, pues en realidad
00:25:39
¿sabemos por qué?
00:25:41
si lo pensamos
00:25:44
¿sabemos por qué?
00:25:44
¿vale? a ver
00:25:49
no
00:25:50
cuando
00:25:51
estamos viendo enteros, yo os he dicho
00:25:54
cuando la máquina virtual
00:25:56
ve una sucesión
00:25:57
de cifras
00:25:59
lo construye como IN
00:26:03
es justo lo que ha visto aquí
00:26:06
una sucesión de cifras
00:26:08
lo ha construido como IN
00:26:09
vale
00:26:12
ahora ve aquí un 3
00:26:13
lo ha construido como int
00:26:15
porque es una sucesión de cifras normal y corriente
00:26:18
int
00:26:20
barrita int
00:26:20
lo interpreta como cociente
00:26:23
porque cuando esta barra
00:26:26
mezcla números enteros
00:26:28
entonces es el cociente
00:26:30
no es la división entera
00:26:33
es el cociente, otra cosa que también sabemos
00:26:35
cociente de dividir 1 entre 3
00:26:38
Ahora, le ha salido el numerito int 0
00:26:43
Lo tiene que guardar en double
00:26:46
Porque en un 3 es double
00:26:49
No pasa nada
00:26:51
Un int en double cabe
00:26:51
Le pongo 0.0 y ya está
00:26:54
Como si hubiera salido 3
00:26:56
Un 3 en double cabe
00:26:59
Le pongo 3.0 y ya está
00:27:00
A la inversa no
00:27:03
Un double en int no
00:27:05
Porque un double podría 3.7
00:27:06
Para que cupiera en un int
00:27:08
Tendría que quitarle el .7
00:27:10
Eso es perder información, eso nunca se puede hacer
00:27:12
Pero un int en un double
00:27:15
Ningún problema, le pones el .0 y ya está
00:27:17
Pues eso es lo que ha pasado
00:27:19
Esto es un int
00:27:21
Esto es un int
00:27:22
Esto por tanto es división entera
00:27:24
Me da 0, como tiene que ir a un double
00:27:26
Le pongo 0.0
00:27:29
Que es justo
00:27:30
Lo que nos ha salido
00:27:31
Luego entendemos lo que ha pasado
00:27:33
Ahora
00:27:36
Perdona, yo no quiero que me interpretes
00:27:37
Esto como
00:27:41
int, sino como dable
00:27:42
si os ocurre que podríamos poner
00:27:44
podríamos, pero no hace falta
00:27:46
más sencillo, punto cero
00:27:52
punto cero
00:27:54
claro, ya está, ahora ya
00:28:01
la máquina virtual no se encuentra
00:28:03
unas cifras enteras y más
00:28:05
se encuentra una parte entera
00:28:07
punto una parte decimal
00:28:09
que la parte decimal es cero, me da igual
00:28:11
esto ya jamás lo va a construir como un entero
00:28:13
porque se ha encontrado el carácter clave de los decimales
00:28:16
que es este
00:28:19
entonces
00:28:20
al encontrarse
00:28:21
el carácter clave de los decimales
00:28:25
que es el puntito
00:28:26
dice, ah, hay que construir un double
00:28:28
genial, se ha construido
00:28:31
el double 1.0
00:28:33
y aquí el double 3.0
00:28:34
ahora ya son dos doubles
00:28:37
esto ya por tanto
00:28:38
ya no es cociente
00:28:40
eso ahora es división con decimales
00:28:41
porque lo que tienen los dados
00:28:44
son dabel
00:28:46
luego poniendo
00:28:47
el punto cero
00:28:50
ya forzamos a que la máquina virtual
00:28:51
lo construya como dabel
00:28:54
porque le estamos dando el puntito
00:28:55
si no le damos esto
00:28:57
ve
00:28:59
una sucesión de cifras
00:29:01
en este caso solo una
00:29:03
y para él eso es un número entero
00:29:05
y lo construye como entero
00:29:08
entonces ahora sí
00:29:09
ejecutamos este programa
00:29:12
ahora ya esto
00:29:16
lo ha truncado
00:29:20
a las cifras decimales
00:29:23
que admite de Abel
00:29:25
que son 5
00:29:26
10
00:29:29
16
00:29:31
¿vale? si fuera 0, 7, 7, 7
00:29:34
7, 7, 7, al truncarlo veríamos
00:29:39
que la última es 8, porque al redondearlo
00:29:41
pues
00:29:43
lo va a redondear a 8 porque tiene muchos 7 detrás
00:29:44
pero bueno, en este caso el redondeo es a 3
00:29:47
Sí, pero esos son castings
00:29:49
Que no nos ha quedado más remedio
00:29:54
Que hacer aquí
00:29:56
Porque ahí tenemos que hacerlo sí o sí
00:29:57
Pero los castings vamos a evitarlos
00:29:59
Hasta que, lo que tú me estás diciendo
00:30:01
Pon el label entre paréntesis
00:30:03
Vamos a evitarlos hasta que no
00:30:05
Tengamos que usarlos sí o sí
00:30:06
Y hasta que no entendamos muy bien lo que significan
00:30:09
Y aquí le has puesto
00:30:11
Esta variable está declarada como
00:30:16
Double, bueno es que si no te daría error de compilación
00:30:18
Y esto es un
00:30:20
¿Has puesto el punto cero y el punto cero?
00:30:22
No, lo he puesto sin punto cero
00:30:25
Ah, entonces no
00:30:26
Claro, claro, es que si no son enteros
00:30:27
Pasa lo que hemos dicho antes
00:30:30
Si no se lo pones son entero
00:30:32
Cociente entero
00:30:35
Si se lo pones solo en uno de los dos
00:30:36
También funciona
00:30:39
Porque aquí haría entonces la promoción automática
00:30:40
Entero entre double
00:30:42
Lo que hace es
00:30:44
Promocionar el entero a double poniendo punto cero
00:30:46
No hace falta ponérselo a los dos
00:30:48
vale
00:30:50
vale, o sea en general
00:30:52
cuando tenemos una expresión aritmética
00:30:55
que involucra valores
00:30:58
de diferente tipo
00:30:59
él intenta promocionar
00:31:00
unos a otros si es que se puede
00:31:03
y esas reglas de promoción
00:31:06
están claras
00:31:10
vamos a recopilarlas aquí
00:31:11
con versiones
00:31:13
que puede hacer
00:31:18
la máquina virtual
00:31:19
directamente sin ningún problema
00:31:21
Pues puede hacer, está claro
00:31:23
Byte lo puede llevar
00:31:29
A short
00:31:31
Lo puede llevar a int
00:31:35
Si hace falta, lo puede llevar a long
00:31:37
¿Vale?
00:31:39
Short
00:31:42
Lo puede llevar
00:31:42
A int, sin ningún problema
00:31:44
Y lo puede llevar a long
00:31:47
Int
00:31:48
Lo puede llevar a long, sin problema
00:31:51
Si la máquina virtual lo necesita
00:31:54
¿Vale?
00:31:55
Float
00:31:58
lo puede llevar a double
00:31:59
no hay ningún problema
00:32:01
es añadir ceros en la cifra decimal
00:32:04
pero lo que es más
00:32:06
int
00:32:08
también lo puede llevar a float
00:32:09
poniendo .000
00:32:12
e int
00:32:13
también lo puede llevar a double
00:32:15
poniendo el .0000
00:32:18
todas estas conversiones
00:32:21
se pueden hacer, las hace automáticamente
00:32:24
si ve valores
00:32:26
de tipos mezclados en una expresión
00:32:28
él
00:32:30
convierte lo que
00:32:32
necesite siempre y cuando pueda
00:32:34
estas conversiones se pueden hacer porque no pierde
00:32:36
ninguna información
00:32:38
para esta pone .0
00:32:40
y ya está, para esta también pone .0
00:32:42
he puesto solo in, pero de long a double
00:32:44
sería igual, van a agarrarme
00:32:46
un long puede un double, pone .0
00:32:47
y ya está, ¿vale?
00:32:50
este ya lo sabemos, de un in
00:32:53
puede un long, pone ceros en los bits
00:32:54
significativos y ya está
00:32:56
Sin embargo, las inversas
00:32:58
No las puede hacer automáticamente
00:33:00
Y por eso hay un error de compilación previo
00:33:03
Las inversas no puede
00:33:05
El si necesitara cambiar de double a int
00:33:06
Eso no puede hacerlo
00:33:10
Ni de double a float
00:33:11
Eso no puede
00:33:13
Porque tiene que quitar cifras decimales
00:33:14
Ni de long a int
00:33:16
No puede
00:33:18
Porque tiene que quitar bits que tienen valor
00:33:18
Vale, a ver
00:33:21
Vamos a incorporar
00:33:36
Leer un decimal por teclado para poder hacer algo.
00:33:42
Igual que ya sabemos leer números por teclado,
00:33:47
pues podemos también, números enteros por teclado,
00:33:51
podemos también leer decimales por teclado.
00:33:55
Y lo haríamos igual.
00:33:58
Tendríamos que hacer el objeto lector.
00:34:00
Y ahora, por ejemplo, yo quiero leer un dabel,
00:34:04
un numerito dabel del teclado.
00:34:25
Pues doy la orden
00:34:28
Pero la orden ahora no es next in
00:34:32
La orden como nos podíamos imaginar es next double
00:34:34
Entonces
00:34:36
Cuando la máquina virtual llega aquí
00:34:40
Se queda ahí quieta esperando
00:34:42
Que alguien meta un número
00:34:44
Y
00:34:45
Variable double
00:34:47
Vale, mete un decimal para variable double
00:35:05
Y vamos a hacer lo mismo con el float
00:35:08
Mete un decimal
00:35:10
Para variable float
00:35:17
Num6
00:35:19
Ahora no será
00:35:25
float
00:35:26
ahora no será next double
00:35:28
sino como nos podíamos imaginar
00:35:31
next float
00:35:33
entonces vamos a probar estas dos lecturas
00:35:34
vamos a leerlo y mostramos el número leído
00:35:41
y aquí lo mismo
00:35:45
vamos a leerlo y vamos a mostrar
00:35:53
el número leído
00:35:55
entonces estos dos códigos
00:35:56
primero este te mostrará el mensajito
00:35:59
se quedará a la espera
00:36:03
de que le metas un double
00:36:05
y lo guardará en un 5
00:36:06
y luego te lo muestra
00:36:08
y aquí lo mismo, te muestra el mensajito
00:36:10
se queda esperando que le metas
00:36:13
un número decimal, lo guarda en este float
00:36:14
y te lo muestra
00:36:16
vamos a ejecutarlo
00:36:17
bueno, esto es lo que ha hecho antes
00:36:20
como veis ahí está esperando
00:36:25
ahí está esperando
00:36:27
cada vez que hay un next
00:36:29
lo que sea
00:36:31
el programa se queda ahí esperando
00:36:32
vale
00:36:36
Pues aquí cuidado, porque aquí el next double no funciona con el punto, el next double si yo le meto 76.8 no funciona con el punto, hay que poner una comita, es lo único que tenemos que recordar, ¿vale?
00:36:37
Entonces, si yo quiero meter a través del teclado 76,8, pues tengo que poner coma, no punto, coma.
00:36:56
Luego no es igual cuando lo asigno directamente por código que cuando lo meto por teclado con Nextavel.
00:37:06
Por código es punto, como toda la vida de Dios en matemáticas.
00:37:12
Por teclado es coma, porque el Nextavel lo tiene así porque cree que es más intuitivo.
00:37:16
Vale, efectivamente
00:37:21
Lo ha leído
00:37:23
Y luego me lo ha mostrado
00:37:25
El numerito que yo he leído es 76.8
00:37:27
Muy bien
00:37:30
Vamos a meter un decimal para variable flow
00:37:30
76.8 otra vez
00:37:33
Vale
00:37:35
Lo ha leído
00:37:38
No te obliga a poner la F
00:37:39
Porque esto es para que un usuario lo escriba
00:37:42
Y necesita que sea intuitivo
00:37:44
Entonces
00:37:46
Te lo lee y luego te muestra
00:37:48
la variable float, vale
00:37:51
vamos a ejecutarlo otra vez poniendo
00:37:52
aquí un número que tenga
00:37:58
muchas cifras decimales que no quepan en double
00:38:00
a ver si redondea o peta
00:38:02
mete un decimal
00:38:05
para double, pues 4,6
00:38:08
4,6, mete un decimal
00:38:09
para float
00:38:12
8, en float
00:38:12
solo cabían, eran 7
00:38:18
creo, 1, 2, 3, 4, 5, 6
00:38:20
7, 8, 9
00:38:22
vale
00:38:23
Como no admite esa precisión
00:38:25
Fijaos lo que ha hecho el next flow add
00:38:28
Como tanta precisión no admite
00:38:31
Te lo redondea
00:38:33
Al double más cercano
00:38:34
En este caso es esto
00:38:36
Perdón, al flow add más cercano
00:38:39
Te lo redondea a esto
00:38:41
Porque no admite esa precisión
00:38:43
Sin embargo, si yo
00:38:46
Le dijera
00:38:48
78,9
00:38:51
Y ahora meto uno para variable flow add
00:38:53
7, 1, 2, 3, 4, 5, 6, 7.
00:38:56
7 si las coge, ¿verdad?
00:38:59
Bueno, me ha redondeado a 6.
00:39:02
Esos son ya matices internos de cómo funciona esta sentencia de leer del teclado.
00:39:04
Pero vamos, lo que nos importa ahora es que cada vez que tengamos que hacer programas
00:39:09
que necesiten datos de entrada del teclado,
00:39:14
con estas tres sentencias que hemos visto,
00:39:18
esta next in de aquí,
00:39:22
Que no sé dónde estaba
00:39:23
Aquí
00:39:26
Y estas dos
00:39:27
NextW y NextFloat
00:39:32
Podemos meter números enteros y decimales
00:39:33
Si metemos decimales
00:39:35
Ojo con coma
00:39:38
Acordémonos de con coma
00:39:39
Porque si no va a salir error
00:39:40
Ya está
00:39:41
Teclado con coma
00:39:42
En lugar de con punto
00:39:58
¿Vale?
00:40:00
Pues todavía podemos hacer muy
00:40:28
Poquitas cosas
00:40:31
Pero bueno
00:40:32
Si del aula virtual
00:40:34
A ver
00:40:40
Vale, bueno, todo esto
00:40:51
Todavía no lo hemos visto
00:41:17
Aquí están algunos resúmenes que he subido
00:41:18
Para que esté un poco más organizado
00:41:23
Pues si abrís el PDF
00:41:24
Este
00:41:27
Esto es una chorradita
00:41:28
Pero es que no podemos hacer más que esto
00:41:37
Haced estos dos primeros
00:41:39
Más que nada para asegurarnos todos
00:41:41
de que tenéis conocido
00:41:43
toda la dinámica.
00:41:46
Sí, sí, en el aula virtual.
00:41:48
Sí, a ver, cada ejercicio
00:41:52
que hagáis, hacedlo en una clase.
00:41:53
¿Vale?
00:41:56
Entonces...
00:41:58
- 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:
- 5
- Fecha:
- 24 de septiembre de 2025 - 18:07
- Visibilidad:
- Clave
- Centro:
- IES ROSA CHACEL
- Duración:
- 42′
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1920x1080 píxeles
- Tamaño:
- 156.99 MBytes