Ejercicios Resueltos de Programación Java: Arrays, Matrices y Algoritmos Fundamentales

Enviado por Chuletator online y clasificado en Informática y Telecomunicaciones

Escrito el en español con un tamaño de 7,86 KB

Este documento presenta una colección de ejercicios de programación resueltos, enfocados en el manejo de arrays y matrices en Java. Cada ejercicio incluye una descripción clara del problema y su implementación en código, ideal para estudiantes y profesionales que buscan reforzar sus habilidades en estructuras de datos y algoritmos fundamentales.

Ejercicio 1 (2017): Conteo de Elementos Diferentes en un Array

Implemente un método llamado elementosDiferentes que tome como argumento un array de números enteros y devuelva el número de elementos diferentes. Es importante destacar que este método también verifica si el array está desordenado; si encuentra que los elementos no están en orden ascendente, devuelve -1.

public static int elementosDiferentes (int [] m){
    // No hay array o no tiene elementos
    if (m == null || m.length == 0) return 0;

    // Cuenta diferentes y comprueba si está desordenado
    int cuenta = 1;
    for (int i = 0; i < m.length - 1; i++){
        if (m[i] != m[i+1]){
            cuenta++;
            if (m[i] > m[i+1]) {
                return -1; // Array desordenado
            }
        }
    }
    return cuenta;
}

Ejercicio 2 (2017): Suma de Factoriales de Elementos de un Array

Implemente el método getSumaFactoriales que devuelve la suma de los factoriales de los elementos del array unidimensional pasado como argumento. Si algún elemento del array es negativo, se utilizará su valor absoluto para calcular el factorial.

static int getSumaFactoriales(int [] m){
    if (m == null) return -1; // Manejo de array nulo

    int total = 0;
    for (int i = 0; i < m.length; i++){
        int fact = 1;
        int inicial = m[i];
        if (inicial < 0) inicial = -inicial; // Usar valor absoluto para negativos

        // Cálculo del factorial
        for (int j = inicial; j > 0; j--){
            fact *= j;
        }
        total += fact;
    }
    return total;
}

Ejercicio 3 (2017): Generación de Matriz desde un Array Unidimensional

Implemente el método generarMatriz que tome como argumento un array unidimensional de números enteros y devuelva una matriz de números enteros, utilizando el número de columnas pasado también como argumento. Este método organiza los elementos del array unidimensional en una estructura matricial.

static int [][] generarMatriz(int [] s, int nCols){
    // Validación de argumentos: array nulo, número de columnas no positivo o longitud no divisible
    if (s == null || nCols <= 0 || s.length % nCols != 0) return null;

    int [][] m = new int [s.length / nCols][nCols];
    int indice = 0;
    for(int i = 0; i < m.length; i++){
        for (int j = 0; j < m[0].length; j++){
            m[i][j] = s[indice];
            indice++;
        }
    }
    return m;
}

Ejercicio 4 (2017): Gestión de Notas en la ETSIT

Se desea gestionar un sistema de notas en la Escuela Técnica Superior de Ingeniería de Telecomunicación (ETSIT). Este ejercicio se divide en dos partes:

4.1. Cálculo de Medias de Estudiantes

Implementar una función mediasEstudiantes que reciba como argumento una referencia al sistema de notas (representado como una matriz donde cada fila es un estudiante y cada columna una nota) y devuelva un array con la media de las notas de cada estudiante.

public static double [] mediasEstudiantes(double [][] a){
    if (a == null || a.length == 0) return null; // Manejo de matriz nula o vacía

    double resultado [] = new double [a.length];
    // Inicializar resultados a 0 (opcional, ya que se sobrescriben)
    for (int i = 0; i < a.length; i++) {
        resultado[i] = 0;
    }

    // Calcular la suma de notas por estudiante y luego la media
    for (int i = 0; i < a.length; i++){
        for (int j = 0; j < a[i].length; j++) {
            resultado[i] += a[i][j];
        }
        resultado[i] /= a[i].length; // Dividir por el número de notas para obtener la media
    }
    return resultado;
}

4.2. Obtención de Estudiantes Suspensos

Implementar una función obtenerEstudiantesSuspensos que reciba como argumento una referencia al sistema de notas y devuelva un array con los índices de los estudiantes cuyas medias son inferiores a 5.0.

public static double [] obtenerEstudiantesSuspensos(double [][] a){
    if (a == null || a.length == 0) return null; // Manejo de matriz nula o vacía

    double medias [] = mediasEstudiantes(a); // Reutilizar la función de medias
    int contador = 0;
    for (int i = 0; i < medias.length; i++) {
        if (medias[i] < 5.0) contador++; // Contar estudiantes con media inferior a 5.0
    }

    double [] resultado = new double [contador];
    int j = 0;
    for (int i = 0; i < medias.length; i++){
        if (medias[i] < 5.0) {
            resultado[j] = i; // Almacenar el índice del estudiante suspenso
            j++;
        }
    }
    return resultado;
}

Ejercicio 5 (2017): Inserción de Fila en una Matriz

Dada una matriz de números enteros representada por un array de dos dimensiones, se pide implementar una función insertarFila que reciba como argumentos una referencia a la matriz original (a), un array unidimensional (b) con los elementos de la nueva fila a insertar, y la posición (n) donde se desea insertar esta nueva fila. La función debe devolver una nueva matriz con la fila insertada.

public static int [][] insertarFila(int [][] a, int [] b, int n){
    // Se asume que 'a' no es nula y 'b' tiene la longitud correcta.
    // Se podría añadir validación para 'n' (0 <= n <= a.length) y 'b.length == a[0].length'
    int [][] resultado = new int [a.length + 1][a[0].length];

    for (int i = 0; i < resultado.length; i++) {
        for (int j = 0; j < resultado[i].length; j++){
            if (i < n) {
                resultado[i][j] = a[i][j]; // Copiar filas anteriores a la posición 'n'
            } else if (i == n) {
                resultado[i][j] = b[j]; // Insertar la nueva fila en la posición 'n'
            } else {
                resultado [i][j] = a[i-1][j]; // Desplazar filas posteriores
            }
        }
    }
    return resultado;
}

Ejercicio 6 (2016): Elemento Más Ocurrente en un Array

Implemente una función masOcurrente que tome como argumento una referencia a un array unidimensional de números enteros positivos cuyos valores deberán estar entre 0 y 99 (ambos incluidos) y devuelva el elemento que aparece más veces en el array. En caso de empate, devuelve el de menor índice.

public static int masOcurrente(int [] a){
    // Validación de array nulo o vacío
    if (a == null || a.length == 0) return -1;

    // Validación de rango de valores (0-99)
    for (int i = 0; i < a.length; i++) {
        if (a[i] < 0 || a[i] > 99) {
            return -1; // Valor fuera de rango
        }
    }

    // Array para almacenar la frecuencia de cada número (0-99)
    int [] frecuencia = new int[100];
    // Inicializar frecuencias a 0 (opcional, Java lo hace por defecto para int arrays)
    for (int i = 0; i < frecuencia.length; i++) {
        frecuencia[i] = 0;
    }

    // Contar ocurrencias de cada número
    for (int i = 0; i < a.length; i++) {
        frecuencia[a[i]]++;
    }

    // Encontrar el elemento con más ocurrencias
    int masOcurrencias = frecuencia[0];
    int indice = 0; // Índice del elemento más ocurrente (el menor en caso de empate)

    for (int i = 1; i < frecuencia.length; i++) {
        if (frecuencia[i] > masOcurrencias){
            masOcurrencias = frecuencia[i];
            indice = i;
        }
    }
    return indice;
}

Entradas relacionadas: