Activa JavaScript para disfrutar de los vídeos de la Mediateca.
Clase 13-11-23 - 3 - 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:
Venga, reconectamos, vale, pues nada, en este caso aquí tenemos poco que pensar porque no es un programa que haga algo y yo tengo que pensar cómo lo hace.
00:00:00
Estos me dictan que haga unas cuantas cosas que he puesto, pues para que ahora podamos explicar un aspecto de los arrays.
00:00:12
Venga, vamos a hacer esto sin más, dos arrays, uno de 10 y otro de 5, no lo pongo aquí, pero bueno, enteros, porque luego vamos a declarar con números enteros.
00:00:22
Pues venga, primero de todo, dos arrays, uno de 10 posiciones y otro de 5.
00:00:30
Entonces, como los dos arrays son del mismo tipo, igual puedo declararlos así juntitos, ¿verdad?
00:00:36
Puedo declararlos como cuando declaramos dos enteros, cuando declaramos dos enteros lo hacíamos así en la misma línea si queríamos, ¿vale?
00:00:48
Porque como n1 y n2 los dos son de tipo entero, pues los podíamos declarar separados por comas, ¿verdad?
00:00:58
Pues con los arrays igual, como n1 y n2 los dos son de tipo array de int, pues los podemos declarar separados por comas si queremos, ¿vale?
00:01:07
Son del mismo tipo, no hay problema, los podemos declarar separados por comas, ¿vale?
00:01:18
Aquí lo que pasa es que el array sabemos que tiene una particularidad y es que es obligatorio, además de declararlo, poner la cantidad de posiciones que queremos.
00:01:22
Lo que es la reserva del espacio, que se llama, la reserva del espacio.
00:01:34
Entonces, bueno, pues lo puedo hacer aquí mismo ya si quiero.
00:01:38
Pues este de cuánto hemos dicho que va a ser, este va a ser de 10, pues eso lo hacemos así, ya sabemos hacerlo, ala, ya está.
00:01:42
Y ahora números 2, números 2, repito, antes de usarlo tenemos que reservar el espacio, pues venga, ¿cómo?
00:01:50
Pues ya sabemos hacerlo así, ala, ya tenemos los dos arrays declarados, uno de 10 posiciones y otro de 5, todavía no tienen nada dentro, están indefinidos, ¿vale?
00:01:58
Bueno, ahora, ¿qué es lo siguiente que tenemos que hacer?
00:02:15
Recorrer los dos y rellenarlos con números aleatorios.
00:02:18
Entonces, como su longitud es distinta, los vamos a recorrer en dos for separados.
00:02:25
Primero vamos a recorrer el primero, desde i igual a 0, mientras i sea menor que 10, incrementando i, tenemos un for que se ejecuta para valores de i igual a 0, 1, 2, hasta 9,
00:02:30
pues esa misma i la usamos como índice de la posición, pues ya está, a números 1 de i, ¿qué le vamos a asignar a números 1 de i?
00:02:45
Hemos dicho un aleatorio entre 1 y 100.
00:02:57
Con el ejercicio de aleatorios dijimos, a ver, una forma muy cómoda de generar un aleatorio, vamos a despreocuparnos de complicarnos más la vida,
00:03:02
una forma muy cómoda de generar un aleatorio es esta, matrando genera un aleatorio decimal entre 0 y 1, lo multiplicamos por 100 para que ahora sea entre 0 y 100,
00:03:11
y como yo no quiero la parte decimal, no quiero la parte decimal, solo quiero la parte entera, hacemos el casting, ¿vale?
00:03:25
O sea, cuando hicimos el ejercicio del juego del número aleatorio, pues dijimos, esta es una forma cómoda de generar aleatorios entre 0 y x, lo que sea, en este caso 100.
00:03:36
Vale, pues ya está, y ahora vamos a hacer lo mismo pero con el otro.
00:03:50
Como el otro solo tiene 5 posiciones, no puedo meterlo aquí dentro, porque si yo aprovechara este mismo for para rellenar el otro, si aprovechara este mismo for para rellenarlo,
00:03:56
vale, y digo, mira que bien, vamos a aprovechar este mismo for para en cada iteración rellenar la posición 0 de este, rellenar la posición 0 de lo otro.
00:04:10
Siguiente iteración, relleno la posición 1 de este, relleno la posición 1 de lo otro, vale, si usáramos el mismo for para rellenar los dos, tendríamos un problema, ¿no?
00:04:26
Tenemos el problema de que este for va desde la 0 a la 9 y para el primero fenomenal, pero para este, una vez que yo he rebasado la 4, ya no puedo seguir asignando porque solo tiene posiciones entre la 0 y la 4.
00:04:38
Entonces así, malamente. Podemos hacerlo en un for aparte, que sea desde igual a 0, mientras si menor que 5, lo hago en un for aparte para este.
00:04:55
O bueno, si no queremos separarlo en un for aparte, pues yo qué sé, ¿qué podríamos hacer? Por ejemplo, ¿qué incorporaríais aquí dentro de este bucle?
00:05:06
Para que esto me funcionara, no me saliera el error de ArrayInDespawnException, porque si yo ejecuto esto, tal cual lo ejecute, ostras, me sale esto.
00:05:15
Claro, normal que me salga esto, porque este programa, ¿qué hace? Va para 0, 1, 2, 3, 4, hasta ahí muy bien, pero para 5, este fenomenal, pero este ya, me dice, eh, aquí no tengo posición 5.
00:05:26
Bueno, entonces repito, podemos hacer un primer for hasta 10 para rellenar el primero, y un segundo for que vaya hasta 5 para rellenar el segundo, ¿verdad?
00:05:40
Y ya está. ¿Que no queremos hacerlo en dos for separados? Repito la pregunta, en este mismo código, ¿qué meteríais dentro de este for para que no me salga este ArrayInDespawnException?
00:05:53
Pero dame más detalles. ¿Dónde aquí? ¿Y qué pondrías?
00:06:08
Vale, entonces, esto te evita, efectivamente, que te salga el ArrayInDespawnException, porque este bucle va a salir en cuanto i haya llegado a 5.
00:06:16
Pero, a ver, este and se queda un poco raro, porque i menor que 5 y i menor que 10 es esta misma condición, ¿verdad? Es esta misma. Si es menor que 5, es que va a ser menor que 10.
00:06:33
Es que es obligatorio, no hay otra. Si es menor que 5, es menor que 10. Entonces, esta condición y esta son la misma. Son la misma, ¿verdad?
00:06:45
Entonces, efectivamente, te evita el ArrayInDespawnException. Pero este se queda sin rellenar su segunda parte, porque nos hemos quedado en 5. Se queda sin rellenar su segunda parte.
00:06:57
Entonces, más que esta solución de llegar hasta 5 solo y el de arriba se queda solo hasta la mitad relleno, ¿qué otra cosa, por ejemplo, podríamos poner?
00:07:07
Claro, como el problema viene aquí, cuando la i pasa por la posición 5, 6, 7, 8, pues esta sentencia que solamente se haga para los valores de i menores que 5, solo para los menores de 5.
00:07:17
Y entonces, esta se va a hacer para todos, 0, 1, 2, 3, hasta 9, y esta se va a hacer solo para 0, 1, 2, 3, 4, por ejemplo.
00:07:35
Entonces, vamos a mostrar ahora los, en un foro aparte, vamos a mostrar los dos arrays.
00:07:47
Si son números 1, i, lo vamos a mostrar seguido con el print normal por un espacio, así.
00:07:59
Y ahora vamos a mostrar el segundo, y el segundo array, vamos a ponerlo aquí, mostramos primer array, y ahora mostramos segundo array, números de 2.
00:08:17
Vale, vamos ahora a volver a ejecutar esto, ahora ya sí, a menos que algo se nos haya escapado, ya sí que prevemos que aquí no va a haber ningún problema, porque para posiciones para las cuales número 2 no tiene espacio, no va a entrar.
00:08:47
Vale, pues vamos a mostrar los dos, éste con sus 10 posiciones, porque éste tiene 10, y éste con sus 5 posiciones, porque éste tiene 5, vamos a mostrarlo, a ver si esto ya, vale.
00:09:09
Ah, bueno, me los ha mostrado seguidos, el de 10 y el de 5 me los ha mostrado seguidos, porque después de terminar de mostrar éste debería mostrar un salto de línea, si no lo veo fatal, así, un salto de línea y ahora mostramos el segundo, ahora lo vamos a ver mejor, el primero y el segundo, ahora ya mejor.
00:09:22
Éste es el primer array con sus 10 números aleatorios y sus 10 posiciones, y éste es el segundo array con sus 5 números aleatorios, sus 5 posiciones, vale, pues entonces la parte de declarar los arrays y rellenarlos ya está.
00:09:41
Ahora vamos a copiar las 5 primeras posiciones, o sea, las 5 posiciones del segundo array en el primero, vale, pues aquí habréis hecho las 5 posiciones de números 2 en números 1.
00:09:57
Vale, pues para copiar las 5 posiciones tendremos que recorrer éste array, recorrerlo, y para cada posición asignarlo al otro, a la que toque, pues venga, tengo que recorrer solo hasta 5, solo hasta 5, porque tengo que recorrer solo las 5 posiciones del segundo.
00:10:26
Y ahora, ¿qué tenemos que hacer?, pues al primer array, que es números 1, a su posición i, cópiale la posición i del segundo, ¿verdad?, vale, ¿entendéis este for?, estamos copiando en la posición 0 del primer array lo que hay en la posición 0 del segundo,
00:10:50
en la posición 1 del primer array lo que hay en la posición 1 del segundo, y así hasta las 5 posiciones.
00:11:15
Vamos a mostrar ahora cómo se han quedado los arrays, pongo aquí un asterisco, vale, vamos a volver a mostrar esto.
00:11:23
¿Está después del for?, no, no hay una llave, no hay llaves, el for solo tiene esta sentencia, pero no hay llaves, vale, vale.
00:11:32
Vale, pues esto es otra vez para mostrar los 2 arrays, a ver si se han copiado bien esas 5 primeras posiciones, ¿vale?, importante, entendemos esto, ¿no?, lo que hemos hecho,
00:12:02
coger las 5 únicas posiciones del segundo e ir una por una a la posición equivalente del primero, asignándoselo, con lo cual habremos perdido lo que tuviera de antes, vamos a volver a ejecutar el programa a ver si algo se nos ha escapado, vale.
00:12:28
Vale, bueno, otra vez voy a poner los asteriscos, me falta un salto bien aquí para que aparezcan abajo, pero bueno, me da igual, este es el primer array generado aleatoriamente, vale, este es el segundo array generado aleatoriamente, vale.
00:12:44
Ahora que hemos hecho, hemos hecho ir copiando para la posición 0, 1, 2, 3 y 4, hemos ido copiando la 0 de este en la 0 de este, efectivamente se ha quedado copiado, la 1 de este en la 1 de este, efectivamente se ha quedado copiado, ¿veis?, entonces las 5 primeras posiciones del primer array ahora tienen las posiciones del otro, las tienen ahí.
00:13:00
Y han perdido las anteriores, vale, a ver, poniendo los asteriscos debajo se va a ver mejor, voy a poner otro salto de línea para que se vean los asteriscos debajo, así se ve mejor, vale, estos son los arrays originales, y estos son los arrays después de haber hecho la copia de estas 5 posiciones en las 5 primeras de aquí, vale, después de haber hecho la copia, vale.
00:13:30
Vale, hasta aquí entendido entonces, aquí la clave es este bucle, que todo el mundo lo tenga entendido, voy recorriendo las 5 posiciones de este, la 0, la 1, la 2, la 3, la 4, y voy asignando ese valor a la 0, la 1, la 2, la 3, la 4 de este.
00:14:01
Vale, ¿entendido este FOR? Bueno, pues vamos a seguir explorando cosas, a ver qué pasa aquí, vamos a volver a poner aquí asteriscos para ir separando luego en las ejecuciones, a la voy a poner un más, venga, voy a poner aquí, seguimos probando para que me salga ahí.
00:14:18
Vale, seguimos probando, venga, vale, vamos a seguir probando a partir de aquí, lo que hace hasta aquí ya lo tenemos claro.
00:14:48
Vale, pues uno, como esto se trata, esto que estoy haciendo es copiar, como esto que estoy haciendo es copiar una raya en otro, uno podría haberse planteado, podría haber dicho, uy, vamos a explorar cosas, yo tengo dos variables, una es números 1 y otra es números 2, tengo dos variables,
00:15:10
y yo me estoy planteando copiar este array en este otro, ¿qué creéis que pasará si yo en lugar de hacer la copia como la he hecho, yendo posición por posición, hago esta?
00:15:34
A números 1, al array números 1, le voy a asignar así directamente a lo bestia números 2, como veis al compilador le parece maravilloso, no tiene ningún problema, ¿quieres ir al baño?
00:15:51
Al compilador no le da ningún problema, claro que no le da ningún problema, ¿por qué?, porque números 1 y números 2 son variables del mismo tipo, tanto números 1 como números 2 son variables de tipo array de int, luego puedo asignar una a otra,
00:16:05
recordad que las asignaciones tenían como requisito imprescindible que la variable que recibe el valor sea del mismo tipo que el valor que tú asignas, salvo con los matices de que un int cabe en un double o un int cabe en, o sea, un, ¿vale?, porque se hace la promoción automática, pero bueno,
00:16:28
en general la restricción era que si yo a una variable le asigno un valor, tiene que ser del mismo tipo, bueno, pues aquí lo son, aquí el compilador le parece estupendo, porque la variable números 1 es de tipo array de enteros y números 2 es de tipo array de enteros, ¿por qué no asignar una a la otra?
00:16:51
Vale, pues entonces, ahora, pregunto yo, después de hacer esta asignación, vamos a volver a mostrar los dos arrays, a ver qué pasa, me vais a decir que creéis que pasa, lo voy a poner aquí, asignamos directamente para que se vea en la ejecución, números 1 igual a números 2,
00:17:12
y ahora vamos a mostrar lo que tienen los dos arrays, mostramos array 1, vamos a mostrar array 1,
00:17:43
el array 1, números 1, en principio está aquí declarado como 10 posiciones, ¿verdad?, pues venga, vamos a mostrarlo, desde igual a 0, mientras sí sea menor que 10, incrementando y vamos a mostrar,
00:17:57
bueno, voy a copiar y pegar, si mostrar los dos arrays lo tenemos aquí ya, lo tenemos aquí, mostramos los arrays, voy a poner, este es el código,
00:18:22
para mostrar los arrays, este muestra el primero y este muestra el segundo, números 1 y números 2, bueno, pues a ver, recopilo, ¿qué hemos hecho aquí?
00:18:39
directamente hemos asignado al primer array, el segundo array, así a lo bestia, directamente, en lugar de ir posición por posición, como hemos ido arriba, ¿verdad?, aquí hemos ido posición por posición, la posición 0 a la 0, la 1 a la 1, aquí hemos asignado directamente uno al otro,
00:18:57
¿vale?, y el compilador me deja, repito, pues son del mismo tipo, después de haber hecho la asignación de uno al otro, los vuelvo a mostrar, a ver qué me sale, vale, y ahora os pregunto, pregunta difícil de responder, es para ver qué opináis, qué creéis que va a pasar,
00:19:19
cuando yo ejecute ahora este programa, después de haber hecho esa asignación y lo recorra, ¿qué creéis que va a mostrar?, ¿qué creéis que va a pasar?, ¿eh?, Arraíndes va a una excepción, ¿qué más opiniones hay por ahí?, ¿no hay ninguna opinión formada?, ¿más por ahí?
00:19:39
María, pues muy mal, no lo hagas, claro, si lo hacéis y decís lo que sale, lo que tenéis es que pensar,
00:20:03
no, a ver, repetimos, a ver, el compilador dejarme deja y sentido tiene, porque son dos variables de tipo arraidenteros, con lo cual una variable de un tipo le puedo yo asignar otra que sea del mismo tipo,
00:20:09
el compilador me ha dejado, entonces, claro, ahora la pregunta es, ¿qué creéis que va a pasar?, efectivamente, teniendo en cuenta, uno tiene 10 y otro tiene 5, vale, bueno, a ver, vamos a ejecutarlo,
00:20:39
y luego entendemos lo que ocurre y esto que vamos a explicar ahora, tenéis que intentar conectar porque es importante, venga, pues a ver, vamos a ejecutarlo, a ver qué pasa, y efectivamente si lo habéis ejecutado, bueno, ha hecho la primera parte,
00:20:57
esta, luego ha ido posición por posición copiando uno en el otro, muy bien, seguimos probando, venga, vamos a asignar directamente números 1, números 2, ha hecho la asignación, y ahora mostramos los arrays, ha empezado a mostrar hasta aquí, el primer array hasta aquí, y cuando ha llegado a mostrar la posición 5 del primer array ha saltado,
00:21:19
es decir, cuando ha intentado mostrar la posición 5 del primero de todos, de números 1, ahí ha fallado, es decir, números 1 se ha quedado exclusivamente con 5 posiciones, ha perdido las otras, las ha perdido, y tanto que las ha perdido, es que hemos tirado números 1 a la basura,
00:21:41
y lo hemos sobrescrito con números 2, bueno, pues vamos a explicar lo que hay aquí de fondo, que insisto, es importante entenderlo, entonces, tratar de hacer un esfuerzo de bajar de las musarañas, de intentar conectar con la clase,
00:22:08
a ver, ¿necesitáis descansar?, ¿seguro?, por favor, que generación, bueno, venga, pues paramos dos minutos,
00:22:38
- Subido por:
- Raquel G.
- Licencia:
- Todos los derechos reservados
- Visualizaciones:
- 5
- Fecha:
- 13 de noviembre de 2023 - 13:31
- Visibilidad:
- Público
- Centro:
- IES ROSA CHACEL
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1280x720 píxeles
- Tamaño:
- 439.60 MBytes