20241008 ProgrEstruct-Decision-Ejer_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:
¿En qué ejercicio se hace el switch?
00:00:00
¿En qué ejercicio se hace el switch?
00:00:02
¿En qué ejercicio se hace el switch?
00:00:03
¿En qué ejercicio se hace el switch?
00:00:05
¿Esto lo vamos a hacer ahora?
00:00:07
Sí, estoy preguntando.
00:00:08
Bueno, a ver, estos son ejercicios de decisión en general
00:00:11
y la decisión uno decide
00:00:13
luego como la plasma, si en un IF, un SIF,
00:00:15
un SWITCH. Nosotros ahora mismo
00:00:18
conocemos tres variantes para
00:00:19
tomar decisiones, o sea, no es que haya
00:00:21
ejercicios de IF, ejercicios de SWITCH.
00:00:23
A ver, IF,
00:00:26
SIF, IF, el IF, el SIF,
00:00:27
el SEIF y el switch case
00:00:29
a ver
00:00:31
el IFELS básico
00:00:35
el IF con el SEIF
00:00:37
claro
00:00:39
eso
00:00:41
vale, en cualquier caso son diferentes
00:00:43
formas de plantear la decisión, luego ya
00:00:45
cada ejercicio uno lo hace como
00:00:47
puede, ve, cree
00:00:49
o usa todas las sentencias
00:00:52
son ejercicios en general de decisión
00:00:53
por eso lo estoy metiendo todo en un proyecto
00:00:55
venga, 19 hemos quedado
00:00:57
Venga
00:00:59
A ver que nos sale
00:01:03
Ejercicio 19
00:01:18
Recibe
00:01:19
Pensemos
00:01:21
A ver
00:01:22
Recibe 3 caracteres
00:01:26
Y un int
00:01:29
Vamos a dar por sentado que lo que mete
00:01:30
Está bien, tres caracteres
00:01:33
Y un int
00:01:35
Para no tener que decir
00:01:37
Si no, bueno, nada
00:01:39
Vale, pues vamos a hacer
00:01:41
La parte de lectura de los datos
00:01:42
La primera de todas, venga, la parte de lectura
00:01:45
Y nos la quitamos de en medio
00:01:49
Ala, ya tenemos
00:01:50
La parte, bueno, hemos leído los datos
00:02:06
A ver, tenemos
00:02:08
Los
00:02:10
Vamos a declarar los
00:02:11
tres, joder
00:02:14
ay, es muy tarde ya
00:02:16
C1, C2 y C3
00:02:19
y el numerito N
00:02:22
nombres de variables horrorosos
00:02:24
pero bueno, es que hay que acortar
00:02:26
hay que acortar que nos alargamos mucho
00:02:28
eso
00:02:30
hay que reducir de donde sea
00:02:32
vale, pues venga, vamos a leer
00:02:34
le decimos primero
00:02:37
introduzca
00:02:40
tres
00:02:42
caracteres
00:02:43
vale, los voy a leer por separado
00:02:45
a ver, aquí se podría interpretar
00:02:50
que le decimos al tío que introduzca A, B, C
00:02:52
los tres seguidos, entonces lo podríamos leer
00:02:54
como una cadena y luego
00:02:56
separarlos, vale, no gracias
00:02:58
eso no gusta, venga, a ver
00:03:00
que otra oferta tenemos, vamos a decirle que
00:03:02
lo lea como, que lo introduzca como
00:03:04
el A, enter, B, enter C
00:03:06
que nos complica más la vida
00:03:08
pues
00:03:09
que introduzca tres caracteres
00:03:11
uno enter, otro enter, otro enter
00:03:14
vamos a asumir que lo va a hacer así
00:03:16
vale, pues venga
00:03:17
vamos a leer el primero
00:03:20
¿cómo leemos?
00:03:21
yo he dicho que con nextline
00:03:24
siempre podemos leer una cadena
00:03:25
siempre, con nextline
00:03:27
pero con nextline
00:03:29
yo leo lo que leo, se queda almacenado
00:03:31
en string, en realidad
00:03:34
pero el tiene introducido
00:03:35
B
00:03:38
vale, si yo me quedo
00:03:39
con la posición 0 de ese string
00:03:42
es decir, si lo que al tío
00:03:44
ha metido
00:03:46
yo me quedo con la 0
00:03:46
ya tengo el char
00:03:49
en realidad
00:03:51
¿verdad? y lo podría asignar a C1
00:03:52
directamente
00:03:56
¿verdad que puedo hacer esto para leer un char?
00:03:56
si me da la gana
00:04:00
con next line
00:04:00
leemos toda la cadena hasta el enter
00:04:02
y ahora
00:04:05
de toda esa cadena yo podría asignarla
00:04:07
un string y ahora ese string
00:04:09
quedarme con la posición 0
00:04:12
pero voy a
00:04:13
abreviar, entonces
00:04:16
todo esto
00:04:17
es la cadena
00:04:18
que me devuelve el next line
00:04:22
pues de toda esa cadena
00:04:23
me quedo con el char 0
00:04:25
a ver, repito para que quede claro
00:04:26
esto es lo mismo que si yo lo hubiera hecho por partes
00:04:29
leo primero
00:04:31
la cadena
00:04:34
así
00:04:34
y una vez que tengo esta cadena
00:04:36
me quedo
00:04:40
de esa cadena
00:04:42
con el char en la posición 0
00:04:46
¿vale?
00:04:47
es decir, esta es una forma
00:04:50
cómoda, tengo más opciones, pero bueno
00:04:52
es una forma cómoda de leer
00:04:54
una variable char
00:04:56
hago el next line que coge todo lo que
00:04:57
hay hasta el enter, que en este caso
00:05:00
es un único carácter
00:05:02
y lo guardo en un string, porque así funciona el next line
00:05:02
lo guardo en un string, no hay alternativa, lo guardo en un string
00:05:06
vale, y ahora de ese string me quedo
00:05:08
con la posición 0
00:05:10
ese me devuelve ya un char suelto
00:05:12
pues ese char hace 1, vale
00:05:14
entonces, esta es una forma
00:05:16
compactada
00:05:19
de ponerlo de arriba, pero es lo mismo
00:05:20
estoy haciendo lo mismo
00:05:22
vale, estoy diciendo
00:05:24
a todo el string que me devuelve
00:05:28
este, a todo este
00:05:30
a todo ese, ya quédate
00:05:31
con el 0
00:05:34
me estoy ahorrando esta variable intermedia
00:05:34
vale, pero esto
00:05:37
y esto tienen el mismo
00:05:39
efecto, guardar en c1
00:05:42
el char que se ha metido, tienen el mismo
00:05:44
efecto, esto y esto
00:05:46
el que veáis más claro
00:05:47
vale, yo este ahora mismo lo voy a dejar comentado
00:05:51
vale, y me quedo con este
00:05:54
y así me ahorro declarar esa variable
00:05:57
me ahorro declararla
00:05:59
pero si os hacéis más lío y lo veis más claro así
00:06:00
pues trabajáis así por ahora y ya está
00:06:03
no pasa nada
00:06:05
bueno, pues
00:06:06
Ya hemos leído el primer carácter
00:06:09
Vamos a leer los siguientes
00:06:11
C2
00:06:12
Y C3
00:06:14
Vale, ya tenemos los tres
00:06:17
Y ahora
00:06:24
Vamos a leer el numerito entero
00:06:27
Leemos el numerito N
00:06:28
Aquí ya lo tenía declarado
00:06:41
N con scan.nextint
00:06:42
Ala, tenemos los tres datos de entrada
00:06:49
Y ahora ya es cuando habría que hacer
00:06:51
Todo el pifostio ese
00:06:54
Bueno, esta parte de lectura de los char ha quedado claro
00:06:56
O sea, en esta versión o en la de arriba
00:07:04
Vale, vamos a probar solo esta parte de lectura
00:07:05
A ver si nos va bien
00:07:13
Vale, voy a ejecutar
00:07:15
Vale, voy a ejecutar esto
00:07:22
Introduzca tres caracteres
00:07:29
R, W, A, introduzca número
00:07:34
Y el programa ha acabado porque no he hecho nada más
00:07:37
vamos a suponer que lo habéis hecho en orden inverso
00:07:39
que habéis decidido leer primero el número
00:07:44
no pasa nada
00:07:46
podéis haber decidido leer primero el número
00:07:48
ya está, habéis leído primero el número
00:07:51
ya después de haber leído el número
00:07:55
ya le pedís los caracteres, es lo mismo, me da igual
00:07:57
voy a quitarlo de aquí porque ya lo he leído arriba
00:08:00
bueno, pues habéis decidido hacerlo en orden inverso
00:08:03
Vale, solamente he subido esto arriba
00:08:07
Para leer primero el numerito
00:08:10
Y cuando he leído el numerito he metido eso
00:08:11
Vale, vamos a ejecutarlo ahora
00:08:14
Lo ejecuto, introduzca número
00:08:15
7
00:08:18
Si no hemos hecho nada
00:08:18
Y ya ha salido esto
00:08:22
Pues ya lo hemos liado
00:08:23
Fijaos que absurdo
00:08:26
Me he limitado a cambiar el orden
00:08:29
A la parte del número
00:08:31
En lugar de leerla después, leerla antes
00:08:33
Y me ha salido algo
00:08:35
desconcertante
00:08:36
ahora me explico
00:08:38
vale
00:08:41
me dice algo de
00:08:43
indesauros va a una excepción
00:08:44
la posición 0, leída
00:08:46
bueno, a ver, en resumen
00:08:49
¿qué ha pasado?
00:08:51
pues esto es por culpa de cómo
00:08:53
funciona el objeto escáner, entonces una vez que ya sabemos
00:08:55
por qué pasa
00:08:57
ya sabemos cómo arreglarlo, lo arregláis siempre
00:08:58
y se acabó, vale, ¿por qué pasa
00:09:01
esto? fijaos lo que
00:09:03
está pasando en realidad es
00:09:05
cuando el
00:09:06
objeto escáner
00:09:08
le mandamos leer un número
00:09:10
sea int o sea label
00:09:13
me da igual, o sea float, un número
00:09:15
cuando le mandamos leer un numerito
00:09:16
¿él qué hace?
00:09:18
como él está esperando un numerito
00:09:21
pues
00:09:23
una vez que ya ha llegado el número
00:09:24
coge el número
00:09:28
lo guarda en la variable correspondiente
00:09:30
lo guarda en la variable
00:09:33
pero claro, nosotros hemos metido el número
00:09:34
y además del número
00:09:37
hemos metido un enter
00:09:38
el enter lo hemos metido
00:09:40
cuando yo meto un número, meto 37
00:09:41
y enter
00:09:44
el next sin
00:09:45
ha cogido el 37
00:09:48
y el 37 se ha ido aquí
00:09:50
¿y qué ha pasado con el enter?
00:09:52
el enter es otro carácter en realidad
00:09:55
de hecho está en la tabla ASCII
00:09:56
en la tabla ASCII hay uno que es salto de línea
00:09:58
es otro carácter
00:10:00
¿qué ha pasado con ese carácter?
00:10:01
pues que está ahí cruzado de brazos en el buffer del teclado
00:10:04
esperando que digan, oye, ¿qué pasa conmigo?
00:10:06
Te has quedado con el 37 y lo has guardado en N,
00:10:08
muy bien, y yo, ¿qué pasa?
00:10:11
Pues ahí se queda esperando,
00:10:14
en el buffer del teclado, donde está la filita
00:10:15
de las cosas que yo he metido.
00:10:17
Cuando vosotros tecleáis en un teclado,
00:10:19
todo eso va a un buffer.
00:10:21
Y luego ya la aplicación que sea
00:10:23
va sacando del buffer según va necesitando.
00:10:25
Pues aquí hemos metido en el buffer
00:10:28
37
00:10:29
y el salto de línea.
00:10:30
Todo eso está en el buffer.
00:10:32
El 37 salió
00:10:34
porque lo sacó el next line para llevarlo
00:10:36
y salió, y está el salto de línea
00:10:38
cruzado de brazos, y ahí está
00:10:40
vale, pues el salto de línea, ¿quién lo chupa ahora?
00:10:42
lo chupa
00:10:45
este next line
00:10:46
la siguiente sentencia de entrada
00:10:48
esta
00:10:50
entonces, esta
00:10:51
no se queda esperando que le metamos
00:10:53
algo más, porque ya ve que hay un salto de línea
00:10:56
y se cree que es
00:10:59
eso lo que le hemos
00:11:00
metido, se cree que es eso, entonces lo
00:11:02
coge y como le hemos
00:11:04
dicho que vaya al carácter en posición
00:11:06
cero, dice, si no hay nada en la
00:11:08
posición cero, porque le hemos metido un string vacío.
00:11:10
Al dar al enter
00:11:14
él interpreta que no hay un string vacío, no hay nada.
00:11:14
Es lo que nos ha salido.
00:11:17
Indes va a una step y en la posición cero no existe.
00:11:18
A ver, más o menos
00:11:21
habéis entendido lo que ha pasado.
00:11:22
Ahora es más fácil entender la solución.
00:11:24
Esto cuando ocurre,
00:11:27
ocurre,
00:11:29
esta combinación se da
00:11:30
cuando hacéis una lectura
00:11:32
de número
00:11:34
y después hacéis una de cadena
00:11:35
esa combinación es la peligrosa
00:11:38
porque cuando hacéis
00:11:41
la de número, la de número deja el salto de línea
00:11:42
sin procesar
00:11:44
y luego la va a procesar este
00:11:45
entonces, y este
00:11:47
al ser un next line, al procesarla
00:11:50
va a decir, uy cadena vacía
00:11:52
cadena vacía, ya tengo cadena, no tengo que esperar
00:11:54
que me metas nada, pero claro, cadena vacía
00:11:56
cuando me voy aquí, falla
00:11:58
porque no tiene posición 0 la cadena vacía
00:12:00
la que pongas
00:12:02
la cadena vacía no tiene ninguna posición
00:12:06
no tiene ni la 0 ni la 1 ni la ninguna
00:12:08
entonces primero hay que aislar
00:12:10
que este problema se da
00:12:12
cuando hacemos la secuencia de
00:12:13
leer un numerito con next in next double
00:12:15
y después un next line
00:12:18
porque entre next line y next line
00:12:18
no se da
00:12:22
porque un next line el salto de línea también lo chupa
00:12:22
y lo quita
00:12:26
el problema es cuando leemos números
00:12:26
que el salto de línea no lo chupan
00:12:30
bueno, pues entonces
00:12:32
¿cómo lo arreglamos? cuando hemos
00:12:34
identificado que en nuestro código tenemos una
00:12:35
secuencia de lecturas
00:12:37
en las cuales estamos leyendo número
00:12:39
y después cadena
00:12:41
número y después cadena, tenemos que
00:12:43
hacer algo para quitar ese
00:12:46
salto de línea
00:12:48
no pasa nada, pues ¿cómo podemos hacer
00:12:48
quitar el salto de línea?
00:12:52
leyéndolo a lo bestia
00:12:54
lo leemos
00:12:55
ya está leído
00:12:56
y no lo asigno a nadie, lo tiro a la basura
00:13:01
no hace falta que se lo asigne a nadie
00:13:04
si yo no se lo asigno a nadie
00:13:06
es como tirarlo a la basura
00:13:08
se lo podría asignar
00:13:10
a una cadena, claro
00:13:12
entonces yo ahora mi programa así
00:13:13
ya sí va a funcionar
00:13:16
porque ¿qué es lo que hago? leo un numerito
00:13:18
el número va a N
00:13:20
se me ha quedado un salto de línea
00:13:21
ese salto de línea
00:13:24
que se lo traje este next line
00:13:26
y lo lleva aquí
00:13:28
y ahora ya, este ya se encuentra el buffer vacío
00:13:30
como se encuentra el buffer vacío
00:13:33
ya se queda esperando que yo le meta
00:13:35
mi char, ¿vale?
00:13:37
entonces
00:13:42
recopilando
00:13:43
esta situación anómala se da
00:13:44
cuando después de leer un número
00:13:46
leemos cadena con next line
00:13:48
para evitarla
00:13:50
intercalamos
00:13:52
entre la lectura de número
00:13:55
y la lectura de cadena
00:13:57
intercalamos una lectura de cadena
00:13:58
Para que quite eso, que se ha quedado ahí esperando
00:14:01
Vamos a probarlo
00:14:03
Para ver que ahora las lecturas no van a dar ese problema
00:14:05
Yo ahora introduzca
00:14:07
Número 87
00:14:09
¿Veis? Y ahora ya sé que funciona
00:14:10
D, F y H
00:14:12
Vale, ya me ha funcionado
00:14:14
¿Vale?
00:14:16
Ya por último, para que quede más bonito
00:14:18
Este string que leo
00:14:20
No necesito asignárselo a nadie
00:14:22
Es para nada
00:14:24
Es para sacarlo del buffer, pero me da igual
00:14:26
No quiero hacer nada con él
00:14:28
pues yo puedo
00:14:30
no asignárselo a nadie
00:14:31
puedo hacer esto
00:14:33
el compilador no tiene problema
00:14:35
coge el valor
00:14:37
y cuando toca asignarlo dice
00:14:39
uy, no me has dicho a quién se lo asigno
00:14:41
pues a la basura, ya está, no pasa nada
00:14:43
cuando nosotros cogemos
00:14:45
un valor y no se lo asignamos a nadie
00:14:48
la máquina virtual
00:14:50
lo hace desaparecer
00:14:51
y se acabó, entonces en este caso
00:14:53
me es más cómodo, como yo ese valor no lo quiero para nada
00:14:57
solo para sacarlo
00:14:59
pues lo dejo así y listo
00:15:00
¿vale?
00:15:08
entonces lo único, repito, ahora mismo
00:15:10
no hace falta que os volváis
00:15:12
locos, simplemente
00:15:14
cuando estáis haciendo un código y resulta
00:15:15
que después de un next in o un next
00:15:18
in, una lectura de número en general
00:15:20
tenéis que hacer una de cadena
00:15:22
acordaos de meter
00:15:24
una de estas, ya está
00:15:26
¿vale? y me diréis
00:15:27
seguramente, un segundo, me diréis
00:15:33
oye, pero ¿por qué no me ha pasado otras
00:15:35
veces cuando hemos leído
00:15:37
seguidos numeritos
00:15:39
porque hay veces
00:15:40
en los cuales hemos leído dos números
00:15:42
seguidos, hemos hecho dos next in
00:15:45
o tres números seguidos
00:15:47
cuando era el mayor de los tres, hemos hecho tres next in
00:15:49
y diréis, anda, y ahí porque no pasaba
00:15:51
porque yo metía el numerito
00:15:53
y el salto de línea se quedaba
00:15:54
porque este next in no lo cogía
00:15:56
porque el método next in
00:15:59
ignora
00:16:01
todo lo que no sean números
00:16:03
entonces, este next in
00:16:04
ha dejado un salto de línea, es verdad
00:16:07
pero este otro next in
00:16:09
ese salto de línea, como no es un número, lo ignora
00:16:10
y se va por los números
00:16:13
por eso no nos ha pasado eso
00:16:15
pero claro, cuando lo que tenemos es un next line
00:16:16
el next line no ignora nada, porque es una cadena
00:16:18
genérica, la que sea, no ignora nada
00:16:21
entonces, si había un salto de línea
00:16:23
del next in anterior, si lo había
00:16:25
esta no lo ignora y se lo queda
00:16:27
¿vale?
00:16:29
luego, lo que, dime
00:16:33
¿por qué no lo hace automáticamente?
00:16:34
porque
00:16:39
el ordenador no sabe hacer nada
00:16:39
eso tienes que decir tú, ¿por qué va a hacer
00:16:43
automáticamente eso?
00:16:44
no está el escáner programado para que después
00:16:48
de un int elimine el salto de línea
00:16:51
no está programado
00:16:52
¿eh?
00:16:54
y no existe un limpiar
00:16:56
buffer, no, con este objeto
00:16:57
escáner, este no es el único objeto
00:16:59
con el que se puede leer del teclado
00:17:01
hay más objetos
00:17:03
con otras funcionalidades
00:17:05
de distintos, pero este
00:17:07
a la hora de escribirlo
00:17:09
es el más sencillo
00:17:11
entonces por eso es el que al principio estamos usando
00:17:13
porque si usáramos otros objetos
00:17:15
pues tendríamos que saber más cosas de objetos
00:17:16
porque los métodos se usan de otra manera
00:17:19
pero este
00:17:21
en concreto tiene esta particularidad
00:17:23
pero no pasa nada, dime
00:17:24
no, no, no, no, esto es
00:17:26
imagina, no
00:17:33
si hemos hecho esto
00:17:35
y esto
00:17:37
o sea dos de número
00:17:38
esto no significa
00:17:42
que se hayan quedado dos en el buffer
00:17:44
Aquí este ha dejado uno
00:17:46
Pero este next in
00:17:49
Ha cogido el primero
00:17:50
Como no le interesa porque no es número, fuera, lo ha sacado ya
00:17:52
Coger su número
00:17:55
Y el que le queda a él, ese ya sí que lo deja
00:17:57
O sea, cada next in deja uno solo
00:17:59
Los que hubiera de antes ya se han eliminado
00:18:01
¿Vale?
00:18:03
Pero sí, es una
00:18:05
Buena pregunta, efectivamente, ¿vale?
00:18:06
¿Vale? Pues vale
00:18:10
Ya tenemos hecha la primera parte
00:18:11
Leer los char y el numerito
00:18:12
Y ahora ya viene el programa
00:18:15
que el programa era
00:18:16
cada char
00:18:19
por favor
00:18:22
sustituyalo con el char
00:18:23
que se encuentre en posiciones
00:18:26
después
00:18:28
vale, bueno, aquí tenemos que
00:18:29
entonces
00:18:32
si acaba el alfabeto
00:18:34
esta parte
00:18:37
vamos a incorporarla después
00:18:38
vamos a hacer primero como sin tener en cuenta
00:18:39
que se acabe el alfabeto o no
00:18:42
y luego ya nos planteamos
00:18:43
cómo incorporar en el caso de que se haya acabado el alfabeto.
00:18:46
Venga, pues
00:18:49
en este caso
00:18:50
como ya sabemos, aquí lo que tenemos
00:18:52
que hacer es automáticamente irnos
00:18:54
a la tabla ASCII a ver cómo están colocadas
00:18:56
las letras minúsculas.
00:18:58
Vale, pues aquí tenemos
00:19:07
una tabla ASCII
00:19:09
donde las letras minúsculas
00:19:15
están aquí
00:19:16
a la derecha.
00:19:21
Aquí están las letras minúsculas.
00:19:23
Desde el 97
00:19:26
hasta el 122
00:19:27
con lo cual, uy que suerte, están consecutivas
00:19:31
con lo cual llegar
00:19:33
de la A a 4 por debajo
00:19:35
es sumarle 4
00:19:38
llegar de la D a 4 por debajo
00:19:39
es sumarle 4
00:19:42
entonces, si nos olvidamos
00:19:42
del tema circular
00:19:46
que si me he saltado todo al principio
00:19:47
si nos olvidamos de esa parte
00:19:50
pues este programa se quedaría sencillito
00:19:51
ya, se quedaría
00:19:53
vamos a ver
00:19:56
Decía simplemente
00:19:57
Avanzar
00:20:00
Las letras en el alfabeto
00:20:01
El numerito que sea
00:20:04
El alfabeto después
00:20:04
Vale, pues entonces
00:20:07
Esto se nos quedaría
00:20:09
C1 igual a
00:20:10
C1 más
00:20:13
N
00:20:16
Más
00:20:17
N, vale
00:20:21
Vale, eso es lo primero que haríamos
00:20:24
¿No? C2
00:20:34
Es lo primero que se nos ocurre
00:20:35
C2 más N.
00:20:37
Y ahora C3 igual a C3 más N.
00:20:41
Vale, ahora aquí nos sale algo rojo.
00:20:46
De nuevo son las particularidades de los char.
00:20:49
Pero ya entendemos, sin ver lo que nos dice, ya lo podemos entender.
00:20:50
Vamos a ver.
00:20:55
Tenemos aquí un operador más que está sumando un char con un entero.
00:20:56
Sabemos que eso lo podemos hacer, no hay ningún problema.
00:21:02
¿Qué es lo que hace eso?
00:21:05
Entonces, el C1 lo interpreta como si fuera número entero.
00:21:07
Es decir, si C1 fuera A, lo interpreta como 97.
00:21:12
Ya sabemos lo que está pasando.
00:21:17
En cuanto el C1 está con un operador más,
00:21:19
C1 es interpretado como el numerito entero 97.
00:21:22
Al 97 le suma 3, el número que sea,
00:21:27
y te dará 100.
00:21:31
Te da un int.
00:21:33
y yo estoy intentando
00:21:34
guardarlo en un char
00:21:36
un int en un char no puedes
00:21:37
al revés sí
00:21:40
un char en un int sí, porque un char
00:21:41
siempre puede ser interpretado como entero
00:21:44
o sea, un char
00:21:46
admite ambas interpretaciones
00:21:48
o juega el papel de numerito entero
00:21:50
siendo su papel este
00:21:52
o juega el papel de char
00:21:54
puede jugar los dos
00:21:56
¿vale? pero el entero solo juega
00:21:57
el papel de entero
00:22:00
entonces, yo
00:22:01
un char a un entero puedo
00:22:03
es decir, yo
00:22:06
a una variable
00:22:08
entera num
00:22:10
¿vale?
00:22:12
¿le puedo dar un char?
00:22:16
no hay ningún problema
00:22:17
porque esto es un char, pero el char
00:22:18
tiene doble personalidad
00:22:20
y adopta la que necesitemos
00:22:21
aquí, como lo voy a asignar
00:22:24
a un número, adopta la
00:22:26
personalidad de entero
00:22:28
y su personalidad de entero es 97
00:22:29
con lo cual al numerito num
00:22:31
si yo lo miro por pantalla veo que tiene
00:22:34
97, ya está, no hay duda
00:22:36
y este tiene su doble personalidad
00:22:38
si yo este
00:22:41
lo uso para
00:22:42
asignárselo a un char, tampoco
00:22:44
hay ningún problema, el char
00:22:46
a se va a c, ningún problema
00:22:48
¿dónde viene el problema?
00:22:50
cuando yo lo que
00:22:53
quiero es a una variable char
00:22:54
¿vale? asignarle
00:22:56
un numerito
00:22:58
una variable entera. Tengo
00:23:00
mi variable
00:23:05
entera, n
00:23:06
vale, sí,
00:23:09
perdón,
00:23:14
mi numerita entera igual a
00:23:16
vale, y aquí le quiero asignar
00:23:17
num, ¿vale?
00:23:20
Aquí es donde no me deja.
00:23:24
Me dice, oye,
00:23:26
num es una variable entera
00:23:28
y las variables enteras
00:23:30
son variables enteras,
00:23:32
no pueden elegir, no pueden elegir,
00:23:34
Y entonces, como son variables enteras, a char no pueden ir.
00:23:36
Ese es el problema que nos hemos
00:23:39
encontrado aquí.
00:23:40
¿Vale? Es el problema que nos hemos encontrado aquí.
00:23:41
Vale. Pues entonces,
00:23:44
¿qué podemos hacer?
00:23:47
Claro, o bien,
00:23:57
declaro esto como enteros.
00:23:59
Declaro estos como enteros.
00:24:01
¿Vale? Los declaro como enteros.
00:24:03
Aquí,
00:24:04
lo que pasa es que están como echados.
00:24:09
Bueno, el casting era por eso que nos ahorrábamos el casting.
00:24:10
No lo podemos ahorrar en cualquier caso.
00:24:13
¿Vale?
00:24:15
Entonces, tengo que pasar esto a char.
00:24:15
¿Vale?
00:24:18
Tengo que pasar esto a char para volverlo a guardar.
00:24:19
Bueno, a ver, es que estoy intentando, perdón,
00:24:21
guardarlo en C1.
00:24:23
Voy a hacerlo en tres variables aparte.
00:24:24
Para, claro, en lugar de volverlo a guardar en C1,
00:24:27
que lo había hecho por comodidad para no tener más variables,
00:24:31
en lugar de guardarlo en C1, me voy a hacer yo tres variables
00:24:33
en la letra 1, en la letra 2
00:24:37
e en la letra 3, las modificadas
00:24:40
y esta va a ser la letra 1
00:24:43
esta va a ser la letra 2
00:24:46
y esta va a ser la letra 3
00:24:49
¿vale?
00:24:52
entonces, el charce 1 sumada a sus posiciones
00:24:55
el charce 1 que es A
00:24:59
pues A más 3
00:25:02
será
00:25:04
97 más 3, 100
00:25:05
pues el numerito 100
00:25:08
va aquí
00:25:10
el numerito 100 va aquí
00:25:11
ahora yo quiero mostrar esos caracteres
00:25:13
y ahora ya tenemos el problema
00:25:18
de siempre
00:25:22
que si los mostramos así
00:25:22
no me muestra esos caracteres
00:25:26
concatenados
00:25:28
sino que lo que me muestra es la suma
00:25:29
de los enteros
00:25:32
pero que hacíamos
00:25:33
lo poníamos con comillas
00:25:35
L1, aquí me sobra este
00:25:41
vale, pues vamos a probarlo poniendo que no se salte
00:25:50
del alfabeto, vamos a ponerle la A, la B y la C
00:25:58
y que avance tres posiciones, con lo cual nos tendrá que mostrar la D, la E
00:26:01
y la F, vamos a ver, si nos muestra la D
00:26:06
la E y la F nuestro programa, la D, la E
00:26:10
La F si le metemos la A, la B y la C
00:26:14
Y el número 3
00:26:16
Vamos a probar a hacer eso
00:26:17
A ver
00:26:19
Número 3
00:26:21
Caracteres A, B y C
00:26:27
¿Vale?
00:26:31
No nos ha mostrado eso
00:26:34
¿Vale?
00:26:36
¿Dónde estamos? Aquí
00:26:42
¿Vale?
00:26:44
¿Vale? Pues ¿qué tenemos que hacer?
00:26:46
L1 al estar declarada como int
00:26:48
Al estar declarada como int
00:26:51
cuando la máquina virtual ha intentado
00:26:53
hacer su casting
00:26:55
a string
00:26:56
ha hecho su casting al numerito entero
00:26:58
que representa
00:27:01
¿y qué numerito entero representaba?
00:27:02
100, 101 y 102
00:27:05
pues eso es lo que nos ha sacado
00:27:06
nos ha sacado 100, 101 y 102
00:27:08
vamos a volverlo a probar
00:27:12
no hace falta
00:27:13
porque lo tengo ya aquí
00:27:15
nos ha sacado el 100
00:27:16
el 101 y el 102
00:27:18
es decir, nos ha sacado
00:27:21
esto, 100
00:27:23
100, 101
00:27:24
y 102, es decir
00:27:28
el D, el E y el F
00:27:31
pero nos ha sacado como entero, y decíamos
00:27:32
pero si hemos hecho este ejercicio igual y me lo sacaba
00:27:35
como char al convertirlo a char
00:27:37
claro, pero porque estaba declarada
00:27:38
como char la variable
00:27:41
ahora está como int, con lo cual
00:27:41
cuando el operador más hace
00:27:44
la conversión a cadena de esta
00:27:46
mira si está declarada como char
00:27:49
como int. Si está declarada como
00:27:51
int, lo convierte a
00:27:53
esto. Y si está declarada
00:27:55
como
00:27:57
char, lo convierte
00:27:58
a esto otro.
00:28:01
Pero claro, decimos, jolín,
00:28:04
pues estoy en un callejón
00:28:05
sin salida, porque es que lo he tenido
00:28:07
que declarar como int precisamente para
00:28:09
poder hacer esta asignación aquí. Estoy en un callejón
00:28:11
sin salida, no lo puedo declarar como char.
00:28:13
Pero ahora ya aquí es cuando
00:28:14
no podemos escaparnos del casting.
00:28:17
En esta situación digo, vale,
00:28:19
Te he declarado como int, con lo cual cuando te conviertas a string te vas a convertir como esto, no me interesa. Quiero que te conviertas a string como el char que representas, no como esto, como el char que representas. Pues entonces esto ahora ya le hacemos el casting, que esto le obliga.
00:28:21
eh, cuidado, aunque estás declarado
00:28:43
como int, por favor
00:28:45
trabájame como char
00:28:47
¿vale?
00:28:48
¿vale? no hubiéramos tenido que hacer
00:29:04
el casting si estuviera declarado como char
00:29:06
lo hemos tenido que hacer porque está
00:29:08
como int, y está como int
00:29:10
para poder haber
00:29:12
hecho el avance
00:29:14
entonces
00:29:15
ahora ya ejecutamos
00:29:17
esto y suponemos
00:29:21
3, a
00:29:22
b y c
00:29:24
D, E y F
00:29:26
Vale, pues
00:29:27
Esto está
00:29:34
Salvo
00:29:36
Y aquí es donde vienen ya los if
00:29:39
Porque si no diríamos, aquí no hay que hacer if
00:29:41
Ni hay que hacer nada
00:29:43
Aquí donde vienen los if
00:29:44
Bueno, pues los if vienen porque dice, oye, cuidado
00:29:46
Si como consecuencia de hacer el salto
00:29:48
Te sales
00:29:51
Entonces
00:29:53
Vuelve arriba
00:29:56
Entonces aquí habrá que hacer un if
00:29:57
Porque si el resultado de esta suma, si L1 o L2 o L3, cualquiera de ellos, son mayores de 122,
00:30:00
entonces en ese caso tienes que hacer una corrección, que es restarle esta diferencia,
00:30:14
restarle el alfabeto para que se vaya aquí.
00:30:21
Si el alfabeto tiene 27 números, pues restarle 27 para que se vaya aquí.
00:30:24
eso ya lo pensáis vosotros
00:30:27
esa modificación
00:30:30
la podemos ver mañana o el próximo día
00:30:31
pero la idea es esa
00:30:34
la idea es si alguna de estas sumas
00:30:35
supera 122
00:30:37
hay que restarle la cantidad de caracteres
00:30:39
de alfabeto y ya está, nada más
00:30:42
lo pensáis y a ver
00:30:43
cómo os funciona
00:30:46
vale, y yo creo que
00:30:48
de todas las cosas raras que pueden tener
00:30:51
los sin, los char combinados, no sé qué
00:30:53
ya lo hemos contemplado todo
00:30:55
pero el resumen es
00:30:57
una variable char
00:31:00
un char en general
00:31:01
puede ser usado en una expresión
00:31:04
en una expresión como int o como char
00:31:07
¿de qué depende?
00:31:09
pues del operador con el que esté
00:31:11
si es más será usado como entero
00:31:12
si lo estoy asumiendo a un int
00:31:15
como entero, puede ser usado como entero
00:31:17
o como char, y un int no
00:31:19
un int solo como int
00:31:20
a menos que le hagamos el casting
00:31:22
si le hacemos el casting entonces ya es usado como char
00:31:24
pero si no lo hacemos el casting
00:31:26
siempre será usado como int
00:31:28
¿eso qué significa?
00:31:29
que lo, ya para terminar
00:31:32
que lo que yo había
00:31:34
la opción que yo había hecho antes
00:31:35
de, no me voy a inventar variables
00:31:38
nuevas, voy a hacerlo
00:31:40
con las mismas, con c1, c2 y c3
00:31:42
esta versión mía
00:31:45
c1, c2 y c3
00:31:46
que me daba problemas porque me decía
00:31:50
ojo que esto es un entero, no puede
00:31:52
a un char, pues esta versión mía
00:31:54
la podría haber arreglado
00:31:56
poniéndole
00:31:58
un casting en ese momento
00:32:00
digo, oye
00:32:02
si, tú eres un entero
00:32:04
pero tú me interesas trabajando como char
00:32:05
pues todo tú
00:32:08
te pongo el casting delante
00:32:09
¿vale?
00:32:11
nos ahorramos esas tres variables
00:32:14
¿y entonces arriba donde
00:32:27
por ahí está mi char?
00:32:29
no, es que esto
00:32:32
ya no me hace falta
00:32:33
estoy sobre la propia
00:32:34
C1 asignando la conversión
00:32:37
a char de este número entero
00:32:39
y ahora ya cuando muestre
00:32:40
los paréntesis sí que los tengo que poner
00:32:42
pero ya el casting a char
00:32:45
me lo ahorro
00:32:47
claro cuando
00:32:48
o sea este system de aquí
00:32:51
iría aquí
00:32:53
y para el de abajo
00:32:55
pues ya este no hace falta
00:32:58
porque para que voy a convertir
00:33:01
achar algo que haya achar
00:33:03
este C1
00:33:05
este C2
00:33:06
y este
00:33:09
C3
00:33:11
vale, ya los tengo en char
00:33:12
no hace falta que haga el casting a char
00:33:15
eso sí, lo tengo que paginar
00:33:16
con esto porque si no el más lo volvería a convertir
00:33:19
a enter otra vez, volvería a convertir a
00:33:21
vale
00:33:23
vale, pues ya está, pero voy a probarlo
00:33:24
por si se ha escapado algo, a ver si
00:33:34
voy a comentar
00:33:36
esta parte de aquí, la versión
00:33:39
anterior la vamos a
00:33:41
comentar y vamos a dejar esta
00:33:43
solo
00:33:45
a ver si algo se nos ha escapado
00:33:46
que podría ser porque
00:33:49
A, B y C
00:33:50
D y F, vale
00:33:54
vale, venga, pues ahora
00:33:55
ya sí que nos vamos
00:34:00
incorporar la versión de
00:34:01
si me he salido del alfabeto
00:34:04
empieza por arriba otra vez, en plan círculo
00:34:06
vale
00:34:08
y ya está finito
00:34:09
- Subido por:
- Raquel G.
- Licencia:
- Todos los derechos reservados
- Visualizaciones:
- 15
- Fecha:
- 10 de octubre de 2024 - 16:57
- Visibilidad:
- Clave
- Centro:
- IES ROSA CHACEL
- Duración:
- 34′ 12″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1920x1080 píxeles
- Tamaño:
- 146.44 MBytes