Saltar navegación

Activa JavaScript para disfrutar de los vídeos de la Mediateca.

Clase 27-10-23 - 2 - Contenido educativo

Ajuste de pantalla

El ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:

Subido el 27 de octubre de 2023 por Raquel G.

5 visualizaciones

Descargar la transcripción

Vale, pues pedir, muchas veces, estatura y género, estatura y género, estatura y género, estatura y género, de alguien, muchas veces, entonces va a ser un bucle, y dentro del bucle, estatura, género, estatura, género, estatura, género, así todo el rato, ¿vale? 00:00:00
Entonces, ¿qué tiene que hacer con esos datos? Tiene que mostrar dos medias, bueno, pero eso sabemos hacerlo porque tendremos que ir sumando las estaturas, 00:00:22
y luego cuando ya tengamos todas las estaturas sumadas, por un lado las de hombre, por otro la de mujeres, dividirlas entre el total que habremos contado, 00:00:36
eso de hacer la media, que ya lo hicimos en un ejercicio del otro día, entonces hasta ahí, pues ya está, nos hacemos la idea, un bucle que está todo el rato, ¿hasta cuándo? 00:00:43
Pues mientras el operador quiera, habría que decirle, ¿quiere continuar? Sí o no, por ejemplo, y ya está, entonces ya más o menos nos hacemos idea del programa, 00:00:51
entonces como la primera, podemos plantearnos, ¿queremos que lo ejecute una primera vez? Que introduzca datos, introduzca datos una primera vez, ¿no queremos? 00:00:59
Bueno, ahí estaría si queremos hacer while, do while, etc. Vamos a ver cómo lo plantearíamos, cómo podríamos plantearlo, pues venga. 00:01:15
Ejercicio 9, pues nada, aún no se encuentra este denunciado, que no está... 00:01:29
Entonces uno lee esto y no puede estar perdido, lo lee y ya dice, vale, un bucle, un bucle que está todo el rato, un bucle pidiendo estatura, género, estatura, género, estatura, género, un bucle que está todo el rato pidiendo eso. 00:02:00
Entonces ya tenemos un punto de partida, ¿no? Ya tenemos un punto de partida, que es mientras se dé la condición que sea, que es lo que vamos a hacer todo el rato, pues introduzca estatura, introduzca género, 00:02:17
introduzca estatura, introduzca género, eso es lo que vamos a hacer varias veces, vale, bueno vamos a pedir primero la estatura, que es el numerito, que es la que menos nos cuesta, introduzca altura, vale, pues entonces 00:02:34
la altura, si la asumimos que va a estar en una variable double, por ejemplo, para que pueda ser 1,7 o 1,5, la que sea, pues bueno, vamos a cambiar y vamos a guardarlo en un double, vale, vamos a guardarlo en un double. 00:03:04
Entonces, aquí a priori, uno pues podría declarar aquí la variable double altura y ya está, y luego estas cosas son las que uno luego va cambiando según va iterando en la aplicación, pero bueno, vale, pues tengo que leer del teclado, pues necesito un escáner por aquí. 00:03:18
Necesito un escáner aquí, vale, leer un numerito double lo tenemos. 00:03:36
Y ahora, el género lo que vamos a leer es, o una joe, una v, una m, que anticuesta este código, vamos a ponerle masculino, femenino, porque el otro es un poco antiguo, vale, lo que va a introducir es un carácter, 00:03:58
mf, esa cual es la forma más fácil de leerlo con el escáner, la forma más fácil de leerlo es como si fuera una cadena, me da igual que la cadena tenga un solo char, es una cadena igualmente, porque tenemos un método para leer que es el next line, que es el que manejamos, pues venga, vamos a leerlo con el next line, 00:04:28
vale, entonces aquí se habrá guardado o la cadena m o la cadena f, la que sea, no lo sé lo que se habrá guardado, depende de lo que introduzca el usuario, vale, no se puede ver que lo va a introducir siempre bien, pero tengamos que estar validando toda la información, el programa se va a hacer demasiado largo, va a tener muchos bucles, una de estas dos cosas habrá introducido, vale, entonces bueno, 00:04:52
podemos plantearlo, ya tenemos un bucle que va leyendo cosas, ahora, que es lo que tiene que hacer con esos datos, que es lo que tiene que hacer, pues como el resultado final va a ser mostrar la altura media de hombres y la altura media de mujeres, el resultado final va a ser mostrar dos datos, dos valores, esos dos valores como se van a obtener, haciendo una suma de alturas, 00:05:22
¿verdad?, entonces de nuevo es lo de siempre, una variable para guardar la suma de un montón de cosas, pues venga, esas variables van a ser una suma acumulativa que vamos a ponerlas aquí, por ejemplo, a esta la voy a llamar media de la altura de las mujeres y a esta la voy a llamar la media de la altura de los hombres, como van a ser una suma acumulativa, ya de partida las inicializo en cero, 00:05:47
y ahora, ¿qué hay que hacer aquí?, pues en esta variable vamos a sumarle el qué?, esta altura, pero solo si el género es F, o sea, esto lo haremos dentro de un if, esto lo haremos dentro de un if, solo si el género es el femenino, 00:06:17
y si no, si el género es el masculino o no es M, es el otro que me han dado, asumimos que, pues entonces lo que haremos será esto, ¿verdad?, por ahora estoy haciendo la suma solamente, ¿vale?, entonces ya tenemos más hecho, ya tenemos más hecho, estamos en un bucle, pidiendo datos, incorporando la suma de la altura a la variable que toque, 00:06:43
y eso en función de qué se hace, en función de lo que tenga esta variable, si género tiene el string M será lo de arriba, y si tiene el string F será lo de abajo, bueno, al revés, M o F, eso es lo que va a tener esta variable se supone, 00:07:08
vale, pues entonces aquí que condición tendremos que poner, la condición que me dice si este string género es igual a esto, o es igual a esto, ¿vale?, es lo que me tiene que decir, entonces uno, con lo que nosotros sabemos hasta ahora, haría uno, si género es igual a F, 00:07:38
entonces la altura que me acaban de dar es de una mujer, pues la incorporo aquí, a esta suma acumulativa, y si no, es porque vale M, asumimos que lo está haciendo bien, y entonces incorporo la altura que me acaban de dar a la suma acumulativa, ¿vale?, nosotros ya sabemos, porque hemos hecho el ejercicio de media antes, ya lo sabemos, que esto no va a ser la media, que esto va a ser en realidad la suma de todas las alturas, 00:08:05
entonces para hacer la media tendremos que contar cuantas mujeres han introducido y cuantos hombres han introducido, entonces para hacer luego la media aquí, ahora he de mostrarla, la altura media de mujeres es, pues para poder hacer la altura media de mujeres, esta media, tendremos que dividirla, esta media, esta variable en la que yo he hecho la suma, tendremos que dividirla, 00:08:34
entre el total de mujeres que se han metido en el bucle, entonces vamos a tener que contar las mujeres que se han metido en este bucle, bueno, pues contar, ya sabemos como hacerlo, contar es un contador, bueno, habíamos dicho que la altura la vamos a tener como dabble, entonces yo aquí, esto debería ser dabble, vale, esto es dabble, ¿verdad? 00:09:01
porque la altura la estoy tratando como dabble y la voy sumando a la variable dabble, vale, a ver, el contador, el contador siempre es un número entero, el contador es 1, 2, 3, venga, pues contador, el contador de mujeres que se han introducido en el bucle, 00:09:19
que pongo la cuenta cero, voy a necesitar un contador para los hombres, claro, el contador de los hombres que se han introducido, que pongo la cuenta cero, y ahora que me falta aquí, hemos dicho, ah, pues nos falta contar cuantas mujeres para luego hacer la media verdadera, entonces voy a tener que meter otra condición más ahí, 00:09:37
perdón, otra sentencia, entonces tendría que poner unas llaves, vale, pues pongo unas llaves porque me falta incrementar el contador, vale, y aquí lo mismo, me falta incrementar el contador, pues tendría que poner, ¿cuántas mujeres? 00:09:55
me falta incrementar el contador, pues tendría que poner unas llaves porque ahora hay dos sentencias, vale, entonces esto ya empieza a tomar más cuerpo, esto lo he dejado aquí porque esto es, ¿cuántas veces hago este bucle? 00:10:21
el enunciado me dice hasta que el operador quiera, pues tendría que ver esa condición, cómo la elaboro, pero bueno, eso se queda ahí aparcado, eso por ahora es una caja negra, lo que yo tengo ya es bastante hecho, que es un bucle que está todo el rato, pidiendo altura y género, si el género es femenino, cuenta una nueva mujer introducida y suma la altura, todo esto sabemos hacerlo, y si no, pues esto de aquí, 00:10:39
cuando ya hemos terminado ese bucle, pues ahora ya podemos mostrar la altura media de ambos, la de los mujeres será media mujeres entre el contador que hemos usado para contar y la altura media esta de aquí, pues será esta, 00:11:06
hombres y hombres, vale, pues ya tenemos bastante hecho, vale, bueno, pues antes de completar con lo que nos falta, que es, oye, ¿este bucle hasta cuándo lo ejecuto? 00:11:37
pues hasta cuando, aquí el enunciado es que lo deja muy claro, mientras el operador quiera, pues tendremos que hacer una pregunta, que él me responda sí o no, y si la respuesta es sí, pues lo hago y la respuesta no, pues no, lo tendremos que ver, ¿verdad? vale, pero bueno, se queda ahí aparcado, bueno, pues cosa que incorporamos, a ver, cuidadín con esto, cuidadín con esto, 00:12:04
aquí estoy yo comparando si el contenido de una variable es igual a un valor concreto, lo hemos hecho siempre, ningún problema, si la variable n es igual a 7, si la variable m es igual a 3,8, es nuestro operador ser igual a, no, es el operador ser igual a que hemos usado siempre, vale, pero es que como ya hemos avanzado algunas veces, 00:12:30
esta variable es de un tipo que no es un tipo primitivo, de esos famosos 7 tipos primitivos que hemos mencionado mil veces, byte, short, int, long, float, double, boolean y char, no es un tipo primitivo, es un tipo especial que es un tipo objeto, que estamos usando ahora mismo para asignar cadenas de caracteres y para mostrarlas, pero tiene muchas más potencialidades y complejidades, porque es un tipo objeto, 00:12:56
todas ellas ya las tendremos que ir entendiendo y viendo más adelante, pero ahora mismo, la que tenemos que incorporar desde ya, aunque podamos no entenderla desde ya, es que los objetos, la igualdad entre objetos, que un objeto sea igual a otro y las cadenas son objetos, no se puede hacer con este operador, este operador es para hacer la igualdad entre variables primitivas de los tipos que hemos visto, 00:13:24
pero para hacer la igualdad entre objetos, no se hace con este operador, no se hace, se hace de otra manera, que es la que vamos a poner aquí, si yo quiero comparar el contenido de género con directamente la cadena de caracteres entre comillas F, pues lo tengo que comparar así, 00:13:50
pongo aquí una de las variables y aquí la otra variable con este llamada y eso es así porque son objetos, género es una cadena string que es un objeto y esto también es una cadena y es un objeto, 00:14:12
entonces, comparamos con .equals, lo pongo aquí para que cuando ahora suba esto, porque son objetos y voy a ponerlo de objetos entre comillas, 00:14:34
porque yo diga esto aquí, no significa que ya suma, ya está entendido porque se compara así, no, es imposible que esté entendido, porque ni tenemos ni idea de lo que es un objeto, ni las implicaciones que tiene ni qué significa esto, 00:15:01
pero ahora mismo, como tenemos que trabajar con cadenas, porque si no trabajamos con cadenas, es que es imposible hacer ningún ejercicio, pues tenemos que quedarnos con esto, 00:15:13
luego esto tiene matices, como ya veremos, porque la máquina virtual hace sus trampas y hace báferes y en algunos casos permite que el doble igual sea igual al equals, pero en otros no, 00:15:21
entonces como no puede tener registrado de memoria o no os lo voy a decir ahora, porque volveríais locos, en qué casos el doble igual y el equals para la máquina virtual los hace más bien, 00:15:35
nos olvidamos si usamos siempre el equals entre objetos, que así seguro que no nos equivocamos jamás y es lo que siempre vais a ver, porque muy poca gente sabe en qué casos el doble igual para la máquina virtual es igual que el equals. 00:15:45
Bueno, entonces, siguiente cosa que incorporamos, cuando comparáis los valores de dos cadenas para ver si son iguales, porque lo necesitáis para algo, como aquí, que lo necesitamos para saber si género es F y entonces hago esto o si no, 00:15:59
pues esa comparación no la hagáis plantando el doble igual, la hacéis con esto, y esto ya, pues como ya está dicho y lo revisáis este finde, ya se quedará aprendido en la memoria y nunca más volveréis a poner dos cadenas comparadas con doble igual, 00:16:17
porque si lo hacéis, pues habéis suspendido. 00:16:31
Si, en general todo lo que sean objetos, pero es que este es el primer tipo de objetos que nos hemos encontrado, las cadenas de caracteres. 00:16:34
Vale, bueno, pues ya está, entonces podemos fácilmente hacer este código de esta manera, leyendo M, U, F como cadena de caracteres con Slime y ya está, y ahora ya, este programa le falta esto de cuando para el bucle, 00:16:44
bueno, pues aquí es que queda muy abierto, mientras el operador quiera, pues cada uno igual abre y resuelve de alguna manera, podemos hacerlo para que haga una primera lectura y luego ya la sigue y luego pregunta, 00:16:59
desea continuar, desea continuar, o podemos a lo mejor decirle que si en el género pone M, F y pone por ejemplo la cadena fin, pues que la cadena fin sea que ha terminado. 00:17:11
O que la altura sea cero, sí, porque dentro de un humano con altura cero es complicado, pero claro, eso ya habría que acordarlo con el usuario, decir, a ver, ¿cuál va a ser tu forma de decirme que ya no quieres terminar? 00:17:26
Te hago una pregunta específica cuando yo he leído esto para decir quieres continuar, o te digo, introduce altura, género y pon fin en el género para continuar, o pon cero en la altura. 00:17:40
Bueno, pues vamos a suponer que le vamos a decir para seguir con cadenas de caracteres, le vamos a poner al mensajito, introduzca género y le decimos aquí, fin para terminar, por ejemplo, le decimos aquí, 00:17:51
no puedo poner dobles comillas debajo de unas dobles comillas, por eso, fin para, a ver, voy a romper la línea, como la letra está tan grande, fin para terminar. 00:18:15
Vale, entonces, ahora ya el mensajito este es, introduce género y si el género que he introducido es fin, ya no quieres hacer nada, entonces ahora aquí ya podríamos, como ahora ya género tiene tres posibilidades, ser F, ser M y ser otra cosa. 00:18:29
Ahora aquí, o hacemos un IF, el SEIF o un switch case, porque aquí hay ya tres ramas, tres posibilidades, que sea hombre, que sea mujer o querer terminar, ni hombre, ni mujer, ni nada, aquí ya hay tres posibilidades. 00:18:52
Si, bueno, pero era por usarlo con cadena, esto es lo que uno acuerde, con el que le he hecho el lea para ir, lo que tú acuerdes, tú le haces un prototipo de la vista y él te dice, esta vista me es cómoda, esta vista no me es cómoda, lo que tú acuerdes con él. 00:19:05
Bueno, vamos a decir que hemos acordado que él teclea fin y ha introducido una altura que no va a ver para nada, pero bueno, da igual. 00:19:25
Vale, entonces ahora lo que me importaba aquí es, lo que me importaba aquí, por eso lo ponía en este, lo que me importa aquí es que ahora de repente el código nos ha cambiado de dos ramas a esta parte a tres, nos ha cambiado a tres, vale, al cambiarnos a tres esto ya no es un IF, ELSE, esto puede ser un IF, ELSE, IF o un switch case, hombre, cambiar esto a un switch case solo por tres ramas, pues no merece la pena. 00:19:37
Va a ser casi mejor cambiarlo a un IF, ELSE, IF, ¿verdad? Va a ser casi mejor. Venga, pues no pasa nada, lo cambiamos a un, este sería ELSE, IF, GENERO, EQUALS, M. 00:20:07
Vale, y ahora ya tengo ya una tercera rama, la puedo dejar en el ELSE y se acabó. Entonces, en el ELSE podemos decirle, por ejemplo, que diga ALAN, adiós, por ejemplo. 00:20:20
Y ya está, ¿vale? Vale, insisto, ¿por qué hemos acordado que la forma de terminar sea esa? Poniéndole, me falta aquí un paréntesis, poniéndole FIN en el género, hemos acordado esa, ¿vale? Pero eso habría que acordarlo. 00:20:42
Bueno, pues como hemos acordado esa, ahora a partir de aquí se nos abren tres posibilidades, pues no pasa nada, abrimos tres, eso ya sí que tienes obligatoriamente IF, ELSE, IF o anidar un IF en el ELSE o un switch case. 00:21:02
Vale, pues con esto, ahora ya sí que uno se replantea la condición, se la replantea y dice, vale, ¿cuándo quiero yo estar todo el rato, todo el rato repitiendo este bucle? Mientras género sea diferente de fin, por ejemplo, mientras género sea diferente de fin. 00:21:16
Entonces eso ya implica varias cosas, primero, sacar género fuera, porque está declarado aquí dentro. Inicializar género a un string que sea diferente de fin, ¿vale? Vale, una cosa que uno puede hacer cuando ya quiere, en una situación de estas, indicar si algo pasa o no pasa. 00:21:38
Pues, por ejemplo, en lugar de andar toqueteando cosas y liar, podemos hacer una variable de fin de bucle. Y esta es una situación muy natural, boolean fin, vale, inicialmente, y ahora digo, mientras no hayamos llegado a fin de bucle. 00:22:04
Vale, fin de bucle igual a falso. Mientras no hayamos llegado a fin de bucle, haces todo esto y ahora aquí, en este ELSE, avisas con fin bucle igual a true. 00:22:34
Vale, pues acostumbrarse a este tipo de mecanismos porque es mucho más cómodo que andar poniendo ahí arriba condiciones complejas que involucran a veces variables. 00:22:53
Ah, es que he borrado aquí el scan. Vale, mientras no hayamos llegado a fin de bucle, y yo aviso que hemos llegado a fin de bucle en la rama en la que quiera yo. 00:23:04
Ya está, y así no tengo que tocar nada más, porque me había quedado un código muy largo, ya lo tenía yo muy claro, lo tenía todo muy bien montado, no quiero tocar nada más. 00:23:26
Ya está, planto esta estructura, que es muy habitual además. Esto va a recoger la rama de salida, la va a recoger, inicialmente no estoy en el fin de bucle, inicialmente no estoy, pues a falso. 00:23:36
Pues mientras no haya llegado al final, haces lo que tengas que hacer, y en el punto del código en el que ocurra, que serán las condiciones de llegar al final, avisas que llega al final. 00:23:48
Luego esto es siempre lo mismo, componer las cosas que sabemos que son tres o cuatro, porque no hay que saber nada más, componerlas para hacer lo que nos interese en cada momento, componerlas y familiarizarse con su uso en diferentes situaciones. 00:24:06
Y esto lo podríais haber hecho de mil maneras distintas, de mil maneras, también se podría hacer con un do while, como la primera vez entramos seguro, porque como esto es falso, la primera vez entramos seguro, pues podríamos hacerlo con un do while, por ejemplo, podríais transformarlo en muchas maneras. 00:24:21
Pero lo que en cualquier caso aquí era inevitable es que hubiera un bucle que estuviera sumando alturas y contando, eso sí o sí, eso lo habréis tenido que hacer sí o sí, una suma acumulativa y una cuenta, eso sí que lo tendréis que haber hecho, y además dos en paralelo, una para mujeres y otra para hombres, eso lo habréis tenido que hacer sí o sí. 00:24:42
¿Cómo lo hayáis metido? Pues depende, cada uno lo habrá metido de su manera, pero lo que habréis tenido que hacer es eso, una suma de alturas y una cuenta, y esta suma de alturas y otra cuenta paralela. 00:25:05
Que hayáis preguntado antes si quiere seguir, si no quiere seguir, que eso ya es otro tema. 00:25:17
Vale, a ver, ¿alguien prevé que este programa me pueda dar problemas?, esta es una pregunta con mucho truco, pero igual alguien lo prevé, dime, tú has dicho que sí, ¿eh?, ¿por qué? 00:25:26
Sí, el problema que nos va a dar es ese, que cuando vimos el objeto escáner y ya lo identificamos y dijimos, ojo con esta situación, ¿alguien se acuerda de esta situación?, ¿cómo puede ser que la tengáis memorizada? 00:25:46
Por ahí va la cosa, claro, claro, claro, el problema lo da el next line, ¿vale? 00:26:16
El problema era, la situación era, cuando después de leer un número, después de leer un número, leemos una cadena, ¿vale?, recordad que lo estuvimos viendo y vimos ejemplos, yo leo el número, este next double me coge el numerito, 00:26:25
pero el salto de línea se ha quedado ahí en el buffer, se ha quedado ahí, y ahora cuando llega el next line ve el buffer que tiene algo, pues cogese algo, que es una cadena vacía, porque tiene un salto de línea, cogese algo y ya no me va a pedir el género, ¿vale? 00:26:41
Luego si yo ejecuto ese programa, este programa, me voy a encontrar con lo siguiente, hago mi prueba, introduzca altura, pues 7,5, ¿veis? y al género no se ha parado, no me ha pedido género, no me ha pedido el género, no se ha parado ahí 00:26:56
Y claro, ha terminado normal, porque lo que ha cogido es la cadena vacía, es decir, este enter de aquí, 7,5, el enter, lo ha cogido como género, que es la cadena vacía, entonces la cadena vacía no es F ni es M, entonces se ha ido por el else, se ha ido por el else, adiós 00:27:18
Podríamos poner aquí un else if fin o un else que fuera género no válido, por ejemplo, si asumimos que, pero vamos, entendéis lo que ha pasado, ¿no? 00:27:35
Entonces este problema de dónde venía, venía de hacer un next line después de un next cualquier tipo de número, next in, next out, next short, venía por ahí, cuando leíamos un número y después una cadera, ¿cómo lo arreglábamos? 00:27:47
Pues es muy sencillo, hacíamos un next line antes, justo después de leer el numerito, hacíamos un next line y ese salto de línea desaparecía, así es como lo arreglábamos 00:28:02
Y ese salto de línea, ¿a dónde va? No se lo asigno a nadie, me da igual, lo he perdido, no se lo asigno a nadie, es que no me importa nada ese salto de línea 00:28:18
¿Vale? Pues ahí este era el problema, vamos a volverlo a ejecutar a ver si con esto está arreglado y pasa bien las pruebas 00:28:33
Venga, una altura, 4, género, m, vale, una altura, 6, género, f, una altura, con cualquier cosa que le pongamos que no sea m y f aunque no sea fin, va a acabar porque lo hemos metido en un else, con cualquiera 00:28:42
Pero bueno, vamos a ponerle fin porque el usuario no lo sabe, vamos a ponerle fin y me sale este error, ¿vale? 00:29:02
Vale, pues ¿por qué he querido provocar esto? Para que no os asustéis con las letras rojas que van a salir cada vez más, una tras otra, todo el rato y tenemos que empezar a familiarizarnos con ellas 00:29:12
No decir, uy, me ha dado error y no sé por qué, a ver, me ha dado error, pero aquí tengo la explicación, aquí tengo la explicación, vale, me ha dado error y aquí tengo la explicación 00:29:30
Pues a ver, la explicación que me dice es que la clase escáner mismatch, algo ha fallado mismatch a la hora de asignar, entonces uno baja por aquí, tiene que ver con la clase escáner, ahí la entrada no le ha encajado en el tipo de dato que quería 00:29:44
Estas son más o menos, cuando hay un input mismatch de la clase escáner es, esperabas un tipo de dato y te ha llegado otro, algo raro ha pasado ahí, entonces uno sigue bajando, sigue bajando hasta que se encuentra la primera referencia aquí a su propio programa 00:30:07
La encontramos aquí, ejercicio 9, ejercicio 9, pues ahí nos dice la línea en la que está, vale, eso no nos importa porque es de la clase escáner que lo hemos hecho nosotros, bajamos hasta aquí, ejercicio 9, pinchamos ahí y se va esa línea 00:30:23
Y nos dice, uy cuidado, este next double de aquí, este next double de aquí no le has metido, vale, no le has metido un número, ahí ha fallado, vale, vamos a parar aquí unos minutos, quedo un poco despistados y aburridos más que despistados 00:30:37
Subido por:
Raquel G.
Licencia:
Todos los derechos reservados
Visualizaciones:
5
Fecha:
27 de octubre de 2023 - 14:16
Visibilidad:
Público
Centro:
IES ROSA CHACEL
Duración:
31′ 07″
Relación de aspecto:
1.78:1
Resolución:
1280x720 píxeles
Tamaño:
593.74 MBytes

Del mismo autor…

Ver más del mismo autor


EducaMadrid, Plataforma Educativa de la Comunidad de Madrid

Plataforma Educativa EducaMadrid