Ejercicios Resueltos de Programación Java: Arrays, Imágenes y Algoritmos
Enviado por Chuletator online y clasificado en Informática y Telecomunicaciones
Escrito el en
español con un tamaño de 13,82 KB
Ejercicio 7 (2016): Gestión de un Sistema de Notas
Enunciado
Se desea gestionar un sistema de notas en la Escuela Técnica Superior de Ingeniería de Telecomunicación. Para ello, se guarda la información de las mismas en un array bidimensional de números reales.
Apartados
- a) (2 puntos) Implementar una función
mediaEstudianteque reciba como argumentos una referencia al sistema de notas. - b) (3 puntos) Implementar una función
obtenerSuspensosque reciba como argumento una referencia al sistema de notas.
Solución en Java
a) Función mediaEstudiante
public static double mediaEstudiante(double[][] a, int n) {
if (a == null || a.length == 0 || n < 0 || n >= a.length)
return -1;
double suma = 0;
for (int i = 0; i < a[n].length; i++)
suma += a[n][i];
return suma / a[n].length;
}b) Función obtenerSuspensos
public static double[][] obtenerSuspensos(double[][] a, int n) {
if (a == null || a.length == 0 || n < 0 || n >= a.length)
return null;
int contador = 0;
for (int i = 0; i < a[n].length; i++)
if (a[n][i] < 5.0) contador++;
double[][] suspensos = new double[contador][2];
int j = 0;
for (int i = 0; i < a[n].length; i++)
if (a[n][i] < 5.0) {
suspensos[j][0] = i;
suspensos[j][1] = a[n][i];
j++;
}
return suspensos;
}Ejercicio 8 (2016): Procesamiento de Imágenes BMP en Java
Enunciado
Se quiere implementar una serie de métodos en Java para trabajar con imágenes en formato BMP. Suponga que un fichero BMP es una matriz.
Apartados
- a) Implementar un método
blancoNegro. - b) Implementar un método
calculoHistogramaa partir de una imagen tomada como argumento. - c) Implementar un método
calculoColorMasFrecuentea partir de un histograma. - d) Implementar un método
filtroColorque tome como argumento una imagen y un color.
Solución en Java
a) Método blancoNegro
public byte[][] blancoNegro(byte[][] imagen, byte umbral) {
if (imagen == null || imagen.length == 0)
return null;
for (int i = 0; i < imagen.length; i++)
if (imagen[i].length != imagen[0].length)
return null;
byte[][] imagenBN = new byte[imagen.length][imagen[0].length];
for (int i = 0; i < imagen.length; i++)
for (int j = 0; j < imagen[i].length; j++)
if (imagen[i][j] <= umbral)
imagenBN[i][j] = 0;
else
imagenBN[i][j] = (byte) 255;
return imagenBN;
}b) Método calculoHistograma
public int[] calculoHistograma(byte[][] imagen) {
if (imagen == null || imagen.length == 0)
return null;
for (int i = 0; i < imagen.length; i++)
if (imagen[i].length != imagen[0].length)
return null;
int[] histograma = new int[256];
for (int i = 0; i < histograma.length; i++)
histograma[i] = 0;
for (int i = 0; i < imagen.length; i++)
for (int j = 0; j < imagen[i].length; j++)
histograma[imagen[i][j]]++;
return histograma;
}c) Método calculoColorMasFrecuente
public int calculoColorMasFrecuente(byte[] histograma) {
if (histograma == null || histograma.length == 0)
return -1;
int maximo = histograma[0];
for (int i = 0; i < histograma.length; i++)
if (histograma[i] > maximo)
maximo = histograma[i];
return maximo;
}d) Método filtroColor
public byte[][] filtroColor(byte[][] imagen, byte color) {
if (imagen == null || imagen.length == 0)
return null;
for (int i = 0; i < imagen.length; i++)
if (imagen[i].length != imagen[0].length)
return null;
byte[][] imagenFiltrada = new byte[imagen.length][imagen[0].length];
for (int i = 0; i < imagen.length; i++)
for (int j = 0; j < imagen[i].length; j++)
if (imagen[i][j] == color)
imagenFiltrada[i][j] = color;
else
imagenFiltrada[i][j] = 0;
return imagenFiltrada;
}Ejercicio 9 (2016): Operaciones con Arrays de Enteros
Enunciado
Apartados
- a) (1 punto) Implementar una función
hayRepetidoque tome como argumento un array de enteros positivos y devuelva el primer elemento que aparezca repetido en el array. - b) (1,5 puntos) Implementar una función
numeroOcurrenciasque tome como argumento un array bidimensional de números enteros y devuelva el número de ocurrencias de un elemento en el array. - c) (2,5 puntos) Implementar una función
devuelvePosicionque tome como argumentos un array bidimensional de números enteros y un número entero, y devuelva otro array bidimensional con las posiciones (fila, columna) de dicho número en el array original.
Solución en Java
a) Función hayRepetido
/**
* Método que comprueba si hay elementos repetidos en un array de enteros positivos.
* @return Devuelve el primer elemento repetido. Si no encuentra repetidos, devuelve -1.
*/
public static int hayRepetido(int a[]) {
if (a == null || a.length == 0 || a.length == 1)
return -1;
for (int i = 0; i < a.length; i++)
for (int j = i + 1; j < a.length; j++)
if (a[i] == a[j]) {
return a[i];
}
return -1;
}b) Función numeroOcurrencias
/**
* Devuelve el número de ocurrencias de un elemento en un array bidimensional.
*/
public static int numeroOcurrencias(int a[][], int elemento) {
if (a == null || a.length == 0)
return -1;
int contador = 0;
for (int i = 0; i < a.length; i++)
for (int j = 0; j < a[i].length; j++)
if (a[i][j] == elemento)
contador++;
return contador;
}c) Función devuelvePosicion
/**
* Devuelve un array bidimensional con la posición (fila, columna) de un elemento
* en el array original.
*/
public static int[][] devuelvePosicion(int[][] a, int elemento) {
if (a == null || a.length == 0)
return null;
int numero = numeroOcurrencias(a, elemento);
if (numero == 0)
return new int[0][0];
int[][] b = new int[numero][2];
int indice = 0;
for (int i = 0; i < a.length; i++)
for (int j = 0; j < a[i].length; j++)
if (a[i][j] == elemento) {
b[indice][0] = i;
b[indice][1] = j;
indice++;
}
return b;
}Ejercicio 10 (2016): Cálculo del Mínimo Número de Monedas
Enunciado
Escriba un programa que, dada una cantidad de dinero introducida por el usuario, calcule cuál es el número mínimo de monedas.
Solución en Java
public static void main(String[] args) {
System.out.print("Introduzca cantidad de dinero: ");
int dinero = Teclado.readInt(); // Asumimos una clase Teclado para la entrada
int monedas = 0;
if (dinero > 0) {
while (dinero >= 200) { monedas++; dinero -= 200; }
while (dinero >= 100) { monedas++; dinero -= 100; }
while (dinero >= 50) { monedas++; dinero -= 50; }
while (dinero >= 20) { monedas++; dinero -= 20; }
while (dinero >= 10) { monedas++; dinero -= 10; }
while (dinero >= 5) { monedas++; dinero -= 5; }
while (dinero >= 2) { monedas++; dinero -= 2; }
while (dinero >= 1) { monedas++; dinero -= 1; }
System.out.println("El número de monedas es: " + monedas);
} else {
System.out.println("Cantidad cero o negativa");
}
}Ejercicio 11 (2016): Estadísticas de una Lista de Números
Enunciado
Escriba un programa que calcule el mínimo, el máximo y la media de una lista de números enteros positivos introducidos por el usuario.
Solución en Java
public static void main(String[] args) {
System.out.print("Introduzca un número: ");
int numero = Teclado.readInt(); // Asumimos una clase Teclado para la entrada
int minimo = numero;
int maximo = numero;
if (numero < 0) {
System.out.print("El primer número es negativo");
} else {
int suma = 0;
int numElementos = 0;
while (numero >= 0) {
if (numero < minimo) minimo = numero;
if (numero > maximo) maximo = numero;
suma += numero;
numElementos++;
System.out.print("Introduzca otro número: ");
numero = Teclado.readInt();
}
System.out.println("El mínimo es: " + minimo);
System.out.println("El máximo es: " + maximo);
System.out.println("La media es: " + (double) suma / numElementos);
}
}Ejercicio 12 (2015): Conversión de Decimal a Binario
Enunciado
Para pasar un número entero decimal a binario, se realiza el siguiente procedimiento:
Apartados
- a) Implemente una función iterativa que tome como argumento un número entero positivo y lo convierta a binario.
- b) Implemente una función recursiva que tome como argumento un número entero positivo y lo convierta a binario.
Solución en Java
a) Versión Iterativa
public static void convertirBinarioIterativo(int num) {
if (num < 0) {
System.out.println("El número es negativo");
return;
}
int exp = 0;
double binario = 0;
while (num != 0) {
int digito = num % 2;
binario += digito * Math.pow(10, exp);
exp++;
num = num / 2;
}
System.out.println("Binario: " + (long) binario);
}b) Versión Recursiva
public static void convertirBinarioRecursivo(int num) {
if (num < 0) {
System.out.println("El número es negativo");
return;
}
if (num < 2) {
System.out.print(num);
} else {
convertirBinarioRecursivo(num / 2);
System.out.print(num % 2);
}
}Ejercicio 13 (2015): Gestión de Exámenes de una Asignatura
Enunciado
La universidad está interesada en el desarrollo de un sistema de gestión de los distintos exámenes de los estudiantes de una asignatura.
Apartados
- a) Implemente una función
calcularMediasque reciba como argumento una referencia al sistema de gestión y devuelva como resultado una referencia a un array unidimensional. - b) Implemente una función
calcularNotasque reciba como argumentos una referencia al sistema de gestión. - c) Implemente una función
calcularEstudianteque reciba como argumento una referencia al sistema de gestión.
Solución en Java
a) Función calcularMedias
public static double[] calcularMedias(double[][] a) {
if (a == null || a.length == 0)
return null;
double[] resultado = new double[a.length];
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;
}
return resultado;
}b) Función calcularNotas
public static double[] calcularNotas(double[][] a, int b) {
if (a == null || a.length == 0)
return null;
double[] resultado = new double[a[b].length];
for (int i = 0; i < a[b].length; i++) {
resultado[i] = a[b][i];
}
return resultado;
}c) Función calcularEstudiante
public static int calcularEstudiante(double[][] a) {
if (a == null || a.length == 0)
return -1;
double[] medias = calcularMedias(a);
double maxima = medias[0];
int indice = 0; // Se inicializa a 0 para el caso de un solo estudiante
for (int i = 1; i < medias.length; i++)
if (medias[i] > maxima) {
maxima = medias[i];
indice = i;
}
return indice;
}Ejercicio 14 (2015): Alcance de Variables en Java
Enunciado
Considere el siguiente código en Java. ¿Qué imprime el método main?
Código
public class Alcance {
static int x = 1;
static int y = 2;
static int metodo1(int x) {
x = 2;
return x * x * x;
}
static void metodo2() {
++x;
}
static void metodo3() {
int x = 3;
Alcance.x = x * Alcance.x;
}
public static void main(String[] args) {
int x = 1;
metodo3();
System.out.println("x = " + x);
System.out.println("x = " + Alcance.x);
metodo2();
x = metodo1(Alcance.x);
System.out.println("x = " + x);
System.out.println("x = " + Alcance.x);
Alcance.x = metodo1(x);
System.out.println("x = " + x);
System.out.println("x = " + Alcance.x);
}
}Salida del Programa
La salida que se imprime por consola es la siguiente:
x = 1
x = 3
x = 8
x = 4
x = 8
x = 8