20250926-ProgEstr-String_Ejercicio - 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:
Pues con más o menos rapidez, siendo más o menos conscientes, porque a veces uno hace las cosas y ha seguido un hilo de pensamiento, aunque no sea consciente porque lo ha hecho de forma demasiado automatizada.
00:00:01
entonces está bien que identifiquemos
00:00:16
qué hilo de pensamiento
00:00:19
tenemos que seguir cuando hacemos un programa
00:00:21
porque cuando es sencillo
00:00:23
pues lo hacemos de manera tan automática
00:00:25
que no somos conscientes
00:00:27
pero cuando ya una aplicación es más grande
00:00:28
ya sí que tenemos que seguir
00:00:31
esas fases de pensamientos
00:00:33
de manera más organizada
00:00:35
pues cuáles serían aquí entre comillas
00:00:37
las fases de pensamiento que uno habría seguido
00:00:39
primero leer el programa
00:00:41
y entender lo que tiene que hacer
00:00:45
Eso está claro porque son cuatro líneas, lo entendemos.
00:00:46
Ahora ya empezamos a diseñarlo.
00:00:49
A la hora de diseñarlo, lo primero que pensamos es,
00:00:52
a ver, ¿mis datos de entrada los tengo claros?
00:00:54
Sí, sí, los tienes claros.
00:00:58
Tus datos de entrada son una variable string y una variable int.
00:00:59
Esa parte la tengo clara, esos son mis datos de entrada.
00:01:05
Ahí incluso podríamos empezar a escribir algo ya.
00:01:07
Aunque normalmente uno empieza a escribir cuando lo tiene ya todo claro.
00:01:11
Pero bueno, podríamos ya incluso empezar a escribir esa parte, que es la que tenemos clara. Vale, ahora, esta parte la tenemos clara, que es datos de entrada, un nombre, string, un número, int, una variable para cada dato de entrada.
00:01:14
¿está claro? pues venga
00:01:44
una variable nombre
00:01:47
para mi dato de entrada nombre
00:01:49
una variable int
00:01:51
para mi dato de entrada número
00:01:53
vale
00:01:55
¿cómo reciben valor
00:01:57
estas variables? lo van a
00:01:59
recibir porque yo lo voy a
00:02:01
solicitar por teclado y me voy a quedar
00:02:03
ahí esperando que llegue
00:02:05
venga, introduzca
00:02:06
nombre
00:02:12
lo podría hacer en la misma línea
00:02:13
Lo de inicializar a través
00:02:15
Pero bueno
00:02:17
Lo estamos haciendo aquí
00:02:18
Vale
00:02:20
Ahora
00:02:20
Mi variable nombre
00:02:22
Le doy el resultado
00:02:24
De
00:02:26
Leer por aquí
00:02:27
Muy bien
00:02:31
Ahora
00:02:32
Esto
00:02:33
Introduzca número
00:02:38
A la
00:02:41
Número
00:02:48
Igual a
00:02:51
Scan.nextint
00:02:52
Esto poco que pensar nos ha dado
00:02:54
Hemos pensado
00:02:59
Datos de entrada
00:03:01
Un string porque es un nombre
00:03:02
Un número entero
00:03:05
Una variable para cada dato de entrada
00:03:06
Vale
00:03:09
Una variable para cada dato de entrada
00:03:10
¿De dónde saco sus valores?
00:03:12
Me han dicho que los tengo que recibir
00:03:16
Desde la consola
00:03:17
¿Se recibir datos desde la consola?
00:03:18
Pues venga
00:03:22
recibo el primero
00:03:22
y recibo el segundo
00:03:25
vale
00:03:27
ahora que ya he recogido los datos, ahora ya viene la lógica
00:03:28
la operativa del programa
00:03:31
¿qué es?
00:03:33
tiene que mostrar true, si patatín, falsis
00:03:36
y no sé qué, bueno pues ahora
00:03:39
es cuando yo pienso, ¿qué es lo que pienso?
00:03:40
me voy al final del programa
00:03:43
y digo, pero vamos a ver
00:03:45
¿esto qué tiene que devolver?
00:03:46
¿qué me tiene que mostrar a mí?
00:03:49
tanto ruido de fondo
00:03:53
que tiene que mostrar esto
00:03:54
tiene que mostrar o true
00:03:56
o false, en función de si algo
00:03:58
pasa o no pasa, o true o false
00:04:01
entonces yo lo primero que pienso ahora después
00:04:03
me voy al final
00:04:05
uno cuando piensa
00:04:06
para programar, no piensa en secuencia
00:04:08
¿vale?
00:04:11
de lo primero que piensa es
00:04:13
pero esto al final, ¿cuál va a ser su resultado?
00:04:15
¿cuál va a ser su resultado?
00:04:17
porque en función de eso, algunas cosas u otras
00:04:19
pues su resultado va a ser
00:04:21
yo vuelvo al enunciado y digo
00:04:23
su resultado va a ser
00:04:25
o true
00:04:28
o false
00:04:29
una de estas dos cosas va a ser
00:04:36
vale, y eso de true o false
00:04:39
¿qué es? pues true o false
00:04:41
son los dos posibles valores
00:04:43
de una variable boolean
00:04:45
los dos posibles valores de una variable boolean
00:04:47
¿no?
00:04:49
entonces
00:04:52
lo que me va a mostrar mi programa
00:04:52
va a ser el contenido de una variable boolean
00:04:55
eso es lo que me va a mostrar
00:04:57
ah, vale, pues ya tengo una variable resultado
00:04:58
que a saber cómo hago
00:05:02
boolean, que va a ser
00:05:03
mi resultado
00:05:05
que no sé qué le vamos
00:05:06
a dar, no tengo ni idea de qué le vamos
00:05:09
a dar, pero lo que va a hacer
00:05:11
mi programa
00:05:13
va a ser mostrarla
00:05:14
vale, entonces
00:05:16
ya he hecho mucho y aquí
00:05:22
voy por buen camino y estoy programando bien
00:05:24
porque yo voy
00:05:26
acotando mi programa
00:05:28
he escrito la última línea
00:05:29
que suele ser la primera que escribo
00:05:32
siempre, vamos a ver, ya me he situado
00:05:34
mi programa tiene que mostrar
00:05:36
o true o false
00:05:38
en función de lo que sea
00:05:39
true o false son las dos posibilidades
00:05:41
de una variable boolean
00:05:44
pues entonces el resultado final
00:05:46
de mi programa será
00:05:48
mostrar una variable boolean
00:05:49
genial, ya estoy acotando
00:05:52
mi programa, ahora
00:05:54
me queda solo
00:05:56
resolver esta
00:05:57
cajita negra, ¿vale?
00:06:00
Entonces yo he resuelto, he dado
00:06:02
una plantilla de mi programa, ya tengo
00:06:04
una plantilla, y ahora voy rellenando
00:06:06
los huecos, solo me
00:06:08
falta este hueco ahora mismo, ¿vale?
00:06:10
Yo tengo mi
00:06:12
esqueleto de programa, ya lo tengo,
00:06:13
el primer boceto de por
00:06:17
dónde van, que ese es el importante,
00:06:18
lo que me va a tener que mostrar,
00:06:21
los datos de entrada, tengo el primer
00:06:23
boceto, pero tengo unas cajas negras
00:06:24
ahí todavía por resolver, tengo
00:06:26
esta caja negra que es, sí
00:06:28
mi programa va a mostrar un resultado
00:06:30
que es una variable boolean
00:06:32
pero esta variable boolean, ¿cómo la relleno?
00:06:33
¿vale? ahí dejo esa caja negra
00:06:37
y podría este
00:06:38
esqueleto, dárselo a otro programador
00:06:40
y decir, mira, ya tienes el esqueleto del programa
00:06:42
encárgate tú de esa caja negra
00:06:44
¿vale? ahora en este caso
00:06:46
que es un programa sencillo, pues no, pero
00:06:48
normalmente en un
00:06:50
proyecto se trabaja así
00:06:52
se van haciendo los diferentes esqueletos
00:06:54
y luego ya van quedando
00:06:56
las cajas negras y cada programador
00:06:58
se puede dedicar a una caja negra
00:07:00
pues aquí nos quedaría esta
00:07:02
vale, ahora refinamos
00:07:04
entramos en una
00:07:06
siguiente iteración en la que seguimos refinando
00:07:07
y es, vale, ahora ya
00:07:11
me voy a centrar en resultado
00:07:12
resultado que tiene que tener
00:07:14
true
00:07:16
si el número de caracteres
00:07:17
de nombre es mayor que número
00:07:21
o al revés, no lo sé, como lo hubiera enunciado a lo mismo
00:07:22
pues tiene que tener
00:07:24
true
00:07:26
si pasa que la cantidad
00:07:27
de caracteres de nombre
00:07:30
si el tamaño de nombre
00:07:32
es mayor que número
00:07:34
y false
00:07:36
si pasa otra cosa
00:07:38
que el tamaño de nombre
00:07:39
es menor que número
00:07:42
yo lo escribo ahí con mis palabras para situarme
00:07:43
vale, esto ya se parece
00:07:46
a código
00:07:49
es decir, tendrá true
00:07:49
si una condición de tipo mayor que
00:07:52
se cumple
00:07:55
y falsa en caso contrario
00:07:55
ya se empieza a parecer a código
00:07:58
ah, vale, entonces la condición que tengo
00:08:00
que poner aquí será una condición
00:08:03
de tipo mayor que
00:08:05
si se cumple esa condición
00:08:06
entonces será true y si se cumple será falsa
00:08:09
ah, vale, vale, entonces esto
00:08:11
pues esta condición de aquí
00:08:13
va a ser algo de este estilo
00:08:16
si algo
00:08:19
es mayor que algo
00:08:20
si algo es mayor que algo
00:08:23
me volverá true
00:08:28
si no, false, entonces ya voy acotando
00:08:30
ya tengo dos cajitas negras
00:08:32
más pequeñitas
00:08:35
dos cajitas negras más pequeñas
00:08:36
por resolver
00:08:38
esta y esta
00:08:39
vale, pues entonces
00:08:41
uno de los dos lados está claro
00:08:44
¿qué me decía el enunciado?
00:08:46
si el... a ver, voy a leerlo
00:08:48
si el nombre tiene más caracteres
00:08:50
que el número, vale, pues entonces
00:08:55
esta cajita negra está clara, esta será número
00:08:57
número, aquí será
00:09:00
la cantidad de caracteres del nombre
00:09:04
y aquí será el número
00:09:08
esta está clara, será número, ¿verdad?
00:09:09
a ver, me distraigo
00:09:13
os escribís por señas por ahí, pero que no haga ruido
00:09:16
porque es que yo no puedo hablar y oír ruido a la vez
00:09:20
se me va el hilo
00:09:22
vale, este ya lo hemos resuelto
00:09:23
aquí será número, genial
00:09:28
nos falta solo esta caja negra
00:09:30
esta caja negra que tiene que ser
00:09:32
el número de caracteres
00:09:35
del nombre
00:09:37
el número de caracteres del nombre
00:09:37
uy, como averiguo yo el número de caracteres
00:09:40
del nombre, anda, teníamos
00:09:43
esa función len que hemos visto antes
00:09:44
la teníamos
00:09:47
ah, vale, que bien, pues la voy a usar
00:09:48
la voy a usar
00:09:50
y me digo
00:09:52
venga, número de caracteres
00:09:54
sabía que haciendo esto
00:09:56
sé que una variable string
00:10:00
puede llamar
00:10:04
a esta funcionalidad
00:10:06
me devuelve el número de caracteres
00:10:08
que lo guardo en int
00:10:09
justo lo que necesitaba
00:10:10
pues ahora ya puedo poner aquí
00:10:12
lo que me faltaba
00:10:15
para completar mi cajita negra última
00:10:17
no, no, no
00:10:20
estoy estructurando el pensamiento paso por paso
00:10:23
a ver
00:10:26
un segundo
00:10:29
esto está claro, ¿no?
00:10:31
sobre todo lo que me interesa
00:10:32
es que os deis cuenta
00:10:34
del hilo de pensamiento que hemos seguido
00:10:37
primero uno
00:10:40
entiende el ejercicio
00:10:41
datos de entrada, ¿cuáles son?
00:10:42
tiene que tener un método de datos de entrada
00:10:44
tipo de datos de cada uno
00:10:46
y cómo leerlos
00:10:48
y luego automáticamente se va al final
00:10:49
y dice, pero, ¿y qué tiene que pasar aquí?
00:10:51
¿Cuál tiene que ser el quinto?
00:10:54
Pues en este caso era que en nuestro resultado
00:10:55
y a partir de ahí hemos ido construyendo,
00:10:58
hemos ido rellenando, ¿vale?
00:11:00
Y hemos llegado a esto.
00:11:02
Ahora ya nos podemos plantear
00:11:04
reescribir este código en menos líneas.
00:11:06
Pero da igual,
00:11:09
ese efecto es de mirarlo con los ojos.
00:11:09
A la máquina virtual le da lo mismo.
00:11:11
Este código ya está bien.
00:11:14
Entonces, lo que decía él,
00:11:19
decía, a ver,
00:11:21
yo sé que nombre.length
00:11:22
es el número
00:11:25
de caracteres, pues en lugar
00:11:27
de guardar una variable, poner la variable aquí
00:11:29
él dice
00:11:31
voy a poner esto directamente
00:11:32
aquí
00:11:35
sí, pero vamos a
00:11:35
dejarlo por ahora, vale
00:11:39
lo ponéis ahí
00:11:41
directamente y ya está
00:11:43
pero
00:11:45
sí, claro, es una sentencia
00:11:45
Pero, ahora mismo vamos a olvidarnos de esto.
00:11:50
Ahora mismo no lo vamos a olvidar, ¿vale?
00:11:59
Estamos practicando desde el principio, desde lo muy básico y no vamos a liarnos, ¿vale?
00:12:03
Bueno, pues ya está, ya tenemos nuestro programa hecho.
00:12:12
Ahora que no tiene errores de compilación, uno le parece que está bien,
00:12:15
Pues lo intenta ejecutar
00:12:19
A ver si realmente hace lo que tiene que hacer
00:12:22
Venga, le voy a dar un nombre
00:12:23
Dos
00:12:30
Pues true, efectivamente tiene más caracteres
00:12:31
Que el número
00:12:35
Lo vuelvo a ejecutar
00:12:36
Introduzca un nombre
00:12:38
Este
00:12:40
Dieciséis
00:12:42
Pues false, no tiene más caracteres
00:12:44
Que el número
00:12:47
Vale
00:12:49
Muy bien
00:12:50
¿Vale? ¿Esto entendido?
00:12:52
Puede que a alguien
00:13:04
Le haya salido
00:13:05
En la ejecución
00:13:07
Una cosa rara
00:13:08
Porque ha leído las variables
00:13:10
En otro orden
00:13:13
¿Nadie ha leído las variables en otro orden?
00:13:14
Vamos a probar
00:13:19
Leerlas en otro orden
00:13:20
Que en principio me da igual
00:13:21
¿Qué más me da leer primero el nombre y luego el número?
00:13:22
¿Qué más me da?
00:13:25
vamos a hacer una versión
00:13:28
en la que las leamos en otro orden
00:13:30
es decir
00:13:31
voy a comentar esto
00:13:38
un momentito, voy a dejarlo
00:13:40
ahí comentado un momentito
00:13:42
y voy a hacer este código
00:13:43
en otro orden
00:13:45
a ver
00:13:48
primero vamos a leer
00:13:51
control x
00:13:56
vale, vamos a leer primero el número
00:14:00
y luego el nombre
00:14:05
debería ser lo mismo, ¿no?
00:14:06
¿Qué más nos da?
00:14:10
Haber pedido primero el número y luego el nombre,
00:14:11
que haber pedido primero el nombre y luego el número.
00:14:13
¿Qué más nos da?
00:14:14
Debería ser lo mismo.
00:14:15
Una vez que ya hemos hecho la lectura,
00:14:17
averiguamos de esta manera el número de caracteres,
00:14:20
lo guardamos aquí.
00:14:22
Ahora ya hacemos esta condición con el operador sencillo.
00:14:24
El número es mayor que esto, pues me dará true o false,
00:14:29
que se guarda en una variable booleana,
00:14:32
que es una condición.
00:14:34
Y ahora ya hemos dado la variable booleana y ya está.
00:14:35
Vamos a ejecutar esta versión,
00:14:38
que lo único que ha cambiado es el orden en el cual yo meto los datos.
00:14:40
Introduzca número 87.
00:14:48
Y no me ha dado opción a meter el nombre.
00:14:52
Qué cosa más rara ha hecho, ¿verdad?
00:14:59
Vamos a ejecutarlo otra vez, a ver si es que se me ha ido el dedo.
00:15:00
Introduzca número 5.
00:15:03
Introduzca nombre.
00:15:06
No se queda esperando que introduzca el nombre y ya sale falso.
00:15:07
¿Por?
00:15:12
Es que no puedo, porque no se queda esperando
00:15:14
a que ponga el carácter
00:15:16
no puedo, yo cada vez que lo ejecuto
00:15:17
aquí se queda esperando
00:15:21
muy bien, yo le meto el número
00:15:22
luego debería quedarse esperando al nombre
00:15:24
y es que no se queda
00:15:26
ya directamente pone falsa y cierra
00:15:28
vale, ¿por qué es esto?
00:15:30
os lo aviso
00:15:32
esto es por una particularidad del funcionamiento
00:15:33
del escáner
00:15:37
que cuanto antes la conozcamos mejor
00:15:37
para que no pase esto
00:15:40
pues esta particularidad se da
00:15:41
cuando usáis el escáner en un programa
00:15:44
y leéis primero un número
00:15:46
y luego una cadena
00:15:48
solo en esa situación
00:15:51
cuando leéis primero un número
00:15:53
y luego una cadena
00:15:55
¿qué es lo que está pasando?
00:15:55
cuando el escáner lee un número
00:15:58
nosotros metemos
00:15:59
58, vale
00:16:01
pero no solo estamos metiendo 58
00:16:03
metemos 58 y hemos dado a enter después
00:16:05
¿verdad? hemos dado a enter
00:16:08
para que se coja el 58
00:16:09
pero como este solo quiere un número
00:16:11
se ha quedado con el número
00:16:13
y el enter no lo ha recogido
00:16:15
del buffer, se ha quedado en el buffer
00:16:18
entonces cuando luego llega
00:16:20
el next line, el next line
00:16:22
va al buffer y el buffer ya tiene
00:16:24
algo, que es el salto de línea
00:16:26
anterior, entonces
00:16:27
entiende que estamos metiendo la cadena vacía
00:16:29
con un salto de línea
00:16:32
y dice, ah, cadena vacía, y se queda con eso
00:16:33
y mete en nombre la cadena vacía
00:16:35
por eso nos da false todo el rato
00:16:38
nos da false todo el rato porque
00:16:40
el número siempre es mayor
00:16:42
que el tamaño de la cadena vacía
00:16:43
Entonces por eso nos da false todo el rato
00:16:45
Entonces
00:16:48
Esto que os digo
00:16:49
Lo vamos a
00:16:51
Vale
00:16:52
Ojo si leemos
00:16:55
Con escáner
00:16:59
Una cadena
00:17:01
Después de un número
00:17:07
Porque que, que va a pasar
00:17:09
El programa
00:17:15
Va a coger
00:17:20
Como cadena
00:17:23
Una cadena vacía
00:17:25
y va a seguir
00:17:29
vale, metemos el número
00:17:31
enter, el número llega
00:17:34
pero luego ya el programa
00:17:35
no se queda esperando una cadena
00:17:38
porque ve que hay un enter en el buffer
00:17:39
y dice, ah, pues va a ser esta la cadena
00:17:40
y coge una cadena vacía, no se queda esperando
00:17:42
entonces
00:17:45
un segundo
00:17:47
siempre podemos
00:17:49
si yo puedo leer antes el nombre
00:17:52
lo leo antes
00:17:54
pero puedo tener un programa en el cual
00:17:57
tenga que leer primero un número
00:18:00
luego hacer cosas con el número
00:18:02
luego leer la cadena
00:18:03
y ahí es cuando le he fastidiado
00:18:04
bueno, pues si detecto un programa en el que me está pasando eso
00:18:06
que leo primero un número, luego hago lo que sea
00:18:10
luego una cadena
00:18:12
pues, ¿cómo arreglamos esto?
00:18:12
como yo sé que después del número
00:18:18
y antes de la cadena se ha quedado
00:18:20
la cadena vacía
00:18:22
hago una lectura así
00:18:23
voy a ponerlo así, aunque luego lo tira a la basura
00:18:26
next line
00:18:29
vale
00:18:39
agregando esto lo arreglo
00:18:41
porque ahora que pasa
00:18:44
leo el numerito, muy bien el numero va aquí
00:18:46
y el enter se ha quedado ahí
00:18:48
hago una lectura de una cadena
00:18:50
esa ya no se va a quedar
00:18:52
esperando y va a coger ese enter que se ha quedado ahí
00:18:54
que lo he dejado yo de antes
00:18:57
y lo recoge
00:18:58
y me lo guarda aquí que no lo uso
00:19:00
para nada y ahora ya si
00:19:02
que el buffer está limpio
00:19:04
entonces al estar limpio el buffer cuando llegue aquí
00:19:06
ahora ya sí que se va a quedar esperando
00:19:08
¿vale? porque esta
00:19:10
ha limpiado el buffer de ese salto de línea
00:19:12
que dejó la lectura de números
00:19:14
¿vale?
00:19:16
los next line no dejan
00:19:18
en el buffer el salto de línea, no lo dejan
00:19:20
luego uno puede leer tantos next line seguidos
00:19:22
como quiera, no los deja
00:19:24
pero este sí que deja
00:19:25
un salto de línea en el buffer
00:19:28
entonces si nosotros ejecutamos esta versión del programa
00:19:29
esta sí que nos va a funcionar bien
00:19:34
introduzca números
00:19:37
76, ¿veis? Introduzca nombre
00:19:39
patatín, ¿vale?
00:19:41
Pero hemos tenido que poner
00:19:44
esta sentencia tan tonta
00:19:45
de hecho es tan tonta que estoy usando una variable
00:19:46
que luego no me sirve
00:19:51
para nada, pues lo normal
00:19:53
es que ni la use
00:19:54
porque yo puedo
00:19:56
llamar a este método
00:19:58
y decidir que el valor de retorno
00:19:59
la máquina virtual lo tire
00:20:02
a la basura
00:20:04
y eso lo puedo hacer así
00:20:05
¿esto qué hace?
00:20:07
hace este método, lee el valor
00:20:14
y cuando la máquina virtual va a asignarlo
00:20:17
a algún sitio, dice
00:20:19
uy, no me has dicho dónde, pues a la basura
00:20:21
y ya está, no pasa nada, lo tira a la basura
00:20:23
como no le hemos dicho
00:20:25
nombre, ¿dónde? a la basura
00:20:27
y realmente es lo que queremos
00:20:29
que lo tire a la basura, porque ese salto de línea
00:20:31
de cadena vacía no lo queremos para nada
00:20:33
luego ahora mismo
00:20:35
aparte de entender lo que hay por dentro
00:20:36
que más o menos yo creo que más o menos lo entendemos
00:20:39
lo único que quiero es
00:20:41
que quede claro que si en algún momento
00:20:43
os comunicáis con un programa leyendo
00:20:46
números y cadenas, pues
00:20:48
identificáis una secuencia de lecturas
00:20:49
en la que primero leáis un
00:20:52
número y luego una cadena
00:20:54
acordaos de meter esto en medio
00:20:55
porque si no va a pasar ese efecto que
00:20:57
hemos dicho antes. ¿Vale?
00:20:59
¿Eh?
00:21:08
No, no, no, porque es que no puedes poner
00:21:10
dos flujos a un mismo recurso porque uno
00:21:13
te lo bloquea. No, no.
00:21:15
Un único escáner.
00:21:17
Dos escáneres asociados al mismo recurso
00:21:19
No, o sea, asociados a otros recursos
00:21:23
Sí, pero al teclado no
00:21:25
Porque tendrían una
00:21:26
Una colisión
00:21:28
Claro, system.in es el nombre que Java
00:21:29
Le da a la entrada por defecto
00:21:34
Que es la consola
00:21:36
Pero tú un escáner podrías asociarlo a otra cosa
00:21:38
A ficheros
00:21:41
A builders de string
00:21:44
A cualquier cosa que sea un flujo de datos
00:21:47
Para Java
00:21:50
No, aún a fondo
00:21:51
Porque para leer una base de datos lo tienes que hacer
00:21:58
Con un conector JDBC que es otra cosa
00:22:00
A una base de datos no
00:22:02
A un fichero podrías asociarlo
00:22:05
Venga, bueno, hemos asumido que nos vamos
00:22:07
- Materias:
- Programación
- Niveles educativos:
- ▼ Mostrar / ocultar niveles
- Formación Profesional
- Ciclo formativo de grado superior
- Primer Curso
- Subido por:
- Raquel G.
- Licencia:
- Todos los derechos reservados
- Visualizaciones:
- 4
- Fecha:
- 28 de septiembre de 2025 - 19:12
- Visibilidad:
- Clave
- Centro:
- IES ROSA CHACEL
- Duración:
- 22′ 13″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1920x1080 píxeles
- Tamaño:
- 425.11 MBytes