Skip to content

Retos

< volver a actividades

Empaquetar retos

Empaqueta las actividades, dentro de la carpeta ut04, en la carpeta retos.

Las actividades programadas en esta sección Retos no son obligatorias.

Reto 01 Lluvias

Se dispone de un fichero de un array lluviasEnero que contiene 31 datos correspondientes a las lluvias caídas en el mes de enero del pasado año. Se desea analizar los datos del fichero para averiguar:

  • La lluvia total caída en el mes.
  • La cantidad media de lluvias del mes.
  • La cantidad más grande de lluvia caída en un solo día.
  • Cual fue el día que más llovió.
  • La cantidad más pequeña de lluvia caída en un solo día.
  • Cual fue el día que menos llovió.
  • En cuantos días no llovió nada.
  • En cuantos días la lluvia superó la media.
  • Si en la primera quincena del mes llovió más o menos que en la segunda.
  • En cuantos días la lluvia fue menor que la del día siguiente.

Para resolver el problema se desarrollarán los siguientes métodos:

  1. public static double suma(double v[]), que devuelve la suma de los elementos del array v.
  2. public static double media(double v[]), que devuelve la media de los elementos del array v. Se puede hacer uso del método del apartado anterior.
  3. public static int contarMayorQueMedia(double v[]), que devuelve la cantidad de elementos del array v que son mayores que la media. Se puede hacer uso del método del apartado anterior.
  4. public static double maximo(double v[]), que devuelve el valor más grande almacenado en el array v.
  5. public static double minimo(double v[]), que devuelve el valor más pequeño almacenado en el array v.
  6. public static int posMaximo(double v[]), que devuelve la posición del elemento más grande de v. Si éste se repite en el array es suficiente devolver la posición en que aparece por primera vez.
  7. public static int posMinimo(double v[]), que devuelve la posición del elemento más pequeño de v. Si éste se repite en el array es suficiente devolver la posición en que aparece por primera vez.
  8. public static int contarApariciones(double v[], double x), que devuelve el número de veces que el valor x aparece en el array v.
  9. public static double sumaParcial(double v[], int izq, int der), que devuelve la suma de los elementos del array v que están entre las posiciones izq y der.
  10. public static int menoresQueElSiguiente(double v[]), que devuelve el número de elementos de v que son menores que el elemento que tienen a continuación.

Puedes utilizar el siguiente array lluviasEnero:

1
2
3
4
5
double lluviasEnero = {
                      0, 1.1, 4.6, 3.5, 2.1, 1.1, 0, 0, 0, 0, 
                      0, 0, 0, 0, 0, 11, 12.4, 7, 6, 3, 
                      0, 0, 0, 0, 0, 0, 5.5, 8, 10, 11, 7
                      };

Reto 02 SumasParciales

Se quiere diseñar un método public static int[] sumaParcial(int[] v), que dado un array de enteros v, devuelva otro array de enteros t de forma que t[i] = v[0] + v[1] + ...+ v[i].

Es decir:

1
2
3
4
5
t[0] = v[0]
t[1] = v[0] + v[1]
t[2] = v[0] + v[1] + v[2]
...
t[10] = v[0] + v[1] + v[2] + ... + v[10]

Desde el método main crearemos e inicializaremos un array, llamaremos a sumaParcial y mostraremos el array resultante.


Reto 03 HayPares

Para determinar si existe algún valor par en un array se proponen varias soluciones. Indica cual/cuales son válidas para resolver el problema.

Puedes utilizar el siguiente array numeros:

1
2
3
4
int[] numeros = {
                  0, 2, 8, 4, 2, 2, 10, 8, 16, 10, 
                  12, 14, 28, 16, 16, 18, 19, 20
                  };
public static boolean haypares1(int v[]) {
   int i = 0;
   while (i < v.length && v[i] % 2 != 0) {
       i++;
   }
   if (v[i] % 2 == 0)
       return true;
   else
       return false;
}

public static boolean haypares2(int v[]) {
   int i = 0;
   while (i < v.length && v[i] % 2 != 0) {
       i++;
    }
   if (i < v.length) 
       return true;
   else
       return false;
}

public static boolean haypares3(int v[]) {
   int i = 0;
   while (v[i] % 2 != 0 && i < v.length) {
       i++;
   }
   if (i < v.length) 
       return true;
   else
       return false;
}

public static boolean haypares4(int v[]) {
   int i = 0;
   boolean encontrado = false;
   while (i <= v.length && !encontrado) {
       if (v[i] % 2 == 0) 
           encontrado = true;
       else
           i++;
   }
   return encontrado;
}

public static boolean haypares5(int v[]) {
   int i = 0;
   boolean encontrado = false;
   while (i < v.length && !encontrado){
       if (v[i] % 2 == 0) 
           encontrado = true;
       i++;
   }
   return encontrado;
}

public static boolean haypares6(int v[]) {
   int i = 0;
   while (i < v.length) {
       if (v[i] % 2 == 0) 
           return true;
       else
           return false;
   }
}

public static boolean haypares7(int v[]) {
   int i = 0;
   while (i < v.length) {
       if (v[i] % 2 == 0) 
           return true;
       i++;
   }
   return false;
}

}

Reto 04 Subsecuencia

Escribir un método que, dado un array, determine la posición de la primera subsecuencia del array que comprenda al menos tres números enteros consecutivos en posiciones consecutivas del array. De no existir dicha secuencia devolverá -1.

Por ejemplo: en el array {23, 8, 12, 6, 7, 9, 10, 11, 2} hay 3 números consecutivos en tres posiciones consecutivas, a partir de la posición 5: {9,10,11}


Reto 05 Capicua

Escribir un método para determinar si un array de palabras (String) es capicúa, esto es, si la primera y última palabra del array son la misma, la segunda y la penúltima palabras también lo son, y así sucesivamente. Escribir el método main para probar el método anterior.


Reto 06 Utiles

Dada una matríz con el mismo número de filas y de columnas, diseñar los siguientes métodos:

  • public static void mostrarDiagonal(int m[][]) que muestre por pantalla los elementos de la diagonal principal.

  • public static int filaDelMayor (int m[][]), que devuelva la fila en que se encuentra el mayor elemento de la matriz.

  • public static void intercambiarFilas(int m[][], int f1, int f2), que intercambie los elementos de las filas indicadas.

  • Escribir un método public static boolean esSimetrica (int m[][]) que devuelva true si la matriz m es simétrica. Una matriz es simétrica si tiene el mismo número de filas que de columnas y además m[i][j] = m[j][i] para todo par de índices i,j.

Por ejemplo, es simétrica:

1
2
3
1 5 3
5 4 7
3 7 5

Reto 07 Tetris

Supongamos que estamos desarrollando un Tetris en Java y para representar la partida utilizamos una matriz bidimensional de enteros 15 filas por 8 columnas. Se utiliza el valor 0 para indicar que la celda está vacía y un valor distinto de cero para las celdas que contienen parte de una pieza (distintos valores para distintos colores):

tetris

Escribir un método que reciba la matriz y elimine las filas completas, haciendo caer las piezas que hay por encima de las celdas eliminadas tal y como se hace en el juego.

Puede ser útil para ver resultados crear un método public static void imprimePartida(int partida[][]) que imprima el estado actual de la matriz partida.

< volver a actividades