1. Arrays 1D
Construye las siguientes funciones:
-
Dado un String
a
comprobar si se encuentra incluido en él el Stringb
. P.e.b="xy"
está incluido ena="wxyz"
. -
Dado un array de caracteres
a
comprobar si se encuentra incluido en él el array de caracteresb
. Por ejemplo,b={'x', 'y'}
está incluido ena="{'w', x', 'y', 'z'}"
.
Escribe una función para cada uno de los siguientes apartados. Jutifica cuál de estas funciones deben tener la instrucción return
y cuáles no.
-
Dado un array de enteros crear su array espejo.
Se llama array espejo,
w
, de un array,v
, a aquel que está formado por los mismos valores pero en orden inverso:w[0]=v[n-1]
,w[1]=v[n-2]
,… siendon
el número de términos del array. -
Dado un array, modificarlo para que se convierta en un array simétrico.
Un array es simétrico si coincide con su array espejo.
La modificación consistirá en modificar aquellos valores que no coincidan con su valor espejo por la media (entera) de los dos.
-
Intercambia dos valores de un array array dado siempre y cuando sus índices sean divisibles por
n
. Sigue el orden que consideres; por ejemplo, intercambiar los valores de la posición 0 por la 3, los de la 3 por la 6, la 6 por la 9, … sin=3
.
Construye en tu programa las funciones necesarias para consguir estos dos objetivos:
-
Retorna en un array los números comprendidos entre dos números dados y siempre y cuando NO sean números primos.
-
A continuación ordénalos de acuerdo al criterio de estar antes los que tengan un mayor factor primo. P.e. el 6 va antes del 8 porque el mayor factor primo del 6 es el 3 y el del 8 es el 2. El 6 va antes del 4 por el mismo motivo. El 4 y el 8 se encunetran en el mismo ordinal, por lo que da igual cuál quieres poner antes o después.
Se considera el siguiente juego de cartas en el que participan dos jugadores. Se realiza con un mazo que contiene los 100 primeros números naturales que se barajan antes de empezar la partida. En cada mano se reparten 5 cartas a cada jugador que irán poniendo sobre la mesa en un orden. Los jugadores muestran en 5 turnos una carta. Los dos muestran sus cartas a la vez (una carta cada uno) y se lleva las dos el jugador que haya mostrado la carta más valorada. Cuando ambos jugadores se queden sin las 5 cartas se vuelven a repartir otras 5 a cada jugador hasta que no queden cartas en la baraja.
El jugador que se lleve una pareja de cartas de la mesa es porque su carta tiene un número mayor que la del jugador contrario o porque su carta es una carta especial. Las cartas especiales son los cartas con números primos o con números malvados. Una carta con un número primo siempre gana a una carta con un número malvado independientemente del valor de la carta. En caso de empate (las dos cartas tienen números primos o las dos tienen números malvados) gana la que tenga el número mayor.
Los puntos de una carta coincide con el número que tiene asociado, salvo que el número sea malvado en cuyo caso hay que sumar 100 puntos o que el número sea primo en cuyo caso hay que sumar 200 puntos.
Haz un programa que simule el juego. Finaliza mostrando los puntos de cada jugador y lista de forma ordenada las cartas de cada jugador de acuerdo a sus puntos asociados.
-
Número primo: todo número natural mayor que 1 que cumple que sus únicos divisores son el 1 y el propio número. Ejemplos: 2, 3, 5,…
-
Número malvado: todo número natural cuya expresión en base 2 (binaria) contiene un número par de unos. Por ejemplo, 12y 15 son números malvados ya que 12 es 1100 y 15 es 1111.
2. Arrays 2D
Haz una función que retorne la suma matricial y otra que construya el producto matricial. Controla que se cumplan las condiciones para realizar dichas operaciones. Si no te acuerdas, repasa en la wikipedia.
-
Dada una matriz de naturales entre 0 y 9, determina cuántas veces aparece un número de no menos de dos cifras en la matriz. El número debe localizarse de derecha a izquierda en la "sopa de números".
Por ejemplo, dada la siguiente matriz
1
2
3
4
5 int[][] sopa = {
{4, 2, 1, 3},
{1, 2, 5, 8},
{2, 1, 1, 4}
};
el número 12 aparece (de derecha a izquierda) rocuna vez en la primera fila y una vez en la terecera fila: en total dos veces.
-
Construye una función que retorne una lista con los diferentes números contenidos en una tabla de enteros.
-
Construye una función que determine cuántas veces aparecen (frecuencias) los números diferentes de una tabla de enteros.
-
Ordena los números diferentes de una tabla de enteros dependiendo del siguiente criterio doble:
-
Por la frecuencia de aparición de los números diferentes o por los propios números en sí.
-
Considerando el criterio anterior, hacerlo de forma creciente o de forma decreciente.
Por ejemplo, si los números diferentes son
{5, 1, 2}
con frecuencias{50, 30, 100}
, entonces una ordenación descendente por frecuencias sería{2, 5, 1}
pues el 2 aparece 100 veces, el 5 aparece 50 veces y el 1 aparece 30 veces. Pero una ordenación descendente por los propios números es{5, 2, 1}
pues se cuemple que5>2>1
.
-
-
Construye una función que retorne un conjunto de números junto con sus factores primos.
Toma como referencia el siguiente código para tener arrays 2D con filas de distinta longitud:
1
2
3
4 int[][] array = new int[3][];
for (int i=0; i<array.length; i++)
array[i] = new int[ (int) random(2, 20) ];
Usa el depurador de Processing para visualizar el contenido de array
.
3. Arrays n-D
-
Se quiere mostrar el movimiento de varias pelotas virtuales en la pantalla gráfica de Processing, con distintos diámetros y velocidades. La restricción está en que la información de todas las pelotas se tiene que codificar en un único array ¿Cuál debería ser la dimensión de ese array? Explica el significado que habría que darle a cada índice de acuerdo a tu estructura de datos.
-
¿Consideras que hay alguna forma mejor de hacerlo? ¿Cuál?
-
Haz una demostración práctica de tu diseño … si te atreves.
Es un buen reto para manejar muy bien los arrays.