20241003 ProgrEstruct-Decision_1 - Contenido educativo
Ajuste de pantallaEl ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:
Vale, pues en lo que estábamos, lo que no incorporamos el otro día, las cadenas de caracteres, ¿las podemos leer por teclado?
00:00:01
Hombre, claro, si no pudiéramos leerlas por teclado y tuviéramos que ponerlas siempre ahí en el código, ¿de qué nos sirve?
00:00:08
Es como un programa para sumar dos números.
00:00:13
Si los dos números yo no se los puedo meter por teclado, sino que tienen que ser siempre los dos números que yo ponga en el código, ¿para qué me vale esa aplicación?
00:00:17
Bueno, pues las cadenas de caracteres también las podemos leer por teclado, lógicamente.
00:00:25
Y lo mismo para leer por teclado
00:00:29
Disponemos de este objeto
00:00:32
Que ya hemos usado
00:00:34
Para leer numeritos
00:00:35
Que ya sabemos que
00:00:37
Aunque no lo entendamos
00:00:40
Del todo o del nada
00:00:42
Ya sabemos que lo tenemos que
00:00:44
Que asignar así
00:00:46
Lo declaramos, es este tipo
00:00:49
Objeto raro, escáner
00:00:52
Y así le tenemos que asignar
00:00:54
Una vez que hemos hecho esto
00:00:57
Este objeto ya puede
00:00:58
Leer una y otra vez lo que a mí me dé la gana
00:00:59
Una y otra vez
00:01:02
Por ejemplo, aquí en lugar de asignarle el nombre directamente
00:01:02
Podríamos
00:01:06
Dárselo
00:01:07
¿Vale?
00:01:09
Por teclado
00:01:16
Por ejemplo
00:01:17
Introduzca nombre
00:01:19
Y ahora
00:01:23
¿A quién le vamos a asignar lo que leamos por teclado?
00:01:27
Venga, pues a esta misma variable
00:01:31
A nombre
00:01:32
¿Vale?
00:01:33
A nombre
00:01:36
¿Qué le vamos a asignar?
00:01:37
El resultado de leer por teclado
00:01:39
Pero ahora ya no es un int
00:01:41
Con lo cual no hacemos next int
00:01:43
No es un double, con lo cual no hacemos next double
00:01:45
No es un boolean, con lo cual no hacemos next boolean
00:01:47
Es un string
00:01:50
Entonces no es next string
00:01:51
Una pena
00:01:54
Porque si no sería todo igualito, pero no
00:01:55
Es algo también muy intuitivo
00:01:57
Next line
00:01:59
¿Vale? Es next line
00:02:00
Pues ya está, next line ¿qué es lo que hace?
00:02:02
Es una acción
00:02:06
Del escáner, que cuando yo la invoco
00:02:07
Cuando yo invoco esa acción
00:02:09
Se queda esperando
00:02:11
Que yo meta lo que sea
00:02:12
Hasta un enter
00:02:14
Y cuando ya he llegado al enter, coge todo eso
00:02:16
Que son caracteres así, números, espacios
00:02:19
Letras, lo que sea, coge todo hasta el enter
00:02:21
¿Vale?
00:02:23
Esto es lo que hace el next line
00:02:25
Coge del teclado todo lo que metamos
00:02:26
Hasta un
00:02:38
Salto de línea
00:02:44
Para hacerlo más corto
00:02:45
Sea lo que sea
00:02:49
y ahora ya pues con ese nombre
00:02:50
uno ya podría hacer lo que quiera
00:02:52
concatenarlo, aquí lo hemos concatenado dos veces
00:02:53
y lo mostramos, pues nos aparecería
00:02:56
dos veces, mostramos el carácter en la posición
00:02:58
tres
00:03:00
vamos a ponerlo
00:03:01
para U, para ejecutarlo
00:03:04
y ver que se hace bien
00:03:06
posición tres
00:03:08
carácter en posición
00:03:21
tres, lo mostramos aquí
00:03:23
ahora vamos a poner el tamaño
00:03:24
longitud
00:03:27
de la cadena
00:03:33
mostramos la longitud de la cadena
00:03:35
que hemos leído aquí, le damos
00:03:40
asignado a esta variable, mostramos la variable
00:03:41
y ahora vamos a ver
00:03:43
si la cadena es igual
00:03:45
a esto, me va a decir
00:03:47
falso, vale, obviamente
00:03:49
me va a decir falso, a menos que yo le meta esto directamente
00:03:51
claro
00:03:53
vale, pues si probamos
00:03:54
a ejecutar esto
00:03:57
vale
00:03:59
introduzca nombre
00:04:01
vale, pues primero me ha mostrado
00:04:03
la concatenación de los dos, que era lo primero que yo había
00:04:06
hecho en mi código, concatenar
00:04:08
nombre más nombre, asignarlo a nombre dos
00:04:10
y mostrarlo
00:04:12
carácter en posición tres, la E
00:04:14
efectivamente, porque cero es la P
00:04:15
uno es la E, dos es
00:04:18
la P y tres es la E, pues justo
00:04:20
me lo ha mostrado bien, longitud de la
00:04:22
cadena, cuatro, efectivamente, tiene cuatro
00:04:24
caracteres, es igual a
00:04:26
la bla bla bla que yo he puesto ahí
00:04:28
no, no es igual, por eso me sale
00:04:30
falso vale si metiéramos la bla bla bla está pues obviamente me daría true vale me da la
00:04:32
concatenación carácter en posición 3 la efe longitud de la cadena esta vez 5 bueno pues
00:04:52
con este uso básico de cadenas ya podemos hacer muchas cosas que necesitamos entonces a lo que
00:04:57
íbamos aún así está este listado de ejercicios es para ver que con los objetos string se pueden
00:05:07
hacer más cosas porque pueden hacer muchas más acciones que estas tres que hemos visto vale esto
00:05:14
de aquí es para mostrar el igual si eso ya lo conocemos este de aquí es para mostrar es la
00:05:21
acción to upper case por nombre ya lo podemos deducir le das una cadena y te devuelve la
00:05:28
cadena en mayúscula, vale
00:05:35
es decir, si
00:05:37
lo pongo solo
00:05:39
como ejemplito, pero repito, estos métodos
00:05:41
bueno, que nos suene, que los objetos
00:05:43
string pueden hacer muchas cosas
00:05:45
pero no hace falta que nos sepamos de memoria
00:05:47
cuantas y como son
00:05:49
vale, por ejemplo, si a la cadena
00:05:51
esta nombre, yo le
00:05:53
llamo a ese método
00:05:55
me va a devolver la
00:05:57
cadena en mayúscula
00:05:59
por ejemplo, si la guardo aquí
00:06:01
vale, si yo mostrara esto
00:06:05
si yo mostrara esto
00:06:09
me devolvería la variable
00:06:21
en mayúsculas
00:06:22
cualquier cosa
00:06:24
y me la darán, vale
00:06:25
entonces estos ejercicios son solamente para eso
00:06:29
son ejercicios de una línea para probar esos métodos
00:06:31
lo que hacen para ganar
00:06:34
pero nada más, no espero ahora mismo
00:06:35
que os sepáis
00:06:38
que esos métodos existen y de memoria
00:06:39
además, cuál es su
00:06:42
sintaxis, vale
00:06:44
este es para el led que lo conocemos
00:06:46
este para probar el operador
00:06:48
más que también lo conocemos
00:06:50
que se puede concatenar también
00:06:51
con esta acción pero si ya
00:06:54
tenemos esta pues para que complica el código
00:06:56
esta es para sacar
00:06:58
la subcadena de una cadena
00:07:01
esta es interesante muchas veces
00:07:03
entonces tenemos
00:07:06
una cadena
00:07:08
y queremos sacar solo una parte
00:07:09
pues se llama este método
00:07:12
Substream pasándole un índice
00:07:14
Y te saca la cadena que hay
00:07:16
A partir de ese índice
00:07:18
Solo quiero que os suenen que se pueden hacer muchas cosas
00:07:19
Con las cadenas para operar con ellas
00:07:22
Substream pues eso es un poco más complicado
00:07:23
Este, reemplazar
00:07:26
Le pasas un carácter
00:07:28
Y de la cadena que llama a esta acción
00:07:29
De la cadena que llama a esta acción
00:07:32
Sustituye un carácter por el otro
00:07:34
Y ya está
00:07:36
Si empieza con o termina con
00:07:38
Te devuelve un boolean
00:07:40
Y el charlat que ya lo hemos visto
00:07:41
Y así muchos más métodos
00:07:43
Aparte de estos, ¿vale?
00:07:45
Bueno, pues si uno los quiere hacer
00:07:47
Es poner esa línea para probar el método
00:07:49
Como funciona, ya está, pues fenomenal
00:07:51
¿Vale?
00:07:53
Vale
00:07:56
Y
00:07:56
Y ya está, esto es lo que tenemos aquí
00:07:58
Vale, antes de pasar
00:08:01
A esto de aquí, que ya lo estaréis
00:08:05
Deseando, porque estamos ya haciendo lo mismo
00:08:07
Una y otra vez
00:08:09
Pues antes de pasar esto de aquí
00:08:10
Vamos a hacer una pequeña tontería
00:08:12
¿Vale?
00:08:16
Os he dicho
00:08:19
Por Dios nunca jamás
00:08:19
Porque os suspendo este curso
00:08:21
Y el módulo de segundo
00:08:23
Ya crédito
00:08:25
Pues lo digo ahora
00:08:26
A lo mejor estabas dormido hablando con
00:08:29
Jesús
00:08:31
Bueno, pues entonces lo digo ahora
00:08:32
Yo os he dicho por Dios santo bendito
00:08:39
Cuando comparéis dos variables string
00:08:42
A ver si vais a poner el doble igual
00:08:44
Eso nunca jamás
00:08:45
Porque si ponéis el doble igual
00:08:47
Que era lo que ocurría
00:08:49
Recordáis que estábamos en ese caso
00:08:51
Justo
00:08:54
Justo
00:08:55
Si yo pongo
00:08:57
Vamos a hacerlo aquí con
00:08:58
String
00:09:00
Cadena 1
00:09:02
Igual a
00:09:04
Hola
00:09:07
y ahora pongo aquí otra cadena 2
00:09:10
en líneas separadas para que se vea mejor
00:09:17
igual a hola
00:09:20
vale, entonces
00:09:27
vamos a mostrar a ver si son iguales
00:09:29
vale, entonces
00:09:33
1, ya he dicho
00:09:34
debemos mostrar como son cadenas de caracteres
00:09:40
nunca haríamos esto, cadena 1 igual a cadena 2
00:09:43
Esto lo hacemos si queremos ver
00:09:47
Obtener el boolean resultante
00:09:53
De ver si esta variable
00:09:55
Es igual a esta otra
00:09:57
Pero siendo estas variables
00:09:58
Cualquiera de los tipos primitivos
00:10:00
By, short, in, long, flow, double, char y boolean
00:10:01
Para cualquiera de esos tipos primitivos
00:10:05
Si yo quiero ver si el contenido de una variable
00:10:07
Es igual al de otra, doble igual
00:10:10
Ahí está clarísimo
00:10:11
Vale, pero este es el primer tipo
00:10:13
No primitivo objeto que introducimos
00:10:15
vale, efectivamente, entonces yo aún así
00:10:17
en dos variables de tipo objeto
00:10:20
también puedo necesitar saber
00:10:22
si contienen lo mismo
00:10:24
esta contiene hola
00:10:26
en este caso concreto y esta otra también
00:10:28
contiene en este caso concreto
00:10:30
vale, entonces hemos dicho, no, nada de
00:10:32
hacerlo así
00:10:34
lo tenemos que hacer así
00:10:36
vale, y de hecho
00:10:39
probamos el equal, si vemos que funciona
00:10:43
perfectamente, no, voy a
00:10:45
cuando ejecute esto voy a poner aquí
00:10:47
Una
00:10:49
Barrita
00:10:51
Para saber cuando hemos llegado
00:10:54
A ese punto de la ejecución
00:10:57
Vale, pues ejecutamos esto
00:10:58
Aquí
00:11:01
Vale
00:11:02
Y después de la barrita
00:11:05
True, false
00:11:07
Le he puesto dos system out
00:11:09
Ah, que me he dejado otro
00:11:10
¿Dónde está?
00:11:13
Ah, vale, que este iguales no sé dónde
00:11:17
Ah, es que este iguales lo he cortado
00:11:19
Era de arriba en realidad
00:11:20
Este iguales venía de
00:11:22
De por ahí arriba
00:11:24
De por ahí
00:11:25
Vale, entonces ahora ya sí
00:11:30
Lo ejecutamos, bueno
00:11:37
Vale, y me da true porque las dos cadenas
00:11:38
Son iguales, eso está claro, es lo que esperamos
00:11:41
¿No? Vale
00:11:43
Si yo aquí cambiara y me
00:11:44
Pusiera esta otra
00:11:47
O si las estoy introduciendo por teclado e introdujera dos
00:11:48
Distintas, da igual
00:11:51
Pues ejecutamos esto
00:11:52
Falso
00:11:54
¿Vale? Pues el igual funciona exactamente como nosotros esperamos y es lo que tiene que hacer, ¿vale?
00:11:57
Bueno, pues ¿qué he dicho yo? Cuidado a ver si uno va a escribir así deprisa a toda velocidad y compara cadena 1 con cadena 2 así, ¿vale?
00:12:02
cuidado
00:12:16
porque si compara cadena 1
00:12:19
con cadena 2 así
00:12:21
vale, acordaos
00:12:22
rápidamente de lo que estábamos haciendo
00:12:26
que nadie se le olvide
00:12:28
que entonces
00:12:30
tenemos, esta es la cadena
00:12:32
este es
00:12:33
el
00:12:34
vale, que sí, que sí
00:12:36
vale, esta es la cadena 1
00:12:42
se llame como se llame
00:12:48
vale
00:12:49
Esta es
00:12:55
La cadena 2
00:12:59
Y entonces sabemos que cadena 1
00:13:07
En realidad es una dirección de memoria
00:13:13
Con lo cual cadena 1 lo que tiene dentro
00:13:15
En realidad es una dirección de memoria
00:13:17
Que me lleva a un espacio en memoria RAM
00:13:19
Donde ahora ya
00:13:21
Si que está
00:13:23
El hola dentro
00:13:25
Ahí si que está el hola
00:13:27
Y cadena 2
00:13:28
Es otra dirección de memoria
00:13:31
que me lleva
00:13:32
a otro espacio
00:13:33
donde ahora ya sí que está el contenido
00:13:36
¿vale? todo el mundo
00:13:38
aunque no lo tenemos que tener presente
00:13:46
todo el rato, todo el mundo
00:13:48
entiende que
00:13:50
esto es lo que físicamente hay en memoria
00:13:51
cuando declaramos dos variables objeto
00:13:54
cadena 1 en realidad es una dirección
00:13:56
y esa dirección
00:13:58
de donde es, es la dirección de una porción
00:13:59
de RAM donde ahora ya sí que está el valor
00:14:02
y cadena 2
00:14:04
es una dirección de memoria
00:14:06
que de dónde es esa dirección, de otra porción de RAM
00:14:07
donde ya sí que está el valor
00:14:10
si esta variable fuera primitiva
00:14:11
cadena1 fuera un int
00:14:14
esto no existiría
00:14:16
cadena1 sería ya directamente
00:14:17
el valor de la variable
00:14:21
el 3, el 7
00:14:22
esta parte no existiría
00:14:24
pero como es un tipo objeto
00:14:25
es una dirección que lleva una
00:14:28
porción de memoria donde está el contenido
00:14:30
pues por eso es por lo que nos ha quedado
00:14:32
ya clarísimo y no se nos puede olvidar
00:14:34
Que si nosotros tratamos de comparar
00:14:36
La igualdad de esas dos cadenas de ahí
00:14:39
Este hola y este hola
00:14:41
Tratamos de compararlo
00:14:43
Con esto, me va a decir
00:14:45
False
00:14:47
Porque esta dirección
00:14:48
Es una y esta dirección es otra
00:14:51
Otra, que contienen lo mismo
00:14:53
Sí, contienen lo mismo
00:14:55
Pero son diferentes
00:14:56
Y el equals precisamente
00:14:58
Lo que te hace es
00:15:00
Comparar el contenido
00:15:02
El equals es el que hace ese trabajo
00:15:04
Puedo irse aquí, mirar el contenido
00:15:06
Irse aquí, mirar el contenido, etc
00:15:07
Bueno, pues si uno se olvida y escribe así
00:15:09
Rápidamente
00:15:11
Y lo vuelve a hacer
00:15:12
Vale
00:15:14
Esta vez ha salido bien
00:15:17
Vale, ha salido falso
00:15:21
No, no, no, perdón, perdón
00:15:23
Ha salido falso pero lo he cambiado
00:15:25
Vale
00:15:26
Olvidaos de esta ejecución, esta ejecución no ha existido
00:15:28
Vale
00:15:31
Es que no me había dado cuenta que lo había
00:15:32
Vale, yo he puesto hola y he puesto hola
00:15:35
Y ahora me he equivocado y he puesto esto mal.
00:15:37
¿Vale?
00:15:41
Me he equivocado y he puesto esto mal.
00:15:41
Venga, pues ahora ya sí lo volvemos a ejecutar.
00:15:43
Lo volvemos a ejecutar.
00:15:47
¡Ostras!
00:15:51
Y sale true.
00:15:51
Y entonces decís, pues me han mentido.
00:15:54
Me han mentido.
00:15:57
Y entonces llegáis a la conclusión errónea.
00:15:58
Anda, pues entonces los tipos objeto, entre ellos los string.
00:16:02
vaya rollo moruno que me han contado
00:16:05
los puedo comparar
00:16:08
con doble igual, ¿no?
00:16:09
porque es que he hecho la ejecución y ha salido
00:16:11
que son iguales, y no es verdad
00:16:13
con lo que me han contado, no es verdad
00:16:15
¿vale?
00:16:17
pero es que esto es, bueno
00:16:19
uno de los montón de
00:16:21
pequeñas cosas que hace Java
00:16:23
por dentro para evitarse la vida
00:16:25
que se puede manifestar a veces, y esta en particular
00:16:27
os la cuento como anécdota
00:16:30
os la cuento como anécdota
00:16:31
A ver, ¿qué hace Java por dentro en realidad? Tú declaras una cadena de buenas a primeras y le asignas un valor. Y luego de repente declaras otra y le asignas el mismo de la de arriba. Esa es una situación muy concreta, ¿no? Muy concreta.
00:16:33
Pues entonces lo que hace es
00:16:49
Dice, oye, pues mira
00:16:51
En lugar de hacer otro espacio de memoria
00:16:54
Y poner el hola
00:16:55
Voy a hacer que esta dirección de memoria
00:16:56
Voy a hacer que esta cadena 2
00:17:00
En lugar de crearle un espacio de memoria
00:17:02
Pues no lo creo
00:17:04
¿Dónde tengo el borra por ahí?
00:17:05
Claro
00:17:08
Bueno, no sé dónde está el borrador
00:17:08
Pero da igual
00:17:11
Esto
00:17:13
Dice, ¿para qué voy a hacer?
00:17:14
¿Para qué voy a hacer una esta?
00:17:17
Bueno, no hago una de estas, me hago otra cadena 2, porque tengo dos variables string, pero la hago que apunte al mismo sitio, ¿vale?
00:17:19
Entonces, claro, entonces él gestiona una especie de buffer interno hasta cierta cantidad, que no sé si son 2048, no sé qué son.
00:17:30
Si empezáramos a hacer un montón de string, hola, hola, hola, hola, llegaría un momento en que ya no, ¿vale?
00:17:39
Y eso lo he hecho así porque hemos inicializado la variable string de esta manera.
00:17:45
Y esto es un atajo.
00:17:51
En realidad, cuando uno crea un tipo objeto, no lo hace así.
00:17:52
Fijaos cómo hemos hecho el escáner.
00:17:57
Yo he dicho, lector es una variable tipo objeto, por eso tiene este tipo de dato.
00:17:59
Y mirad cómo le hemos dado valor, con new scanner.
00:18:06
Pues a string también podríamos hacerlo hecho, podríamos haberlo hecho.
00:18:10
Podríamos haber hecho new.
00:18:13
string
00:18:15
hola. Y así es como
00:18:17
originalmente
00:18:20
se declaraban. Como es un objeto
00:18:21
yo tengo que hacer new string
00:18:24
y le doy su valor. Pero claro,
00:18:26
como la variable string se usa tantísimo,
00:18:28
la sintaxis de Java te permite
00:18:31
un atajo
00:18:32
y en ese atajo pues tú le pones
00:18:33
directamente hola. Y para otros es muy cómodo
00:18:36
porque es como si fuera una variable primitiva.
00:18:38
Es muy cómodo. ¿Vale? Bueno, pero
00:18:40
asumimos que no hacemos ese atajo,
00:18:42
sino que creamos esta variable objeto
00:18:43
como se crean las variables objeto que ya veremos en el futuro
00:18:46
esto lo estoy contando solo
00:18:48
como anécdota de que
00:18:49
porque me ha salido mal el doble igual
00:18:51
vale, pues entonces
00:18:54
imaginaos que no usamos ese atajo
00:18:56
y que lo hacemos creando el objeto
00:18:57
new string, un nuevo objeto
00:19:00
string, dale este valor
00:19:02
de inicio, etc
00:19:04
pues lo hacemos así
00:19:05
y ahora volvemos a ejecutar esto
00:19:07
y
00:19:09
Y ahora me da false
00:19:11
Y ahora me da false, ¿por qué?
00:19:16
Porque cuando lo hacemos así
00:19:18
Java no se hace este invento
00:19:20
El new dice que me obligas con new
00:19:22
Pues me hago otro espacio de memoria, con otra dirección
00:19:24
Entonces si creamos el objeto string
00:19:26
Con new, esto que yo he dicho
00:19:28
De hacer la trampilla y decir
00:19:30
¿Para qué me voy a hacer otro espacio de memoria?
00:19:32
Uso este y lo hago apuntar
00:19:34
¿Vale?
00:19:36
Pues no lo hace
00:19:37
Conclusión, es imposible
00:19:38
Todas estas cosas tenerlas bajo control
00:19:42
Es imposible, porque en matices
00:19:43
Como esto hay mil
00:19:46
¿Qué es lo más fácil?
00:19:47
Pues siempre con equals
00:19:49
Siempre con equals, ¿vale?
00:19:50
Siempre con equals cuando se comparan dos objetos
00:19:53
Y en este caso nosotros solo tenemos
00:19:55
El string, pues los strings siempre con equals
00:19:57
¿Vale?
00:20:00
Vale
00:20:02
Claro, vosotros ahora también
00:20:03
Después del rollo este que os he contado
00:20:07
Si me hubierais escuchado, que sí, que ya se lo habéis escuchado
00:20:09
Después del rollo este que os he contado
00:20:12
Me diríais
00:20:17
Hombre, pero en este código
00:20:18
String cadena 1, string cadena 2
00:20:20
Yo ahora puedo hacer
00:20:22
Cadena 2 igual a
00:20:23
Adiós
00:20:25
Y significa eso
00:20:27
Que entonces cadena 1 también cambia
00:20:29
Porque claro, con lo que yo os he dicho antes
00:20:31
Con esta declaración
00:20:34
Él ha dicho
00:20:36
¿Declaras cadena 2?
00:20:37
No me hago un espacio nuevo
00:20:39
Cuando ve que haces eso
00:20:40
Entonces ya le he dado un espacio a ella
00:20:42
Ya le he dado un espacio a ella
00:20:44
¿Vale?
00:20:45
Claro, porque entonces el programa perdería
00:20:47
Todo el sentido, uno declara dos variables
00:20:50
Para tener ahí dos cadenas
00:20:52
Si las hace siempre la misma
00:20:53
¿Vale?
00:20:55
Bueno, conclusión
00:20:59
Que cuando
00:21:00
Hay que ver si dos cadenas son iguales
00:21:03
Esto, horrible, horroroso
00:21:05
Aunque casualmente en algunas situaciones concretas
00:21:07
Pueda funcionar, pero por esto
00:21:09
Todo que os digo de fondo
00:21:11
Pero como esto
00:21:13
Uno no tiene por qué tenerlo presente
00:21:16
Pues
00:21:17
Se usa siempre el equals
00:21:20
Mucho mejor
00:21:21
Siempre equals
00:21:22
Bueno
00:21:27
¿Dudas? ¿Preguntas?
00:21:28
Algo de
00:21:34
Como un objeto puede contener dentro varios valores
00:21:34
Si
00:21:42
Tú puedes usar el igual igual para comparar
00:21:43
Hay dos valores del mismo objeto
00:21:47
Sí, claro
00:21:49
Y que te diga que sí que pertenece
00:21:50
Claro, a ver, un objeto podría tener dentro
00:21:52
Un int y un char
00:21:54
Entonces, si tú quieres comparar
00:21:55
Tú puedes querer comparar los dos objetos enteros
00:21:58
Y eso significa que todo lo que contiene sea igual
00:22:00
O puedes querer comparar
00:22:02
Solo el int que contiene cada uno
00:22:04
Entonces, accederías a él y ya veremos cómo
00:22:05
Y ese ya sí que con doble igual
00:22:08
Porque son int
00:22:09
Vale
00:22:11
Venga, pues entonces
00:22:12
Nos vamos aquí
00:22:16
Un momento, espera, vamos a abrir el este de operadores
00:22:19
Porque en el este de operadores
00:22:23
Después de los
00:22:25
De los buleanos
00:22:28
Ya nos hemos puesto a hacer ejercicio
00:22:31
Si se han quedado cosas por ahí debajo
00:22:34
Pero vamos, esto solo mencionarlo
00:22:36
Y poco más
00:22:39
Vale, nos habíamos quedado
00:22:39
No, esto era esto de aquí
00:22:42
Los relacionales
00:22:43
que ya nos lo sabemos
00:22:54
y aquí era
00:22:56
lo último que habíamos visto y a partir de aquí
00:22:58
ya nos habíamos puesto a hacer ejercicios para practicar todo esto
00:23:00
¿vale?
00:23:02
entonces
00:23:05
el AND, el OR y el NOT
00:23:05
y la versión de AND y OR
00:23:08
con una símbolo y dos, ya lo sabemos
00:23:10
y sabemos por qué
00:23:12
este, bueno, queda aquí
00:23:12
ya puesto y simplemente
00:23:16
que sepáis que hay una operación
00:23:18
booleana, normalmente es más
00:23:20
raro que haya necesidad de usarla porque expresa
00:23:22
una idea muy extraña, pero que sepáis
00:23:24
que hay una acción booleana que es el
00:23:26
OR exclusivo
00:23:28
el OR exclusivo
00:23:29
este, el XOR
00:23:32
es, funciona
00:23:33
A, OR exclusivo
00:23:36
B, es cierto
00:23:38
¿vale? si
00:23:40
una de las dos es cierto y la otra
00:23:42
falsa
00:23:44
¿vale? pero si las dos son ciertas, no
00:23:45
o sea, es una diferencia con el OR normal, porque el OR
00:23:48
normal, las dos ciertas
00:23:50
una cierta y una falsa
00:23:52
todo eso hace cierto, es esta o esta
00:23:53
las dos ciertas o solo una de las dos
00:23:56
y luego ya sería falso si las dos son falsas
00:23:58
pero el oro exclusivo
00:24:00
es cierto solo si es cierta
00:24:01
una de las dos solamente
00:24:04
una de las dos
00:24:06
si las dos son ciertas es falso
00:24:07
entonces el oro exclusivo es
00:24:09
¿verdad? si solo una de las dos
00:24:11
y solo una es verdad
00:24:15
entonces bueno, hay veces que podemos
00:24:16
necesitar usarlo para expresar una condición
00:24:18
pero bueno, es un caso más raro
00:24:20
en la realidad es muy raro que tú quieras saber
00:24:22
si ocurre esto o esto
00:24:24
pero solo una de las dos
00:24:26
no las dos, es una situación real
00:24:28
rara, pero bueno aquí está y es este
00:24:31
símbolo, vale
00:24:33
vale, y luego aquí ya
00:24:33
vendrán los operadores
00:24:36
de bits, vale, esto pues
00:24:41
otros años los contábamos
00:24:43
pero es que esto no merece la pena porque
00:24:45
prácticamente no se usan
00:24:47
solamente que sepáis que hay
00:24:48
operadores a nivel
00:24:51
de bits que se llaman
00:24:53
nosotros hasta ahora todos los operadores
00:24:54
que estamos usando son como a nivel de variable
00:24:58
en conjunto, sumo una variable
00:24:59
a otra, las sumo enteritas
00:25:02
o las resto, o concateno
00:25:03
dos variables enteras
00:25:05
o hago un and entre dos variables
00:25:07
completas, hasta ahora todas las operaciones
00:25:09
que hemos hecho es, involucran las variables
00:25:11
enteras, sumarlas, restarlas
00:25:14
lo que sea, vale
00:25:16
las variables que son, ay esto de no tener
00:25:17
rotulador, vale
00:25:19
pues las variables que son
00:25:21
La tableta gráfica
00:25:23
Ya, lo que pasa es que
00:25:25
Si tengo que traer la tableta a ordenador
00:25:27
Me traigo un Serpa
00:25:29
A ver
00:25:31
Vamos a ver
00:25:32
Ah, si ya tenía el Word
00:25:36
Ese preparado, vale
00:25:37
Vale, una variable en realidad
00:25:39
¿Qué es? Ya sabemos lo que tiene dentro
00:25:45
Es una cosa, son ceros y unos
00:25:47
¿Vale? Es lo único que tiene una variable
00:25:49
Lo distinto
00:25:51
Lo que varía respecto a C-Synchor
00:25:53
es cómo se interpretan esos ceros y unos
00:25:55
si es un número entero
00:25:57
sabemos que se interpreta como el número entero
00:25:59
que en binario
00:26:01
se correspondería con esto
00:26:03
si es un float o un double
00:26:05
pues esto representa la codificación
00:26:07
double que no la conocemos
00:26:09
pero tiene sus matices por la parte decimal, patatín
00:26:11
la codificación double de ese número de double
00:26:13
si es un char
00:26:15
sabemos que es el boolean
00:26:16
el número de la tabla asti
00:26:18
y si es un boolean
00:26:21
pues un boolean true y false
00:26:23
Imagino que el false
00:26:25
Será todo ceros
00:26:28
Los 8 todo ceros
00:26:29
Y el true será cualquier otra cosa
00:26:30
Imagino, pero no sé exactamente cómo se codifica
00:26:33
El true y el false internamente
00:26:35
En los 8 bits
00:26:37
Seguramente el 0, false
00:26:38
Y cualquier otra combinación que no sea todo ceros
00:26:39
True
00:26:42
En definitiva, las variables
00:26:43
Lo que tienen dentro son ceros y unos
00:26:46
Pero nosotros trabajamos con su significado en conjunto
00:26:48
El número, el char, lo que sea que represente
00:26:51
Bueno, pues puede haber algunas aplicaciones
00:26:53
Que necesiten bits sueltos
00:26:56
Que necesiten bits sueltos
00:26:59
Pues yo que sé
00:27:00
Una operación de control
00:27:02
Que cada bit se asocia a un sensor
00:27:03
El sensor está activo
00:27:06
No está activo según si hay 0.1
00:27:08
Yo creo que el Boolean
00:27:10
No, porque
00:27:11
La capacidad, o sea
00:27:14
El almacenamiento mínimo de una variable es en 8 bits
00:27:16
No lo sé
00:27:18
Claro, pero como hay 8 bits
00:27:22
A ver, eso se podría comprobar fácilmente
00:27:31
Haciendo un casting de un int a boolean
00:27:32
Pero bueno, vamos a dejarlo
00:27:34
Nos da igual
00:27:35
Una variable boolean, le asignamos true o false
00:27:37
Como lo codifique por dentro
00:27:41
Nos da igual, usa 8 bits
00:27:42
Como los usa
00:27:44
No nos metemos en ello
00:27:45
Vale
00:27:47
Pero bueno, cuando uno tiene una variable
00:27:49
del tipo que sea
00:27:52
una variable del tipo que sea, sabe que lo que tiene son bits
00:27:53
ceros y unos, en el caso más
00:27:56
pequeño, en el caso de tener una variable
00:27:58
byte, o tener una variable char
00:28:00
o tener una variable, no char no
00:28:02
tener una variable byte o boolean, pues son 8
00:28:03
si tiene short, pues son 16
00:28:06
si tiene, vale, pero en cualquier caso
00:28:08
es un conjunto como mínimo
00:28:10
de 8 bits, como mínimo
00:28:12
vale, bueno, pues hay aplicaciones
00:28:14
que a lo mejor les interesa
00:28:16
trabajar con bits sueltos
00:28:18
con bits sueltos, para eso no tenemos
00:28:20
variables que nos permitan trabajar
00:28:22
con bits sueltos, lo mínimo son 8 bits
00:28:24
¿qué aplicaciones les puede
00:28:26
interesar trabajar con bits sueltos? aplicaciones muy
00:28:28
raras, aplicaciones pues eso
00:28:30
que sean diferentes sensores, yo tengo
00:28:32
8 sensores y tengo una única variable
00:28:34
de 8, un byte, una variable
00:28:36
byte y cada bit de la
00:28:38
variable byte pues
00:28:40
controla un sensor por ejemplo
00:28:42
en ese caso yo necesito poder
00:28:43
modificar los bits
00:28:46
uno a uno
00:28:47
necesitaría poderlos leer
00:28:48
uno a uno, modificar uno a uno
00:28:52
bueno, pues para eso
00:28:53
hay operadores
00:28:55
de estos de nivel de bits
00:28:58
que te hacen estas cositas
00:28:59
te permiten desplazar a la izquierda
00:29:02
a la derecha, entonces tú coges el que te sale
00:29:04
no sé qué, bueno, cosas
00:29:06
muy específicas a nivel de bits
00:29:07
no las vamos a contar
00:29:09
ni vamos a examinar de ellas
00:29:11
pero que sepáis que existen operadores
00:29:14
Para trabajar a nivel de bit de uno en uno
00:29:16
¿Vale? Por si una aplicación lo necesita
00:29:18
¿Alguna vez lo vais a usar?
00:29:20
Seguramente nunca jamás en la vida
00:29:22
Pero que sepáis que está ahí
00:29:23
Yo creo que no, pero bueno
00:29:26
Vale, pues ahora ya sí que sí
00:29:27
Hemos terminado este fichero
00:29:31
A falta de
00:29:32
Este
00:29:33
Cuadrito final
00:29:35
Que recoge la precedencia de los operadores en general
00:29:40
¿Vale?
00:29:42
Que recoge la preferencia
00:29:45
Bueno, pues ya está
00:29:46
Aquí está la precedencia de operadores
00:29:49
Pero bueno, más o menos
00:29:50
La regla general es multiplicaciones y divisiones
00:29:51
Antes que sumas y restas
00:29:55
Y los aritméticos
00:29:56
Antes que los relacionales
00:30:01
Cuando tenemos menor o igual
00:30:03
O sea, a más b, menor o igual
00:30:05
Pues primero hacemos el a más b
00:30:06
Luego menor o igual, en general
00:30:08
Y ya está, y luego todos esos
00:30:09
Antes que los booleanos
00:30:13
Y luego ya la asignación
00:30:14
Vale, tampoco hay que liarse con esto
00:30:16
Porque es lo que estamos haciendo
00:30:20
Y es lo intuitivo
00:30:21
Bueno, pues nada, damos ya ese fichero
00:30:23
De operadores, los operadores por cerrado
00:30:26
A falta de seguirlos practicando con el uso
00:30:27
Y ahora ya
00:30:30
Sí que sí
00:30:32
Vale, nos vamos a esto
00:30:33
Vale, incorporar otra sentencia más
00:30:38
Bueno
00:30:40
Pues entonces, hasta ahora hemos hecho
00:30:42
Simplemente programas
00:30:46
Que leen valores
00:30:47
operan
00:30:48
con los operadores que conocemos
00:30:51
operan, esos resultados van
00:30:53
a variables
00:30:55
y luego ya con esas variables los mostramos
00:30:55
o sea hemos hecho, hemos formado
00:30:59
expresiones para conseguir valores
00:31:01
y asignar esos valores a las variables
00:31:03
y la única
00:31:05
cosa que ha complicado
00:31:07
es un pelín
00:31:09
es que el valor que yo asigno
00:31:10
a una variable
00:31:13
pues lo puedo hacer depender de una condición
00:31:14
Lo puedo hacer dependiendo de las condiciones
00:31:16
Es la única modificación a eso que hemos visto
00:31:18
¿Vale?
00:31:21
Bueno, pues si solo pudiéramos hacer ese tipo de sentencias
00:31:22
No podríamos hacer
00:31:24
Ningún programa
00:31:26
Que haga algo mínimamente más complicado
00:31:27
Y sofisticado
00:31:30
¿Vale?
00:31:32
¿Entonces significa eso que hay que introducir tropecientas mil
00:31:33
Sentencias más?
00:31:36
No, hay que introducir dos más y se acabó
00:31:37
¿Vale?
00:31:40
Y para esas dos más solamente necesitáis
00:31:41
Pues tres o cuatro años más de estudio
00:31:43
Claro
00:31:44
Vale, entonces
00:31:46
Que solo hace falta introducir dos más
00:31:49
¿Quién lo dice?
00:31:52
¿Lo digo yo? Pues no
00:31:54
Yo lo digo ahora
00:31:55
Pero yo emulo a mis mayores
00:31:58
Y
00:32:00
Vale, bueno
00:32:01
Esto es un resumencillo que repito
00:32:06
Esto no son apuntes de estudiar
00:32:07
Es un resumen para situaros
00:32:09
Sobre que estamos viendo en cada momento
00:32:12
Vale, pues esto de que
00:32:14
Hacen falta solo dos más
00:32:18
No lo, ábrete, o ya se ha abierto
00:32:20
Así
00:32:22
No lo digo yo
00:32:22
¿Vale?
00:32:24
Lo dice quién
00:32:27
Este
00:32:28
¿Vale?
00:32:30
Vamos a verlo en Wikipedia
00:32:36
Que es muy lista
00:32:38
Ah, teorema del programa
00:32:39
Claro
00:33:07
no, no es lo mismo
00:33:08
lo que pasa es que yo en los apuntes
00:33:10
lo he reducido
00:33:12
ah, que era otro
00:33:12
bueno, pues el teorema ese
00:33:14
como vosotros sois aficionados a las matemáticas
00:33:17
pues por eso
00:33:19
pues lo que yo he llamado
00:33:20
el teorema de la estructura
00:33:24
pues bueno, Wikipedia lo llama
00:33:26
el teorema del programa estructural
00:33:27
¿de cuándo es este teorema?
00:33:29
que es el cual
00:33:31
nace todo
00:33:32
la programación tal y como la conocemos ahora
00:33:35
Pues de hace un huevo de tiempo
00:33:37
¿Vale?
00:33:40
Dice, lo acreditan a un artículo
00:33:43
Del 66
00:33:46
Fijaos, no había nacido ni yo
00:33:47
¿Y quién es estos tíos que no los conoce nadie?
00:33:50
¿Vale?
00:33:55
Pero bueno, no está muy claro
00:33:57
Porque desde la arquitectura de Von Neumann
00:33:58
Que es así que la contamos
00:34:00
Pues más o menos se ha venido a
00:34:01
Concluir este teorema
00:34:04
¿Y qué dice este teorema? Dice que cualquier algoritmo, cualquier acción, cualquier problema que uno necesite resolver mediante un ordenador como lo conocemos con la arquitectura de Von Neumann, un procesador, le pasas operaciones, le haces sumas y restas y te lo devuelve.
00:34:06
vale, pues cualquier algoritmo que queramos programar
00:34:27
cualquiera, solo necesita
00:34:30
tres tipos de instrucciones
00:34:32
las asignaciones, que ya las hemos visto
00:34:33
bueno, el tema de la estructura dice dos
00:34:36
porque las asignaciones las da por sentado
00:34:38
yo lo incorporo para que nos situemos mejor
00:34:40
¿qué tendremos?
00:34:42
que dar valores a variables, está claro
00:34:44
dar valores a variables, si no, no tenemos datos
00:34:46
y luego, a partir de ahí, una vez que ya tenemos valores
00:34:47
en los variables, contener
00:34:50
decisiones y bucles
00:34:51
todo eso tantas veces
00:34:54
es como haga falta. Cuatro decisiones, tres
00:34:56
bucles. Pues con tener decisiones
00:34:58
y bucles se puede construir
00:35:00
cualquier algoritmo. Se puede
00:35:02
programar cualquiera. No hace falta
00:35:04
absolutamente ninguna sentencia más.
00:35:06
Por eso la programación estructurada tiene
00:35:08
exclusivamente, aparte de asignaciones
00:35:10
de datos a variables,
00:35:12
porque eso es inevitable, aparte de eso
00:35:14
tiene decisiones y bucles. Y no tiene absolutamente
00:35:16
nada más. Nada más.
00:35:18
A partir de ahí, ¿qué es lo que tiene?
00:35:20
¿Cómo coloco el código? Punto pelota.
00:35:22
no tiene nada más que eso, cualquier
00:35:24
lenguaje de programación al que podáis
00:35:26
acudir, siempre y cuando
00:35:28
nos vayáis a redes neuronales, a sistemas
00:35:30
de computación de inteligencia artificial, pero es que estos
00:35:32
son todos modelos, no tienen nada que ver con un ordenador
00:35:34
de esos, vale
00:35:36
estamos hablando de cualquier
00:35:37
programa de ordenadores
00:35:40
de tablets, de móviles, de dispositivos
00:35:42
normales y corrientes
00:35:45
pues cualquiera de esos
00:35:46
solamente tiene
00:35:48
leo datos y van a variables
00:35:50
Decisiones y bucles y ya está, no tiene nada más
00:35:52
Que lo tengamos colocado de una manera o de otra
00:35:54
Lo tenemos colocado de una manera u otra, pero no tiene nada más
00:35:56
¿Vale? Entonces menos mal
00:35:58
Porque así no tenemos que hacer programas muy raros
00:36:01
Porque antiguamente
00:36:03
Se usaba mucho el famoso
00:36:04
Go to
00:36:07
Que bueno, los programas de muchos lenguajes
00:36:07
Los siguen incorporando
00:36:11
Para
00:36:12
Por comodidad
00:36:13
Que es, vete a esta línea, punto y pelota
00:36:15
Y te mandaba esa línea
00:36:18
y lo que había antes, ¿qué?
00:36:19
O sea, eso hacía programas que se llamaban
00:36:21
desestructurados completamente
00:36:23
porque se perdía el flujo
00:36:25
del hilo. Me voy aquí
00:36:27
en virtud de que me voy aquí por una condición
00:36:29
o porque te da la gana, entonces
00:36:31
es una forma de programar cómoda
00:36:33
porque yo hacía un chorizo, luego cambiaba de idea
00:36:35
Ah, no, quiero seguir por aquí, pues go to potatín
00:36:37
Programas desestructurados completamente
00:36:39
Entonces se dijo, vamos a quitar todo lo que no haga falta
00:36:41
Y quitando todo lo que no haga falta
00:36:43
se quitó todo
00:36:46
salvo las decisiones y los bucles
00:36:47
Y ya está, y a partir de ahí vamos a hacer lenguajes de programación
00:36:49
Que solamente usen de sesiones y bucles
00:36:52
Aunque incorporen el GoTo o algo parecido
00:36:54
Que Java también lo incorpora por comodidad
00:36:58
Pero si no lo usamos, mejor, porque no es necesario
00:37:01
Bueno, pues entonces nosotros vamos a empezar ahora con esto
00:37:03
¿Vale? Venga, paramos
00:37:09
Qué pena, ¿verdad?
00:37:11
¿Verdad?
00:37:14
- Subido por:
- Raquel G.
- Licencia:
- Todos los derechos reservados
- Visualizaciones:
- 12
- Fecha:
- 7 de octubre de 2024 - 18:28
- Visibilidad:
- Clave
- Centro:
- IES ROSA CHACEL
- Duración:
- 37′ 15″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1920x1080 píxeles
- Tamaño:
- 180.88 MBytes